scs01
-
Upload
alex-badea -
Category
Documents
-
view
224 -
download
3
description
Transcript of scs01
Sisteme de calcul specializate
Cpt. conf. univ. dr. ing. Cristian MOLDER
Facultatea de Sisteme Electronice si Informatice MilitareAcademia Tehnica Militara
Cristian Molder Sisteme de calcul specializate
Seria PICmicro: arhitectura generala
EPROM
Memorieprogram
8K x 14
13 Magistrala date 8
14Magistralaprogram
Registru instr.
Program Counter
stivă cu 8 niveluri(13-bit)
RAMRegiştrii
fişier
368 x 8
Adresare directă 7
(1)RAM Addr 9
Addr MUX
Adresareindirectă
FSR reg
STATUS reg
MUX
ALU
W reg
Power-upTimer
OscillatorStart-up Timer
Power-onReset
WatchdogTimer
Decodareinstrucţiunişi control
Generatorceas
OSC1/CLKINOSC2/CLKOUT
MCLR
PORTA
VDD, VSS
PORTB
PORTC
PORTD
PORTE
RA4RA5
RC0RC1RC2
RC3RC4
RC5RC6RC7
8
8
Brown-out (2)Reset
USARTCCP ComparatoarePort serial
A/DTimer0 Timer1 Timer2
sincron
RA3RA2RA1RA0
8
3
până la
până la
RB0/INTRB1RB2
RB3RB4
RB5RB6RB7
RD0RD1RD2
RD3RD4
RD5RD6RD7
EEPROM datepână la256 x 8
Alte module Drivere LCD
Referinţăde tensiune
Module periferice
PORTFRF0RF1RF2
RF3RF4
RF5RF6RF7
PORTGRG0RG1RG2
RG3RG4
RG5RG6RG7
Port paralelslave
RE0RE1RE2
RE3RE4
RE5RE6RE7
Semnal ceasRC intern
Porturi I/O
Cristian Molder Sisteme de calcul specializate
Registrii de uz general
Registru de control pentru configurarea prescalerului Timer0/WDT, întreruperilor externe, semnalului de ceas al Timer0şi rezistenţele de tip Weak Pull-up ale portului B.
OPTION_REG Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) Features
INTEDG T0CS T0SE PSA PS2 PS1 PS0RBPU
R/W (1)
RBPU
INTEDG
T0CS
T0SE
PSA
PS2:PS0
Notă: pentru a obţine un prescaler 1:1 la modulul Timer0, prescalerul se asociază la WDT.
PortB Pull-up Enable bit1 = rezistenţele de pull-up inactive0 = rezistenţele de pull-up active
Interrupt Edge Select bit1 = întrerupere pe frontul crescător al impulsului la pinul INT0 = întrerupere pe frontul descrescător al impulsului la pinul INT
TMR0 Clock Source Select bit1 = semnal de ceas la pinul T0CKI0 = semnal de ceas de la oscilatorul intern
TMR0 Source Edge Select bit1 = increment la tranziţie 1-0 la pinul T0CKI0 = increment la tranziţie 0-1 la pinul T0CKI
Prescaler Assignment bit1 = prescaler asociat la WDT0 = prescaler asociat la Timer0
Prescaler Rate Select bits
PS2 PS1 PS0 Timer0 WDT
0 0 0 1:2 1:1
0 0 1 1:4
0 1 0 1:8
0 1 1 1:16
1 0 0 1:32
1 0 1 1:64
1 1 0 1:128
1 1 1 1:256
1:2
1:4
1:8
1:16
1:32
1:64
1:128
Cristian Molder Sisteme de calcul specializate
Intreruperi
În registrul INTCON
În regiştrii PIR/PIE
TMR1IE
TMR1IF
TMR2IE
TMR2IF
INTFINTE
RBIFRBIE
T0IFT0IE
GIE
PEIE
Wake-up (If in SLEEP mode)
Interrupt to CPU
ADCIE
ADCIF
ADIE
ADIF
CCP1IE
CCP1IF
CCP2IE
CCP2IF
CMIE
CMIF
EEIE
EEIF
LCDIE
LCDIF
PBIE
PBIF
PSPIE
PSPIF
RCIE
RCIF
SSPIE
SSPIF
OVFIE
OVFIF
TXIE
TXIF
GPIFGPIE
Clear GIE bit
Cristian Molder Sisteme de calcul specializate
Intreruperi
INTCON Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) Features
PEIE T0IE INTE RBIE T0IF INTF RBIFGIE
R/W (0)
Registru de control şi semnalizare a întreruperilor globale, periferice, ale timerului 0 şi portului B (vezi şi PIR/PIE).
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
Notă: la unele MCU, RBIE este cunoscut ca GPIE, iar RBIF este cunoscut ca GPIF.
Global Interrupt Enable bit1 = activează toate întreruperile nemascate0 = dezactivează toate întreruperile
Peripheral Interrupt Enable bit1 = activează toate întreruperile periferice nemascate0 = dezactivează toate întreruperile periferice
TMR0 Overflow Interrupt Enable bit1 = activează întreruperea de overflow al Timer00 = dezactivează întreruperea de overflow al Timer0
INT External Interrupt Enable bit1 = activează întreruperea externă INT0 = dezactivează întreruperea externă INT
RB Port Change Interrupt Enable bit1 = activează întreruperea la modificarea stării portului RB0 = dezactivează întreruperea la modificarea stării portului RB
TMR0 Overflow Interrupt Flag bit1 = există overflow la Timer00 = nu există overflow la Timer0
INT External Interrupt Flag bit1 = există întrerupere externă INT0 = nu există întrerupere externă INT
RB Port Change Interrupt Flag bit1 = cel puţin unul din biţii RB7:RB4 şi-a schimbat starea0 = nici unul din biţii RB7:RB4 nu şi-a schimbat starea
Cristian Molder Sisteme de calcul specializate
Intreruperi
PIEx Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) FeaturesR/W (0)
Registru de control al întreruperilor periferice (configuraţia biţilor depinde de fiecare dispozitiv).
TMR1E
TMR2E
CCP1IE
CCP2IE
SSPIE
RCIE
TXIE
ADIE
ADCIE
OVFIE
PSPIE
EEIE
LCDIE
CMIE
Timer1 Overflow Interrupt Enable bit
Timer2 Overflow Interrupt Enable bit
CCP1 Interrupt Enable bit
CCP2 Interrupt Enable bit
Synchronous Serial Port Interrupt Enable bit
USART Receive Interrupt Enable bit
USART Transmit Interrupt Enable bit
A/D Converter Interrupt Enable bit
Slope A/D Converter Comparator Trip Interrupt Enable bit
Slope A/D TMR Overflow Interrupt Enable bit
Parallel Slave Port Read/Write Interrupt Enable bit
EE Write Complete Interrupt Enable bit
LCD Interrupt Enable bit
Comparator Interrupt Enable bit
Cristian Molder Sisteme de calcul specializate
Intreruperi
PIRx Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) FeaturesR/W (0)
Registru de semnalizare a întreruperilor periferice (configuraţia biţilor depinde de fiecare dispozitiv).
TMR1F
TMR2F
CCP1IF
CCP2IF
SSPIF
RCIF
TXIF
ADIF
ADCIF
OVFIF
PSPIF
EEIF
LCDIF
CMIF
Timer1 Overflow Interrupt Flag bit
Timer2 Overflow Interrupt Flag bit
CCP1 Interrupt Flag bit
CCP2 Interrupt Flag bit
Synchronous Serial Port Interrupt Flag bit
USART Receive Interrupt Flag bit
USART Transmit Interrupt Flag bit
A/D Converter Interrupt Flag bit
Slope A/D Converter Comparator Trip Interrupt Flag bit
Slope A/D TMR Overflow Interrupt Flag bit
Parallel Slave Port Read/Write Interrupt Flag bit
EE Write Complete Interrupt Flag bit
LCD Interrupt Flag bit
Comparator Interrupt Flag bit
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: arhitectura
T1OSCEN
T1OSO
T1OSI
OSC1
OSC2
Sleep
LP, XT, HS, RC, EC
T1OSC
CPU
Periferice
Posts
cale
r
MU
X
MU
X
8 MHz
4 MHz
2 MHz
1 MHz
500 kHz
125 kHz
250 kHz
IRCF2:IRCF0
31.25 kHz
31.25 kHzOscilator
Oscilatorintern
WDT, FSCM31.25 kHz
8 MHz
Oscilator intern
(INTRC)
(INTOSC)
FOSC2:FOSC0SCS1:SCS0
Către Timer1
111
110
101
100
011
010
001
000
00
01
10
Activareoscilator
Oscilatorprimar
Oscilatorsecundar
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: registrii de control
OSCCON Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (1) R/W (1) R/W (0) R (1) R (0) R (0) R/W (0) Features
IRCF2 IRCF1 IRCF0 OSTS HTS LTS SCS-
IRCF2 IRCF1 IRCF0 Frequency Oscillator
1 1 1 8 MHz HFINTOSC
1 1 0 4 MHz HFINTOSC
1 0 1 2 MHz HFINTOSC
1 0 0 1 MHz HFINTOSC
0 1 1 500 kHz HFINTOSC
0 1 0 250 kHz HFINTOSC
0 0 1 125 kHz HFINTOSC
0 0 0 31 kHz LFINTOSC
Registru de control al modului de operare cu semnalul de ceas.
IRCF2:IRCF0
OSTS
HTS
LTS
SCS
Notă: registrul nu este controlat direct, ci se scrie în timpul procesului de programare a MCU.
Internal Oscillator Frequency Select bitsstabileşte raportul de divizare al semnalului de ceas.
Oscillator Start-up Time-out Status bit1 = oscilator extern în uz0 = unul din oscilatoarele interne în uz
HFINTOSC Stable bit1 = HFINTOSC este stabil0 = HFINTOSC nu este stabil
LFINTOSC Stable bit1 = LFINTOSC este stabil0 = LFINTOSC nu este stabil
System Clock Select bit1 = este utilizat oscilatorul intern0 = este utilizat oscilatorul extern
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: registrii de control
CONFIG Bit nameBit 13 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) Features
... MLCRE FOSC2 PWRTEN FOSC1 FOSC0
FOSC2 FOSC1 FOSC0 Mod
1 1 1 EXTRC, RA6 ca CLKO
1 1 0 EXTRC, RA6 ca I/O
1 0 1 INTRC, RA6 ca CLKO
1 0 0 INTRC, RA6 ca I/O
0 1 1 ECIO, RA6 ca I/O
0 1 0 HS
0 0 1 XT
0 0 0 LP
Registru de control al modului de operare cu semnalul de ceas.
FOSC2:FOSC0
Notă: registrul nu este controlat direct, ci se scrie în timpul procesului de programare a MCU.
Oscillator Selection bitsselectează sursa semnalului de ceas.
WDTEN
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: calibrarea oscilatorului intern
Registru de ajustare/acord a frecvenţei oscilatorului în jurul valorii nominale.
OSCTUNE Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) Features
- TUN5 TUN4 TUN3 TUN2 TUN1 TUN0-
U (0)
TUN2 TUN1 TUN0 Frequency
1 1 1 Maximal
0 0 1
0 0 0 Calibrated
1 1 1
0 0 0 Minimal
TUN4 TUN3
1 1
0 0
0 0
1 1
0 0
Frecvenţă
TUN5:TUN0Zona de ajustare
4 MHz
TUN5:TUN0=011111 TUN5:TUN0=100000
> 4 MHz
< 4 MHz
TUN5:TUN0=000000
TUN5
0
0
0
1
1
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: calibrarea oscilatorului intern
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: configuratii
31.25 kHzOscilatorintern
10
125 kHz 10
250 kHz 10
500 kHz 10
1 MHz 10
SCS1:SCS0
2 MHz 10
4 MHz 10
Oscilatorprimar
8 MHz 10
EXTRC & CLKO 00
EXTRC 00
000
001
010
011
100
IRCF2:IRCF0
101
110
111
-
-
-
-
-
-
-
FOSC2:FOSC0
-
-
-
111
110
INTRC & CLKO 00
INTRC 00
000 ... 111
000 ... 111
101
100
ECIO 00
HS 00
-
-
011
010
XT 00
LP 00
-
-
001
000
Timer1 T1OSC 01 - -
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: surse externe
OSC1 pin
OSC2 pin
Cuarţ
Moduri LP, XT, HS
CPU
OSC.
20-30pF
20-30pF
GND
OSC1 pin
OSC2 pin
I/O
OSC.DC-20MHz
Oscilator extern Mod EC
CPU
OSC1 pin
OSC2 pin
Mod RC
CPU
În modul EC se utilizează o sursă externă ca sursă de ceas. Modul LP : cristale de cuarţ de joasă frecvenţă (32.768 kHz).Modul XT : cristale de cuarţ cu frecvenţă medie de până la 8 MHz.Modul HS : cristale de cuarţ cu frecvenţă mare de peste 8 MHz.
OSC.
Fosc
GND
20pF
5-100K
Fosc/4
+5V
OSC1 pin
OSC2 pin
Mod RCIO
CPU
OSC.
Fosc
GND
20pF
5-100K
+5V
Modul RC. Pinul OSC1 este conectat la circuitul RC iar pinul OSC2furnizează la ieşire frecvenţa / 4.
I/O
Modul RCIO. este utilizat ca pin de I/O.
Pinul OSC1 este conectat la circuitul RC iar pinul OSC2
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: valori ale capacitatilor
32 kHzLP -
200 kHz -
100 kHz -
455 kHz 15-68 pF
2 MHz 15-68 pF
C2C1
-
-
-
15-68 pF
C1
68-100 pF
15-30 pF
68-100 pF
-
C2
68-100 pF
15-30 pF
150-200 pF
-
Rezonator ceramic Cristal de cuarţ
15-68 pF 15-30 pF 15-30 pF
4 MHz 15-68 pF
- -
15-68 pF 15-30 pF 15-30 pF
8 MHz 10-68 pF
- -
10-68 pF 15-30 pF 15-30 pF
XT
HS
10 MHz 10-68 pF
16 MHz 10-22 pF
10-68 pF 15-30 pF 15-30 pF
10-22 pF - -
20 MHz -
15-30 pF 15-30 pF
- 15-30 pF 15-30 pF- -
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: surse interne
OSC1 pin
OSC2 pin
I/O
Mod INTOSC
CPU
Modul INTOSC. Pinul OSC1 este disponibil ca pin de I/O, iar pinul OSC2dă la ieşire frecvenţa de oscilaţie / 4.
Fosc/4
INT.OSC.
Fosc
OSC1 pin
OSC2 pin
I/O
Mod INTOSCIO
CPUINT.
OSC.
Modul INTOSCIO. Ambii pini sunt disponibili ca pini I/O.
I/O
Fosc
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: scheme uzuale
OSC2C2
C1
XTAL RF SLEEP
PIC16Fxxx
Logică internă
Logică internă
RS
OSC1
XTAL10k
PIC16Fxxx
Către alte disp.
4k7
CLKIN
20pF 20pF
10k
10k
+5V
74AS04
74AS04
XTAL
PIC16Fxxx
Către alte disp.330k
CLKIN
74AS0474AS04
0.1uF
74AS04
330k
CLKOUT
CEXT
FOSC/4
REXT
PIC16Fxxx
CLKIN
VDD
FOSC
Cristal de cuarţ Oscilator extern
Oscilator externCircuit oscilant RC
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: setari de cod
PIC16F88
17
5
14
4 VPP
VDD
GND
PGD
PGC
ICSP
1
512
220R1
LED1
13C2
C115pF
15pF
XTAL8MHz
16
15
// Ex.3.1: Functionare cu oscilator intern (INTRC) de 8 MHzvoid main() { OSCCON.SCS1=1; // Oscilator intern
OSCCON.SCS0=0; // (SCS1-SCS0=10)OSCCON.IRCF2=1; // Ceas de 8 MhzOSCCON.IRCF1=1; // IRCF2:IRCF0=111OSCCON.IRCF0=1; // (doar in mod INTRC)ANSEL=0; // Porturi digitaleTRISA=0; // Portul A in mod iesirePORTA=0; // Initializare port Awhile(1) { // Bucla infinita
PORTA.B0=!PORTA.B0; // Inversare bit RA0delay_ms(500); // Pauza de 500 ms
}}
Cristian Molder Sisteme de calcul specializate
Semnalul de ceas: exercitii
IRCF2 IRCF1 IRCF0 Frequency Oscillator
1 1 1 8 MHz HFINTOSC
1 1 0 4 MHz HFINTOSC
1 0 1 2 MHz HFINTOSC
1 0 0 1 MHz HFINTOSC
0 1 1 500 kHz HFINTOSC
0 1 0 250 kHz HFINTOSC
0 0 1 125 kHz HFINTOSC
0 0 0 31 kHz LFINTOSC
FOSC2 FOSC1 FOSC0 Mod
1 1 1 EXTRC, RA6 ca CLKO
1 1 0 EXTRC, RA6 ca I/O
1 0 1 INTRC, RA6 ca CLKO
1 0 0 INTRC, RA6 ca I/O
0 1 1 ECIO, RA6 ca I/O
0 1 0 HS
0 0 1 XT
0 0 0 LP
Exerciţii:
1) cuarţ extern de 10 MHz2) semnal de ceas extern3) semnal de ceas intern de 1 MHz cu OSC2 ca I/O4) semnal de ceas intern de 2 MHz cu OSC2 ca FOSC/45) semnal de ceas intern de 31.25 kHz6) semnal de ceas RC extern de 1 MHz7) semnal de ceas RC extern cu doua frecvente selectabile
Cristian Molder Sisteme de calcul specializate
Reset: tipuri
POR : Power-On Reset;
MCLR : reset ın timpul functionarii normale;
MCLR : reset ın timpul starii SLEEP;
WDT : reset de la Watchdog;
BOR : Brown-Out Reset;
PER : Parity Error Reset.
Cristian Molder Sisteme de calcul specializate
Reset: schema bloc
S
R Q
MCLR / VPP Pin
VDD
OSC1/
ModululWDT
Detectiecrestere
OST/PWRT
On-chipRC OSC
WDT Time-out
Power-on Reset
OST
PWRT
Chip_Reset
Numărător 10-biţi
Activare OST
Activare PWRT
SLEEP
Brown-outReset BODEN
CLKINPin
Numărător 10-biţi
Paritatememorieprogram
MPEEN
MCLRE
Weak Pull-up
VDD
MCLRE
I/O Pull-upEnable
VDD
Cristian Molder Sisteme de calcul specializate
Reset: alimentarea circuitului
VDD
MCLR
TPWRT
TOST
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
Configuraţiaoscilatorului
Power-up Timer
Brown-out ResetWake-up
from SLEEPEnabled Disabled
XT, HS, LP 72 ms + 1024TOSC 1024TOSC 72 ms + 1024TOSC 1024TOSC
RC 72 ms — 72 ms —
Cristian Molder Sisteme de calcul specializate
Reset: Brown-Out
72 ms
VDD
Internal
Reset
BVDD
VDD
Internal
Reset 72 ms<72 ms
72 ms
BVDD
VDD
Internal
Reset
BVDD
Cristian Molder Sisteme de calcul specializate
Modul Sleep
Comanda: asm{SLEEP}Wake-up from SLEEP:
ıntrerupere la pinul INT extern;ıntrerupere la modificarea starii pinilor RB;ıntrerupere la Comparatorıntrerupere la A/D;ıntrerupere la Timer1;ıntrerupere la LCD;ıntrerupere la SSP;ıntrerupere la CCP;orice reset;Watchdog Wake-up;
Consum de 2uA
Cristian Molder Sisteme de calcul specializate
Porturi I/O
Porturile I/O sunt cele mai simple periferice ale unui microcontroler. Permit comunicarea acestuia cu exteriorul.Pentru flexibilitate, porturile I/O sunt multiplexate cu alte periferice sau funcţii.
Direcţia portului (intrare sau ieşire) este stabilită prin registrul TRIS.
Registrul PORT este un latch care conţine valoarea de ieşire a portului. La citirea portului, se determină valoareaprezentă la intrare, nu cea existentă în latch.
Portul A - multiplexat cu convertorul A/D
Portul B - conţine întreruperi externe de port
Portul C - multiplexat cu diferite periferice
Portul D şi E - uz general
Portul F şi G - multiplexat cu driverul LCD
Porturile pot conţine diode de protecţie la VDD şi VSS.
Cristian Molder Sisteme de calcul specializate
Portul A: RA5, RA3:0
Data bus
WR PORT
WR TRIS
RD PORT
Data Latch
TRIS Latch
P
I/O pin
VSS
To Peripheral Module(s)
QD
QCK
QD
QCK
Q D
EN
N
Analoginputmode
TTL
VDD
RD TRIS
or STinputbuffer
Cristian Molder Sisteme de calcul specializate
Portul A: RA4
Data bus
WR PORT
WR TRIS
RD PORT
Data Latch
TRIS Latch
VSS
To Peripheral Module(s)
QD
QCK
QD
QCK
Q D
EN
N
RD TRIS
SchmittTriggerinputbuffer
RA4 pin
Cristian Molder Sisteme de calcul specializate
Portul RB
Portul RB, pinii RB3:RB0
Data Latch
RBPU(2)
P
VDD
QD
CK
QD
CK
Q D
EN
Data bus
WR Port
WR TRIS
RD TRIS
RD Port
weakpull-up
RD Port
To Peripheral Module
I/O(1)pin
TTLInputBuffer
Schmitt TriggerBuffer
TRIS Latch
Data Latch
From other
RBPU(2)
P
VDD
I/O
QD
CK
QD
CK
Q D
EN
Q D
EN
Data bus
WR Port
WR TRIS
Set RBIF
TRIS Latch
RD TRIS
RD Port
RB7:RB4 pins
weakpull-up
RD Port
Latch
TTLInputBuffer
(1)pin
STBuffer
RB7:RB6 in serial programming mode
Q3
Q1
Portul RB, pinii RB7:RB4
Cristian Molder Sisteme de calcul specializate
Portul RC
Data Latch
TRIS Latch
RD TRIS
P
VSS
QD
QCK
QD
QCK
Q D
EN
N
VDD
0
1
RD PORT
WR PORT
WR TRIS
SchmittTrigger
Peripheral input
Data Bus
(2)Peripheral OE
PORT/PERIPHERAL (1) Select
Peripheral Data-out
RD PORT
I/O pin
Cristian Molder Sisteme de calcul specializate
Porturile RD si RE
Data Bus
WR PORT
WR TRIS
RD PORT
Data Latch
TRIS Latch
SchmittTriggerinputbuffer
QD
QCK
QD
QCK
Q D
EN
I/O pin
RD TRIS
Cristian Molder Sisteme de calcul specializate
Porturile RF si RG
RD PORT
SchmittTriggerinputbuffer
Q D
EN
Digital Input/
LCDSE<n>
LCD Segment Data
LCD Segment LCD Output pin
Data Bus
RD TRIS
Output Enable
VDD
Cristian Molder Sisteme de calcul specializate
Portul GPIO
DataBus
QD
QCK
QD
QCKP
N
WRPort
TRIS ‘f’
Data
TRIS
RD Port
VDD
I/O
VSS
(1)pinWReg
Latch
Latch
Reset
Cristian Molder Sisteme de calcul specializate
Porturi I/O: configuratia generala
Latchdirecție
date
Latchdate
de ieșire
Latchdate
de intrare
Driverde curentde ieșire
Activareieșire
3S
Write TRIS bit
CPU Data Bus
Write Data bit
Read Data bit
Multiplexareintrare analogică
Cristian Molder Sisteme de calcul specializate
Efectul de bouncing
Cristian Molder Sisteme de calcul specializate
Debouncing
10k
R1
D1
R2
100n
C1
VCC
K1
VOUTVK
VK
VOUT
apăsare eliberare
5V
0V
VINVIN
5V
0V
5V
0V
while (cnt<10) { // Cat timp contorul este sub 10 delay_ms(1); // Intarziere 1 ms if (GPIO.B5==0) // Daca butonul este apasat cnt++; // se incrementeaza contorul else // In caz contrar cnt=0; // Se reseteaza contorul}
Cristian Molder Sisteme de calcul specializate
Programarea ICSP
Conector ICSP
VSS
PGC
MCLR/VPP
VDD
PGD
1
2
3
4
5
VPP
GND
VDD
PGD
PGC
Rezistenţe de separare
Microcontroler
VDDVDDCircuit imprimat
Către circuit
ICSPDAT
ICSPCLK
VSS
Cristian Molder Sisteme de calcul specializate
Programarea ICSP
PIC
16
F8
8
1 •
2
3
4
5
6
7
8
9
18
17
16
15
14
13
12
11
10
RA1
RA0
OSC1
OSC2
VDD
RB7/PGD
RB6/PGC
RB5
RB4
RA2
RA3
RA4/T0CKI
MCLR/VPP
VSS (GND)
RB0/INT
RB1
RB2
RB3
DIP 18
PIC
16
F6
90
1 •
2
3
4
5
6
7
8
9
20
19
18
17
16
15
14
13
12
VSS (GND)
RA0/PGD
RA1/PGC
RA2/T0CKI/INT
RC0
RC1
RC2
RB4
RB5
VDD
RA5/OSC1
RA4/OSC2
RA3/MCLR/VPP
RC5
RC4
RC3
RC5
RC7
DIP 20
10 11 RB6RB7
PIC
16
F6
84
1 •
2
3
4
5
6
7
14
13
12
11
10
9
8
VSS (GND)
RA0/PGD
RA1/PGC
RA2/T0CKI/INT
RC0
RC1
RC2
VDD
RA5/OSC1
RA4/OSC2
RA3/MCLR/VPP
RC5
RC4
RC3
DIP 14
PIC
12F675
1 •
2
3
4 5
6
7
8 VSS (GND)
GPIO0/PGD
GPIO1/PGC
GPIO2
VDD
GPIO5
GPIO4
GPIO3/MCLR/VPP
DIP 8
PIC12F
Microcontrolere cu 8, 14 sau 20 pini
Microcontrolere cu 18 pini
PIC
10
F22X
1 •
2
3
4 5
6
7
8 GP3/MCLR/VPP
VSS (GND)
N/C
GP0/PGD
N/C
VDD
GP2/T0CKI/FOSC4
GP1/PGC
DIP 8
Microcontrolere cu 8 pini(seria PIC10F)
PIC
16
F8
86
DIP 28
1 •
2
3
4
5
6
7
8
9
11
12
13
14
10
RE3/MCLR/VPP
RA0
RA1
RA2
RA3
RA4/T0CKI
RA5
VSS
RA7/OSC1
RA6/OSC2
RC0/T0CKI
RC1
RC2
RC3
RB7/PGD
RB6/PGC
RB5
RB4
RB2
RB1
RB0/INT
VDD
VSS (GND)
RC7
RC6
RC5
RC4
RB3/PGM
28
27
26
25
24
23
22
21
20
18
17
16
15
19
Microcontrolere cu 28 sau 40 pini
PIC
16
F8
87
1 •
2
3
4
5
6
7
8
9
11
12
13
14
15
16
17
18
19
10
20
40
39
38
37
36
35
34
33
32
30
29
28
27
26
25
24
23
22
31
21
RE3/MCLR/VPP
RA0
RA1
RA2
RA3
RA4/T0CKI
RA5
RE0
RE1
RE2
VDD
VSS
RA7/OSC1
RA6/OSC2
RC0/T1CKI
RC1
RC2
RC3
RD0
RD1
RB7/PGD
RB6/PGC
RB5
RB4
RB3/PGM
RB2
RB1
RB0/INT
VDD
VSS (GND)
RD6
RD5
RD4
RC7
RC6
RC5
RC4
RD3
RD2
RD7
DIP 40
Cristian Molder Sisteme de calcul specializate
PICkit2: modulul hardware
RJ-11
Molex KK®
Molex SL/C-Grid
Power
Target
Busy
Programator PICkit 2
Conector ICSP
16
16
Pin
1
2
3
4
5
6
Descriere
MCLR/VPP
VDD
VSS (GND)
PGD (ICSPDAT)
PGC (ICSPCLK)
PGM (Auxiliar)
TM
Cristian Molder Sisteme de calcul specializate
PICkit2: interfata software
Bara de meniu
Configuraţiamicrocontrolerului
Fereastra de stare
Bara de progresTensiunea VDD
Sursa memoriei
Memoria program
Memoria de dateEEPROM
Cristian Molder Sisteme de calcul specializate
PIC12F675
PIC
12F
675
1 •
2
3
4 5
6
7
8 VSS
GP0/AN0/CIN+/PGD
GP1/AN1/CIN-/VREF/PGC
GP2/AN2/T0CKI/INT/COUT
VDD
GP5/T1CKI/OSC2/CLKIN
GP4/AN4/T1G/OSC2/CLKOUT
GP3/MCLR/VPP
TRISIO
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (0) R/W (1) R/W (1) R (1) R/W (1) R/W (1) R/W (1)
- TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0-
U (0)
GPIO
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (x) R/W (x) R/W (x) R/W (x) R/W (x) R/W (x) R/W (x)
- GPIO5 GPIO4 GPIO3 GPIO2 GPIO1 GPIO0-
U (0)
WPU
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (0) R/W (1) R/W (1) U (0) R/W (1) R/W (1) R/W (1)
- WPU5 WPU4 - WPU2 WPU1 WPU0-
U (0)
IOC
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)
- IOC5 IOC4 IOC3 IOC2 IOC1 IOC0-
U (0)
Cristian Molder Sisteme de calcul specializate
PIC12F675: porturile I/O fara pull-up
Testarea porturilor I/O
PIC12F675
1
8
6
7
41 3
2
7805
100n10u
6-18 VDC 5 VDCVPP
VDD
GND
PGD
PGC
ICSP
1
5
10k
1N4148
100n
5
220
C1 C2 C3
R1
10k
R2
D1
R3
LED1
10kR4
K1
2
void main() { TRISIO.B2=0; // Pinul GP2 ca pin de iesire TRISIO.B5=1; // Pinul GP2 ca pin de intrare while (1) { // Bucla infinita GPIO.B2=GPIO.B5; // Pinul GP2 ia valoarea lui GP5 }}
Cristian Molder Sisteme de calcul specializate
PIC12F675: porturile I/O cu pull-up
PIC12F675
1
8
6
7
41 3
2
7805
100n10u
6-18 VDC 5 VDCVPP
VDD
GND
PGD
PGC
ICSP
1
5
10k
1N4148
100n
5
220
C1 C2 C3
R1
10k
R2
D1
R3
LED1
K1
2
OPTION_REG.B7=0; // _GPPU activatWPU.B5=1; // Pinul GP2 are activat weak pull-up
Cristian Molder Sisteme de calcul specializate
PIC12F675: porturile I/O cu ıntreruperi
void interrupt() { // Procedura de intreupere GPIO.B2=~GPIO.B2; // Modificarea valorii portului GP2 INTCON.GPIF=0; // Revenirea din intrerupere}
void main() { // Programul principal INTCON.GPIE=1; // Activarea intreruperilor portului IOC.B5=1; // Activarea intreruperii pinului GP5}
PIC12F675
1
8
6
7
41 3
2
7805
100n10u
6-18 VDC 5 VDCVPP
VDD
GND
PGD
PGC
ICSP
1
5
10k
1N4148
100n
5
220
C1 C2 C3
R1
10k
R2
D1
R3
LED1
10kR4
K1
2
Cristian Molder Sisteme de calcul specializate
Porturile I/O: exercitii
Exercitii:
1) cu 3 biti I/O ai unui MCU controlati independent 6 LEDuri
2) de cati biti I/O este nevoie pentru a controla independent 30 de LEDuri?
Cristian Molder Sisteme de calcul specializate
Porturile I/O: rezolvare
GPx LEDs0 1 2
0 0 00 1 Z1 0 ZZ 0 1Z 1 00 Z 11 Z 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1
1 2 3 4 5 6
0 0 0 0 0 01 0 0 0 0 00 1 0 0 0 00 0 1 0 0 00 0 0 1 0 00 0 0 0 1 00 0 0 0 0 10 0 1 0 1 01 0 0 1 0 01 0 0 0 1 00 1 0 0 0 10 1 1 0 0 00 0 0 1 0 10 0 0 0 0 0
1 2 5
43
6
GP0
GP1
GP2
D = GP x (GP - 1)
Cristian Molder Sisteme de calcul specializate
Timer0: Schema bloc
RA4/T0CKI/C2OUT
T0SE
M
UX
CLKO (= FOSC/4)
Sync2
cicluriReg. TMR0
Prescaler pe 8 biți
MUX 8-la-1
M
UX
M U X
PSA
0 1
0
1
WDTTime-out
PS2:PS0
8
PSA
M
UX
0
1 0
1
Magistrală date
Setare bit TMR0IF pe 1la Overflow
8
PSAT0CS
Prescaler
31.25 kHz
Timerul Watchdog (WDT)
Bit activare WDT
Prescalerpe 16 biți
Cristian Molder Sisteme de calcul specializate
Timer0: Registrii de control
OPTION_REG
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1)
INTEDG T0CS T0SE PSA PS2 PS1 PS0RBPU
R/W (1)
INTCON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1)
PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIFGIE
R/W (1)
PS2 PS1 PS0Timer0 WDT
0 0 01:2 1:1
0 0 11:4 1:2
0 1 01:8 1:4
0 1 11:16 1:8
1 0 01:32 1:16
1 0 11:64 1:32
1 1 01:128 1:64
1 1 11:256 1:128
PSA=0 PSA=1
Cristian Molder Sisteme de calcul specializate
Timer0: exemplu de calcul 1
TTimer0 =4
FOSC
PS x (256 - TMR0)
TTimer0 =4
31250x 16 x (256 - 12) =
void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 TMR0=14; // Valoare presetata TMR0 INTCON.TMR0IF=0; // Resetare flag intrerupere}
void main() { OSCCON.IRCF2=0; // Ceas intern 31.25 kHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=000) OSCCON.IRCF0=0; OPTION_REG.PS2=0; // Prescaler 1:16 OPTION_REG.PS1=1; // (PS2:PS1=011) OPTION_REG.PS0=1; OPTION_REG.T0CS=0; // Utilizare ceas intern Fosc/4 OPTION_REG.PSA=0; // Prescaler legat la Timer0
ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A
INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=1; // Intrerupere Timer0 activa}
= 0.000128 x 16 x 244 = 0.499712 s
TTimer0 =1
FOSC
PS x (256 - TMR0)
Osc intern
Osc extern
Cristian Molder Sisteme de calcul specializate
Timer0: exemplu de calcul 2 (cu variabila contor)
char cnt=15; // Definire variabila contor
void interrupt() { // Rutina de intrerupere cnt--; if (cnt==0) { // Verificare contor PORTA.B0=!PORTA.B0; // Inversare bit Ra0 cnt=15; // Reinitializare contor } TMR0=255; // Preincarcare TMR0 INTCON.TMR0IF=0; // Resetare flag intrerupere}
void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A cu 0
OSCCON.IRCF2=0; // Ceas intern 31.25 kHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=000) OSCCON.IRCF0=0; // (4T=0.000128)
OPTION_REG.PS2=1; // Prescaler 1:256 OPTION_REG.PS1=1; // (PS2:PS1=111) OPTION_REG.PS0=1; OPTION_REG.T0CS=0; // Utilizare ceas intern Fosc/4 OPTION_REG.PSA=0; // Prescaler legat la Timer0
INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=1; // Intrerupere Timer0 activa}
= 0.000128 x 256 x 15 = 0.49152 s
TTimer0 =4
FOSC
PS x (256 - TMR0) x CNT
Cristian Molder Sisteme de calcul specializate
Timer1: Schema bloc
TMR1H TMR1L
T1OSCT1SYNC
TMR1CS
T1CKPS1:T1CKPS0Semnal ceas Q
TMR1ONOn/Off
Prescaler1, 2, 4, 8
Sincronizare
det
1
0
0
1
Semnal de ceas
sincronizat
2
T1OSI
T1OSO/T1CKI
Setare bit TMR1IF pe 1la Overflow
TMR1
CeasinternFOSC/4
ActivareoscilatorT1OSCEN
TMR1 = 49911
Bit 15
TMR1H = 194 TMR1L = 247
Bit 8 Bit 7 Bit 0
1 1 1 1 0 1 1 11 1 0 0 0 0 1 0
Cristian Molder Sisteme de calcul specializate
Timer1: Registrul de control
bit 7 Unimplemented: Read as ‘0’
bit 6 T1RUN: Timer1 System Clock Status bit
1 = System clock is derived from Timer1 oscillator0 = System clock is derived from another source
bit 5-4 T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits
11 =1:8 Prescale value10 =1:4 Prescale value01 =1:2 Prescale value00 =1:1 Prescale value
bit 3 T1OSCEN: Timer1 Oscillator Enable Control bit
1 = Oscillator is enabled0 = Oscillator is shut off (the oscillator inverter is turned off to eliminate power drain)
bit 2 T1SYNC: Timer1 External Clock Input Synchronization Control bit
TMR1CS = 1:1 = Do not synchronize external clock input0 = Synchronize external clock input
TMR1CS = 0:This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.
bit 1 TMR1CS: Timer1 Clock Source Select bit
1 = External clock from pin RB6/AN5(1)/PGC/T1OSO/T1CKI (on the rising edge)0 = Internal clock (FOSC/4)
Note 1: Available on PIC16F88 devices only.
bit 0 TMR1ON: Timer1 On bit
1 = Enables Timer10 = Stops Timer1
T1CON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)
T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON-
U (0)
Cristian Molder Sisteme de calcul specializate
Timer1: exemplu de calcul
TIntTimer1 =
4
FOSC
PS x (65536 - TMR1)
= 0.000004 x 8 x 15625 = 0.5 s
void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 TMR1H=194; // Preincarcare MSB TMR1 TMR1L=247; // Preincarcare LSB TMR1 PIR1.TMR1IF=0; // Resetare flag intrerupere}
void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A
OSCCON.IRCF2=1; // Ceas intern 1 MHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=100) OSCCON.IRCF0=0; TMR1H=194; // Preincarcare MSB TMR1 TMR1L=247; // Preincarcare LSB TMR1
T1CON.TMR1CS=0; // Utilizare ceas intern Fosc/4 T1CON.T1CKPS1=1; // Prescaler 1:8 T1CON.T1CKPS0=1; // (T1CKPS1:T1CKPS0=11) T1CON.TMR1ON=1; // Pornire Timer1 T1CON.B3=1; // Dezactivare sincro externa
INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=0; // Intrerupere Timer0 inactiva
PIE1.TMR1IE=1; // Interuperere Timer1 activa}
TMR1 = 65536 - 15625 = 49911
TMR1H = 11000010 = 194
TMR1 = 1100 0010 1111 0111
TMR1L = 1111 0111 = 247
Osc intern
TextTimer1 =
1
FOSC
PS x (65536 - TMR1)
Osc extern
Cristian Molder Sisteme de calcul specializate
Timer2: Schema bloc
Comparator
IeşireSetare bit
TMR2 reg
TMR2
Reset Prescaler
PR2 reg
2
FOSC/4
Postscaler
1:1 la 1:16
1:1, 1:4, 1:16
EQ
4
TMR2IF pe 1
T2CKPS1:0
TOUTPS3:0
Cristian Molder Sisteme de calcul specializate
Timer2: Registrul de control
T2CON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0-
U (0)
bit 7 Unimplemented: Read as ‘0’
bit 6-3 TOUTPS<3:0>: Timer2 Output Postscale Select bits
0000 = 1:1 Postscale0001 = 1:2 Postscale0010 = 1:3 Postscale���1111 = 1:16 Postscale
bit 2 TMR2ON: Timer2 On bit
1 = Timer2 is on0 = Timer2 is off
bit 1-0 T2CKPS<1:0>: Timer2 Clock Prescale Select bits
00 = Prescaler is 101 = Prescaler is 41x = Prescaler is 16
Cristian Molder Sisteme de calcul specializate
Timer2: exemplu de calcul
TTimer2 =4
FOSC
P Sre x PR2 x PostS
void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 PIR1.TMR2IF=0; // Resetare flag intrerupere}
void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A
OSCCON.IRCF2=0; // Ceas intern 500 kHz OSCCON.IRCF1=1; // (IRCF2:IRCF0=011) OSCCON.IRCF0=1; PR2=243; // Preincarcare PR2
T2CON.TOUTPS3=1; // Postscaler 1:16 T2CON.TOUTPS2=1; // (TOUTPS3:0=1111) T2CON.TOUTPS1=1; T2CON.TOUTPS0=1;
T2CON.T2CKPS1=1; // Prescaler 1:16 T2CON.T2CKPS0=0; // (T2CKPS1:0=10)
T2CON.TMR2ON=1; // Activare Timer2
INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=0; // Intrerupere Timer0 inactiva
PIE1.TMR2IE=1; // Interuperere Timer2 activa}
=4
50000016 x 244 x 16
= 0.499712 s
PR2 = 500000 / 4 / 16 / 16 / 2 = 244
Cristian Molder Sisteme de calcul specializate
Watchdog Timer: Schema bloc
Semnal de ceas INTRCPSA
Prescaler WDT programabil pe 16 biţi
Semnal de ceas TMR0
Prescaler PS
8
PS2:0
PSA
WDT Time-out
WDTPS3:0
WDTEN (din CONFIG)
1
10
0
SWDTEN (din WDTCON)
de 31.25 kHz
la TMR0
4
2
Cristian Molder Sisteme de calcul specializate
Watchdog Timer: Registrul de control
bit 7-5 Unimplemented: Read as ‘0’
bit 4-1 WDTPS<3:0>: Watchdog Timer Period Select bits
Bit PrescaleValue Rate
0000 = 1:320001 = 1:640010 = 1:1280011 = 1:2560100 = 1:5120101 = 1:10240110 = 1:20480111 = 1:40961000 = 1:81921001 = 1:163941010 = 1:327681011 = 1:65536
bit 0 SWDTEN: Software Enable/Disable for Watchdog Timer bit
1 = WDT is turned on0 = WDT is turned off
WDTCON
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
U (0) U (0) R/W (0) R/W (1) R/W (0) R/W (0) R/W (0)
- - WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN-
U (0)
Cristian Molder Sisteme de calcul specializate
Watchdog Timer: exemplu de calcul
void main() { char i; OSCCON.SCS1=1; // Oscilator intern OSCCON.SCS0=0; // (SCS1-SCS0=10) OSCCON.IRCF2=1; // Ceas intern 1 MHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=100) OSCCON.IRCF0=0;
OPTION_REG.PSA=1; // Prescaler PS legat la WDT OPTION_REG.PS2=1; // Prescaler PS 1:128 OPTION_REG.PS1=1; // (PS2:PS1=111) OPTION_REG.PS0=1;
WDTCON.SWDTEN=1; // Activare software WDT WDTCON.WDTPS3=0; // Prescaler WDT 1024 WDTCON.WDTPS2=1; // (WDTPS3-WDTPS0=0101) WDTCON.WDTPS1=0; WDTCON.WDTPS0=1;
ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A while(1) { // Bucla infinita for (i=0; i<3; i++) { // Blink LED 3x PORTA.B0=1; delay_ms(100); PORTA.B0=0; delay_ms(100); } asm {CLRWDT}; // Stergere prescaler WDTPS }}
TWDT =1
FOSCWDTPS x PS
WDTPS= 32 x 2WDTPS3-WDTPS0
TWDT =1
31250128 x 1024
=131072
31250 = 4.194304 s
Cristian Molder Sisteme de calcul specializate