|
INTRODUCERE
CE
ESTE UN MICROCONTROLLER?
n 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
n 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
n 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
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
n CONTROLUL CUPTOARELOR
n CONTROLUL ILUMINATULUI
n CONTROLUL MAGAZIILOR DE SCULE ALE MASINILOR UNELTE
n CONTROLUL ACCESULUI
n CONTROLUL ECHIPAMENTELOR CU COMPLEXITATE MICA SI MEDIE
AUTOMOTIVE
n CONTROLUL MOTORULUI (ECU)
n CONTROLUL SASIULUI (BODY CONTROL)
CONTROLUL
ACTIONARII GEAMURILOR
CONTROLUL
DEZABURIRII
CONTROLUL
CLIMATIZARII
CONTROLUL
FRANELOR (ABS)
CONTROLUL
TRACTIUNII (ESP)
CONTROLUL
ACCESULUI
ELECTROCASNICE
n CUPTOARE CU MICROUNDE
n FIGIDERE
n ARAGAZE
n ASPIRATOARE
n HOTE
n CENTRALE TERMICE
n TELEVIZOARE
COMUNICATII
n TELEFOANE
n CENTRALE TELEFONICE
n INTERNET
n WIRELESS
AUTOMATIZARI
DIVERSE
n SEMAFORIZARE
n CONTROLUL ECHIPAMENTELOR DE TESTARE SI ANALIZA
n ALTE 1001,1 APLICATII
STRUCTURA UNUI MICROCONTROLLER
UNITATEA
CENTRALA (CPU)
CONTINE DISPOZITIVELE DE BAZA CARE SUNT CERUTE PENTRU FUNCTIONAREA UNUI MICROCONTROLLER. ACEASTA INCLUDE:
n UNITATEA LOGICA SI ARITMETICA (ALU)
n MEMORIA
n OSCILATORUL
n RESET
n INTRERUPERI
n SET DE INSTRUCTIUNI
PERIFERICE
SUNT DISPOZITIVE CERE ADAUGATE, FAC DIFERENTA FATA DE UN MICROPROCESOR
n PORTURI I/O DE UZ GENERAL
n TIMERE
n CAPTURA, COMPARARE SI MODULATIA IMPULSURILOR IN DURATA (CCPWM)
n INTERFETE SERIALE STANDARD
n INTERFETE PARALELE
n REFERINTE DE TENSIUNE
n COMPARATOARE
n CONVERTOARE ANALOG DIGITALE
n AFISAJ LCD
FUNCTII
SPECIALE
AJUTA LA CRESTEREA FLEXIBILITATII IN PROIECTARE, A REALIZARII UNUI SISTEM DE INCREDERE, CU UN COST MULT REDUS
n CONFIGURARE
n POWER ON RESET (POR)
n BROWN OUT RESET (BOR)
n WATCHDOG TIMER
n SLEEP
n OSCILATORUL INTERN
n PROGRAMAREA IN CIRCUIT (ICSP)
ARHITECTURA
ARHITECTURA
INFLUENTEAZA PERFORMANTELE GLOBALE
n VITEZA OPERATIONALA
n STRUCTURA MEMORIEI DISPONIBILE
n VON NEUMANN
n HARVARD
ARHITECTURA VON NEUMANN
n INSTRUCTIUNILE SI DATELE SUNT ADUSE PE ACELASI BUS
n BANDA LIMITATA
n NUMAR MARE DE CICLI PROCESOR/ CICLU DE FETCH
ARHITECTURA HARVARD
n SPATIU DE MEMORIE SEPARAT PENTRU INSTRUCTIUNI SI DATE
n SUNT POSIBILE LARGIMI DIFERITE PENTRU BUSURILE DE DATE SI INSTRUCTIUNI
n NUMAR MINIM DE CICLI PROCESOR PENTRU UN CICLU DE FETCH
n CRESTEREA REALA A THROUGHPUT-ULUI
ARHITECTURA TIPICA VON NEUMANN (PROCESOR PENTIUM)
ARHITECTURA TIPICA HARVARD (PROCESOR MICROCHIP)
UNITATEA CENTRALA
CPU
POATE ASIMILATA CU CREIERUL
MICROCONTROLLERULUI.
ESTE RESPOSABILA CU ADUCEREA INSTRUCTIUNII
CORECTE PENTRU EXECUTIE, DECODAREA ACESTEI INSTRUCTIUNI SI APOI EXECUTIA
ACESTEI INSTRUCTIUNI.
CPU LUCREAZA IN CONJUNCTIE CU ALU PENTRU A
COMPLETA EXECUTIA INSTRUCTIUNII (IN OPERATII ARITMETICE SI LOGICE)
CPU
CPU
CONTROLEAZA:
n BUSUL ADRESELOR DE MEMORIE PROGRAM
n BUSUL ADRESELOR DE MEMORIE DE DATE
n 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) PICmicro DE
POATE
EFECTUA URMATOARELE OPERATII:
n INSUMARE
n SCADERE
n DEPLASARE (SHIFT)
n OPERATII LOGICE
DACA
NU SE MENTIONEAZA ALTFEL, OPERATIILE ARITMETICE
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 8 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 :
n MEMORIA DE PROGRAM
n MEMORIA DE DATE
FIECARE
BLOC ARE PROPRIUL BUS
ACCESUL
ORGANIZAREA MEMORIEI DE PROGRAM
MCU DIN FAMILIA MICROCHIP MID-RANGE AU UN
CONTOR DE PROGRAM DE 13 BITI => 213 = 8K SPATIU DE ADRESARE
INSTRUCTIUNILE
SUNT ORGANIZATE PE 14 BITI SI SUNT 'SINGLE WORD'
REZULTA
UN SPATIU DE ADRESARE DE 8K * 14 BITI
SPATIUL
DE MEMORIE DE PROGRAM ESTE DIVIZATA IN PATRU PAGINI DE CATE 2K FIECARE
0h - 7FFh
800h - FFFh
1000h - 17FFh
1800h - 1FFFh
IN FIGURA DIN SLIDE-UL ANTERIOR SE POATE
VEDEA SI STIVA HARDWARE CU 8 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
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 8K 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 0h
VOM
NUMI ACEASTA ADRESA "ADRESA VECTORULUI DE RESET"
ORICE RESET VA STERGE CONTINUTUL
REGISTRULUI PCLATCH
VECTORUL
DE INTRERUPERE
n CAND O INTRERUPERE ESTE RECUNOSCUTA, PC ESTE FORTAT LA ADRESA 0004h.
n VOM DENUMI ACEASTA ADRESA :
"ADRESA VECTORULUI DE INTRERUPERE"
n
NU
TREBUIE
AVUT GRIJA DACA ADRESA DE SALT DIN INTRERUPERE ESTE IN ALT BANK 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
CONTORUL DE PROGRAM (PC)
CONTORUL DE PROGRAM (PC) SPECIFICA
ADRESA INSTRUCTIUNII CARE TREBUIE ADUSA PENTRU EXECUTIE
ARE
DIMENSIUNEA DE 13 BITI
ESTE COMPUS DIN DOI BYTE, UNUL
BYTE - UL CEL
ESTE
UN REGISTRU CARE POATE FI ATAT CITIT CAT SI SCRIS
BYTE-UL CEL
PCH CONTINE BITII <12:8> DIN PC SI
NU POATE FI DIRECT CITIT SI SCRIS, CI NUMAI PRIN INTERMEDIUL REGISTRULUI
PCLATCH
SITUATIA
1 ARATA CUM PC ESTE INCARCAT PRIN SCRIEREA PCL (PCLATH<4:0> ® PCH).
SITUATIA 2 ARATA CUM PC ESTE INCARCAT IN
TIMPUL UNEI INSTRUCTIUNI GOTO (PCLATH<4:3> ® PCH).
SITUATIA
3 ARATA CUN PC ESTE INARCAT IN TIMPUL UNEI INSTRUCTIUNI CALL (PCLATH<4:3> ® PCH), CU PC INCARCAT
(PUSHed) IN VARFUL STIVEI
SITUATIA
4 ARATA CUM ESTE INCARCAT PC IN TIMPUL UNEI INSTRUCTIUNI IN CARE PC ESTE
INCARCAT (POPed) DIN VRFUL STIVEI
STIVA
STIVA
ESTE O MEMORIE DE TIP LIFO (LAST IN FIRST OUT)
STIVA
PERMITE APARITIA A UNOR COMBINATII DE PANA LA 8 APELURI DE SUBRUTINE SAU
INTRERUPERI
STIVA CONTINE ADRESA DE REINTOARCERE
DIN RAMURA DE PROGRAM ACTIVA IN EXECUTIA PROGRAMULUI
MICROCONTROLLERELE
DIN GAMA DE MIJLOC AU O STIVA CU 8 NIVELE x 13 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 'IMPINS' (PUSHed)
IN STIVA
STIVA
ESTE GOLITA (POPed) IN CAZUL APARITIEI UNEIA DIN INSTRUCTIUNILE RETURN, RETLW
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
ORGANIZAREA MEMORIEI DE DATE
MEMORIA
DE DATE ESTE FORMATA DIN ZONA REGISTRILOR CU FUNCTII SPECIALE (SFR) SI DIN ZONA
REGISTRILOR PENTRU OPERATII GENERALE (GPR)
SFR
CONTROLEAZA OPERAREA DISPOZITIVULUI
GPR - ZONA PENTRU MEMORARE DATE GENERALE
MEMORIA DE DATE ESTE IMPARTITA IN BANCURI
DE MEMORIE ATAT PENTRU ZONA GPR CAT SI PENTRU ZONA SFR
ZONA GPR ESTE IMPARTITA IN BANCURI PENTRU
A PUTEA PERMITE ADRESAREA A
REGISTRII PENTRU FUNCTII SPECIALE (SFRs)
UTILIZATI PENTRU CONTROLUL MODULELOR PERIFERICE SI A FUNCTIUNILOR CENTRALE.
PENTRU A PUTEA FACE SELECTIA
BANCURILOR DE MEMORIE AVEM NEVOIE DE BITI DE CONTROL
ACESTIA
SUNT LOCALIZATI IN REGISTRUL STATUS (STATUS<7:5>)
ORGANIZAREA
BANCURILOR DIFERA DE LA DISPOZITIV LA DISPOZITIV
PENTRU A MUTA CONTINUTUL UNUI REGISTRU IN
ALTUL, VALOAREA TREBUIE SA TREACA PRIN REGISTRUL W
REZULTA
DOUA CICLURI MASINA PENTRU MUTARI REGISTRU-REGISTRU
INTREAGA MEMORIE POATE FI ACCESATA DIRECT
SAU INDIRECT
ADRESAREA
DIRECTA POATE NECESITA UTILIZAREA BITILOR RP1:RP0
ADRESAREA
INDIRECTA NECESITA UTILIZAREA REGISTRULUI DE SELECTARE A BANCURILOR (FSR)
ADRESAREA INDIRECTA UTILIZEAZA BITUL REGISTRULUI POINTER INDIRECT (IRP) DIN REGISTRUL STATUS PENTRU ACCESAREA ZONELOR BANK0/BANK1 SAU BANK2/BANK3 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
DEOARECE
ACEST PIONTER ESTE IN RAM, CONTINUTUL SAU POATE FI MODIFICAT DE CATRE PROGRAM
EXEMPLU:
n UTILIZAREA ADRESARII INDIRECTE SIMPLE PENTRU A STERGE RAM (LOCATIILE 20h - 2Fh) INTR-UN NUMAR MINIM DE INSTRUCTIUNI
BCF STATUS, IRP ; Indirect addressing Bank0/1
MOVLW 0x20 ; Initialize pointer to RAM
MOVWF FSR
NEXT CLRF INDF ; Clear INDF register
INCF FSR,F ; Inc pointer
BTFSS FSR,4 ; All done?
GOTO NEXT ; NO, clear next
CONTINUE
; YES, continue
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
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
INTRERUPERILE
CURENTE POT SA APARA DE LA:
INTRERUPERE
DE LA AFISAJ LCD
INTRERUPERE
INTRERUPERE
DE DEPASIRE TIMER1
INTRERUPERE
DE DEPASIRE TIMER2
INTRERUPERE
CCP
INTRERUPERE
SSP
EXISTA CEL PUTIN UN REGISTRU UTILIZAT IN
CONTROLUL SI STAREA INTRERUPERILOR: INTCON
DACA MCU ESTE PREVAZUT CU INTRERUPERI DE
SCHEMA LOGICA PENTRU INTRERUPERI
REGISTRUL INTCON
BIT7 GIE :GLOBAL INTERRUPT ENABLE BIT
n 1 = VALIDEAZA TOATE INTRERUPERILE NEMASCATE
n 0 = INVALIDEAZA TOATE INTRERUPERILE
BIT6 PEIE : PERIPHERAL INTERRUPT
ENABLE BIT
n
1 =
VALIDEAZA TOATE INTRERUPERILE NEMASCATE DE
n
0 =
INVALIDEAZA TOATE INTRERUPERILE DE
BIT5 TOIE : TMR0 OVERFLOW INTERRUPT ENABLE BIT
n 1 = VALIDEAZA INTRERUPEREA DE DEPASIRE TMR0
n 0 = INVALIDEAZA INTRERUPEREA DE DEPASIRE TMR0
BIT4 INTE :INT EXTERNAL INTERRUPT ENABLE BIT
n 1 = VALIDEAZA INTRERUPEREA PE PINUL EXTERN INT
n 0 = INVALIDEAZA INTRERUPEREA PE PINUL EXTERN INT
BIT3 RBIE :RB PORT CHANGE
INTERRUPT ENABLE BIT
n
1 =
VALIDEAZA INTRERUPEREA
n
0 =
INVALIDEAZA INTRERUPEREA
BIT2 TOIF :TMR0 OVERFLOW INTERRUPT FLAG BIT
n 1 = VALOARE DEPASITA A REGISTRULUI TMR0
n 0 = VALOARE NEDEPASITA A REGISTRULUI TMR0
BIT1 INTF :INT EXTERNAL INTERRUPT FLAG BIT
n 1 = INTRERUPEREA EXTERNA A APARUT
n 0 = INTRERUPEREA EXTERNA NU A APARUT
BIT0 RBIF :RB PORT CHANGE INTERRUPT FLAG BIT
n 1 = CEL PUTIN UNUL DIN PINI RB7:RB4 SI-A SCHIMBAT STAREA
n 0 = NICI UNUL DIN PINI RB7:RB4 NU SI-A SCHIMBAT STAREA
BITUL GIE (INTCON<7>) ESTE STERS
INSTRUCTIUNEA RETFIE, (REINTOARCERE
DIN INTRERUPERE),
LATENTA INTRERUPERII
LATENTA
INTRERUPERII ESTE DEFINITA CA TIMPUL SCURS DIN MOMENTUL APARITIEI EVENIMENTULUI
CARE GENEREAZA INTRERUPEREA, PANA IN
MOMENTUL IN CARE INSTRUCTIUNEA DE LA ADRESA 0004h ESTE EXECUTATA.
PENTRU
INTRERUPERI SINCRONE (TIPIC INTERNE) LATENTA ESTE DE 3TCY
PENTRU
INTRERUPERI ASINCRONE (TIPIC EXTERNE) CUM AR FI INT SAU SCHIMBAREA
STARII PORTULUI B, LATENTA ESTE TIPIC 3 - 3.75 TCY
INTRERUPERI INT SI EXTERNE
INTRERUPEREA
EXTERNA PE PINUL INT ESTE ACTIVATA PE FRONT
DACA
BITUL INTEDG (OPTION<6>) ESTE SETAT, TRIGERAREA SE FACE PE FRONTUL
CRESCATOR
DACA BITUL INTEDG (OPTION<6>) ESTE
STERS, TRIGERAREA SE FACE PE FRONTUL DESCRESCATOR
POATE FI VALIDATA SAU INVALIDATA PRIN
SETAREA SAU STERGEREA BITULUI INTE ENABLE (INTCON<4>)
BITUL
INTF TREBUIE STERS PRIN PROGRAM IN CADRUL RUTINEI DE TRATARE A INTRERUPERII,
INAINTEA REVALIDARII ACESTEI INTRERUPERI
INTRERUPEREA INT POATE TREZI PROCESORUL
DIN STAREA SLEEP, DACA ANTERIOR INTRARII IN STAREA SLEEP BITUL INTE A FOST
SETAT
SALVAREA CONTEXTULUI IN INTRERUPERI
IN INTRERUPERI, ESTE AUTOMAT SALVATA IN
STIVA NUMAI VALOAREA CONTORULUI DE PROGRAM PC
PENTRU SALVAREA SI A VALORILOR DIN ALTI
REGISTRII, CUM AR FI REGISTRUL W SAU SATATUS, TREBUIE SCRIS UN PROGRAM
ACTIUNEA DE SALVARE A INFORMATIILOR ESTE
CUNOSCUTA SUB DENUMIREA GENERICA DE PUSH-ING IAR ACTIUNEAA DE RESTAURARE A
INFORMATIILOR INAINTE DE REINTOARCEREA DIN RUTINA DE INTRERUPERI ESTE CUNOSCUTA
SUB DENUMIREA DE POP-ING
ACTIUNILE
PUSH SI POP NU AU MNEMONICI SPECIALE, ELE SUNT NUMAI ACTIUNI CONCEPTUALE
ACTIUNILE
PUSH SI POP POT FI IMPLEMENTATE CA O SECVENTA DE PROGRAM
UZUAL
SE FOLOSESC MACRO-URI
EXEMPLU
PASI
DE URMAT PENTRU REALIZAREA UNUI PROGRAM PUSH / POP
MEMOREAZA CONTINUTUL REGISTRULUI W IN BANCUL DE MEMORIE CURENT
MEMOREAZA REGISTRUL STATUS IN BANK0
EXECUTA CODUL RUTINEI DE INTRERUPERE (ISR)
REFACE STAREA REGISTRULUI STATUS SI A BITILOR DE SELECTIE A BANCULUI DE MEMORIE
REFACE STAREA REGISTRULUI W
EXEMPLU 1
MOVWF W_TEMP ; Copy W to a Temporary Register
; regardless of current bank
SWAPF STATUS,W ; Swap STATUS nibbles and place
; into W register
MOVWF STATUS_TEMP ; Save STATUS to a Temporary register
; in Bank0
: (Interrupt Service Routine (ISR) )
SWAPF STATUS_TEMP,W ; Swap original STATUS register value
; into W (restores original bank)
MOVWF STATUS ; Restore STATUS register from
; W register
SWAPF W_TEMP,F ; Swap W_Temp nibbles and return
; value to W_Temp
SWAPF W_TEMP,W ; Swap W_Temp to W to restore original
; W value without affecting STATUS
EXEMPLU 2
MOVWF W_TEMP ; Copy W to a Temporary Register
; regardless of current bank
SWAPF STATUS,W ; Swap STATUS nibbles and place
; into W register
BCF STATUS,RP0 ; Change to Bank0 regardless of current bank
MOVWF STATUS_TEMP ; Save STATUS to a Temporary register in Bank0
: (Interrupt Service Routine (ISR) )
SWAPF STATUS_TEMP,W ; Swap original STATUS register value
; into W (restores original bank)
MOVWF STATUS ; Restore STATUS register from W register
SWAPF W_TEMP,F ; Swap W_Temp nibbles and return
; value to W_Temp
SWAPF W_TEMP,W ; Swap W_Temp to W to restore original
; W value without affecting STATUS
PORTURI I/O
PINUL I/O DE UZ GENERAL POATE FI
CONSIDERAT CA CEL
PINI I/O PERMIT MICROCONTROLLERULUI SA
MONITORIZEZE SI SA CONTROLEZE ALTE DISPOZITIVE
PENTRU FLEXIBILITATE SI FUNCTIONALITATE,
PINI I/O POT AVEA
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
TRIS<x> CONTROLEAZA DIRECTIA PORTULUI x.
UN
'1' PE BITUL CORESPUNZATOR UNUI PIN, IL DESEMNEAZA CA PIN DE INTRARE
UN
'0' PE BITUL CORESPUNZATOR UNUI PIN, IL DESEMNEAZA CA PIN DE IESIRE
MEMORARE:
'1' INPUT ; '0' OUTPUT
INSTRUCTIUNILE
CARE
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
CITIREA PINILOR CONFIGURATI CA INTRARI
ANALOGICE VA DUCE
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, XORWF) 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
PORTURI I/O. NOTE
INITIALIZAREA PORTURILOR
EXEMPLU DE INITIALIZARE A PORTULUI
B:
CLRF STATUS ; Bank0
CLRF PORTB ; Initialize PORTB by clearing
; output data latches
BSF STATUS, RP0 ; Select Bank1
MOVLW 0xCF ; Value used to initialize data
; direction
MOVWF TRISB ; PORTB<3:0> = inputs,
; PORTB<5:4> = outputs
; PORTB<7:6> = inputs
CONSIDERATII DE PROGRAMARE PENTRU PORTURI I/O BIDIRECTIONALE
ORICE
INSTRUCTIUNE CARE EFECTUEAZA O OPERATIE DE SCRIERE, EFECTUEAZA DE FAPT O
OPERATIE DE CITIRE URMATA DE O OPERATIE DE SCRIERE. INSTRUCTIUNILE BCF SI BSF,
DE EXEMPLU, CITESC REGISTRUL IN CPU, EXECUTA OPERATIILE PE BIT SI SCRIU
REZULTATUL INAPOI IN REGISTRU
TREBUIE
AVUT GRIJA CAND SE LUCREAZA CU ACESTE INSTRUCTIUNI DACA PORTUL ESTE SETAT PE
UNII PINI CA INTRARE, IAR PE ALTII CA IESIRE
EXEMPLU:
O OPERATIE TIP BSF A BITULUI5 APARTINAND PORTULUI B, VA CAUZA CITIREA TUTUROR
CELOR 8 BITI PORTB IN CPU. APOI, INSTRUCTIUNEA BSF VA MODIFICA VALOAREA BITULUI
5 SI VALOAREA PORTB ESTE SCRISA IN
; Initial PORT settings: PORTB<7:4>
Inputs
PORTB<3:0> Outputs
; PORTB<7:6> have external pull-ups
and are not connected to other circuitry
PORT latch PORT pins
---- -----
BCF PORTB, 7 ; 01pp pppp 11pp
pppp
BCF PORTB, 6 ; 10pp pppp 11pp
pppp
BSF STATUS, RP0 ;
BCF TRISB, 7 ; 10pp pppp 11pp
pppp
BCF TRISB, 6 ; 10pp pppp 10pp
pppp
; Note that the user may have expected the
pin values to be 00pp ppp.
; The 2nd BCF caused RB7 to be latched as
the pin value (high).
CONSIDERATII DE PROGRAMARE. OPERATII SUCCESIVE
SCRIEREA ACTUALA
TREBUIE
AVUT GRIJA CAND APAR INSTRUCTIUNI DE SCRIERE URMATE DE OPERATIUNI DE CITIRE, PE
ACELASI PORT
SECVENTA
DE PROGRAM TREBUIE SA PERMITA STABILIZAREA VALORII TENSIUNII LA PIN, INAINTE CA
URMATOAREA INSTRUCTIUNE CARE CAUZEAZA CITIREA DE LA PORT SA FIE EXECUTATA,
ALTFEL S-AR PUTEA CITI VECHEA STARE A PORTULUI IN LOC DE CEA CURENTA
EXEMPLU DE MODEL I/O CARE POATE CAUZA O ASTFEL DE SITUATIE:
DACA FRECVENTA I/O CRESTE, CRESTE PERICOLUL DESCRIS ANTERIOR
CEA
O
SOLUTIE MULT
PORTURI I/O
ESTE RECOMANDAT CA
INITIALIZAREA REGISTRULUI PORTx
INITIALIZAREA REGISTRULUI TRISx
RESPECTAREA SUCCESIUNII, ELIMINA
POSIBILITATEA APARITIEI GLITCH-ULUI
PORTURILE IN / OUT
INTRODUCERE
PINII I/O DE UZ GENERAL POT FI CONSIDERATI
CELE
PENTRU A ADUGA FLEXIBILITATE SI
FUNCTIONALITATE UNUI DISPOZITIV, UNII PINI SUNT PREVAZUTI CU
ACEST
LUCRU SE REALIZEAZA PRIN MULTIPLEXARE, ALOCAREA FUNCTIUNILOR FACANDU-SE
DINAMIC, PRIN PROGRAM
PINII SUNT GRUPATI IN PORTURI DE MAXIM 8
BITI
DENUMIREA
GENERICA PENTRU ACESTE PORTURI ESTE PORTA, PORTB
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' IN BITUL REGISTRULUI TRIS
CORESPONDENT PINULUI, SETEAZA PINUL CA INTRARE
UN '0' 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 PORT!!!
TREBUIE AVUT GRIJA CU COMENZI DE TIPUL
CITESTE-MODIFICA-SCRIE, CAND ACESTEA SUNT ADRESATE PORTURILOR
PORT I/O TIPIC
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
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 '0'
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
NOTA1
n
DACA
PINI SUNT MULTIPLEXATI CU INTRARI ANALOGICE,
n CITIREA PINILOR UNUI PORT CONFIGURAT CA INTRARE ANALOGICA INTOARCE VALOAREA '0'
NOTA2
n
DACA
PINI SUNT MULTIPLEXATI CU INTRARI DE COMPARATOR,
n CITIREA PINILOR UNUI PORT CONFIGURAT CA INTRARE ANALOGICA INTOARCE VALOAREA '0'
NOTA3
n DACA PINI SUNT MULTIPLEXATI CU IESIRI PENTRU AFISAJ LCD, LA UN POWER-ON RESET, ACESTIA SUNT CONFIGURATI CA IESIRI PENTRU AFISAJ LCD, CA SI CUM AR FI CONTROLATI DE REGISTRUL LCDSE
n PENTRU A CONFIGURA ACESTI PINI CA PORT DIGITAL, BITI CORESPONDENTI DIN REGISTRUL LCDSE TREBUIE STERSI
n ORICE BIT SETAT IN REGISTRUL LCDSE SUPRASCRIE BITII SETATI IN REGISTRUL CORESPONDENT TRIS
NOTA4
n PINII POT FI MULTIPLEXATI CU PORTUL PARALEL (PSP)
n 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 8 BITI, CU REGISTRUL DE DATE
PORTA
PORT
I/O STANDARD CU EXCEPTIA RA4
REGISTRUL DE DIRECTIE A DATELOR ESTE
TRISA
SCHEMA INTERNA PENTRU RA7-RA0 EXCEPTIE RA4
EXCEPTIA RA4
INITIALIZAREA PORTULUI A
CLRF STATUS ; Bank0
CLRF PORTA ; Initialize PORTA by clearing output data latches
BSF STATUS, RP0 ; Select Bank1
MOVLW 0xCF ; Value used to initialize data direction
MOVWF TRISA ; PORTA<3:0> = inputs PORTA<5:4> = outputs
; TRISA<7:6> always read as '0'
PORTUL B
ESTE UN PORT BIDIRECTIONAL DE 8 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 (OPTION<7>)
n ESTE DEZACTIVAT CAND PORTUL ESTE CONFIGURAT CA IESIRE
n ESTE DEZACTIVAT LA POWER-ON RESET
SCHEMA INTERNA PENTRU RB3-RB0
PATRU PINI AI PORTULUI B, RB7:RB4 AU
FACILITATEA DE A GENERA INTRERUPERE
ESTE
DISPONIBILA DOAR LA SETAREA PINILOR PORTULUI CA INTRARI
SE
GENEREAZA O INTRERUPERE PENTRU PORTUL B CU BITUL FLAG RBIF (INTCON<0>)
INTRERUPEREA POATE TREZI DIN STAREA DE
SLEEP CONTROLLERUL
SCHEMA INTERNA PENTRU RB7-RB4
PORTURI I/O
ESTE RECOMANDAT CA
INITIALIZAREA REGISTRULUI PORTx
INITIALIZAREA REGISTRULUI TRISx
RESPECTAREA SUCCESIUNII, ELIMINA
POSIBILITATEA APARITIEI GLITCH-ULUI