Documente Academic
Documente Profesional
Documente Cultură
CE ESTE UN MICROCONTROLLER? UN CALCULATOR, DEOARECE: TOATE CALCULATOARELE AU O UNITATE CENTRALA DE PROCESARE (CPU) TOATE CALCULATOARELE AU MEMORII PENTRU PROGRAM SI PENTRU LUCRU TOATE CALCULATOARELE COMUNICA CU EXTERIORUL PRIN PORTURI SPECIALIZATE I/O UN MICROCALCULATOR INTR-UN SINGUR CIP, CU MEMORIE DE PROGRAM INCLUSA, SI INTERFETE I/O CARE POT FI PROGRAMATE PENTRU A EFECTUA DIFERITE FUNCTII DE CONTROL UN CIP CU DENSITATE FOARTE MARE DE INTEGRARE, CARE INCLUDE TOATE COMPONENTELE NECESARE PENTRU O FUNCTIE DE CONTROLLER. UZUAL INCLUDE: CPU UNITATEA CENTRALA DE PROCESARE RAM/ROM/EEPROM/FLASH MEMORII INTERFETE I/O STANDARD SI CONFIGURABILE TIMERE SI CONTROLLER DE INTRERUPERI
DE CE MICROCONTROLLERE? PENTRU CA AU REVOLUTIONAT MODUL DE REZOLVARE A PROBLEMELOR DE CONTROL A PROCESELOR. PENTRU CA INLOCUIESC DULAPURI INTREGI DE ECHIPAMENT CONVENTIONAL MECANIC, ELECTRIC, ELECTRONIC SAU ELECTROMECANIC PENTRU CA SUNT MULT MAI FIABILE IN EXPLOATARE PENTRU CA SUNT MULT MAI IEFTINE PENTRU CA O SCHIMBARE A FLUXULUI TEHNOLOGIC NU IMPLICA SCHIMBAREA INTREGULUI ECHIPAMENT, CI NUMAI A PROGRAMULUI
DOMENII DE APLICATIE CONTROL INDUSTRIAL CONTROLUL CUPTOARELOR CONTROLUL ILUMINATULUI CONTROLUL MAGAZIILOR DE SCULE ALE MASINILOR UNELTE CONTROLUL ACCESULUI CONTROLUL ECHIPAMENTELOR CU COMPLEXITATE MICA SI MEDIE AUTOMOTIVE CONTROLUL MOTORULUI (ECU) CONTROLUL SASIULUI (BOD CONTROL) CONTROLUL ACTIONARII GEAMURILOR CONTROLUL DEZABURIRII CONTROLUL CLIMATIZARII CONTROLUL FRANELOR (ABS) CONTROLUL TRACTIUNII (ESP) CONTROLUL ACCESULUI ELECTROCASNICE CUPTOARE CU MICROUNDE FIGIDERE ARAGAZE ASPIRATOARE HOTE CENTRALE TERMICE TELEVIZOARE COMUNICATII TELEFOANE CENTRALE TELEFONICE INTERNET
!IRELESS AUTOMATIZARI DIVERSE SEMAFORIZARE CONTROLUL ECHIPAMENTELOR DE TESTARE SI ANALIZA ALTE "##"," APLICATII
ARHITECTURA
ARHITECTURA INFLUENTEAZA PERFORMANTELE GLOBALE VITEZA OPERATIONALA STRUCTURA MEMORIEI DISPONIBILE SE UTILIZEAZA DOUA ARHITECTURI VON NEUMANN HARVARD
ARHITECTURA HARVARD
SPATIU DE MEMORIE SEPARAT PENTRU INSTRUCTIUNI SI DATE SUNT POSIBILE LARGIMI DIFERITE PENTRU BUSURILE DE DATE SI INSTRUCTIUNI NUMAR MINIM DE CICLI PROCESOR PENTRU UN CICLU DE FETCH CRESTEREA REALA A THROUGHPUT-ULUI
CPU
CPU CONTROLEAZA: BUSUL ADRESELOR DE MEMORIE PROGRAM BUSUL ADRESELOR DE MEMORIE DE DATE ACCESUL LA STIVA
ALU
ALU ESTE O UNITATE ARITMETICA SI LOGICA DE UZ GENERAL ALU EFECTUEAZA FUNCTII ARITMETICE SI LOGICE INTRE DATE DIN REGISTRUL DE LUCRU SI ORICARE ALT REGISTRU MICROCONTROLERELE (MCU) PIC%&'() DE LA FIRMA MICROCHIP, CONTIN O UNITATE ALU DE * BITI SI UN REGISTRU DE LUCRU (!) DE * BITI
POATE EFECTUA URMATOARELE OPERATII: INSUMARE SCADERE DEPLASARE (SHIFT) OPERATII LOGICE DACA NU SE MENTIONEAZA ALTFEL, OPERATIILE ARITMETICE SE FAC IN COMPLEMENT FATA DE DOI IN INSRUCTIUNI CU DOI OPERANZI, UZUAL UNUL DIN OPERANZI ESTE REGISTRUL DE LUCRU (W) CELALALT OPERAND ESTE UN REGISTRU DE UZ GENERAL SAU O CONSTANTA IN INSTRUCTIUNILE CU UN SINGUR OPERAND, OPERANDUL ESTE REGISTRUL DE LUCRU (W) SAU UN REGISTRU DE UZ GENERAL REGISTRUL W ESTE UN REGISTRU DE LUCRU DE * BITI, NEADRESABIL IN FUNCTIE DE INSTRUCTIUNILE EXECUTATE, ALU POATE AFECTA VALORILE BITILOR CARRY (C), DIGIT CARRY (DC) SI ZERO (Z) DIN REGISTRUL STATUS
MEMORIA
ESTE COMPUSA DIN DOUA BLOCURI : MEMORIA DE PROGRAM MEMORIA DE DATE FIECARE BLOC ARE PROPRIUL BUS ACCESUL LA BLOCURILE DE MEMORIE POATE SA APARA IN ACELASI CICLU SISTEM
IN FIGURA DIN SLIDE-UL ANTERIOR SE POATE VEDEA SI STIVA HARD!ARE CU * NIVELE DE ADANCIME IN FUNCTIE DE TIPUL MCU SUNT IMPLEMENTATE NUMAI O PORTIUNE (PAGINA) DE MEMORIE PENTRU A SARI INTRE PAGINILE DE MEMORIE DE PROGRAM, TREBUIE MODIFICATI CEI MAI SEMNIFICATIVI BITI DIN CONTORUL DE PROGRAM (PC) ACEASTA SE FACE PRIN MODIFICAREA VALORII UNUI REGISTRU SPECIAL SFR NUMIT PROGRAM COUNTER LATCH HIGH (PCLATCH) DACA SE EXECUTA INSTRUCTIUNI CONSECUTIVE, CONTORUL DE PROGRAM VA TRECE DE GRANITELE PAGINII FARA INTERVENTIA UTILIZATORULUI PENTRU DISPOZITIVE CARE AU IMPLEMENTAT MAI PUTIN DE */ DE MEMORIE DE PROGRAM, ACCESAREA UNEI LOCATII PESTE CEA FIZICA VA CAUZA ACCESAREA ADRESEI DIN PAGINA FIZICA, IGNORAND BITUL SAU BITII DIN PCLATCH VECTORUL DE RESET UN RESET VA FORTA CONTORUL DE PROGRAM LA VALOAREA #4 VOM NUMI ACEASTA ADRESA 6ADRESA VECTORULUI DE RESET7 ORICE RESET VA STERGE CONTINUTUL REGISTRULUI PCLATCH VECTORUL DE INTRERUPERE CAND O INTRERUPERE ESTE RECUNOSCUTA, PC ESTE FORTAT LA ADRESA ###04. VOM DENUMI ACEASTA ADRESA : 6ADRESA VECTORULUI DE INTRERUPERE7 NU SE MODIFICA REGISTRUL PCLATCH TREBUIE AVUT GRI$A DACA ADRESA DE SALT DIN INTRERUPERE ESTE IN ALT BAN/ DE MEMORIE INAINTE DE A FI MODIFICAT DE ISR, CONTINUTUL PCLATCH TREBUIE SALVAT, ASTFEL INCAT DUPA REVENIREA DIN RUTINA DE INTRERUPERE, CONTINUTUL SAU SA POATA FI RESTAURAT
B TE-UL CEL MAI SEMNIFICATIV ESTE DENUMIT REGISTRUL PCH PCH CONTINE BITII 8".:*- DIN PC SI NU POATE FI DIRECT CITIT SI SCRIS, CI NUMAI PRIN INTERMEDIUL REGISTRULUI PCLATCH SITUATIA " ARATA CUM PC ESTE INCARCAT PRIN SCRIEREA PCL (PCLATH80:#- 9 PCH).
SITUATIA . ARATA CUM PC ESTE INCARCAT IN TIMPUL UNEI INSTRUCTIUNI GOTO (PCLATH80:+- 9 PCH).
SITUATIA + ARATA CUN PC ESTE INARCAT IN TIMPUL UNEI INSTRUCTIUNI CALL (PCLATH80:+- 9 PCH), CU PC INCARCAT (PUSH:;) IN VARFUL STIVEI
SITUATIA 0 ARATA CUM ESTE INCARCAT PC IN TIMPUL UNEI INSTRUCTIUNI IN CARE PC ESTE INCARCAT (POP:;) DIN VRFUL STIVEI
STIVA
STIVA ESTE O MEMORIE DE TIP LIFO (LAST IN FIRST OUT) STIVA PERMITE APARITIA A UNOR COMBINATII DE PANA LA * APELURI DE SUBRUTINE SAU INTRERUPERI STIVA CONTINE ADRESA DE REINTOARCERE DIN RAMURA DE PROGRAM ACTIVA IN EXECUTIA PROGRAMULUI
MICROCONTROLLERELE DIN GAMA DE MI$LOC AU O STIVA CU * NIVELE < "+ BITI SPATIUL STIVEI NU SE POATE CITI SAU SCRIE SPATIUL STIVEI NU FACE PARTE DIN SPATIUL DE MEMORIE PROGRAM SAU MEMORIE DE DATE CONTORUL DE PROGRAM ESTE 1IMPINS2 (PUSH:;) IN STIVA LA EXECUTIA UNEI INSTRUCTIUNI CALL SAU CAND O INTRERUPERE PROVOACA O RAMIFICARE A PROGRAMULUI STIVA ESTE GOLITA (POP:;) IN CAZUL APARITIEI UNEIA DIN INSTRUCTIUNILE RETURN, RETL! SAU RETFIE PCLATCH NU ESTE MODIFICAT CAND SE EXECUTA OPERATII CU STIVA NU EXISTA INDICATOARE DE DEPASIRE A NUMARULUI MAXIM DE PUSH-URI IN STIVA
PENTRU A MUTA CONTINUTUL UNUI REGISTRU IN ALTUL, VALOAREA TREBUIE SA TREACA PRIN REGISTRUL !
REZULTA DOUA CICLURI MASINA PENTRU MUTARI REGISTRU-REGISTRU INTREAGA MEMORIE POATE FI ACCESATA DIRECT SAU INDIRECT ADRESAREA DIRECTA POATE NECESITA UTILIZAREA BITILOR RP":RP# ADRESAREA INDIRECTA NECESITA UTILIZAREA REGISTRULUI DE SELECTARE A BANCURILOR (FSR) ADRESAREA INDIRECTA UTILIZEAZA BITUL REGISTRULUI POINTER INDIRECT (IRP) DIN REGISTRUL STATUS PENTRU ACCESAREA ZONELOR BAN/#/BAN/" SAU BAN/./BAN/+ ALE MEMORIEI DE DATE
ADRESAREA DIRECTA
EXEMPLU DE INSTRUCTIUNE
ADRESAREA INDIRECTA
ADRESAREA INDIRECTA ESTE UN MOD DE ADRESARE A MEMORIEI DE DATE, IN CARE ADRESA MEMORIEI DE DATE DIN INSTRUCTIUNE NU ESTE FIXATA ESTE UTILIZAT UN REGISTRU SFR CA POINTER LA LOCATIA DIN MEMORIA DE DATE CARE TREBUIE CITITA SAU SCRISA DEOARECE ACEST PIONTER ESTE IN RAM, CONTINUTUL SAU POATE FI MODIFICAT DE CATRE PROGRAM
EXEMPLU: UTILIZAREA ADRESARII INDIRECTE SIMPLE PENTRU A STERGE RAM (LOCATIILE .#4 .F4) INTRUN NUMAR MINIM DE INSTRUCTIUNI BCF STATUS, IRP A IB;&(:'C D;;(:??&BE BDBF#/" MOVL! #<.# A IB&C&DG&H: I)&BC:( C) RAM MOV!F FSR A NEXT CLRF INDF A CG:D( INDF (:E&?C:( INCF FSR,F A IB' I)&BC:( BTFSS FSR,0 A AGG ;)B:? GOTO NEXT A NO, 'G:D( B:<C CONTINUE A : A ES, ')BC&BJ:
INTRERUPERI
MICROCUNTROLLERELE POT AVEA MULTE SURSE DE INTRERUPERI INCLUDE IN GENERAL O SURSA DE INTRERUPERE PENTRU FIECARE MODUL PERIFERIC ANUMITE MODULE POT GENERA INTRERUPERI MULTIPLE (EX. USART) INTRERUPERILE CURENTE POT SA APARA DE LA: PINUL DE INTRERUPERE INT (INTRERUPERE EXTERNA) INTRERUPEREA LA DEPASIREA VALORII MAXIME A REGISTRULUI TMR0 INTRERUPERE LA SCHIMBAREA STARII PINILOR RB7:RB4 AI PORTULUI B INTRERUPERE LA SCHIMBAREA STARII COMPARATORULUI INTRERUPERILE CURENTE POT SA APARA DE LA: INTRERUPERE DE LA PORTUL PARALEL INTRERUPERI DE LA PORTUL SERIAL USART: INTRERUPERE DE RECEPTIE INTRERUPERE DE TRANSMISIE INTRERUPERE LA EROARE INTRERUPERE LA TERMINAREA CICLULUI DE CONVERSIE ANALOG-NUMERICA INTRERUPERILE CURENTE POT SA APARA DE LA: INTRERUPERE DE LA AFISA$ LCD INTRERUPERE LA TERMINAREA SCRIERII DATELOR IN MEMORIA EEPROM INTRERUPERE DE DEPASIRE TIMER" INTRERUPERE DE DEPASIRE TIMER. INTRERUPERE CCP INTRERUPERE SSP EXISTA CEL PUTIN UN REGISTRU UTILIZAT IN CONTROLUL SI STAREA INTRERUPERILOR: INTCON DACA MCU ESTE PREVAZUT CU INTRERUPERI DE LA DISPOZITIVELE PERIFERICE, ACESTA ARE SI PERECHI DE REGISTRII PIR SI PIE
REGISTRUL INTCON
BIT5 GIE :GLOBAL INTERRUPT ENABLE BIT " , VALIDEAZA TOATE INTRERUPERILE NEMASCATE # , INVALIDEAZA TOATE INTRERUPERILE BIT> PEIE : PERIPHERAL INTERRUPT ENABLE BIT " , VALIDEAZA TOATE INTRERUPERILE NEMASCATE DE LA PERIFERICE # , INVALIDEAZA TOATE INTRERUPERILE DE LA PERIFERICE BIT@ TOIE : TMR0 OVERFLO! INTERRUPT ENABLE BIT " , VALIDEAZA INTRERUPEREA DE DEPASIRE TMR0 # , INVALIDEAZA INTRERUPEREA DE DEPASIRE TMR0 BIT0 INTE :INT EXTERNAL INTERRUPT ENABLE BIT " , VALIDEAZA INTRERUPEREA PE PINUL EXTERN INT # , INVALIDEAZA INTRERUPEREA PE PINUL EXTERN INT BIT+ RBIE :RB PORT CHANGE INTERRUPT ENABLE BIT " , VALIDEAZA INTRERUPEREA LA SCHIMBAREA VALORILOR IN REGISTRUL PORTULUI B # , INVALIDEAZA INTRERUPEREA LA SCHIMBAREA VALORILOR IN REGISTRUL PORTULUI B BIT. TOIF :TMR0 OVERFLO! INTERRUPT FLAG BIT " , VALOARE DEPASITA A REGISTRULUI TMR0 # , VALOARE NEDEPASITA A REGISTRULUI TMR0 BIT" INTF :INT EXTERNAL INTERRUPT FLAG BIT " , INTRERUPEREA EXTERNA A APARUT # , INTRERUPEREA EXTERNA NU A APARUT BIT# RBIF :RB PORT CHANGE INTERRUPT FLAG BIT " , CEL PUTIN UNUL DIN PINI RB5:RB0 SI-A SCHIMBAT STAREA # , NICI UNUL DIN PINI RB5:RB0 NU SI-A SCHIMBAT STAREA BITUL GIE (INTCON85-) ESTE STERS LA RESET INSTRUCTIUNEA RETFIE, (REINTOARCERE DIN INTRERUPERE), LA IESIREA DIN RUTINA DE INTRERUPERE SETEAZA BITUL GIE, CARE PERMITE EXECUTIA ORICAREI INTRERUPERI CARE POATE APAREA LATENTA INTRERUPERII ESTE DEFINITA CA TIMPUL SCURS DIN MOMENTUL APARITIEI EVENIMENTULUI CARE GENEREAZA INTRERUPEREA, PANA IN MOMENTUL IN CARE INSTRUCTIUNEA DE LA ADRESA ###04 ESTE EXECUTATA. PENTRU INTRERUPERI SINCRONE (TIPIC INTERNE) LATENTA ESTE DE +TC PENTRU INTRERUPERI ASINCRONE (TIPIC EXTERNE) CUM AR FI INT SAU SCHIMBAREA STARII PORTULUI B, LATENTA ESTE TIPIC + +.5@ TC
LATENTA INTRERUPERII
EXEMPLU
PASI DE URMAT PENTRU REALIZAREA UNUI PROGRAM PUSH / POP ". MEMOREAZA CONTINUTUL REGISTRULUI ! IN BANCUL DE MEMORIE CURENT .. MEMOREAZA REGISTRUL STATUS IN BAN/# +. EXECUTA CODUL RUTINEI DE INTRERUPERE (ISR) 0. REFACE STAREA REGISTRULUI STATUS SI A BITILOR DE SELECTIE A BANCULUI DE MEMORIE @. REFACE STAREA REGISTRULUI !
EXEMPLU 1
MOV!F S!APF MOV!F A C)IL ! C) D T:%I)(D(L R:E&?C:( A (:ED(;G:?? )M 'J((:BC NDBF STATUS,! A SODI STATUS B&NNG:? DB; IGD': A &BC) ! (:E&?C:( STATUSKTEMP A SDP: STATUS C) D T:%I)(D(L (:E&?C:( A &B BDBF# !KTEMP
A SODI )(&E&BDG STATUS (:E&?C:( PDGJ: A &BC) ! ((:?C)(:? )(&E&BDG NDBF) STATUS A R:?C)(: STATUS (:E&?C:( M()% A ! (:E&?C:( !KTEMP,F A SODI !KT:%I B&NNG:? DB; (:CJ(B A PDGJ: C) !KT:%I !KTEMP,! A SODI !KT:%I C) ! C) (:?C)(: )(&E&BDG A ! PDGJ: O&C4)JC DMM:'C&BE STATUS
EXEMPLU
MOV!F S!APF BCF !KTEMP STATUS,! STATUS,RP# A C)IL ! C) D T:%I)(D(L R:E&?C:( A (:ED(;G:?? )M 'J((:BC NDBF A SODI STATUS B&NNG:? DB; IGD': A &BC) ! (:E&?C:( A C4DBE: C) BDBF# (:ED(;G:?? )M 'J((:BC NDBF
MOV!F STATUSKTEMP A SDP: STATUS C) D T:%I)(D(L (:E&?C:( &B BDBF# : : (IBC:((JIC S:(P&': R)JC&B: (ISR) ) : S!APF STATUSKTEMP,! A SODI )(&E&BDG STATUS (:E&?C:( PDGJ: A &BC) ! ((:?C)(:? )(&E&BDG NDBF) MOV!F STATUS A R:?C)(: STATUS (:E&?C:( M()% ! (:E&?C:( S!APF S!APF !KTEMP,F !KTEMP,! A SODI !KT:%I B&NNG:? DB; (:CJ(B A PDGJ: C) !KT:%I A SODI !KT:%I C) ! C) (:?C)(: )(&E&BDG A ! PDGJ: O&C4)JC DMM:'C&BE STATUS
PORTURI I!O
PINUL I/O DE UZ GENERAL POATE FI CONSIDERAT CA CEL MAI SIMPLU PERIFERIC PINI I/O PERMIT MICROCONTROLLERULUI SA MONITORIZEZE SI SA CONTROLEZE ALTE DISPOZITIVE PENTRU FLEXIBILITATE SI FUNCTIONALITATE, PINI I/O POT AVEA MAI MULTE FUNCTIUNI ALTERNATIVE TIPUL FUNCTIUNII ESTE DAT DE TIPUL DISPOZITIVULUI SI DE NECESITATILE I/O DIRECTIA IN SAU OUT A UNUI PIN ESTE CONTROLATA DE REGISTRUL DE DIRECTIE A DATELOR NOTAT TRIS TRIS8<- CONTROLEAZA DIRECTIA PORTULUI <. UN 1"2 PE BITUL CORESPUNZATOR UNUI PIN, IL DESEMNEAZA CA PIN DE INTRARE UN 1#2 PE BITUL CORESPUNZATOR UNUI PIN, IL DESEMNEAZA CA PIN DE IESIRE MEMORARE: 1"2 INPUT A 1#2 OUTPUT REGISTRUL PORT ESTE UN LATCH PENTRU DATELE DE IESIRE CAND REGISTRUL PORT ESTE CITIT, SE CITESTE STAREA PREZENTA A PINILOR I/O SI NU LATCH-ULQ
CAND MAI MULTE FUNCTIUNI PERIFERICE SUNT MULTIPLEXATE IN ACELASI PORT, FUNCTIONALITATEA PINULUI I/O RESPECTIV TREBUIE SCHIMBATA ASTFEL INCAT SA FIE IN CONCORDANTA CU CERINTELE FUNCTIUNII RESPECTIVE UN EXEMPLU ESTE CONVERTORUL ANALOG DIGITAL (A/D) SAU MODULUL DRIVER LCD LA RESET, ACESTI PINI SUNT FORTATI CA PINI DE I/O DE UZ GENERAL SI TREBUIE PROGRAMATI CA PINI DE INTRARE ANALOGICA, CONTROLATI DE REGISTRUL ADCON1 CITIREA PINILOR CONFIGURATI CA INTRARI ANALOGICE VA DUCE LA REZULTATUL 1#2
REGISTRUL TRIS
BITII DIN REGISTRUL TRIS SUNT SUPRASCRISI IN CAZUL ANUMITOR PERIFERICE, CAND ACESTEA SUNT VALIDATE TREBUIE EVITATE INSTRUCTIUNI DE TIP CITESTE-MODIFICA-SCRIE (BSF, BCF, XOR!F) CARE AU CA DESTINATIE REGISTRUL TRIS REGISTRUL TRIS CONTROLEAZA DIRECTIA PINILOR PORTULUI, CHIAR CAND ACESTIA SUNT UTILIZATI CA INTRARI ANALOGICE UTILIZATORUL TERBUIE SA SE ASIGURE CA BITII TRIS SE MENTIN SETATI TOT TIMPUL CAND SE UTILIZEAZA ACESTI PINI CA INTRARI ANALOGICE
0. @.
INTRARILOR CORESPUNZATOARE PORTD SI PORTE SUNT TTL. BITI DE CONTROL PENTRU OPERATII PSP SUNT SITUATI IN REGISTRUL TRISE
INITIALIZAREA PORTURILOR
EXEMPLU DE INITIALIZARE A PORTULUI B: CLRF STATUS A BDBF# CLRF PORTB A IB&C&DG&H: PORTB NL 'G:D(&BE A )JCIJC ;DCD GDC'4:? BSF STATUS, RP# A S:G:'C BDBF" MOVL! #<CF A VDGJ: J?:; C) &B&C&DG&H: ;DCD A ;&(:'C&)B MOV!F TRISB A PORTB8+:#- , &BIJC?, A PORTB8@:0- , )JCIJC? A PORTB85:>- , &BIJC?
EXEMPLU DE MODEL I/O CARE POATE CAUZA O ASTFEL DE SITUATIE: R DACA FRECVENTA I/O CRESTE, CRESTE PERICOLUL DESCRIS ANTERIOR R CEA MAI BUNA SOLUTIE ESTE INSERIEREA CU PINUL RESPECTIV A UNUI REZISTOR R O SOLUTIE MULT MAI IEFTINA ESTE INSERAREA IN PROGRAM AUNUI CICLU NOP
PORTURI I!O
ESTE RECOMANDAT CA LA INITIALIZAREA UNUI PORT I/O SA SE RESPECTE URMATOAREA SUCCESIUNE: ". INITIALIZAREA REGISTRULUI PORT< .. INITIALIZAREA REGISTRULUI TRIS< RESPECTAREA SUCCESIUNII, ELIMINA POSIBILITATEA APARITIEI GLITCH-ULUI LA NIVELUL PINULUI, IN TIMP CE VALORILE DIN LATCH-UL DE DATE AL PORTULUI SUNT INTR-O STARE ALEATOARE
PORTURILE IN ! OUT
INTRODUCERE
PINII I/O DE UZ GENERAL POT FI CONSIDERATI CELE MAI SIMPLE ECHIPAMENTE PERIFERICE PENTRU A ADUGA FLEXIBILITATE SI FUNCTIONALITATE UNUI DISPOZITIV, UNII PINI SUNT PREVAZUTI CU MAI MULTE FUNCTIUNI ACEST LUCRU SE REALIZEAZA PRIN MULTIPLEXARE, ALOCAREA FUNCTIUNILOR FACANDU-SE DINAMIC, PRIN PROGRAM PINII SUNT GRUPATI IN PORTURI DE MAXIM * BITI DENUMIREA GENERICA PENTRU ACESTE PORTURI ESTE PORTA, PORTB,S PANA LA NUMARUL MAXIM DE PORTURI IMPLEMENTATE PE MICROCONTROLLERUL UTILIZAT PENTRU CELE MAI MULTE PORTURI, DIRECTIA PINILOR (INTRARE SAU IESIRE) ESTE CONTROLATA DE REGISTRUL DE DIRECTIE AL PORTULUI RESPECTIV, DENUMIT REGISTRUL TRIS UN 1"2 IN BITUL REGISTRULUI TRIS CORESPONDENT PINULUI, SETEAZA PINUL CA INTRARE UN 1#2 IN BITUL REGISTRULUI TRIS CORESPONDENT PINULUI, SETEAZA PINUL CA IESIRE REGISTRUL PORT ESTE LATCH PENTRU DATELE DE IESIRE CAND ESTE CITIT REGISTRUL PORT, SE VA CITI NIVELELE LOGICE PREZENTE PE PINI DE I/O SI NU CONTINUTUL REGISTRULUI PORTQQQ
TREBUIE AVUT GRI$A CU COMENZI DE TIPUL CITESTE-MODIFICA-SCRIE, CAND ACESTEA SUNT ADRESATE PORTURILOR
TOATE OPERATIILE DE SCRIERE (CA DE EXEMPLU INSTRUCTIUNILE BCF SI BSF) SUNT OPERATII DE TIP CITIRE-MODIFICARE-SCRIERE O SCRIERE INTR-UN PORT IMPLICA FAPTUL CA ACEL PORT ESTE CITIT, SE MODIFICA VALOAREA SI ESTE SCRISA IN LATCHUL DE DATE DACA PE UN PIN ESTE MULTIPLEXATA O FUNCTIE PERIFERICA CU UN PIN GENERAL DE I/O, FUNCTIONALITATEA RESPECTIVULUI PIN SE SCHIMBA ASTFEL INCAT SA SE POTRIVEASCA CERINTELOR MODULULUI PERIFERIC IN ANUMITE CAZURI, BITI DIN REGISTRUL TRIS SUNT SUPRASCRISI CAND ESTE VALIDAT PERIFERICUL TREBUIE EVITATE INSTRUCTIUNI DE CITIRE-MODIFICARE-SCRIERE CARE AU CA DESTINATIE REGISTRUL TRIS SCRIEREA CORECTA A REGISTRULUI TRIS SE VA FACE CONFORM SETARILOR PENTRU PERIFERICELE UTILIZATE PINII UNUI PORT POT FI MULTIPLEXATI CU INTRARI ANALOGICE SI INTRARI ANALOGICE VREF. OPERATIA PRIN CARE FIECARE DIN ACESTI ESTE SELECTAT CA FIIND INTRARE ANALOGICA SAU PIN I/O DIGITAL ESTE SETAREA/STERGEREA BITILOR DE CONTROL DIN REGISTRUL ADCON1 (A/D CONTROL REGISTER) CAND SUNT SELECTATI CA INTRARI ANALOGICE, ACESTI PINI SUNT CITITI CA 1#2 REGISTRUL TRIS CONTROLEAZA DIRECTIA PINILOR PORTULUI CHIAR SI CAND SUNT UTILIZATI CA INTRARI ANALOGICE UTILIZATORUL TREBUIE SA SE ASIGURE CA BITI DIN RGISTRUL TRIS RAMAN SETATI CAND UTILIZAM ACESTI PINI CA PINI DE INTRARE ANALOGICA NOTA" DACA PINI SUNT MULTIPLEXATI CU INTRARI ANALOGICE, LA UN PO!ER-ON RESET, ACESTIA SUNT CONFIGURATI CA INTRARI ANALOGICE, CA SI CUM AR FI CONTROLATI DE REGISTRUL ADCON" CITIREA PINILOR UNUI PORT CONFIGURAT CA INTRARE ANALOGICA INTOARCE VALOAREA 1#2 NOTA. DACA PINI SUNT MULTIPLEXATI CU INTRARI DE COMPARATOR, LA UN PO!ER-ON RESET, ACESTIA SUNT CONFIGURATI CA INTRARI ANALOGICE, CA SI CUM AR FI CONTROLATI DE REGISTRUL CMCON
CITIREA PINILOR UNUI PORT CONFIGURAT CA INTRARE ANALOGICA INTOARCE VALOAREA 1#2 NOTA+ DACA PINI SUNT MULTIPLEXATI CU IESIRI PENTRU AFISA$ LCD, LA UN PO!ER-ON RESET, ACESTIA SUNT CONFIGURATI CA IESIRI PENTRU AFISA$ LCD, CA SI CUM AR FI CONTROLATI DE REGISTRUL LCDSE PENTRU A CONFIGURA ACESTI PINI CA PORT DIGITAL, BITI CORESPONDENTI DIN REGISTRUL LCDSE TREBUIE STERSI ORICE BIT SETAT IN REGISTRUL LCDSE SUPRASCRIE BITII SETATI IN REGISTRUL CORESPONDENT TRIS NOTA0 PINII POT FI MULTIPLEXATI CU PORTUL PARALEL (PSP) PENTRU CA PSP SA FUNCTIONEZE, PINII I/O TREBUIE CONFIGURATI CA INTRARI DIGITALE IAR BITUL PSPMODE TREBUIE SETAT
PORTUL A
ESTE UN PORT BIDIRECTIONAL STANDARD DE * BITI, CU REGISTRUL DE DATE PORTA PORT I/O STANDARD CU EXCEPTIA RA0 REGISTRUL DE DIRECTIE A DATELOR ESTE TRISA
EXCEPTIA RA4
INITIALIZAREA PORTULUI A
CLRF STATUS A BDBF# CLRF PORTA A IB&C&DG&H: PORTA NL 'G:D(&BE )JCIJC ;DCD GDC'4:? BSF STATUS, RP# A S:G:'C BDBF" MOVL! #<CF A VDGJ: J?:; C) &B&C&DG&H: ;DCD ;&(:'C&)B MOV!F TRISA A PORTA8+:#- , &BIJC? PORTA8@:0- , )JCIJC? A TRISA85:>- DGODL? (:D; D? T#T
PORTUL B
ESTE UN PORT BIDIRECTIONAL DE * BITI, CU REGISTRUL DE DATE PORTB REGISTRUL DE DIRECTIE A DATELOR ESTE TRISB FIECARE PIN ARE UN PULL-UP SLAB CONTROLAT DE UN SINGUR BIT, NUMIT RBPU SI SITUAT IN REGISTRUL (OPTION85-) ESTE DEZACTIVAT CAND PORTUL ESTE CONFIGURAT CA IESIRE ESTE DEZACTIVAT LA PO!ER-ON RESET
PATRU PINI AI PORTULUI B, RB5:RB0 AU FACILITATEA DE A GENERA INTRERUPERE LA SCHIMBAREA STARII ESTE DISPONIBILA DOAR LA SETAREA PINILOR PORTULUI CA INTRARI SE GENEREAZA O INTRERUPERE PENTRU PORTUL B CU BITUL FLAG RBIF (INTCON8#-) INTRERUPEREA POATE TREZI DIN STAREA DE SLEEP CONTROLLERUL
PORTURI I!O
ESTE RECOMANDAT CA LA INITIALIZAREA UNUI PORT I/O SA SE RESPECTE URMATOAREA SUCCESIUNE: ". INITIALIZAREA REGISTRULUI PORT< .. INITIALIZAREA REGISTRULUI TRIS< RESPECTAREA SUCCESIUNII, ELIMINA POSIBILITATEA APARITIEI GLITCH-ULUI LA NIVELUL PINULUI, IN TIMP CE VALORILE DIN LATCH-UL DE DATE AL PORTULUI SUNT INTR-O STARE ALEATOARE