Beruflich Dokumente
Kultur Dokumente
1.12.1 USART
2.12.1.1 USART BAT ONG BO
2.12.1.1.1 TRUYEN D LIEU QUA CHUAN GIAO TIEP USART BAT ONG BO
2.12.1.1.2 NHAN D LIEU QUA CHUAN GIAO TIEP USART BAT ONG BO
2.12.1.1.2 USART ONG BO
2.12.1.2.1 TRUYEN D LIEU QUA CHUAN GIAO TIEP USART ONG BO MASTER
MODE
2.12.1.2.2 NHAN D LIEU QUA CHUAN GIAO TIEP USART ONG BO MASTER
MODE
2.12.1.2.3 TRUYEN D LIEU QUA CHUAN GIAO TIEP USART ONG BO SLAVE
MODE
2.12.1.2.4 NHAN D LIEU QUA CHUAN GIAO TIEP USART ONG BO SLAVE MODE
2.12.2 MSSP
2.12.2.1 SPI
2.12.2.1.1 SPI MASTER MODE
2.12.2.1.2 SPI SLAVE MODE
2.12.2.2 I2C
2.12.2.2.1 I2C SLAVE MODE
2.12.2.2.2 I2C MASTER MODE
2.13 CONG GIAO TIEP SONG SONG PSP (PARALLEL SLAVE PORT)
2.14 TONG QUAN VE MOT SO AC TNH CUA CPU.
2.14.1 CONFIGURATION BIT
2.14.2 CAC AC TNH CUA OSCILLATOR
2.14.3 CAC CHE ORESET
2.14.4 NGAT (INTERRUPT)
2.14.4.1 NGAT INT
2.14.4.2 NGAT DO S THAY OI TRANG THAI CAC PIN TRONG PORTB
2.14.5 WATCHDOG TIMER (WDT)
2.14.6 CHE O SLEEP
2.14.6.1 ANH THC VI IEU KHIEN
CHNG 3 TAP LENH CUA VI IEU KHIEN PIC
3.1 VAI NET S LC VE TAP LENH CUA VI IEU KHIEN PIC
3.2 TAP LENH CUA VI IEU KHIEN PIC
3.3 CAU TRUC CUA MOT CHNG TRNH ASSEMBLY VIET CHO VI IEU KHIEN
PIC
khien. Va e tiep tuc cai tien toc o thc thi lenh, tap lenh cua ho vi ieu khien PIC c
thiet ke sao cho chieu dai ma lenh luon co nh (v du oi vi ho 16Fxxxx chieu dai ma lenh
luon la 14 bit) va cho phep thc thi lenh trong mot chu k cua xung clock ( ngoai tr mot so
trng hp ac biet nh lenh nhay, lenh goi chng trnh con can hai chu k xung ong ho).
ieu nay co ngha tap lenh cua vi ieu khien thuoc cau truc Havard se t lenh hn, ngan hn,
n gian hn e ap ng yeu cau ma hoa lenh bang mot so lng bit nhat nh.
Vi ieu khien c to chc theo kien truc Havard con c goi la vi ieu khien RISC
(Reduced Instruction Set Computer) hay vi ieu khien co tap lenh rut gon. Vi ieu khien
c thiet ke theo kien truc Von-Neuman con c goi la vi ieu khien CISC (Complex
Instruction Set Computer) hay vi ieu khien co tap lenh phc tap v ma lenh cua no khong
phai la mot so co nh ma luon la boi so cua 8 bit (1 byte).
1.5 PIPELINING
ay chnh la c che x l lenh cua cac vi ieu khien PIC. Mot chu k lenh cua vi ieu khien
se bao gom 4 xung clock. V du ta s dung oscillator co tan so 4 MHZ, th xung lenh se co
tan so 1 MHz (chu k lenh se la 1 us). Gia s ta co mot oan chng trnh nh sau:
1. MOVLW
55h
2. MOVWF
PORTB
3. CALL
SUB_1
4. BSF
PORTA,BIT3
5. instruction @ address SUB_1
ay ta ch ban en qui trnh vi ieu khien x l oan chng trnh tren thong qua
tng chu k lenh. Qua trnh tren se c thc thi nh sau:
TCY0: oc lenh 1
TCY1: thc thi lenh 1, oc lenh 2
TCY2: thc thi lenh 2, oc lenh 3
TCY3: thc thi lenh 3, oc lenh 4.
TCY4: v lenh 4 khong phai la lenh se c thc thi theo qui trnh thc thi cua chng
trnh (lenh tiep theo c thc thi phai la lenh au tien tai label SUB_1) nen chu k thc thi
lenh nay ch c dung e oc lenh au tien tai label SUB_1. Nh vay co the xem lenh 3
can 2 chu k xung clock e thc thi.
TCY5: thc thi lenh au tien cua SUB_1 va oc lenh tiep theo cua SUB_1.
Qua trnh nay c thc hien tng t cho cac lenh tiep theo cua chng trnh.
Thong thng, e thc thi mot lenh, ta can mot chu k lenh e goi lenh o, va mot chu k
xung clock na e giai ma va thc thi lenh. Vi c che pipelining c trnh bay tren, moi
lenh xem nh ch c thc thi trong mot chu k lenh. oi vi cac lenh ma qua trnh thc thi
no lam thay oi gia tr thanh ghi PC (Program Counter) can hai chu k lenh e thc thi v phai
thc hien viec goi lenh a ch thanh ghi PC ch ti. Sau khi a xac nh ung v tr lenh
trong thanh ghi PC, moi lenh ch can mot chu k lenh e thc thi xong.
1.6 CAC DONG PIC VA CACH LA CHON VI IEU KHIEN PIC
Cac k hieu cua vi ieu khien PIC:
PIC12xxxx: o dai lenh 12 bit
PIC16xxxx: o dai lenh 14 bit
PIC18xxxx: o dai lenh 16 bit
C: PIC co bo nh EPROM (ch co 16C84 la EEPROM)
F: PIC co bo nh flash
LF: PIC co bo nh flash hoat ong ien ap thap
LV: tng t nh LF, ay la k hieu cu
Ben canh o mot so vi ieu khien co k hieu xxFxxx la EEPROM, neu co them ch A
cuoi la flash (v du PIC16F877 la EEPROM, con PIC16F877A la flash).
Ngoai ra con co them mot dong vi ieu khien PIC mi la dsPIC.
Viet Nam pho bien nhat la cac ho vi ieu khien PIC do hang Microchip san xuat.
Cach la chon mot vi ieu khien PIC phu hp:
Trc het can chu y en so chan cua vi ieu khien can thiet cho ng dung. Co nhieu
vi ieu khien PIC vi so lng chan khac nhau, tham ch co vi ieu khien ch co 8 chan,
ngoai ra con co cac vi ieu khien 28, 40, 44, chan.
Can chon vi ieu khien PIC co bo nh flash e co the nap xoa chng trnh c
nhieu lan hn.
Tiep theo can chu y en cac khoi chc nang c tch hp san trong vi ieu khien,
cac chuan giao tiep ben trong.
Sau cung can chu y en bo nh chng trnh ma vi ieu khien cho phep.
Ngoai ra moi thong tin ve cach la chon vi ieu khien PIC co the c tm thay trong
cuon sach Select PIC guide do nha san xuat Microchip cung cap.
1.7 NGON NG LAP TRNH CHO PIC
Ngon ng lap trnh cho PIC rat a dang. Ngon ng lap trnh cap thap co MPLAB (c cung
cap mien ph bi nha san xuat Microchip), cac ngon ng lap trnh cap cao hn bao gom C,
Basic, Pascal, Ngoai ra con co mot so ngon ng lap trnh c phat trien danh rieng cho
PIC nh PICBasic, MikroBasic,
1.8 MACH NAP PIC
ay cung la mot dong san pham rat a dang danh cho vi ieu khien PIC. Co the s dung cac
mach nap c cung cap bi nha san xuat la hang Microchip nh: PICSTART plus, MPLAB
ICD 2, MPLAB PM 3, PRO MATE II. Co the dung cac san pham nay e nap cho vi ieu
khien khac thong qua chng trnh MPLAB. Dong san pham chnh thong nay co u the la
nap c cho tat ca cac vi ieu khien PIC, tuy nhien gia thanh rat cao va thng gap rat
nhieu kho khan trong qua trnh mua san pham.
Ngoai ra do tnh nang cho phep nhieu che o nap khac nhau, con co rat nhieu mach nap c
thiet ke danh cho vi ieu khien PIC. Co the s lc mot so mach nap cho PIC nh sau:
JDM programmer: mach nap nay dung chng trnh nap Icprog cho phep nap cac vi
ieu khien PIC co ho tr tnh nang nap chng trnh ien ap thap ICSP (In Circuit Serial
Programming). Hau het cac mach nap eu ho tr tnh nang nap chng trnh nay.
WARP-13A va MCP-USB: hai mach nap nay giong vi mach nap PICSTART PLUS
do nha san xuat Microchip cung cap, tng thch vi trnh bien dch MPLAB, ngha la ta co
the trc tiep dung chng trnh MPLAB e nap cho vi ieu khien PIC ma khong can s dung
mot chng trnh nap khac, chang han nh ICprog.
P16PRO40: mach nap nay do Nigel thiet ke va cung kha noi tieng. Ong con thiet ke
ca chng trnh nap, tuy nhien ta cung co the s dung chng trnh nap Icprog.
Mach nap Universal cua Williem: ay khong phai la mach nap chuyen dung danh cho
PIC nh P16PRO40.
Cac mach nap ke tren co u iem rat ln la n gian, re tien, hoan toan co the t lap rap
mot cach de dang, va moi thong tin ve s o mach nap, cach thiet ke, thi cong, kiem tra va
chng trnh nap eu de dang tm c va download mien ph thong qua mang Internet. Tuy
nhien cac mach nap tren co nhc iem la han che ve so vi ieu khien c ho tr, ben canh
o moi mach nap can c s dung vi mot chng trnh nap thch hp.
1.9 BOOTLOADER VA ICP (In Circuit Programming)
2.4 TO CHC BO NH
Cau truc bo nh cua vi ieu khien PIC16F877A bao gom bo nh chng trnh (Program
memory) va bo nh d lieu (Data Memory).
2.4.1 BO NH CHNG TRNH
Bo nh chng trnh cua vi ieu khien
PIC16F877A la bo nh flash, dung lng bo
nh 8K word (1 word = 14 bit) va c phan
thanh nhieu trang (t page0 en page 3) .
Nh vay bo nh chng trnh co kha nang
cha c 8*1024 = 8192 lenh (v mot lenh
sau khi ma hoa se co dung lng 1 word (14
bit).
e ma hoa c a ch cua 8K word
bo nh chng trnh, bo em chng trnh co
dung lng 13 bit (PC<12:0>).
Khi vi ieu khien c reset, bo em
chng trnh se ch en a ch 0000h (Reset
vector). Khi co ngat xay ra, bo em chng
trnh se ch en a ch 0004h (Interrupt
vector).
Bo nh chng trnh khong bao gom
bo nh stack va khong c a ch hoa bi
bo em chng trnh. Bo nh stack se c
e cap cu the trong phan sau.
2.4.2 BO NH D LIEU
Thanh ghi OPTION_REG (81h, 181h): thanh ghi nay cho phep oc va ghi, cho phep
ieu khien chc nang pull-up cua cac chan trong PORTB, xac lap cac tham so ve xung tac
ong, canh tac ong cua ngat ngoai vi va bo em Timer0.
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho phep oc va ghi, cha cac
bit ieu khien va cac bit c hieu khi timer0 b tran, ngat ngoai vi RB0/INT va ngat interrputon-change tai cac chan cua PORTB.
Thanh ghi PIE1 (8Ch): cha cac bit ieu khien chi tiet cac ngat cua cac khoi chc
nang ngoai vi.
Thanh ghi PIR1 (0Ch) cha c ngat cua cac khoi chc nang ngoai vi, cac ngat nay
c cho phep bi cac bit ieu khien cha trong thanh ghi PIE1.
Thanh ghi PIE2 (8Dh): cha cac bit ieu khien cac ngat cua cac khoi chc nang
CCP2, SSP bus, ngat cua bo so sanh va ngat ghi vao bo nh EEPROM.
Thanh ghi PIR2 (0Dh): cha cac c ngat cua cac khoi chc nang ngoai vi, cac ngat
nay c cho phep bi cac bit ieu khien cha trong thanh ghi PIE2.
Thanh ghi PCON (8Eh): cha cac c hieu cho biet trang thai cac che o reset cua vi
ieu khien.
ADCON1 (a ch 9Fh)
: thanh ghi ieu khien bo ADC.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.5.2 PORTB
PORTB (RPB) gom 8 pin I/O. Thanh ghi ieu khien xuat nhap tng ng la TRISB.
Ben canh o mot so chan cua PORTB con c s dung trong qua trnh nap chng trnh cho
vi ieu khien vi cac che o nap khac nhau. PORTB con lien quan en ngat ngoai vi va bo
Timer0. PORTB con c tch hp chc nang ien tr keo len c ieu khien bi chng
trnh.
Cau truc ben trong va chc nang cu the cua tng chan trong PORTB se c trnh bay
cu the trong Phu luc 1.
Cac thanh ghi SFR lien quan en PORTB bao gom:
PORTB (a ch 06h,106h)
: cha gia tr cac pin trong PORTB
TRISB (a ch 86h,186h)
: ieu khien xuat nhap
OPTION_REG (a ch 81h,181h) : ieu khien ngat ngoai vi va bo Timer0.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.5.3 PORTC
PORTC (RPC) gom 8 pin I/O. Thanh ghi ieu khien xuat nhap tng ng la TRISC.
Ben canh o PORTC con cha cac chan chc nang cua bo so sanh, bo Timer1, bo PWM va
cac chuan giao tiep noi tiep I2C, SPI, SSP, USART.
Cau truc ben trong va chc nang cu the cua tng chan trong PORTC se c trnh bay
cu the trong Phu luc 1.
Cac thanh ghi ieu khien lien quan en PORTC:
PORTC (a ch 07h)
: cha gia tr cac pin trong PORTC
TRISC (a ch 87h)
: ieu khien xuat nhap.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.5.4 PORTD
PORTD (RPD) gom 8 chan I/O, thanh ghi ieu khien xuat nhap tng ng la TRISD.
PORTD con la cong xuat d lieu cua chuan giao tiep PSP (Parallel Slave Port).
Cau truc ben trong va chc nang cu the cua tng chan trong PORTD se c trnh bay
cu the trong Phu luc 1.
Cac thanh ghi lien quan en PORTD bao gom:
Thanh ghi PORTD : cha gia tr cac pin trong PORTD.
Thanh ghi TRISD
: ieu khien xuat nhap.
Thanh ghi TRISE
: ieu khien xuat nhap PORTE va chuan giao tiep PSP.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.5.5 PORTE
PORTE (RPE) gom 3 chan I/O. Thanh ghi ieu khien xuat nhap tng ng la TRISE.
Cac chan cua PORTE co ngo vao analog. Ben canh o PORTE con la cac chan ieu khien
cua chuan giao tiep PSP.
Cau truc ben trong va chc nang cu the cua tng chan trong PORTE se c trnh bay
cu the trong Phu luc 1.
Cac thanh ghi lien quan en PORTE bao gom:
PORTE : cha gia tr cac chan trong PORTE.
TRISE
: ieu khien xuat nhap va xac lap cac thong so cho chuan giao tiep PSP.
ADCON1 : thanh ghi ieu khien khoi ADC.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.6 TIMER 0
ay la mot trong ba bo em hoac bo nh thi cua vi ieu khien PIC16F877A. Timer0
la bo em 8 bit c ket noi vi bo chia tan so (prescaler) 8 bit. Cau truc cua Timer0 cho
phep ta la chon xung clock tac ong va canh tch cc cua xung clock. Ngat Timer0 se xuat
hien khi Timer0 b tran. Bit TMR0IE (INTCON<5>) la bit ieu khien cua Timer0.
TMR0IE=1 cho phep ngat Timer0 tac ong, TMR0IF= 0 khong cho phep ngat Timer0 tac
ong. S o khoi cua Timer0 nh sau:
Muon Timer0 hoat ong che o Timer ta clear bit TOSC (OPTION_REG<5>), khi
o gia tr thanh ghi TMR0 se tang theo tng chu k xung ong ho (tan so vao Timer0 bang
tan so oscillator). Khi gia tr thanh ghi TMR0 t FFh tr ve 00h, ngat Timer0 se xuat hien.
Thanh ghi TMR0 cho phep ghi va xoa c giup ta an nh thi iem ngat Timer0 xuat hien
mot cach linh ong.
Muon Timer0 hoat ong che o counter ta set bit TOSC (OPTION_REG<5>). Khi
o xung tac ong len bo em c lay t chan RA4/TOCK1. Bit TOSE (OPTION_REG<4>)
cho phep la chon canh tac ong vao bot em. Canh tac ong se la canh len neu TOSE=0 va
canh tac ong se la canh xuong neu TOSE=1.
Khi thanh ghi TMR0 b tran, bit TMR0IF (INTCON<2>) se c set. ay chnh la c
ngat cua Timer0. C ngat nay phai c xoa bang chng trnh trc khi bo em bat au
thc hien lai qua trnh em. Ngat Timer0 khong the anh thc vi ieu khien t che o
sleep.
Bo chia tan so (prescaler) c chia se gia Timer0 va WDT (Watchdog Timer). ieu
o co ngha la neu prescaler c s dung cho Timer0 th WDT se khong co c ho tr cua
prescaler va ngc lai. Prescaler c ieu khien bi thanh ghi OPTION_REG. Bit PSA
(OPTION_REG<3>) xac nh oi tng tac ong cua prescaler. Cac bit PS2:PS0
(OPTION_REG<2:0>) xac nh t so chia tan so cua prescaler. Xem lai thanh ghi
OPTION_REG e xac nh lai mot cach chi tiet ve cac bit ieu khien tren.
Cac lenh tac ong len gia tr thanh ghi TMR0 se xoa che o hoat ong cua prescaler.
Khi oi tng tac ong la Timer0, tac ong len gia tr thanh ghi TMR0 se xoa prescaler
nhng khong lam thay oi oi tng tac ong cua prescaler. Khi oi tng tac ong la WDT,
lenh CLRWDT se xoa prescaler, ong thi prescaler se ngng tac vu ho tr cho WDT.
Cac thanh ghi ieu khien lien quan en Timer0 bao gom:
TMR0 (a ch 01h, 101h) : cha gia tr em cua Timer0.
INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phep ngat hoat ong (GIE va PEIE).
OPTION_REG (a ch 81h, 181h): ieu khien prescaler.
Chi tiet ve cac thanh ghi se c trnh bay cu the trong phu luc 2.
2.7 TIMER1
Timer1 la bo nh thi 16 bit, gia tr cua Timer1 se c lu trong hai thanh ghi
(TMR1H:TMR1L). C ngat cua Timer1 la bit TMR1IF (PIR1<0>). Bit ieu khien cua
Timer1 se la TMR1IE (PIE<0>).
Tng t nh Timer0, Timer1 cung co hai che o hoat ong: che o nh thi (timer)
vi xung kch la xung clock cua oscillator (tan so cua timer bang tan so cua oscillator) va
che o em (counter) vi xung kch la xung phan anh cac s kien can em lay t ben ngoai
thong qua chan RC0/T1OSO/T1CKI (canh tac ong la canh len). Viec la chon xung tac
ong (tng ng vi viec la chon che o hoat ong la timer hay counter) c ieu khien
bi bit TMR1CS (T1CON<1>). Sau ay la s o khoi cua Timer1:
2.8 TIMER2
Timer2 la bo nh thi 8 bit va c ho tr bi hai bo chia tan so prescaler va
postscaler. Thanh ghi cha gia tr em cua Timer2 la TMR2. Bit cho phep ngat Timer2 tac
ong la TMR2ON (T2CON<2>). C ngat cua Timer2 la bit TMR2IF (PIR1<1>). Xung ngo
vao (tan so bang tan so oscillator) c a qua bo chia tan so prescaler 4 bit (vi cac t
so chia tan so la 1:1, 1:4 hoac 1:16 va c ieu khien bi cac bit T2CKPS1:T2CKPS0
(T2CON<1:0>)).
khong i qua ien tr 8R), khi o 1 mc ien ap co gia tr VDD/24. Ngc lai khi CVRR
mc logic 0, dong ien se qua ien tr 8R va1 mc ien ap co gia tr VDD/32. Cac mc ien
ap nay c a qua bo MUX cho phep ta chon c ien ap a ra pin
RA2/AN2/VREF-/CVREF e a vao ngo VIN+ cua bo so sanh bang cach a cac gia tr thch
hp vao cac bit CVR3:CVR0.
Bo tao ien ap so sanh nay co the xem nh mot bo chuyen oi D/A n gian. Gia tr
ien ap can so sanh ngo vao Analog se c so sanh vi cac mc ien ap do bo tao ien ap
tao ra cho ti khi hai ien ap nay at c gia tr xap x bang nhau. Khi o ket qua chuyen
oi xem nh c cha trong cac bit CVR3:CVR0.
Cac thanh ghi lien quan en bo tao ien ap so sanh nay bao gom:
Thanh ghi CVRCON (a ch 9Dh): thanh ghi trc tiep ieu khien bo so sanh
ien ap.
Thanh ghi CMCON (a ch 9Ch): thanh ghi ieu khien bo Comparator.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.11 CCP
CCP (Capture/Compare/PWM) bao gom cac thao tac tren cac xung em cung cap bi cac bo
em Timer1 va Timer2. PIC16F877A c tch hp san hai khoi CCP : CCP1 va CCP2.Moi
CCP co mot thanh ghi 16 bit (CCPR1H:CCPR1L va CCPR2H:CCPR2L), pin ieu khien dung
cho khoi CCPx la RC2/CCP1 va RC1/T1OSI/CCP2. Cac chc nang cua CCP bao gom:
Capture.
So sanh (Compare).
ieu che o rong xung PWM (Pulse Width Modulation).
Ca CCP1 va CCP2 ve nguyen tac hoat ong eu giong nhau va chc nang cua tng khoi la
kha oc lap. Tuy nhien trong mot so trng hp ngoai le CCP1 va CCP2 co kha nang phoi
hp vi nhau e e tao ra cac hien tng ac biet (Special event trigger) hoac cac tac ong
len Timer1 va Timer2. Cac trng hp nay c liet ke trong bang sau:
CCPx
Capture
Capture
Compare
PWM
CCPy
Capture
Compare
Compare
PWM
PWM
PWM
Capture
Compare
Tac ong
Dung chung nguon xung clock t TMR1
Tao ra hien tng ac biet lam xoa TMR1
Tao ra hien tng ac biet lam xoa TMR1
Dung chung tan so xung clock vacung chu tac ong cua ngat
TMR2.
Hoat ong oc lap
Hoat ong oc lap
Sau khi gia tr cua thanh ghi TMR1 c a vao thanh ghi CCPRx, c ngat CCPIF c set
va phai c xoa bang chng trnh. Neu hien tng tiep theo xay ra ma gia tr trong thanh
ghi CCPRx cha c x l, gia tr tiep theo nhan c se t ong c ghi e len gia tr cu.
Mot so iem can chu y khi s dung CCP nh sau:
Cac pin dung cho khoi CCP phai c an nh la input (set cac bit tng ng trong
thanh ghi TRISC). Khi an nh cac pin dung cho khoi CCP la output, viec a gia tr vao
PORTC cung co the gay ra cac hien tng tac ong len khoi CCP do trang thai cua pin
thay oi.
Timer1 phai c hoat ong che o Timer hoac che o em ong bo.
Tranh s dung ngat CCP bang cach clear bit CCPxIE (thanh ghi PIE1), c ngat CCPIF
nen c xoa bang phan mem moi khi c set e tiep tuc nhan nh c trang thai hoat
ong cua CCP.
CCP con c tch hp bo chia tan so prescaler c ieu khien bi cac bit
CCPxM3:CCPxM0. Viec thay oi oi tng tac ong cua prescaler co the tao ra hoat ong
ngat. Prescaler c xoa khi CCP khong hoat ong hoac khi reset.
Xem cac thanh ghi ieu khien khoi CCP (phu luc 2 e biet them chi tiet).
Khi hoat ong che o Compare, gia tr trong thanh ghi CCPRx se thng xuyen c so
sanh vi gia tr trong thanh ghi TMR1. Khi hai thanh ghi cha gia tr bang nhau, cac pin cua
CCP c thay oi trang thai (c a len mc cao, a xuong mc thap hoac gi nguyen
trang thai), ong thi c ngat CCPIF cung se c set. S thay oi trang thai cua pin co the
c ieu khien bi cac bit CCPxM3:CCPxM0 (CCPxCON <3:0>).
Trong o gia tr 1 chu k (period) cua xung ieu che c tnh bang cong thc:
PWM period = [(PR2)+1]*4*TOSC*(gia tr bo chia tan so cua TMR2).
Bo chia tan so prescaler cua Timer2 ch co the nhan cac gia tr 1,4 hoac 16 (xem lai Timer2
e biet them chi tiet). Khi gia tr thanh ghi PR2 bang vi gia tr thanh ghi TMR2 th qua trnh
sau xay ra:
Thanh ghi TMR2 t ong c xoa.
Pin cua khoi CCP c set.
Gia tr thanh ghi CCPR1L (cha gia tr an nh o rong xung ieu che duty cycle)
c a vao thanh ghi CCPRxH.
o rong cua xung ieu che (duty cycle) c tnh theo cong thc:
PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(gia tr bo chia tan so TMR2)
Nh vay 2 bit CCPxCON<5:4> se cha 2 bit LSB. Thanh ghi CCPRxL cha byte cao cua gia
tr quyet nh o rong xung. Thanh ghi CCPRxH ong vai tro la buffer cho khoi PWM. Khi
gia tr trong thanh ghi CCPRxH bang vi gia tr trong thanh ghi TMR2 va hai bit
CCPxCON<5:4> bang vi gia tr 2 bit cua bo chia tan so prescaler, pin cua khoi CCP lai
c a ve mc thap, nh vay ta co c hnh anh cua xung ieu che tai ngo ra cua khoi
PWM nh hnh 2.14.
Mot so iem can chu y khi s dung khoi PWM:
Timer2 co hai bo chia tan so prescaler va postscaler. Tuy nhien bo postscaler khong
c s dung trong qua trnh ieu che o rong xung cua khoi PWM.
Neu thi gian duty cycle dai hn thi gian chu k xung period th xung ngo ra tiep tuc
c gi mc cao sau khi gia tr PR2 bang vi gia tr TMR2.
2.12 GIAO TIEP NOI TIEP
1.12.1 USART
USART (Universal Synchronous Asynchronous Receiver Transmitter) la mot trong
hai chuan giao tiep noi tiep.USART con c goi la giao dien giao tiep noi tiep noi tiep SCI
(Serial Communication Interface). Co the s dung giao dien nay cho cac giao tiep vi cac
thiet b ngoai vi, vi cac vi ieu khien khac hay vi may tnh. Cac dang cua giao dien
USART ngoai vi bao gom:
Bat ong bo (Asynchronous).
ong bo_ Master mode.
ong bo_ Slave mode.
Hai pin dung cho giao dien nay la RC6/TX/CK va RC7/RX/DT, trong o RC6/TX/CK
dung e truyen xung clock (baud rate) va RC7/RX/DT dung e truyen data. Trong trng
hp nay ta phai set bit TRISC<7:6> va SPEN (RCSTA<7>) c0e cho phep giao dien USART.
PIC16F877A c tch hp san bo tao toc o baud BRG (Baud Rate Genetator) 8 bit
dung cho giao dien USART. BRG thc chat la mot bo em co the c s dung cho ca hai
dang ong bo va bat ong bo va c ieu khien bi thanh ghi PSBRG. dang bat ong bo,
BRG con c ieu khien bi bit BRGH ( TXSTA<2>). dang ong bo tac ong cua bit
BRGH c bo qua. Toc o baud do BRG tao ra c tnh theo cong thc sau:
Trong khi c hieu TXIF ong vai tro ch th trang thai thanh ghi TXREG th c hieu TRMT
(TXSTA<1>) co nhiem vu the hien trang thai thanh ghi TSR. Khi thanh ghi TSR rong, bit
TRMT se c set. Bit nay ch oc va khong co ngat nao c gan vi trang thai cua no.
Mot iem can chu y na la thanh ghi TSR khong co trong bo nh d lieu va ch c ieu
khien bi CPU.
Khoi truyen d lieu c cho phep hoat ong khi bit TXEN (TXSTA<5>) c set. Qua trnh
truyen d lieu ch thc s bat au khi a co d lieu trong thanh ghi TXREG va xung truyen
baud c tao ra. Khi khoi truyen d lieu c khi ong lan au tien, thanh ghi TSR rong.
Tai thi iem o, d lieu a vao thanh ghi TXREG ngay lap tc c load vao thanh ghi
TSR va thanh ghi TXREG b rong. Luc nay ta co the hnh thanh mot chuoi d lieu lien tuc
cho qua trnh truyen d lieu. Trong qua trnh truyen d lieu neu bit TXEN b reset ve 0, qua
trnh truyen ket thuc, khoi truyen d lieu c reset va pin RC6/TX/CK chuyen en trang
thai high-impedance.
Trong trng hp d lieu can truyen la 9 bit, bit TX9 (TXSTA<6>) c set va bit d lieu th
9 se c lu trong bit TX9D (TXSTA<0>). Nen ghi bit d lieu th 9 vao trc, v khi ghi 8
bit d lieu vao thanh ghi TXREG trc co the xay ra trng hp noi dung thanh ghi TXREG
se c load vao thanh ghi TSG trc, nh vay d lieu truyen i se b sai khac so vi yeu
cau.
Tom lai, e truyen d lieu theo giao dien USART bat ong bo, ta can thc hien tuan t cac
bc sau:
1. Tao xung truyen baud bang cach a cac gia tr can thiet vao thanh ghi RSBRG va
bit ieu khien mc toc o baud BRGH.
2. Cho phep cong giao dien noi tiep noi tiep bat ong bo bang cach clear bit SYNC
va set bit PSEN.
3. Set bit TXIE neu can s dung ngat truyen.
4. Set bit TX9 neu nh dang d lieu can truyen la 9 bit.
5. Set bit TXEN e cho phep truyen d lieu (luc nay bit TXIF cung se c set).
6. Neu nh dang d lieu la 9 bit, a bit d lieu th 9 vao bit TX9D.
7. a 8 bit d lieu can truyen vao thanh ghi TXREG.
8. Neu s dung ngat truyen, can kiem tra lai cac bit GIE va PEIE (thanh ghi
INTCON).
Cac thanh ghi lien quan en qua trnh truyen d lieu bang giao dien USART bat ong bo:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phep tat ca cac ngat.
Thanh ghi PIR1 (a ch 0Ch): cha c hieu TXIF.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat truyen TXIE.
Thanh ghi RCSTA (a ch 18h): cha bit cho phep cong truyen d lieu (hai pin
RC6/TX/CK va RC7/RX/DT).
Thanh ghi TXREG (a ch 19h): thanh ghi cha d lieu can truyen.
Thanh ghi TXSTA (a ch 98h): xac lap cac thong so cho giao dien.
Thanh ghi SPBRG (a ch 99h): quyet nh toc o baud.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.12.1.1.2 NHAN D LIEU QUA CHUAN GIAO TIEP USART BAT ONG BO
D lieu c a vao t chan RC7/RX/DT se kch hoat khoi phuc hoi d lieu. Khoi phuc hoi
d lieu thc chat la mot bo dch d lieu ctoc o cao va co tan so hoat ong gap 16 lan hoac
64 lan tan so baud. Trong khi o toc o dch cua thanh thanh ghi nhan d lieu se bang vi tan
so baud hoac tan so cua oscillator.
co bo em kep (double-buffered register) va hoat ong theo c che FIFO (First In First Out)
cho phep nhan 2 byte va byte th 3 tiep tuc c a vao thanh ghi RSR. Neu sau khi nhan
c bit Stop cua byte d lieu th 3 ma thanh ghi RCREG van con ay, c hieu bao tran d
lieu (Overrun Error bit) OERR(RCSTA<1>) se c set, d lieu trong thanh ghi RSR se b
mat i va qua trnh a d lieu t thanh ghi RSR vao thanh ghi RCREG se b gian oan.
Trong trng hp nay can lay het d lieu thanh ghi RSREG vao trc khi tiep tuc nhan
byte d lieu tiep theo. Bit OERR phai c xoa bang phan mem va thc hien bang cach
clear bit RCEN roi set lai. Bit FERR (RCSTA<2>) se c set khi phat hien bit Stop dua d
lieu c nhan vao. Bit d lieu th 9 se c a vao bit RX9D (RCSTA<0>). Khi oc d
lieu t thanh ghi RCREG, hai bit FERR va RX9D se nhan cac gia tr mi. Do o can oc d
lieu t thanh ghi RCSTA trc khi oc d lieu t thanh ghi RCREG e tranh b mat d lieu.
Tom lai, khi s dung giao dien nhan d lieu USART bat ong bo can tien hanh tuan t cac
bc sau:
1. Thiet lap toc o baud (a gia tr thch hp vao thanh ghi SPBRG va bit BRGH.
2. Cho phep cong giao tiep USART bat ong bo (clear bit SYNC va set bit SPEN).
3. Neu can s dung ngat nhan d lieu, set bit RCIE.
4. Neu d lieu truyen nhan co nh dang la 9 bit, set bit RX9.
5. Cho phep nhan d lieu bang cach set bit CREN.
6. Sau khi d lieu c nhan, bit RCIF se c set va ngat c kch hoat (neu bit
RCIE c set).
7. oc gia tr thanh ghi RCSTA e oc bit d lieu th 9 va kiem tra xem qua trnh
nhan d lieu co b loi khong.
8. oc 8 bit d lieu t thanh ghi RCREG.
9. Neu qua trnh truyen nhan co loi xay ra, xoa loi bang cach xoa bit CREN.
10. Neu s dung ngat nhan can set bit GIE va PEIE (thanh ghi INTCON).
Cac thanh ghi lien quan en qua trnh nhan d lieu bang giao dien USART bat ong bo:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cha cac bit cho phep toan bo
cac ngat (bit GIER va PEIE).
Thanh ghi PIR1 (a ch 0Ch): cha c hieu RCIE.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat RCIE.
Thanh ghi RCSTA (a ch 18h): xac nh cac trang thai trong qua trnh nhan d lieu.
Thanh ghi RCREG (a ch 1Ah): cha d lieu nhan c.
Thanh ghi TXSTA (a ch 98h): cha cac bit ieu khien SYNC va BRGH.
Thanh ghi SPBRG (a ch 99h): ieu khien toc o baud.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.12.1.2.1 TRUYEN D LIEU QUA CHUAN GIAO TIEP USART ONG BO MASTER
MODE
Tng t nh giao dien USART bat ong bo, thanh phan quan trong nhat cua hoi truyen d
lieu la thanh ghi dch TSR (Transmit Shift Register). Thanh ghi nay ch c ieu khien bi
CPU. D lieu a vao thanh ghi TSR c cha trong thanh ghi TXREG. C hieu cua khoi
truyen d lieu la bit TXIF (ch th trang thai thanh ghi TXREG), c hieu nay c gan vi
mot ngat va bit ieu khien ngat nay la TXIE. C hieu ch th trang thai thanh ghi TSR la bit
TRMT. Bit TXEN cho phep hay khong cho phep truyen d lieu.
Cac bc can tien hanh khi truyen d lieu qua giao dien USART ong bo Master mode:
1. Tao xung truyen baud bang cach a cac gia tr can thiet vao thanh ghi RSBRG va
bit ieu khien mc toc o baud BRGH.
2. Cho phep cong giao dien noi tiep noi tiep ong bo bang cach set bit SYNC, PSEN
va CSRC.
3. Set bit TXIE neu can s dung ngat truyen.
4. Set bit TX9 neu nh dang d lieu can truyen la 9 bit.
5. Set bit TXEN e cho phep truyen d lieu.
6. Neu nh dang d lieu la 9 bit, a bit d lieu th 9 vao bit TX9D.
7. a 8 bit d lieu can truyen vao thanh ghi TXREG.
8. Neu s dung ngat truyen, can kiem tra lai cac bit GIE va PEIE (thanh ghi
INTCON).
Cac thanh ghi lien quan en qua trnh truyen d lieu bang giao dien USART ong bo Master
mode:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phep tat ca cac ngat.
Thanh ghi PIR1 (a ch 0Ch): cha c hieu TXIF.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat truyen TXIE.
Thanh ghi RCSTA (a ch 18h): cha bit cho phep cong truyen d lieu (hai pin
RC6/TX/CK va RC7/RX/DT).
Thanh ghi TXREG (a ch 19h): thanh ghi cha d lieu can truyen.
Thanh ghi TXSTA (a ch 98h): xac lap cac thong so cho giao dien.
Thanh ghi SPBRG (a ch 99h): quyet nh toc o baud.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.12.1.2.2 NHAN D LIEU QUA CHUAN GIAO TIEP USART ONG BO MASTER
MODE
Cau truc khoi truyen d lieu la khong oi so vi giao dien bat ong bo, ke ca cac c hieu,
ngat nhan va cac thao tac tren cac thanh phan o. iem khac biet duy nhat la giao dien nay
cho phep hai che o nhan s lieu, o la ch nhan 1 word d lieu (set bit SCEN) hay nhan mot
chuoi d lieu (set bit CREN) cho ti khi ta clear bit CREN. Neu ca hai bit eu c set, bit
ieu khien CREN se c u tien.
Cac bc can tien hanh khi nhan d lieu bang giao dien USART ong bo Master mode:
1.
2.
3.
4.
5.
6.
Thiet lap toc o baud (a gia tr thch hp vao thanh ghi SPBRG va bit BRGH).
Cho phep cong giao tiep USART bat ong bo (set bit SYNC, SPEN va CSRC).
Clear bit CREN va SREN.
Neu can s dung ngat nhan d lieu, set bit RCIE.
Neu d lieu truyen nhan co nh dang la 9 bit, set bit RX9.
Neu ch nhan 1 word d lieu, set bit SREN, neu nhan 1 chuoi word d lieu, set bit
CREN.
7. Sau khi d lieu c nhan, bit RCIF se c set va ngat c kch hoat (neu bit
RCIE c set).
8. oc gia tr thanh ghi RCSTA e oc bit d lieu th 9 va kiem tra xem qua trnh
nhan d lieu co b loi khong.
9. oc 8 bit d lieu t thanh ghi RCREG.
10. Neu qua trnh truyen nhan co loi xay ra, xoa loi bang cach xoa bit CREN.
11. Neu s dung ngat nhan can set bit GIE va PEIE (thanh ghi INTCON).
Cac thanh ghi lien quan en qua trnh nhan d lieu bang giao dien USART ong bo Master
mode:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cha cac bit cho phep toan bo
cac ngat (bit GIER va PEIE).
Thanh ghi PIR1 (a ch 0Ch): cha c hieu RCIE.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat RCIE.
Thanh ghi RCSTA (a ch 18h): xac nh cac trang thai trong qua trnh nhan d lieu.
Thanh ghi RCREG (a ch 1Ah): cha d lieu nhan c.
Thanh ghi TXSTA (a ch 98h): cha cac bit ieu khien SYNC va BRGH.
Thanh ghi SPBRG (a ch 99h): ieu khien toc o baud.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.12.1.2.3 TRUYEN D LIEU QUA CHUAN GIAO TIEP USART ONG BO SLAVE
MODE
Qua trnh nay khong co s khac biet so vi Master mode khi vi ieu khien hoat ong che
o bnh thng. Tuy nhien khi vi ieu khien ang trang thai sleep, s khac biet c the
hien ro rang. Neu co hai word d lieu c a vao thanh ghi TXREG trc khi lenh sleep
c thc thi th qua trnh sau se xay ra:
1.
2.
3.
4.
Word d lieu au tien se ngay lap tc c a vao thanh ghi TSR e truyen i.
Word d lieu th hai van nam trong thanh ghi TXREG.
C hieu TXIF se khong c set.
Sau khi word d lieu au tien a dch ra khoi thanh ghi TSR, thanh ghi TXREG
tiep tuc truyen word th hai vao thanh ghi TSR va c hieu TXIF c set.
5. Neu ngat truyen c cho phep hoat ong, ngat nay se anh thc vi ieu khien va
neu toan bo cac ngat c cho phep hoat ong, bo em chng trnh se ch ti a
ch cha chng trnh ngat (0004h).
Cac bc can tien hanh khi truyen d lieu bang giao dien USART ong bo Slave mode:
1.
2.
3.
4.
5.
6.
7.
8.
Cac thanh ghi lien quan en qua trnh truyen d lieu bang giao dien USART ong bo Slave
mode:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phep tat ca cac ngat.
Thanh ghi PIR1 (a ch 0Ch): cha c hieu TXIF.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat truyen TXIE.
Thanh ghi RCSTA (a ch 18h): cha bit cho phep cong truyen d lieu (hai pin
RC6/TX/CK va RC7/RX/DT).
Thanh ghi TXREG (a ch 19h): thanh ghi cha d lieu can truyen.
Thanh ghi TXSTA (a ch 98h): xac lap cac thong so cho giao dien.
Thanh ghi SPBRG (a ch 99h): quyet nh toc o baud.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
2.12.1.2.4 NHAN D LIEU QUA CHUAN GIAO TIEP USART ONG BO SLAVE
MODE
S khac biet cua Slave mode so vi Master mode ch the hien ro rang khi vi ieu khien hoat
ong che o sleep. Ngoai ra che o Slave mode khong quan tam ti bit SREN.
Khi bit CREN (cho phep nhan chuoi d lieu) c set trc khi lenh sleep c thc thi, 1
word d lieu van c tiep tuc nhan, sau khi nhan xong bit thanh ghi RSR se chuyen d lieu
vao thanh ghi RCREG va bit RCIF c set. Neu bit RCIE (cho phep ngat nhan) a c set
trc o, ngat se c thc thi va vi ieu khien c anh thc, bo em chng trnh se ch
en a ch 0004h va chng trnh ngat se c thc thi.
Cac bc can tien hanh khi nhan d lieu bang giao dien USART ong bo Slave mode:
1. Cho phep cong giao tiep USART bat ong bo (set bit SYNC, SPEN clear bit
CSRC).
2. Neu can s dung ngat nhan d lieu, set bit RCIE.
3. Neu d lieu truyen nhan co nh dang la 9 bit, set bit RX9.
4. Set bit CREN e cho phep qua trnh nhan d lieu bat au.
5. Sau khi d lieu c nhan, bit RCIF se c set va ngat c kch hoat (neu bit
RCIE c set).
6. oc gia tr thanh ghi RCSTA e oc bit d lieu th 9 va kiem tra xem qua trnh
nhan d lieu co b loi khong.
7. oc 8 bit d lieu t thanh ghi RCREG.
8. Neu qua trnh truyen nhan co loi xay ra, xoa loi bang cach xoa bit CREN.
9. Neu s dung ngat nhan can set bit GIE va PEIE (thanh ghi INTCON).
Cac thanh ghi lien quan en qua trnh nhan d lieu bang giao dien USART ong bo Slave
mode:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cha cac bit cho phep toan bo
cac ngat (bit GIER va PEIE).
Thanh ghi ieu khien SSPCON, thanh ghi nay cho phep oc va ghi.
Thanh ghi trang thai SSPSTAT, thanh ghi nay ch cho phep oc va ghi 2 bit tren, 6
bit con lai ch cho phep oc.
Thanh ghi ong vai tro la buffer truyen nhan SSPBUF, d lieu truyen i hoac nhan
c se c a vao tranh ghi nay. SSPBUF khong co cau truc em hai lp (doubledbuffer), do o d lieu ghi vao thanh ghi SSPBUF se lap tc c ghi vao thanh ghi SSPSR.
Thanh ghi dch d lieu SSPSR dung e dch d lieu vao hoac ra. Khi 1 byte d lieu
c nhan hoan chnh, d lieu se t thanh ghi SSPSR chuyen qua thanh ghi SSPBUF va c
hieu c set, ong thi ngat se xay ra.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
Khi s dung chuan giao tiep SPI trc tien ta can thiet lap cac che o cho giao dien
bang cach a cac gia tr thch hp vao hai thanh ghi SSPCON va SSPSTAT. Cac thong so
can thiet lap bao gom:
Master mode hay Slave mode. oi vi Master mode, xung clock ong bo se i ra t
chan RC3/SCK/SCL. oi vi Slave mode, xung clock ong bo se c nhan t ben ngoai qua
chan RC3/SCK/SCL.
Cac che o cua Slave mode.
Mc logic cua xung clock khi trang thai tam ngng qua trnh truyen nhan (Idle).
Canh tac ong cua xung clock ong bo (canh len hay canh xuong).
Toc o xung clock (khi hoat ong Master mode).
Thi iem xac nh mc logic cua d lieu ( gia hay cuoi thi gian 1 bit d lieu
c a vao).
Master mode, Slave mode va cac che o cua Slave mode c ieu khien bi cac bit
SSPM3:SSPM0 (SSPCON<3:0>). Xem chi tiet phu luc 2.
MSSP bao gom mot thanh ghi dch d lieu SSPSR va thanh ghi em d lieu SSPBUF.
Hai thanh ghi nay tao thanh bo em d lieu kep (doubled-buffer). D lieu se c dch vao
hoac ra qua thanh ghi SSPSR, bit MSB c dch trc. ay la mot trong nhng iem khac
biet gi hai giao dien MSSP va USART (USART dch bit LSB trc).
Trong qua trnh nhan d lieu, khi d lieu a vao t chan RC4/SDI/SDA trong thanh
ghi SSPSR a san sang (a nhan u 8 bit), d lieu se c a vao thanh ghi SSPBUF, bit ch
th trang thai bo em BF (SSPSTAT<0>) se c set e bao hieu bo em a ay, ong thi
c ngat SSPIF (PIR1<3>) cung c set. Bit BF se t ong reset ve 0 khi d lieu trong thanh
ghi SSPBUF c oc vao. Bo em kep cho phep oc tiep byte tiep theo trc khi byte d
lieu trc o c oc vao. Tuy nhien ta nen oc trc d lieu t thanh ghi SSPBUF trc
khi nhan byte d lieu tiep theo.
Qua trnh truyen d lieu cung hoan toan tng t nhng ngc lai. D lieu can truyen
se c a vao thanh ghi SSPBUF ong thi a vao thanh ghi SSPSR, khi o c hieu BF
c set. D lieu c dch t thanh ghi SSPSR va a ra ngoai qua chan RC5/SDO. Ngat se
xay ra khi qua trnh dch d lieu hoan tat. Tuy nhien d lieu trc khi c a ra ngoai phai
c cho phep bi tn hieu t chan
. Chan nay ong vai tro chon oi tng
giao tiep khi SPI che o Slave mode.
Khi qua trnh truyen nhan d lieu ang dien ra, ta khong c phep ghi d lieu vao
thanh ghi SSPBUF. Thao tac ghi d lieu nay se set bit WCON (SSPCON<7>). Mot ieu can
chu y na la thanh ghi SSPSR khong cho phep truy xuat trc tiep ma phai thong qua thanh
ghi SSPBUF.
Cong giao tiep cua giao dien SPI c ieu khien bi bit SSPEN (SSPSON<5>). Ben
canh o can ieu khien chieu xuat nhap cua PORTC thong qua thanh ghi TRISC sao cho phu
hp vi chieu cua giao dien SPI. Cu the nh sau:
RC4/SDI/SDA se t ong c ieu khien bi khoi giao itep SPI.
RS5/SDO la ngo ra d lieu, do o can clear bit TRISC<5>.
Khi SPI dang Master mode, can clear bit TRISC<3> e cho phep a xung clock
ong bo ra chan RC3/SCK/SCL.
Khi SPI dang Slave mode, can set bit TRISC<3> e cho phep nhan xung clock
ong bo t ben ngoai qua chan RC3/SCK/SCL.
nhan tn hieu ieu khien truy
Set bit TRISC<4> e cho phep chan
xuat d lieu khi SPI che o Slave mode.
S o ket noi cua chuan giao tiep SPI nh sau:
Ca hai khoi Master va Slave nen c an nh chung cac qui tac tac ong cua xung clock
ong bo e d lieu co the dch chuyen ong thi.
2.12.2.1.1 SPI MASTER MODE.
che o Master mode, vi ieu khien co quyen an nh thi iem trao oi d lieu (va
oi tng trao oi d lieu neu can) v no ieu khien xung clock ong bo. D lieu se c
truyen nhan ngay thi iem d lieu c a vao thanh ghi SSPBUF. Neu ch can nhan d
lieu, ta co the an nh chan SDO la ngo vao (set bit TRISC<5>). D lieu se c dch vao
thanh ghi SSPSR theo mot toc o c nh san cho xung clock ong bo. Sau khi nhan c
mot byte d lieu hoan chnh, byte d lieu se c a dao thanh ghi SSPBUF, bit BF c set
va ngat xay ra.
Khi lenh SLEEP c thc thi trong qua trnh truyen nhan, trang thai cua qua trnh se
c gi nguyen va tiep tuc sau khi vi ieu khien c anh thc.
Gian o xung cua Master mode va cac tac ong cua cac bit ieu khien c trnh bay
trong hnh ve sau:
Hnh 2.22 Gian o xung chuan giao tiep SPI (Slave mode).
Cac thanh ghi lien quan en chuan giao tiep SPI bao gom:
Thanh ghi INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cha bit cho phep toan bo cac
ngat (GIE va PEIE).
Thanh ghi PIR1 (a ch 0Ch): cha ngat SSPIE.
Thanh ghi PIE1 (a ch 8Ch): cha bit cho phep ngat SSPIE.
Trong qua trnh nhan d lieu, sau khi nhan c 1 byte d lieu hoan chnh, thanh ghi
SSPSR se chuyen d lieu vao thanh ghi SSPBUF. Thanh ghi SSPSR khong oc va ghi c,
qua trnh truy xuat thanh ghi nay phai thong qua thanh ghi SSPBUF.
Trong qua trnh truyen d lieu, d lieu can truyen khi c a vao thanh ghi
SSPBUF cung se ong thi a vao thanh ghi SSPSR.
Chi tiet ve cac thanh ghi se c trnh bay cu the phu luc 2.
I2C co nhieu che o hoat ong va c ieu khien bi cac bit SSPCON<3:0>, bao gom:
I2C Master mode, xung clock = fosc/4*(SSPADD+1).
I2C Slave mode, 7 bit a ch.
I2C Slave mode, 10 bit a ch.
I2C Slvae mode, 7 bit a ch, cho phep ngat khi phat hien bit Start va bit Stop.
I2C Slave mode, 10 bit a ch, cho phep ngat khi phat hien bit Start va bit Stop.
I2C Firmware Control Master mode.
a ch truyen i se bao gom cac bit a ch va mot bit
hay ghi d lieu) vi oi tng can truy xuat d lieu.
Khi la chon giao dien I2C va khi set bit SSPEN, cac pin SCL va SDA se trang thai
cc thu h. Do o trong trng hp can thiet ta phai s dung ien tr keo len ben ngoai vi
ieu khien, ben canh o can an nh cac gia tr phu hp cho cac bit TRISC<4:3> (bit ieu
khien xuat nhap cac chan SCL va SDA).
2.12.2.2.1 I2C SLAVE MODE.
Viec trc tien la phai set cac pin SCL va SDA la input (set bit TRISC<4:3>). I2C cua
vi ieu khien se c ieu khien bi mot vi ieu khien hoac mot thiet b ngoai vi khac thong
qua cac a ch. Khi a ch nay ch en vi ieu khien, th tai thi iem nay va tai thi iem
e bao hieu ket
d lieu a c truyen nhan xong sau o, vi ieu khien se tao ra xung
thuc d lieu, gia tr trong thanh ghi SSPSR se c a vao thanh ghi SSPBUF. Tuy nhien
se khong c tao ra neu mot trong cac trng hp sau xay ra:
xung
Bit BF (SSPSTAT<0>) bao hieu buffer ay a c set trc khi qua trnh truyen
nhan xay ra.
Bit SSPOV (SSPCON<6>) c set trc khi qua trnh truyen nhan xay ra (SSPOV
c set trong trng hp khi mot byte khac c nhan vao trong khi d lieu trong thanh ghi
SSPBUF trc o van cha c lay ra).
Trong cac trng hp tren, thanh ghi SSPSR se khong a gia tr vao thanh ghi SSPBUF,
nhng bit SSPIF (PIR1<3>)se c set. e qua trnh truyen nhan d lieu c tiep tuc, can
oc d lieu t thanh ghi SSPBUF vao trc, khi o bit BF se t ong c xoa, con bit
SSPOV phai c xoa bang chng trnh.
Khi MSSP c kch hoat, no se ch tn hieu e bat au hoat ong. Sau khi nhan c
tn hieu bat au hoat ong (canh xuong au tien cua pin SDA), d lieu 8 bit se c dch vao
thanh ghi SSPSR. Cac bit a vao se c lay mau tai canh len cua xung clock. Gia tr nhan
c t thanh ghi SSPSR se c so sanh vi gia tr trong thanh ghi SSPADD tai canh xuong
cua xung clock th 8. Neu ket qua so sanh bang nhau, tc la I2C Master ch nh oi tng
giao tiep la vi ieu khien ang che o Slave mode (ta goi hien tng nay la address
match), bit BF va SSPOV se c xoa ve 0 va gay ra cac tac ong sau:
1.
2.
3.
4.
Khi MSSP che o I2C Slave mode 10 bit a ch, vi ieu khien can phai nhan vao
(SSPSTAT<2>) phai c xoa ve 0 e cho phep nhan 2
10 bit a ch e so sanh. Bit
byte a ch. Byte au tien co nh dang la 11110 A9 A8 0 trong o A9, A8 la hai bit MSB
cua 10 bit a ch. Byte th 2 la 8 bit a ch con lai.
Quatrnh nhan dang a ch cua MSSP che o I2C Slave mode 10 bit a ch nh sau:
1. au tien 2 bit MSB cua 10 bit a ch c nhan trc, bit SSPIF, BF va UA
(SSPSTAT<1>) c set (byte a ch au tien co nh dang la 11110 A9 A8 0) .
2. Cap nhat vao 8 bit a ch thap cua thanh ghi SSPADD, bit UA se c xoa bi vi
ieu khien e khi tao xung clock pin SCL sau khi qua trnh cap nhat hoan tat.
3. oc gia tr thanh ghi SSPBUF (bit BF se c xoa ve 0) va xoa c ngat SSPIF.
4. Nhan 8 bit a ch cao, bit SSPIF, BF va UA c set.
5. Cap nhat 8 bit a ch a nhan c vao 8 bit a ch cao cua thanh ghi SSPADD,
neu a ch nhan c la ung (address match), xung clock chan SCL c khi
tao va bit UA c set.
6. oc gia tr thanh ghi SSPBUF (bit BF se c xoa ve 0) va xoa c ngat SSPIF.
7. Nhan tn hieu Start.
8. Nhan byte a ch cao (bit SSPIF va BF c set).
9. oc gia tr thanh ghi SSPBUF (bit BF c xoa ve 0) va xoa c ngat SSPIF.
Trong o cac bc 7,8,9 xay ra trong qua trnh truyen d lieu che o Slave mode.
Xem gian o xung cua I2C e co c hnh anh cu the hn ve cac bc tien hanh trong qua
trnh nhan dang a ch.
Xet qua trnh nhan d lieu che o Slave mode, cac bit a ch se c I2C Master
a vao trc. Khi bit
trong cac bit a ch co gia tr bang 0 (bit nay c nhan dang sau
khi cac bit a ch a c nhan xong) va a ch c ch nh ung (address match), bit
cua thanh ghi SSPSTAT c xoa ve 0 va ng d lieu SDI c a ve mc logic thap
(xung
). Khi bit SEN (SSPCON<0>) c set, sau khi 1 byte d lieu c nhan, xung
clock t chan RC3/SCK/SCL se c a xuong mc thap, muon khi tao lai xung clock ta
set bit CKP (SSPCON<4>). ieu nay se lam cho hien tng tran d lieu khong xay ra v bit
SEN cho phep ta ieu khien c xung clock dch d lieu thong qua bit CKP (tham khao gian
o xung e biet them chi tiet). Khi hien tng tran d lieu xay ra, bit BF hoac bit SSPOV se
c set. Ngat se xay ra khi mot byte d lieu c nhan xong, c ngat SSPIF se c set va
phai c xoa bang chng trnh.
Hnh 2.24 Gian o xung cua I2C Slave mode 7 bit a ch trong qua trnh nhan d lieu (bit
SEN = 0).
Hnh 2.25 Gian o xung cua I2C Slave mode 10 bit a ch trong qua trnh nhan d lieu (bit
SEN = 0).
Hnh 2.26 Gian o xung cua I2C Slave mode 7 bit a ch trong qua trnh nhan d lieu (bit
SEN = 1).
Hnh 2.27 Gian o xung cua I2C Slave mode 10 bit a ch trong qua trnh nhan d lieu (bit
SEN = 1).
Xet qua trnh truyen d lieu, khi bit
trong cac bit d lieu mang gia tr 1 va a ch
cua thanh ghi SSPSTAT se c set. Cac bit a
c ch nh ung (address match), bit
c tao ra, xung clock
ch c nhan trc va a vao thanh ghi SSPBUF. Sau o xung
chan RC3/SCK/SCL c a xuong mc thap bat chap trang thai cua bit SEN. Khi o I2C
Master se khong c a xung clock vao I2C Slave cho en khi d lieu thanh ghi SSPSR
trang thai wsan sang cho qua trnh truyen d lieu (d lieu a vao thanh ghi SSPBUF se
ong thi c a vao thanh ghi SSPSR). Tiep theo cho phep xung pin RC3/SCK/SCL
bang cach set bit CKP (SSPCON<4>). Tng bit cua byte d lieu se c dch ra ngoai tai moi
canh xuong cua xung clock. Nh vay d lieu se san sang ngo ra khi xung clock mc logic
cao, giup cho I2C Master nhan c d lieu tai moi canh len cua xung clock. Nh vay trong
qua trnh truyen d lieu bit SEN khong ong vai tro quan trong nh trong qua trnh nhan d
lieu.
Tai canh len xung clock th 9, d lieu a c dch hoan toan vao I2C Master, xung
se c tao ra I2C Master, ong thi pin SDA se c gi mc logic cao. Trong
trng hp xung
c chot bi I2C Slave, thanh ghi SSPSTAT se c reset. I2C Slave
se ch tn hieu cua bit Start e tiep tuc truyen byte d lieu tiep theo (a byte d lieu tiep
theo vao thanh ghi SSPBUF va set bit CKP.
Ngat MSSP xay ra khi mot byte d lieu ket thuc qua trnh truyen, bit SSPIF c set
tai canh xuong cua xung clock th 9 va phai c xoa bang chng trnh e am bao se c
set khi byte d lieu tiep theo truyen xong.
Hnh 2.28 Gian o xung cua I2C Slave mode 7 bit a ch trong qua trnh truyen d
lieu.
Hnh 2.29 Gian o xung cua I2C Slave mode 10 bit a ch trong qua trnh truyen d lieu.
Qua trnh truyen nhan cac bit a ch cho phep I2C Master chon la oi tng I2C
Slave can truy xuat d lieu. Ben canh o I2C con cung cap them mot a ch GCA (General
Call Address) cho phep chon tat ca cac I2C Slave. ay la mot trong 8 a ch ac biet cua
protocol I2C. a ch nay c nh dang la mot chuoi 0 vi
=0 va c cho phep bang
cach set bit GCEN (SSPCON2<7>). Khi o a ch nhan vao se c so sanh vi thanh ghi
SSPADD va vi a ch GCA.
Hnh 2.30 Gian o xung cua I2C Slave khi nhan a ch GCA.
Qua trnh nhan dang a ch GCA cung tng t nh khi nhan dang cac a ch khac
va khong co s khac biet ro rang khi I2C hoat ong che o a ch 7 bit hay 10 bit.
2.12.2.2.2 I2C MASTER MODE
I2C Master mode c xac lap bang cach a cac gia tr thch hp vao cac bit SSPM
cua thanh ghi SSPCON va set bit SSPEN. che o Master, cac pin SCK va SDA se c
ieu khien bi phan cng cua MSSP.
Hnh 2.32 S o khoi BRG (Baud Rate Benerator) cua I2C Master mode.
Cac gia tr cu the cua tan so xung noi tiep do BRG tao ra c liet ke trong bang sau:
Trong o gia tr BRG la gia tr c lay t 7 bit thap cua thanh ghi SSPADD. Do I2C
che o Master mode, thanh ghi SSPADD se khong c s dung e cha a ch, thay vao
o chc nang cua SSPADD la thanh ghi cha gia tr cua BRG.
e tao c ieu kien Start, trc het can a hai pin SCL va SDA len mc logic cao
va bit SEN (SSPCON2<0>) phai c set. Khi o BRG se t ong oc gia tr 7 bit thap cua
thanh ghi SSPADD va bat au em. Sau khoang thi gian TBRG, pin SDA c a xuong
mc logic thap. Trang thai pin SDA mc logic thap va pin SCL mc logic cao chnh la
ieu kien Start cua I2C Master mode. Khi o bit S (SSPSTAT<3>) se c set. Tiep theo
BRG tiep tuc lay gia tr t thanh ghi SSPADD e tiep tuc qua trnh em, bit SEN c t
ong xoa va c ngat SSPIF c set.
Trong trng hp pin SCL va SDA trang thai logic thap, hoac la trong qua trnh tao
ieu kien Start, pin SCL c a ve trang thai logic thap trc khi pin SDA c a ve
trang thai logic thap, ieu kien Start se khong c hnh thanh, c ngat BCLIF se c set va
I2C se trang thai tam ngng hoat ong (Idle).
Hnh 2.33 Gian o xung I2C Master mode trong qua trnh tao ieu kien Start.
Tn hieu Stop se c a ra pin SDA khi ket thc d lieu bang cach set bit PEN
(SSPCON2<2>). Sau canh xuong cua xung clock th 9 va vi tac ong cua bit ieu khien
PEN, pin SDA cung c a xuong mc thap, BRG lai bat au qua trnh em. Sau mot
khoang thi gian TBRG, pin SCL c a len mc logic cao va sau mot khoang thi gian
TBRG na pin SDA cung c a len mc cao. Ngay tai thi iem o bit P (SSPSTAT<4>)
c set, ngha la ieu kien Stop a c tao ra. Sau mot khoang thi gian TBRG na, bit PEN
t ong c xoa va c ngat SSPIF c set.
Hnh 2.34 Gian o xung I2C Master mode trong qua trnh tao ieu kien Stop.
e tao c dieu kien Start lap lai lien tuc trong qua trnh truyen d lieu, trc het
can set bit RSEN (SSPCON2<1>). Sau khi set bit RSEN, pin SCL c a xuong mc logic
thap, pin SDA c a len mc logic cao, BRG lay gia tr t thanh ghi SSPADD vao e baty
au qua trnh em. Sau khoang thi gian TBRG, pin SCL cung c a len mc logic cao
trong khoang thi gian TBRG tiep theo. Trong khoang thi gian TBRG ke tiep, pin SDA lai c
a xuong mc logic thap trong khi SCL van c gi mc logic cao. Ngay thi iem o bit
S (SSPSTAT<3>) c set e bao hieu ieu kien Start c hnh thanh, bit RSEN t ong
c xoa va c ngat SSPIF se c set sau mot khoang thi gian TBRG na. Luc nay a ch
cua I2C Slave co the c a vao thanh ghi SSPBUF, sau o ta ch viec a tiep a ch
hoac d lieu tiep theo vao thanh ghi SSPBUF moi khi nhan c tn hieu
t I2C Slave,
I2C Master se t ong tao tn hieu Start lap lai lien tuc cho qua trnh truyen d lieu lien tuc.
Can chu y la bat c mot trnh t nao sai trong qua trnh tao ieu kien Start lap lai se
lam cho bit BCLIF c set va I2C c a ve trang thai Idle.
Hnh 2.35 Gian o xung I2C Master mode trong qua trnh tao ieu kien Start lien tuc.
Xet qua trnh truyen d lieu, xung clock se c a ra t pin SCL va d lieu c
a ra t pin SDA. Byte d lieu au tien phai la byte a ch xac nh I2C Slave can giao tiep
va bit
(trong trng hp nay
= 0). au tien cac gia tr a ch se c a vao thanh
ghi SSPBUF, bit BF t ong c set len 1 va bo em tao xung clock noi tiep BRG (Baud
Rate Generator) bat au hoat ong. Khi o tng bit d lieu (hoac a ch va bit
) se c
dch ra ngoai theo tng canh xuong cua xung clock sau khi canh xuong au tien cua pin SCL
c nhan dien (ieu kien Start), BRG bat au em ngc ve 0. Khi tat ca cac bit cua byte
d lieu c a c a ra ngoai, bo em BRG mang gia tr 0. Sau o, tai canh xuong cua
xung clock th 8, I2C Master se ngng tac ong len pin SDA e ch i tn hieu t I2C
). Tai canh xuong cua xung clock th 9, I2C Master se lay mau tn
Slave (tn hieu xung
hieu t pin SDA e kiem tra xem a ch a c I2C Slave nhan dang cha, trang thai
c a vao bit ACKSTAT (SSPCON2<6>). Cung tai thi iem canh xuong cua xung clock
th 9, bit BF c t ong clear, c ngat SSPIF c set va BRG tam ngng hoat ong cho
ti khi d lieu hoac a ch tiep theo c a vao thanh ghi SSPBUF, d lieu hoac a ch se
tiep tuc c truyen i tai canh xuong cua xung clock tiep theo.
Hnh 2.36 Gian o xung I2C Master mode trong qua trnh truyen d lieu.
Xet qua trnh nhan d lieu che o I2C Master mode. Trc tien ta can set bit cho
phep nhan d lieu RCEN (SSPCON2<3>). Khi o BRG bat au qua trnh em, d lieu se
c dch vao I2C Master qua pin SDA tai canh xuong cua pin SCL. Tai canh xuong cua
xung clock th 8, bit c hieu cho phep nhan RCEN t ong c xoa, d lieu trong thanh ghi
SSPSR c a vao thanh ghi SSPBUF, c hieu BF c set, c ngat SSPIF c set, BRG
ngng em va pin SCL c a ve mc logic thap. Khi o MSSP trang thai tam ngng
hoat ong e ch i lenh tiep theo. Sau khi oc gia tr thanh ghi SSPBUF, c hieu BF t
bang cach set bit ACKEN (SSPCON2<4>).
ong c xoa. Ta con co the gi tn hieu
Hnh 2.37 Gian o xung I2C Master mode trong qua trnh nhan d lieu.
2.13 CONG GIAO TIEP SONG SONG PSP (PARALLEL SLAVE PORT)
Ngoai cac cong noi tiep va cac giao ien noi tiep c trnh bay phan tren, vi ieu
khien PIC16F877A con c ho tr mot cong giao tiep song song va chuan giao tiep song
song thong qua PORTD va PORTE. Do cong song song ch hoat ong che o Slave mode
nen vi ieu khien khi giao tiep qua giao dien nay se chu s ieu khien cua thiet b ben ngoai
thong qua cac pin cua PORTE, trong khi d lieu se c oc hoac ghi theo dang bat ong bo
thong qua 8 pin cua PORTD.
Bit ieu khien PSP la PSPMODE (TRISE<4>). PSPMODE c set se thiet lap chc
nang cac pin cua PORTE la cac pin cho phep oc d lieu
(
), cho phep ghi d
lieu
(
) va pin chon vi ieu khien
(
) phuc vu cho viec truyen
nhan d lieu song song thong qua bus d lieu 8 bit cua PORTD. PORTD luc nay ong vai tro
la thanh ghi chot d lieu 8 bit, ong thi tac ong cua thanh ghi TRISD cung se c bo qua
do PORTD luc nay chu s ieu khien cua cac thiet b ben ngoai. PORTE van chu s tac
ong cua thanh ghi TRISE, do o can xac lap trang thai cac pin PORTE la input bang cach
set cac bit TRISE<2:0>. Ngoai ra can a gia tr thch hp cac bit PCFG3:PCFG0 (thanh ghi
ADCON1<3:0>) e an nh cac pin cua PORTE la cac pin I/O dang digital (PORTE con la
cac pin chc nang cua khoi ADC).
Khi cac pin
va
cung mc
thap, d lieu t ben ngoai se c ghi len
PORTD. Khi mot trong hai pin tren chuyen
len mc logic cao, c hieu bao d lieu trong
buffer a ay BIF (TRISE<7>) c set va
c ngat PSPIF (PIR1<7>) c set e bao
hieu ket thuc ghi d lieu. Bit BIF ch c
xoa ve 0 khi d lieu va nhan c
PORTD c oc vao. Bit bao hieu d lieu
nhan c trong buffer b tran IBOV
(TRISE<5>) se c set khi vi ieu khien
nhan tiep d lieu tiep theo trong khi cha
oc vao d lieu a nhan c trc o.
Khi cac pin
va
cung mc logic
thap, bit bao hieu buffer truyen d lieu a
ay BOF (TRISE<6>) se c xoa ngay lap
tc e bao hieu PORTD a san sang cho qua
trnh oc d lieu. Khi mot trong hai pin tren
chuyen sang mc logic cao, c ngat PSPIF
Ngoai tr reset POR trang thai cac thanh ghi la khong xac nh vaWDT wake up
khong anh hng en trang thai cac thanh ghi, cac che o reset con lai eu a gia tr cac
va
ch th trang thai hoat ong,
thanh ghi ve gia tr ban au c an nh san. Cac bit
trang thai reset cua vi ieu khien va c ieu khien bi CPU.
reset: Khi pin
mc logic thap,
vi ieu khien se c reset. Tn hieu reset
c cung cap bi mot mach ngoai vi vi
cac yeu cau cu the sau:
Khong noi pin
trc tiep len
nguon VDD.
R1 phai nho hn 40 K e am bao
cac ac tnh ien cua vi ieu khien.
R2 phai ln hn 1 K e han dong i
Hnh 2.40 Mach reset qua pin
.
vao vi ieu khien.
reset con c chong nhieu bi mot bo loc e tranh cac tn hieu nho tac ong
len pin
.
Power-on reset (POR): ay la xung reset do vi ieu khien tao ra khi phat hien nguon
cung cap VDD. Khi hoat ong che o bnh thng, vi ieu khien can c am bao cac
thong so ve dong ien, ien ap e hoat ong bnh thng. Nhng neu cac tham so nay khong
c am bao, xung reset do POR tao ra se a vi ieu khien ve trang thai reset va ch tiep
tuc hoat ong khi nao cac tham so tren c am bao.
Power-up Timer (PWRT): ay la bo nh thi hoat ong da vao mach RC ben trong
vi ieu khien. Khi PWRT c kch hoat, vi ieu khien se c a ve trang thai reset.
PWRT se tao ra mot khoang thi gian delay (khoang 72 ms) e VDD tang en gia tr thch
hp.
Oscillator Start-up Timer (OST): OST cung cap mot khoang thi gian delay bang 1024
chu k xung cua oscillator sau khi PWRT ngng tac ong (vi ieu khien a u ieu kien hoat
ong) e am bao s on nh cua xung do oscillator phat ra. Tac ong cua OST con xay ra
oi vi POR reset va khi vi ieu khien c anh thc t che sleep. OST ch tac ong oi
vi cac loai oscillator la XT, HS va LP.
Brown-out reset (BOR): Neu VDD ha xuong thap hn gia tr VBOR (khoang 4V) va keo
dai trong khoang thi gian ln hn TBOR (khoang 100 us), BOR c kch hoat va vi ieu
khien c a ve trang thai BOR reset. Neu ien ap cung cap cho vi ieu khien ha xuong
thap hn VBOR trong khoang thi gian ngan hn TBOR, vi ieu khien se khong c reset. Khi
ien ap cung cap u cho vi ieu khien hoat ong, PWRT c kch hoat e tao ra mot
khoang thi gian delay (khoang 72ms). Neu trong khoang thi gian nay ien ap cung cap cho
vi ieu khien lai tiep tuc ha xuong di mc ien ap VBOR, BOR reset se lai c kch hoat
khi vi ieu khien u ien ap hoat ong. Mot iem can chu y la khi BOR reset c cho phep,
PWRT cung se hoat ong bat chap trang thai cua bit PWRT.
Tom lai e vi ieu khien hoat ong c t khi cap nguon can trai qua cac bc sau:
POR tac ong.
PWRT (neu c cho phep hoat ong) tao ra khoang thi gian delay TPWRT e on nh
nguon cung cap.
OST (neu c cho phep) tao ra khoang thi gian delay bang 1024 chu k xung cua
oscillator e on nh tan so cua oscillator.
en thi iem nay vi ieu khien mi bat au hoat ong bnh thng.
Thanh ghi ieu khien va ch th trang thai nguon cung cap cho vi ieu khien la thanh ghi
PCON (xem phu luc 2 e biet them chi tiet).
phep cac ngat ngoai vi PEIE. Bit ieu khien cac ngat nam trong thanh ghi PIE1 va PIE2. C
ngat cua cac ngat nam trong thanh ghi PIR1 va PIR2.
Trong mot thi iem ch co mot chng trnh ngat c thc thi, chng trnh ngat
c ket thuc bang lenh RETFIE. Khi chng trnh ngat c thc thi, bit GIE t ong c
xoa, a ch lenh tiep theo cua chng trnh chnh c cat vao trong bo nh Stack va bo em
chng trnh se ch en a ch 0004h. Lenh RETFIE c dung e thoat khoi chng trnh
ngat va quay tr ve chng trnh chnh, ong thi bit GIE cung se c set e cho phep cac
ngat hoat ong tr lai. Cac c hieu c dung e kiem tra ngat nao ang xay ra va phai c
xoa bang chng trnh trc khi cho phep ngat tiep tuc hoat ong tr lai e ta co the phat
hien c thi iem tiep theo ma ngat xay ra.
oi vi cac ngat ngoai vi nh ngat t chan INT hay ngat t s thay oi trang thai cac
pin cua PORTB (PORTB Interrupt on change), viec xac nh ngat nao xay ra can 3 hoac 4
chu k lenh tuy thuoc vao thi iem xay ra ngat.
Can chu y la trong qua trnh thc thi ngat, ch co gia tr cua bo em chng trnh c
cat vao trong Stack, trong khi mot so thanh ghi quan trong se khong c cat va co the b
thay oi gia tr trong qua trnh thc thi chng trnh ngat. ieu nay nen c x l bang
chng trnh e tranh hien tng tren xay ra.
Hnh 2.42 S o logic cua tat ca cac ngat trong vi ieu khien PIC16F877A.
Cac tac ong ngoai vi khac khong co tac dung anh thc vi ieu khien v khi che o
sleep cac xung clock cung cap cho vi ieu khien ngng hoat ong. Ben canh o can cho phep
cac ngat hoat ong trc khi lenh SLEEP c thc thi e bao am tac ong cua cac ngat.
Viec anh thc vi ieu khien t cac ngat van c thc thi bat chap trang thai cua bit GIE.
Neu bit GIE mang gia tr 0, vi ieu khien se thc thi lenh tiep theo sau lenh SLEEP cua
chng trnh (v chng trnh ngat khong c cho phep thc thi). Neu bit GIE c set trc
khi lenh SLEEP c thc thi, vi ieu khien se thc thi lenh tiep theo cua chng trnh va sau
o nhay ti a ch cha chng trnh ngat (0004h). Trong trng hp lenh tiep theo khong
ong vai tro quan trong trong chng trnh, ta can at them lenh NOP sau lenh SLEEP e bo
qua tac ong cua lenh nay, ong thi giup ta de dang hn trong viec kiem soat hoat ong cua
chng trnh ngat. Tuy nhien cung co mot so iem can lu y nh sau:
Neu ngat xay ra trc khi lenh SLEEP c thc thi, lenh SLEEP se khong c thc
thi va thay vao o la lenh NOP, ong thi cac tac ong cua lenh SLEEP cung se c bo
qua.
Neu ngat xay ra trong khi hay sau khi lenh SLEEP c thc thi, vi ieu khien lap tc
c anh thc t che o sleep, va lenh SLEEP se c thc thi ngay sau khi vi ieu khien
c anh thc.
. Neu bit
e kiem tra xem lenh SLEEP a c thc thi hay cha, ta kiem tra bit
van mang gia tr 1 tc la lenh SLEEP a khong c thc thi va thay vao o la lenh NOP.
Ben canh o ta can xoa WDT e chac chan rang WDT a c xoa trc khi thc thi lenh
SLEEP, qua o cho phep ta xac nh c thi iem vi ieu khien c anh thc do tac
ong cua WDT.
Cu phap: ADDWF
f,d
(0f255, d[0,1]).
Tac dung: cong gia tr hai thanh ghi W va
thanh ghi f. Ket qua c cha trong thanh
ghi W neu d = 0 hoac thanh ghi f neu d =1.
Bit trang thai: C, DC, Z
Cu phap: ANDWF
f,d
(0f127, d [0,1]).
Tac dung: thc hien phep toan AND gia
cac gia tr cha trong hai thanh ghi W va f.
Ket qua c a vao thanh ghi W neu
d=0 hoac thanh ghi f neu d = 1.
Bit trang thai: Z
Cu phap CLRW
Tac dung: xoa thanh ghi W va bit Z c
set.
Bit trang thai: Z
(0f127, d[0,1])
Tac dung: ga tr thanh ghi f c giam 1
n v. Neu ket qua sau khi giam khac 0,
lenh tiep theo c thc thi, neu ket qua
bang 0, lenh tiep theo khong c thc thi
va thay vao o la lenh NOP. Ket qua c
a vao thanh ghi W neu d = 0 hoac thanh
ghi f neu d = 1.
Bit trang thai: khong co
Cu phap: CLRWDT
Tac dung: reset Watchdog Timer, ong
thi prescaler cung c reset, cac bit
c set len 1.
va
Bit trang thai:
,
(0f127, d[0,1]).
Tac dung: ao cac bit trong thanh ghi f.
Ket qua c a vao thanh ghi W neu
d=0 hoac thanh ghi f neu d=1.
Bit trang thai: Z
(0f127, d [0,1])
Tac dung: tang gia tr thanh ghi f len 1 n
v. Ket qua c a vao thanh ghi W neu
d = 0 hoac thanh ghi f neu d = 1.
Bit trang thai: Z
Cu phap: SUBLW k
Tac dung: lay gia tr k tr gia tr trong
thanh ghi W. Ket qua c cha trong
thanh ghi W.
Bit trang thai: C, DC, Z
(0f127, d[0,1])
Tac dung: dch trai cac bit trong thanh ghi f
qua c carry. Ket qua c lu trong thanh
ghi W neu d=0 hoac thanh ghi f neu d=1.
Bit trang thai: C
Ngoai cac lenh tren con co mot so lenh dung trong chng trnh nh:
3.2.30 Lenh #DIFINE
Cu phap: #DEFINE <text1> <text2>
Tac dung: thay the mot chuoi k t nay bang mot chuoi k t khac, co ngha la moi khi
chuoi k t text1 xuat hien trong chng trnh, trnh bien dch se t ong thay the chuoi k t
o bang chuoi k t <text2>.
3.2.31 Lenh INCLUDE
Cu phap: #INCLUDE <filename> hoac #INCLUDE filename
Tac dung: nh kem mot file khac vao chng trnh, tng t nh viec ta copy file o
vao v tr xuat hien lenh INCLUDE. Neu dung cu phap <filename> th file nh kem la file
he thong (stem file), neu dung cu phap filename th file nh kem la file cua ngi s
dung.
Thong thng chng trnh c nh kem theo mot header file cha cac thong tin
nh ngha cac bien (thanh ghi W, thanh ghi F,..) va cac a ch cau cac thanh ghi chc nang
ac biet trong bo nh d lieu. Neu khong co header file, chng trnh se kho oc va kho hieu
hn.
3.3 CAU TRUC CUA MOT CHNG TRNH ASSEMBLY VIET CHO VI IEU
KHIEN PIC
Mot chng trnh Assembly bao gom nhieu thanh phan nh chng trnh chnh,
chng trnh ngat, chng trnh con, ay ch trnh bay cau truc mot chng trnh n gian
nhat khi mi bat au lam quen vi viec lap trnh cho vi ieu khien PIC.
Hnh 3.2 Cau truc mot chng trnh Asembly viet cho vi ieu khien PIC.
Ta nhan thay rang khong co s khac biet ln trong cau truc cua mot chng trnh
Assembly viet cho vi ieu khien PIC so vi vi ieu khien khac, ch co s khac biet ve cac
lenh s dung trong chng trnh. Dau ; c dung e a mot ghi chu vao chng trnh va
ch co hieu lc tren mot hang cua chng trnh. Hnh tren la v du ve mot chng trnh n
gian vi cac bc khi tao c ban ban au, ngoai ra neu can thiet ta van co the khai bao
them cac bien, hang va cac tham so khac trc chng trnh chnh (label Main).
Trong trng hp can s dung en chng trnh ngat, ta can mot cau truc chng trnh
phc tap hn vi nhieu bc khi tao phc tap va phai tuan theo mot th t lenh nhat nh.
Tuy nhien neu s dung trnh bien dch MPLAB, cau truc cua chng trnh danh cho mot vi
ieu khien PIC nhat nh a c viet san, ta ch viec viet oan chng trnh ieu khien vao
cac v tr thch hp tren mau chng trnh c viet trc o. ay la mot li the rat ln khi s
dung MPLAB e soan thao cac chng trnh viet cho vi ieu khien PIC.
CHNG 4
Trong chng nay ta se i sau vao mot so ng dung cu the cua vi ieu khien
PIC16F877A. Cac ng dung nay c xay dng da tren cac chc nang ngoai vi c tch
hp san ben trong vi ieu khien, qua o giup ta nam ro hn va ieu khien c cac khoi
chc nang o. Tuy nhien trc tien se la mot so ng dung n gian giup ta bc au lam
quen vi tap lenh va cach viet chng trnh cho vi ieu khien PIC.
4.1 IEU KHIEN CAC PORT I/O.
ay la mot trong nhng ng dung n gian nhat giup ta lam quen vi vi ieu khien.
Trong ng dung nay ta se xuat mot gia tr nao o ra mot PORT cua vi ieu khien, chang han
nh PORTB. Gia tr nay se c kiem tra bang cach gan vao cac pin cua PORTB cac LED.
Khi o pin mang gia tr mc logic 1 se lam cho LED sang va pin mang gia tr mc logic 0 se
lam cho LED tat.
Sau ay la mot vai iem can chu y cho ng dung nay:
e LED sang bnh thng th ien ap at len LED vao khoang 1.8 en 2.2
Volt tuy theo mau sac cua LED, trong khi ien ap tai ngo ra cua 1 pin trong PORTB neu
mc logic 1 thng la 5 volt. Do o ta can co them ien tr mac noi tiep vi LED e han
dong (co the dung ien tr 0.33 K).
e xuat c gia tr ra PORTB, trc het ta can khi tao cac pin cua PORTB
la output. ieu nay c thc hien bang cach clear cac bit trong thanh ghi TRISB. Tuy nhien
hai thanh ghi PORTB va TRISB nam hai bank khac nhau trong bo nh d lieu. Do o trc
khi muon truy xuat gia tr trong mot thanh ghi nao o can chon bank d lieu cha thanh ghi
o bang cach a cac gia tr thch hp vao 2 bit RP1:RP0 cua thanh ghi STATUS (xem phu
luc 2 va s o bo nh d lieu).
Do trong tap lenh cua vi ieu khien PIC khong co lenh nao cho phep a mot
byte vao mot thanh ghi cho trc, do o can s dung mot thanh ghi trung gian (thanh ghi W)
va dung hai lenh MOVLW (a byte vao thanh ghi W) va lenh MOVWF (a gia tr trong
thanh ghi W vao thanh ghi f nao o ma ta muon).
Ngoai ra can dung lenh ORG e ch ra a ch bat au chng trnh khi vi ieu
khien c reset. Thong thng a ch bat au chng trnh se la a ch 0000h.
Trong trng hp can dung en che o reset cua pin MCLR, ta co the thiet ke them
mot mach reset ngoai vi (vi ieu khien se c reset khi pin MCLR chuyen t mc logic 1
xuong mc logic 0).
5V
0.33 K
R1
R
U1
2
3
4
5
6
7
SW1
5V
HI
8
9
10
11
12
13
14
4 MHz
XTAL
15
16
17
18
19
20
MCLR/VPP
RB7/PGD
RB6/PGC
RB5
RA0/AN0
RB4
RA1/AN1
RA2/AN2/VREF-/CVREFRB3/PGM
RB2
RA3/AN3/VREF+
RB1
RA4/T0CLK/C1OUT
RB0/INT
RA5/AN4/SS/C20UT
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
40
39
38
37
36
35
34
33
0.33 K
0.33 K
0.33 K
5V
VDD
GND
32
31
HI
0.33 K
0.33 K
0.33 K
VDD
GND
OSC1/CLK
OSC2/CLKOUT
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC0/T1OSO/T1CLK RC7/RX/DT
RC1/T1OSI/CCP2
RC6/TX/CK
RC2/CCP1
RC5/SDO
RC3/SCK/SCL
RC4/SDI/SDA
RD0/PSP0
RD1/PSP1
RD3/PSP3
RD2/PSP2
30
29
28
27
0
0.33 K
26
25
24
23
22
21
PIC16F877A
Hnh 4.1 Mach nguyen l cua ng dung ieu khien cac PORT cua vi ieu khien.
Mot iem can chu y la vi ieu khien PIC16F877A co en 2 pin VDD va 2 pin GND.
Trong trng hp nay ta phai cap nguon vao tat ca cac pin tren, khi o vi ieu khien mi co
u ien ap e hoat ong.
16f877a
<p16f877a.inc>
BCF
BCF
STATUS,RP1
STATUS,RP0
CLRF
BSF
PORTB
STATUS,RP0
; xoa PORTB
; chon BANK1
MOVLW
MOVWF
0x00
TRISB
BCF
STATUS,RP0
; chon BANK0
MOVLW
MOVWF
0x8F
PORTB
loop
END
0x000
start
GOTO
loop
; chon BANK0
Cac bc tiep theo e hoan tat ng dung tren la bien dch chng trnh tren bang mot
trnh bien dch Assembly danh cho vi ieu khien PIC (trnh bien dch MPLAB chang han),
sau o dung mach nap e nap chng trnh vao vi ieu khien PIC va kiem tra ket qua. Neu
khong co loi nao xay ra, LED gan vao cac pin RB7, RB3, RB2, RB1, RB0 se sang, LED gan
vao cac pin con lai se tat (do gia tr ta a ra PORTB la 8Fh).
Hoan toan tng t ta co the viet chng trnh a mot gia tr bat k vao cac PORT
cua vi ieu khien PIC16F877A. Tuy nhien co mot ieu can chu y la oi vi PORTA, do pin
RA4 co cc thu e h (xem phu luc 1) nen muon PORTA hien th ket qua mot cach chnh xac
ta can dung mot ien tr keo len gan them vao ben ngoai pin RA4.
4.1.1 CHNG TRNH DELAY
Chng trnh tren giup ta a gia tr ra cac PORT cua vi ieu khien va cac LED se
sang hay tat tuy theo mc logic a ra cac PORT. Bay gi ta lai muon cac LED se chp tat
sau mot khoang thi gian nh trc. Muon vay ta dung them mot oan chng trnh
DELAY. Thc chat cua chng trnh DELAY la cho vi ieu khien lam mot cong viec vo
ngha nao o trong mot khoang thi gian nh trc. Khoang thi gian nay c tnh toan da
tren qua trnh thc thi lenh, hay cu the hn la da vao thi gian cua mot chu k lenh. Co the
viet chng trnh DELAY da tren oan chng trnh sau:
loop
MOVLW
MOVWL
DECFSZ
GOTO
0X20
delay-reg
delay-reg
loop
; gia tr 20h
; a vao thanh ghi delay
; giam gia tr thanh ghi delay-reg 1 n v
; nhay ti label loop neu thanh ghi delay-reg
;sau khi giam 1 n v cha gia tr khac 0.
; lenh nay c thc thi khi delay-reg bang 0
Neu dung oan chng trnh nay th thi gian delay c tnh gan ung nh sau:
td = 3(1+tv)ti
Trong o td la thi gian delay, tv la gia tr a vao thanh ghi delay-reg va ti la thi
gian cua mot chu k lenh va c tnh theo cong thc:
ti = 4/f0
Vi f0 la tan so cua oscillator. S d co cong thc nay la v mot chu k lenh bao gom 4
xung clock. Cong thc nay ch gan ung v ta a bo qua thi gian thc thi cac lenh trc label
loop va mot chu k lenh phat sinh khi thanh ghi delay-reg mang gia tr 0 (trng hp nay
can hai chu k lenh e thc thi lenh DECFSZ).
Do thanh ghi delay-reg ch mang gia tr ln nhat la FFh nen thi gian delay ch gii
han mot khoang thi gian nhat nh tuy thuoc vao xung clock s dung e cap cho vi ieu
khien. Muon tang thi gian delay ta co the goi chng trnh delay nhieu lan hoac tang so
lng vong lap cua chng trnh delay nh sau:
MOVLW
0Xff
MOVWF
delay-reg1
loop DECFSZ
delay-reg1
GOTO
loop1
; thc thi dng lenh nay neu delay-reg khac 0
GOTO
exit
; thc thi dng lenh nay neu delay-reg bang 0
Loop1 MOVLW
0Xff
MOVWF
delay-reg2
DECFSZ
delay-reg2
Exit
MOVWF
GOTO
loop1
loop
Vi oan chng trnh tren thi gian delay ch ket thuc khi ca hai thanh ghi delay-reg1
va delay-reg2 eu mang gia tr 0.
Sau ay la mot v du cu the. Yeu cau at ra la cho cac LED trong chng trnh 4.1
chp tat sau moi 100 miligiay. Gia s ta ang s dung oscillator 4MHz. Khi o thi gian cua
mot chu k lenh la:
ti = 4/4 MHz = 1 uS.
Vi thi gian can delay la td bang 1s th gia tr can a vao thanh ghi delay-reg la:
tv = (td/3ti) 1 = 33332.
Nh vay ta a vao thanh ghi delay-reg2 gia tr 255 (FFh) va thanh ghi delay-reg1 gia
tr 33332/255 = 131 (83h).
Chng trnh c viet nh sau:
;chng trnh 4.1.2
;PORTBTESTANDDELAY.ASM
;Version 1.1
processor
include
16f877a
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; khai bao cac Configuration bits
delay_reg1
delay_reg2
start
EQU 0x20
EQU 0x21
ORG
GOTO
0x000
start
BCF
BCF
STATUS,RP1
STATUS,RP0
; chon BANK0
CLRF
BSF
PORTB
STATUS,RP0
; xoa PORTB
; chon BANK1
MOVLW
0x00
MOVWF
TRISB
BCF
STATUS,RP0
; chon BANK0
MOVLW
MOVWF
0x8F
PORTB
MOVLW
MOVWF
MOVLW
MOVWF
0x83
delay_reg1
0xFF
delay_reg2
loop1 DECFSZ
GOTO
GOTO
loop2 DECFSZ
GOTO
GOTO
delay_reg1
loop2
exit1
delay_reg2
loop2
loop1
; delay 100 ms
exit1 CLRF
PORTB
; xoa PORTB
loop
MOVLW
MOVWF
MOVLW
MOVWF
0x83
delay_reg1
0xFF
delay_reg2
loop3 DECFSZ
GOTO
GOTO
loop4 DECFSZ
GOTO
GOTO
exit2
GOTO
delay_reg1
loop4
exit2
delay_reg2
loop4
loop3
; delay 100 ms
loop
END
Vi chng trnh nay cac pin cua PORTB se thay oi trang thai sau moi khoang thi
gian delay la 100 ms. ieu nay cho phep ta nhan thay bang mat thng v trong mot giay cac
pin cua PORTB se thay oi trang thai 10 lan.
Tuy nhien ta de dang nhan thay mot nhc iem cua chng trnh tren la can ti hai
oan chng trnh delay vi cau truc chng trnh, thuat toan va chc nang hoan toan giong
nhau. ieu nay lam cho chng trnh tr nen phc tap va ton nhieu dung lng bo nh cua vi
ieu khien. ieu nay can c chu trong v dung lng bo nh chng trnh cua mot vi ieu
khien thng nho (oi vi PIC16F877A dung lng bo nh chng trnh la 8K word vi mot
word la 14 bit). Mot phng phap e khac phuc nhc iem nay la s dung chng trnh con
va dung lenh CALL e goi chng trnh con o. Chng trnh con co the c at tai bat
c v tr nao trong chng trnh chnh. Chng trnh 4.2 khi o c viet lai nh sau:
;chng trnh 4.1.3
;PORTBTESTANDDELAY.ASM
;Version 1.2
processor
include
16f877a
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; khai bao cac Configuration bits
delay_reg1
delay_reg2
start
loop
EQU 0x20
EQU 0x21
ORG
GOTO
0x000
start
BCF
BCF
STATUS,RP1
STATUS,RP0
CLRF
BSF
PORTB
STATUS,RP0
; xoa PORTB
; chon BANK1
MOVLW
MOVWF
0x00
TRISB
BCF
STATUS,RP0
; chon BANK0
MOVLW
MOVWF
0x8F
PORTB
CALL
delay100ms
CLRF
CALL
GOTO
PORTB
delay100ms
loop
; xoa PORTB
; vong lap vo han
Delay100ms
MOVLW
MOVWF
MOVLW
MOVWF
0x83
delay_reg1
0xFF
delay_reg2
loop1 DECFSZ
GOTO
GOTO
loop2 DECFSZ
GOTO
GOTO
Exit
RETURN
delay_reg1
loop2
exit
delay_reg2
loop2
loop1
; delay 100 ms
; tr ve chng trnh chnh
END
Vi cach viet chng trnh s dung chng trnh con, cau truc chng trnh se tr nen
gon gang de hieu hn, linh hoat hn va tiet kiem c nhieu dung lng bo nh chng trnh.
Bay gi ta se ban en mot thuat toan khac e viet chng trnh delay. Ve nguyen tac
th thuat toan mi nay khong co nhieu khac biet so vi thuat toan cu, tuy nhien lenh s dung
trong chng trnh va cach tnh toan thi gian delay th khac nhau. Chng trnh con
delay100ms vi oscillator 4 MHz co the c viet lai nh sau:
delay100ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO
d100
count1
0xC7
counta
0x01
countb
counta,1
$+2
END
DECFSZ
GOTO
DECFSZ
GOTO
RETLW
countb,1
delay_0
count1,1
d1
0x00
Trc tien ta xet oan chng trnh ke t label delay_0. Lenh DECFSZ mat mot
chu k lenh (tr trng hp thanh ghi counta mang gia tr 0 th can 2 chu k lenh), lenh GOTO
$+2 mat hai chu k lenh. Lenh nay co tac dung cong vao bo em chng trnh gia tr 2, khi o
chng trnh se nhay ti lenh co a ch (PC+2), tc la lenh GOTO delay_0, lenh nay cung
ton hai chu k lenh. Nh vay ta can tong cong 5 chu k lenh e giam gia tr trong thanh ghi
counta 1 n v. Thanh ghi counta mang gia tr 199 (C7h), do o oan chng trnh nay se tao
ra mot khoang thi gian delay:
td = 5(counta+1)*ti = 5(199+1)*1 uS = 1 mS
Muon tao ra thi gian delay 100 mS, ta ch viec a gia tr 100 vao thanh ghi count1.
Vi giai thuat nay thi gian delay tao ra se dai hn so vi giai thuat ma ta s dung
chng trnh 4.2. Ben canh o ta co the viet mot chng trnh con co tac dung delay mot
khoang thi gian bat k la boi so cua 1 mS mot cach de dang.
Trong chng trnh tren ta con s dung them mot lenh kha la la lenh RETLW. Lenh
nay co tac dung tr ve v tr ma chng trnh con c goi va thanh ghi W khi o mang gia tr
la tham so cua lenh RETLW (00h). Trong trng hp nay thanh ghi W khong can mang mot
gia tr cu the khi quay tr ve chng trnh chnh nen lenh RETLW ch co tac dung nh lenh
RETURN.
4.1.2 MOT SO NG DUNG VE AC TNH I/O CUA CAC PORT IEU KHIEN
Da vao chng trnh delay va thao tac a d l ieu ra cac PORT, ta phat trien them
mot so chng trnh nho vi muc ch lam quen vi cach viet chng trnh cho vi ieu khien
PIC16F877A.
ng dung 4.1:
Da vao mach nguyen l hnh 4.1 viet chng trnh ieu khien LED chay. Cu the la
sau thi gian delay 250 ms, LED tiep theo se sang mot cach tuan t t tren xuong di.
Chng trnh nay c viet da vao chng trnh 4.3 vi mot vai thay oi nho. Thay
v a mot gia tr bat k ra PORT, ta a ra PORB gia tr 80h, sau o dch phai gia tr 80h sau
moi khoang thi gian delay (dung lenh RRF).
; Chng trnh 4.1.4
; Chng trnh ieu khien LED chay
processor
16f877a
; khai bao vi ieu khien
include
<p16f877a.inc>
; header file nh kem
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; khai bao cac Configuration bits
;-------------------------------------------------------------------------------------------------------------;Khai bao bien
;-------------------------------------------------------------------------------------------------------------count1
EQU 0x20
; dung cho chng trnh delay
counta
EQU 0x21
; dung cho chng trnh delay
countb
EQU 0x22
; dung cho chng trnh delay
start
loop
ORG
GOTO
0x000
start
BCF
BCF
CLRF
BSF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
CALL
RRF
GOTO
STATUS,RP1
STATUS,RP0
PORTB
STATUS,RP0
0x00
TRISB
STATUS,RP0
0x8F
PORTB
delay100ms
PORTB,1
loop
delay100ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
d100
count1
0xC7
counta
0x01
MOVWF
delay_0
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETLW
END
countb
counta,1
$+2
countb,1
delay_0
count1,1
d1
0x00
; delay 100ms
; tr ve chng trnh chnh
; ket thuc chng trnh
Nh vay da tren mot so chng trnh c ban, ta ch can thay oi mot so chi tiet la co
the tao ra mot ng dung mi.
Mot phng phap khac e viet chng trnh tren la dung bang d lieu. Phng phap
bang d lieu c a ra ay khong mang tnh chat toi u hoa giai thuat chng trnh ma
ch mang tnh chat lam quen vi mot giai thuat mi, qua o tao ieu kien thuan li hn trong
viec viet cac chng trnh ng dung phc tap hn sau nay. Ta co the viet lai chng trnh
tren theo phng phap bang d lieu nh sau:
; Chng trnh 4.1.5
; Chng trnh ieu khien LED chay dung bang d lieu
processor
16f877a
; khai bao vi ieu khien
include
<p16f877a.inc>
; header file nh kem
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; khai bao cac Configuration bits
count1
EQU 0x20
; dung cho chng trnh delay
counta
EQU 0x21
; dung cho chng trnh delay
countb
EQU 0x22
; dung cho chng trnh delay
count
EQU 0x23
; dung e tra bang d lieu
ORG
GOTO
start
BCF
BCF
CLRF
BSF
MOVLW
MOVWF
0x000
start
STATUS,RP1
STATUS,RP0
PORTB
STATUS,RP0
0x00
TRISB
Loop1
Loop2
BCF
STATUS,RP0
; chon BANK0
CLRF
count
MOVF
CALL
MOVWF
CALL
INCF
count, 0
Table
PORTB
delay100ms
count, 0
XORLW
BTFSC
GOTO
INCF
GOTO
d8
STATUS,Z
Loop1
count, 1
Loop2
ADDWF
PCL,1
Table
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
delay100ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
b10000000
b01000000
b00100000
b00010000
b00001000
b00000100
b00000010
b00000001
d100
count1
0xC7
counta
0x01
countb
counta,1
$+2
countb,1
delay_0
count1,1
d1
; delay 100ms
END
RETURN
phan trc ta a tng e cap en lenh RETLW nhng khi o lenh nay ch co tac
dung nh lenh RETURN. Tuy nhien trong trng hp nay lenh RETLW co mot vai tro cu the
hn la mang d lieu t bang d lieu tr ve chng trnh chnh va xuat ra PORTB d lieu va
mang ve o. Sau moi lan mang d lieu ve bien count se tang gia tr em len. Gia tr em
c a vao thanh ghi W e cong vao thanh ghi PCL. Thanh ghi PCL la thanh ghi cha gia
tr bo em chng trnh, gia tr t bien count c cong vao thanh ghi PCL thong qua thanh
ghi W se ieu khien chng trnh nhay ti ung a ch can lay d lieu t bang d lieu vao
thanh ghi W va thanh ghi W mang d lieu o tr ve chng trnh chnh trong qua lenh
RETLW.
e e phong trng hp gia tr bien count cong vao thanh ghi PCL se ieu khien
chng trnh en v tr vt qua v tr cua bang d lieu (trng hp nay xay ra khi bien count
mang gia tr ln hn 8, khi o v tr lenh can thc thi do bo em chng trnh ch en khong
con ung na), ta so sanh bien count vi gia tr 8. Neu bien count mang gia tr 8 th phep toan
XOR gia bien cao va gia tr se co ket qua bang 0 va c Z trong thanh ghi STATUS se c
set. Luc nay ta can reset lai bien count bang cach nhay ve label Loop1.
Viec dung bang d lieu trong trng hp nay lam cho chng trnh tr nen dai hn,
qua trnh thc thi chng trnh lau hn v bo em chng trnh lien tuc b thay oi gia tr, tuy
nhien ta cung thay c mot u iem cua viec dung bang d lieu la cho phep ta sap xep bo
tr d lieu mot cach linh hoat. Dieu nay the hien qua viec ch can thay oi d lieu trong bang
d lieu, ta se co c nhieu cach ieu khien cac LED sang hay tat theo nhieu qui luat khac
nhau ch khong ch n thuan la dch LED sang sang trai hoac sang phai. ng dung sau ay
cho ta thay ro hn hieu qua cua bang d lieu.
ng dung4 2: Tng t nh ng dung 1, nhng lan nay ta cho LED chay t v tr gia
sang hai pha sau moi khoang thi gian delay 100 ms.
Chng trnh cho ng dung nay hoan toan tng t nh trong ng dung, ta ch can thay
oi bang d lieu mot cach thch hp.
; Chng trnh 4.1.6
; Chng trnh ieu khien hien th LED
processor
16f877a
; khai bao vi ieu khien
include
<p16f877a.inc>
; header file nh kem
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
start
Loop1
Loop2
Table
ORG
GOTO
0x000
start
BCF
BCF
CLRF
BSF
MOVLW
MOVWF
BCF
STATUS,RP1
STATUS,RP0
PORTB
STATUS,RP0
0x00
TRISB
STATUS,RP0
CLRF
count
MOVF
CALL
MOVWF
CALL
INCF
count, 0
Table
PORTB
delay100ms
count, 0
XORLW
BTFSC
GOTO
INCF
GOTO
d8
STATUS,Z
Loop1
count, 1
Loop2
ADDWF
PCL,1
RETLW
RETLW
RETLW
b00011000
b00100100
b01000010
RETLW
RETLW
RETLW
RETLW
RETLW
b10000001
b01000010
b00100100
b00011000
b00100100
delay100ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END
d100
count1
0xC7
counta
0x01
countb
counta,1
$+2
countb,1
delay_0
count1,1
d1
; delay 100ms
; tr ve chng trnh chnh
; ket thuc chng trnh
ng dung 4.3: Test chc nang Input/Output cua cac pin cua vi ieu khien.
cac ng dung trc ta ch lam mot viec la xuat tn hieu ieu khien ra cac PORT
theo mot so qui tac nh san nao o. Trong ng dung nay ta se phat trien them mot chc
nang na cua cac PORT la kha nang nhan tn hieu ieu khien t ben ngoai. Vi ieu khien se
oc tn hieu 0 (ien ap 0 V) va 1 (ien ap 5 V) c tao ra bang cach s dung cac cong tac
an t cac pin RB0:RB3 cua PORTB , sau o kiem tra xem cong tac nao c an va bat LED
tng ng vi cong tac o (cac LED nay c bo tr cac pin RB7:RB4) sang len. e kiem
tra c ng dung nay ta can xay dng s o mach nh sau:
HI
HI
R8 R7 R6 R5
R9
U1
2
3
4
5
6
7
SW5
8
9
10
HI
0
4 MHz
11
12
13
14
15
16
17
18
19
20
RB7/PGD
RB6/PGC
RB5
RA0/AN0
RB4
RA1/AN1
RA2/AN2/VREF-/CVREFRB3/PGM
RB2
RA3/AN3/VREF+
RB1
RA4/T0CLK/C1OUT
RB0/INT
RA5/AN4/SS/C20UT
MCLR/VPP
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
GND
OSC1/CLK
OSC2/CLKOUT
VDD
GND
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC0/T1OSO/T1CLK RC7/RX/DT
RC1/T1OSI/CCP2
RC6/TX/CK
RC2/CCP1
RC5/SDO
RC3/SCK/SCL
RC4/SDI/SDA
RD0/PSP0
RD1/PSP1
RD3/PSP3
RD2/PSP2
R1
40
39
38
37
36
35
34
33
32
31
R2
D1
D2
D3
R3
D4
R4
HI
SW1
30
29
28
27
0
SW2
SW3
26
25
24
23
SW4
22
21
PIC16F877A
LED3
LED4
start
loop
EQU
EQU
ORG
GOTO
6
7
0x000
start
BCF
STATUS,RP1
BCF
STATUS,RP0
CLRF PORTB
BSF
STATUS,RP0
MOVLW
b'00001111'
MOVWF
BCF
TRISB
STATUS,RP0
BTFSS
CALL
BTFSS
PORTB,SW1
switch1
PORTB,SW2
CALL
BTFSS
CALL
BTFSS
CALL
GOTO
switch1
CLRF
BSF
RETURN
switch2
CLRF
BSF
RETURN
switch3
CLRF
BSF
RETURN
switch4
CLRF
switch2
PORTB,SW3
switch3
PORTB,SW4
switch4
loop
PORTB
PORTB,LED1
PORTB
PORTB,LED2
PORTB
PORTB,LED3
PORTB
BSF
RETURN
PORTB,LED4
END
Trong chng trnh tren ta ng dung thuat toan hoi vong thong qua vong lap loop
trong phan chng trnh chnh. Khi cong tac khong c nhan, mc logic tai cac pin noi vi
cong tac la mc 1. Khi cong tac c an, cac pin tren sem nh noi at va mang mc logic 0.
Ta ch viec kiem tra lien tuc trang thai logic cua cac pin o va bat LED tng ng vi cong
tac thong qua cac chng trnh con switch1, switch2, switch3 va swtich4 khi phat hien mot
cong tac nao o c an. Tuy nhien can chu y la phai thiet lap trang thai I/O thch hp cho
tng pin trong PORTB (thiet lap RB3:RB0 la input, RB7:RB4 la output).
Mot iem quan trong can lu y la cac cong tac an thng b doi, tc la khi an xuong
hoac tha ra, ien ap tai cac cong tac se phai trai qua mot giai oan qua o, ien ap se dao
ong khong on nh trong mot khoang thi gian nao o, ngoai ra trang thai logic cua pin cung
se thay oi do mot tac ong tc thi t mot trng ben ngoai ma khong phai do ta an cong
tac. Cac yeu to tren se lam anh hng ti hoat ong cua vi ieu khien. e khac phuc nhc
iem tren ta co hai phng phap:
Phng phap chong doi bang phan cng: ta them cac tu ien vao cac cong tac e
loc bt cac tn hieu nho gay nhieu va cac tn hieu khong on nh trong thi gian qua o.
Phng phap nay cung hieu qua nhng gay ton kem ve linh kien va mach nguyen l tr nen
phc tap.
Phng phap chong doi bang phan mem: ta cho vi ieu khien delay trong mot thi
gian ngan va kiem tra xem cong tac con c an khong, neu cong tac thc s con c an
th mi tien hanh cac thao tac tng ng vi cong tac o.
Chng trnh cai tien e khac phuc nhc iem tren co the c viet nh sau:
;Chng trnh 4.1.8
processor
16f877a
include
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
;-------------------------------------------------------------------------------------------------------------;Khai bao hang
;-------------------------------------------------------------------------------------------------------------SW1
EQU
0
SW2
EQU
1
SW3
EQU
2
SW4
EQU
3
LED1
EQU
4
LED2
EQU
5
LED3
EQU
6
LED4
EQU
7
;-------------------------------------------------------------------------------------------------------------;Khai bao bien
;-------------------------------------------------------------------------------------------------------------count1
EQU
0x20
counta
EQU
0x21
countb
EQU
0x22
;-------------------------------------------------------------------------------------------------------------;Cac khai bao khac
;-------------------------------------------------------------------------------------------------------------SWdel
SET
del150
; gan SWdel vi label del150
;-------------------------------------------------------------------------------------------------------------;Chng trnh
;-------------------------------------------------------------------------------------------------------------ORG
0x000
GOTO
start
start
; v tr bat au chng trnh chnh
BCF
STATUS,RP1
BCF
STATUS,RP0
; chon BANK0
CLRF
PORTB
BSF
STATUS,RP0
; chon BANK1
MOVLW
b'00001111'
MOVWF
TRISB
BCF
STATUS,RP0
; chon BANK0
loop
; vong lap kiem tra cong tac nao c an
BTFSS
PORTB,SW1
; kiem tra SW1
CALL
switch1
; nhay ti chng trnh con switch1 neu
; SW1 c an
BTFSS
PORTB,SW2
; neu SW1 khong c an tiep tuc kiem tra
; SW2
CALL
switch2
; thao tac tng t nh SW1
BTFSS
PORTB,SW3
CALL
switch3
BTFSS
PORTB,SW4
CALL
switch4
GOTO
loop
switch1
CLRF
CALL
BTFSC
RETURN
led1_ON
BSF
BTFSC
RETURN
GOTO
switch2
CLRF
CALL
BTFSC
RETURN
led2_ON
BSF
BTFSC
RETURN
GOTO
switch3
CLRF
CALL
BTFSC
RETURN
led3_ON
BSF
BTFSC
RETURN
GOTO
switch4
CLRF
CALL
BTFSC
RETURN
led4_ON
BSF
PORTB
SWdel
PORTB,SW1
; xoa PORTB
; goi chng trnh delay del150
; kiem tra cong tac 1 con nhan hay khong
; neu khong con nhan th tr ve chng
; trnh chnh
PORTB,LED1
PORTB,SW1
led1_ON
PORTB
SWdel
PORTB,SW2
PORTB,LED2
PORTB,SW2
led2_ON
PORTB
SWdel
PORTB,SW3
PORTB,LED3
PORTB,SW3
led3_ON
PORTB
SWdel
PORTB,SW4
PORTB,LED4
BTFSC
PORTB,SW4
RETURN
GOTO
led4_ON
;--------------------------------------------------------------------------------------------------------------;Chng trnh delay cai tien cho phep nhieu khoang thi gian delay khac nhau
;--------------------------------------------------------------------------------------------------------------del0
RETURN
del1
MOVLW
d'1'
GOTO
delay
del5
MOVLW
d'5'
GOTO
delay
del10
MOVLW
d'10'
GOTO
delay
del20
MOVLW
d'20'
GOTO
delay
del50
MOVLW
d'50'
GOTO
delay
del100
MOVLW
d'100'
GOTO
delay
del150
MOVLW
d'150'
GOTO
delay
del200
MOVLW
d'200'
GOTO
delay
delay
MOVWF
count1
d1
; tao thi gian delay 1 mS
MOVLW
0xC7
MOVWF
counta
MOVLW
0x01
MOVWF
countb
delay_0
DECFSZ
counta,1
END
GOTO $+2
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
countb,1
delay_0
count1,1
d1
Vi chng trnh tren, thi gian an cong tac phai lau hn thi gian delay c ch nh
bi hang so SWdel do cong tac se c kiem tra lai trang thai sau thi gian delay . Neu thi
gian an cong tac khong at yeu cau, thao tac bat LED tng ng vi cong tac o sang len se
khong c thc hien va vi ieu khien se tiep tuc qua trnh kiem tra trang thai cac cong tac
con lai.
Thi gian delay can c kiem nh bang thc nghiem va c an nh mot cach thch
hp e chong doi mot cach hieu qua, ong thi cung khong c lau qua, nh vay se gay
s kho chu trong viec s dung cong tac do phai an cong tac trong mot khoang thi gian u
lau.
Viec thay oi thi gian delay trong chng trnh co the c thc hien n gian bang
cach thay oi label cua chng trnh delay gan cho tham so SWdel. Thc ra ta co the trc
tiep a tham so thi gian delay trc tiep vao thanh ghi count1 ma khong can thong qua tham
so SWdel, ieu o lam cho chng trnh tr nen dai va phc tap hn. Tuy nhien chng trnh
tren cung a cho ta thay c mot iem khac biet gia lenh EQU va lenh SET, giup ta
hieu ro hn va s dung mot cach thch hp cac lenh tren trong cac ng dung khac.
ng dung 4. 4: ng dung tong hp.
Trong ng dung nay ta se tap hp lai tat ca cac k nang c s dung trong cac ng
dung trc. Yeu cau at ra cung nh ng dung 3, tuy nhien ben canh viec bat LED tng ng
vi cong tac sang len, ta phai tiep tuc thc hien mot thao tac na la ra lenh cho vi ieu khien
hien th 8 LED c gan vao PORTD theo mot th t tng ng. Cu the nh sau:
An SW1: LED1 sang, 8 LED PORTD chay t trai sang phai (LED sang chay).
An SW2: LED2 sang, 8 LED PORTD chay t trai sang phai (LED tat chay).
An SW3: LED3 sang, 8 LED PORTD chay t trai sang phai (2 LED sang chay).
An SW4: LED4 sang, 8 LED PORTD chay t trai sang phai (2 LED tat chay).
e test c ng dung nay, ta can phat trien them mach test cua ng dung 3 bang
cach them vao 8 LED PORTD thong qua cac ien tr. Cu the nh sau:
HI
HI
R9
R8 R7 R6 R5
U1
2
3
4
5
6
7
SW5
8
9
10
HI
0
4 MHz
11
12
13
14
15
16
17
18
19
20
MCLR/VPP
RB7/PGD
RB6/PGC
RA0/AN0
RB5
RA1/AN1
RB4
RA2/AN2/VREF-/CVREFRB3/PGM
RA3/AN3/VREF+
RB2
RA4/T0CLK/C1OUT
RB1
RA5/AN4/SS/C20UT
RB0/INT
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
GND
OSC1/CLK
OSC2/CLKOUT
VDD
GND
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC0/T1OSO/T1CLK RC7/RX/DT
RC1/T1OSI/CCP2
RC6/TX/CK
RC2/CCP1
RC5/SDO
RC3/SCK/SCL
RC4/SDI/SDA
RD0/PSP0
RD1/PSP1
RD3/PSP3
RD2/PSP2
R1
40
39
38
37
36
35
34
33
D1
R2
D2
R3
D3
R4
D4
SW1
32
31
SW2
HI
SW3
30
29
28
27
SW4
26
25
24
23
22
21
PIC16F877A
0.33 K
D5
0.33 K
D6
0.33 K
D7
0.33 K
D8
0.33 K
D9
0.33 K
D10
0.33 K
D11
0.33 K
D12
SW4
EQU
3
LED1
EQU
4
LED2
EQU
5
LED3
EQU
6
LED4
EQU
7
;---------------------------------------------------------------------------------------------------------------;Khai bao bien
;---------------------------------------------------------------------------------------------------------------count
EQU
0x20
; bien dung cho qua trnh dch LED
count1
EQU
0x21
; cac bien dung cho chng trnh delay
counta
EQU
0x22
countb
EQU
0x23
;---------------------------------------------------------------------------------------------------------------;Chng trnh
;---------------------------------------------------------------------------------------------------------------ORG
0x000
GOTO
start
start
; v tr bat au chng trnh chnh
BCF
STATUS,RP1
BCF
STATUS,RP0
; chon BANK0
CLRF
PORTB
CLRF
PORTD
BSF
STATUS,RP0
; chon BANK1
MOVLW
b'00001111'
MOVWF
TRISB
MOVLW
0x00
MOVWF
TRISD
BCF
STATUS,RP0
; chon BANK0
loop1
CLRF
count
; reset bien count
CALL
check_key
; goi chng trnh con check_key
loop2
MOVF
count,W
; a ga tr bien count vao thanh ghi W
BTFSC
PORTB,LED1
; kiem tra trang thai bit LED1
CALL
table1
; goi chng trnh con table1 neu bit
; LED1 mang gia tr bang 1
BTFSC
PORTB,LED2
; tiep tuc kiem tra bit LED2 neu bit LED1 bang 0
CALL
table2
; thao tac tng t vi cac bit ch th trang thai cac
; SW con lai
BTFSC
PORTB,LED3
CALL
table3
table1
BTFSC
CALL
MOVWF
PORTB,LED4
table4
PORTD
CALL
INCF
XORLW
BTFSC
GOTO
delay
count,0
d'14'
STATUS,Z
loop1
INCF
count,1
GOTO
loop2
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,f
b'10000000'
b'01000000'
b'00100000'
b'00010000'
b'00001000'
b'00000100'
b'00000010'
b'00000001'
b'00000010'
b'00000100'
b'00001000'
b'00010000'
b'00100000'
b'01000000'
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,f
b'01111111'
b'10111111'
b'11011111'
b'11101111'
b'11110111'
b'11111011'
b'11111101'
b'11111110'
table2
table3
table4
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
b'11111101'
b'11111011'
b'11110111'
b'11101111'
b'11011111'
b'10111111'
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,f
b'11000000'
b'01100000'
b'00110000'
b'00011000'
b'00001100'
b'00000110'
b'00000011'
b'00000011'
b'00000110'
b'00001100'
b'00011000'
b'00110000'
b'01100000'
b'11000000'
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,f
b'00111111'
b'10011111'
b'11001111'
b'11100111'
b'11110011'
b'11111001'
b'11111100'
b'11111100'
b'11111001'
b'11110011'
b'11100111'
b'11001111'
b'10011111'
check_key
BTFSS
CALL
BTFSS
CALL
BTFSS
CALL
BTFSS
CALL
RETURN
switch1
CLRF
BSF
RETURN
switch2
CLRF
BSF
RETURN
switch3
CLRF
BSF
RETURN
switch4
CLRF
BSF
RETURN
delay
PORTB,SW1
switch1
PORTB,SW2
switch2
PORTB,SW3
switch3
PORTB,SW4
switch4
PORTB
PORTB,LED1
PORTB
PORTB,LED2
PORTB
PORTB,LED3
PORTB
PORTB,LED4
MOVLW
MOVWF
d'250'
count1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO
DECFSZ
GOTO
0xC7
counta
0x01
countb
d1
counta,1
$+2
countb,1
delay_0
END
DECFSZ
GOTO
RETURN
count1,1
d1
Trong chng trnh nay ta li dung cac bit trang thai cua cac LED e dung nh cac c
hieu e xac nh thao tac dch LED tng ng vi SW c nhan trong vong lap loop1 va
loop2. Cac thuat toan nh bang d lieu, kiem tra trang thai cong tac, eu a c e cap
en cac phan trc, van e at ra trong chng trnh nay ch la sap xep va to chc hp l
th t cac thao tac va cac thuat toan. Tuy nhien neu oc k chng trnh tren ta se phat hien
mot iem bat hp l v tr at lenh CALL check_key. Neu at v tr nh chng trnh
tren, vi ieu khien se ch kiem tra cac SW ngay tai thi iem ket thuc qua trnh dch LED.
Nh vay muon thay oi thao tac quet LED ta phai an SW ung ngay tai thi iem o, ieu
nay gay nhieu kho khan va tao s bat hp l so vi thc te. e khac phuc ta ch viec at lenh
o vao trong vong lap loop2, khi o trang thai cac SW se c cap nhat thng xuyen hn
sau moi lan dch LED ma khong phai ch cho en khi ket thuc mot qua trnh dch LED.
Ti giai oan nay xem nh ta ket thuc nhng thao tac n gian nhat khi s dung vi
ieu khien PIC16F877A. Trong phan nay ta ch s dung duy nhat vi ieu khien PIC va cac
PORT I/O e xay dng cac ng dung. Ke t phan sau ta se ket hp vi ieu khien PIC vi cac
thiet b ngoai vi khac e phat huy toi a kha nang cua vi ieu khien.
4.2 VI IEU KHIEN PIC16F877A VA IC GHI DCH 74HC595
Muc ch s dung IC 74HC595 la nang cao so lng pin output cua vi ieu khien.
Thay v phai truy xuat trc tiep mot gia tr nao o ra cac PORT I/O, ta co the truy xuat gian
tiep thong qua IC 74HC595. Tuy nhien viec trc tien la phai tm hieu xem IC 74HC595 hoat
ong nh the nao va cach ieu khien no ra sao. Hnh sau la s o khoi cua IC:
lieu), SCK (pin ieu khien viec dch d lieu vao IC thong qua cac xung clock),
(pin tac
ong mc thap dung e xoa d lieu) va pin QH (pin a d lieu noi tiep ra ngoai, pin nay
dung e noi nhieu IC 74HC595 lai vi nhau) va pin
(pin cho phep ngo ra). Ta co the ieu
khien mot IC 74HC595 hoac nhieu IC ghep vi nhau thong qua 4 pin RCK, SCK, SER va
. ieu nay cho phep m rong mot cach vo han so lng pin output cho vi ieu khien,
tat nhien vi mot nhc iem la thi gian truy xuat cham do d lieu phai c dch tng bit
vao IC thong qua tng canh dng tac ong vao pin SCK trc khi a d lieu ra ngoai
thong qua cac pin QH:QA. Sau ay la s o chan va bang s that cua IC 74HC595:
VCC
DATA OUT
14
9
7
6
5
4
3
2
1
15
0
7
6
5
4
3
2
1
15
SDI
11
12
74HC595
QH
QG
QF
QE
QD
QC
QB
QA
GND
SDO
74HC595
SRCLK
RCLK
13
10
G
CLR
11
12
14
SDI
16
SDO
GND
SRCLK
RCLK
VCC
QH
QG
QF
QE
QD
QC
QB
QA
G
CLR
16
HI
HI
13
10
CLR
10 K
U1
HI
0
4 MHz
11
12
13
14
15
16
17
18
19
20
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
GND
PIC16F877A
OSC1/CLK
OSC2/CLKOUT
VDD
GND
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC0/T1OSO/T1CLK RC7/RX/DT
RC1/T1OSI/CCP2
RC6/TX/CK
RC2/CCP1
RC5/SDO
RC3/SCK/SCL
RC4/SDI/SDA
RD0/PSP0
RD1/PSP1
RD3/PSP3
RD2/PSP2
14
32
31
12
11
10
13
30
29
28
27
26
25
24
23
16
U3
VCC
8
9
10
40
39
38
37
36
35
34
33
SDI
RCLK
SRCLK
SDO
QA
QB
QC
QD
CLR
G 74HC595 QE
QF
QG
QH
GND
RB7/PGD
RB6/PGC
RA0/AN0
RB5
RA1/AN1
RB4
RA2/AN2/VREF-/CVREFRB3/PGM
RA3/AN3/VREF+
RB2
RA4/T0CLK/C1OUT
RB1
RA5/AN4/SS/C20UT
RB0/INT
0.33 K
D1
0.33 K
D2
9
15
1
2
3
4
5
6
7
0.33 K
D3
0.33 K
D4
0.33 K
D5
0.33 K
D6
0.33 K
D7
0.33 K
D8
SW5
MCLR/VPP
HI
2
3
4
5
6
7
HI
22
21
PORTB
clear
BSF
MOVLW
clear
0xCA
; a pin
tr ve mc logic cao
; d lieu can a ra IC 74HC595
CALL
BSF
NOP
BCF
GOTO
serout
MOVWF
MOVLW
MOVWF
testbit
END
serout
latch
latch
$
sendreg
0x08
count
BCF
BTFSC
BSF
BSF
NOP
data
sendreg,7
data
clock
BCF
RLF
MOVWF
DECFSZ
GOTO
clock
sendreg,0
sendreg
count,1
testbit
RETURN
iem ang chu y nhat cua chng trnh tren la thuat toan xac nh gia tr bit d lieu
can dich vao IC 74HC595. Ban au ng d lieu (SDI) se c mac nh la mc logic 0, sau
o ta kiem tra bit d lieu o (bit th 7 trong thanh ghi sendreg) xem co thc s bang 0 hay
khong. Neu bang 1 th ta set ng d lieu len mc logic 1. Nh vay ta lan lt kiem tra mc
logic cua cac bit d lieu can a vao IC 74HC595 va set/clear ng d lieu SDI tng ng
vi bit d lieu can dch. Viec con lai la tao canh dng tai pin SCK e a trang thai logic
cua ng d lieu SDI vao trong IC 74HC595. Nh vay sau 8 lan dch, 8 bit d lieu cha
trong thanh ghi sendreg a c a vao thanh ghi dch ben trong IC, va e a d lieu o ra
cac pin output QH:QA, ta ch viec tao mot canh dng tai pin RCK, d lieu trong thanh ghi
sendreg se c the hien bang cac trang thai sang/tat cua cac LED gan vao IC 74HC595, tat
nhien vi ieu kien pin
phai c noi mass hoac c a ve mc logic 0.
Mot ieu can lu y na la canh tac ong cua pin
. Do canh tac ong cua pin nay
la canh am nen can co s ieu chnh thch hp e co the ieu khien IC 74HC595 mot cach
ung an.
Trong trng hp noi nhieu IC 74HC595 lai vi nhau th thuat toan hoan toan tng
t, tuy nhien d lieu se lan lt a vao thanh ghi sendreg va goi chng trnh con serout.
Qua trnh nay c lap lai cho en khi toan bo d lieu a c a vao cac IC, sau o mi
a d lieu ra ngoai bang cach tao mot canh dng tai pin RCK.
4.3 PIC16F877A VA LED 7 OAN
LED 7 oan la mot cong cu thong dung c dung e hien th cac thong so di dang
cac so t 0 en 9. Mac du cong cu LCD giup ta the hien cac thong so mot cach linh ong hn
nhng LED 7 oan van c s dung nhieu trong cong nghiep do cac u the cua no nh
chu s anh hng cua nhiet o, de nhan ra va goc nhn rong.
LED 7 oan bao gom 7 oan LED c anh dau la cac k t a,b,c,d,e,f,g va mot dau
cham thap phan k hieu la dp. Nh vay ta co the xem LED 7 oan la mot to hp gom 8 LED
c bo tr theo mot qui tac nhat nh dung e hien th cac ch so thap phan.
Co hai loai LED 7 oan, o la loai Anode chung (cc Anode cua cac LED c noi
chung vi nhau) va loai Cathode chung (Cc Cathode cua cac LED c noi chung vi
nhau). Tuy theo tng loai ma ta co the ieu khien cac LED trong to hp o sang tat mot cach
thch hp. oi vi loai Anode chung, mot LED se sang neu mc logic a vao pin ieu khien
LED o la mc 0. . oi vi loai Cathode chung, mot LED se sang neu mc logic a vao pin
ieu khien LED o la mc 1.
oan o sang hay tat. S d ta noi chung cac pin a, b, c, d, e, f, g va dp lai vi nhau c la
da vao hien tng lu anh cua mat. Mat ngi ch co kha nang nhan c 24 hnh anh trong
mot giay, do o khi cac LED 7 oan chp tat vi mot toc o qua nhanh nh toc ot x l cua
mot vi ieu khien th mat ngi khong co kha nang phat hien ra. Bang cach o neu ta lan
lt cho tng LED 7 oan sang trong mot khoang thi gian rat ngan nao o th mat ngi se
b anh la rang tat ca cac LED ang sang cung mot luc.
e hieu them ve cach hien th va thuat toan dung e hien th LED 7 an, ta se thc
hien mot ng dung n gian la hien th 2 LED 7 oan.
ng dung 4.6: Hien th LED 7 oan.
Trong ng dung nay ta se hien th mot so co 2 ch so tren 2 LED.
Loai LED 7 oan ta se s dung la loai Anode chung. Trc het ta can xac nh trc
s o noi chan gia vi ieu khien va cac LED 7 oan e t o xac nh c d lieu can a
vao e ieu khien LED 7 oan hien th mot ch so thap phan nao o. Gia s ta noi cac pin
d lieu cua LED 7 oan vao PORTD cua PIC16F877A theo th t nh sau:
Pin dp noi vao pin RD7
Pin g noi vao pin RD6
Pin f noi vao pin RD5
Pin e noi vao pin RD4
Pin d noi vao pin RD3
Pin c noi vao pin RD2
Pin b noi vao pin RD1
Pin a noi vao pin RD0
Cac pin Anode chung cua LED 7 oan se c noi vao cac pin RB0 va RB1 cua
PORTB. Nh vay muon ieu khien mot oan LED nao o sang a pin ieu khien oan LED
tng ng ve mc logic 0. Vi cach noi chan nh vay ta co bang d lieu tng ng vi cac
ch so can hien th tren LED 7 oan nh sau:
Ch so
0
1
2
3
4
5
6
7
8
9
RB7
(dp)
1
1
1
1
1
1
1
1
1
1
RB6
(g)
1
1
0
0
0
0
0
1
0
0
RB5
(f)
0
1
1
1
0
0
0
1
0
0
RB4
(e)
0
1
0
1
1
1
0
1
0
1
RB3
(d)
0
1
0
0
1
0
0
1
0
0
RB2
(c)
0
0
1
0
0
0
0
0
0
0
RB1
(b)
0
0
0
0
0
1
1
0
0
0
RB0
(a)
0
1
0
0
1
0
0
0
0
0
Ma
Hex
C0h
F9h
A4h
B0h
99h
92h
82h
F8h
80h
90h
Da vao bang d lieu tren, muon hien th mot ch so thap phan nao o ra LED 7
oan, ta ch viec a ma hex cua ch so o ra PORTD cua vi ieu khien. Mot iem can lu y
la bang ma tren khong co nh ma no phu thuoc nhieu vao cau truc phan cng cua mang
ieu khien, do o tuy theo cach ket noi phan cng ma ta co c bang ma tng ng.
en ay xem nh ta a hoan tat qua trnh chuyen oi d lieu t dang thap phan sang
dang ma cua LED 7 oan. Viec con lai la lam sao e cho phep mot LED nao o trong day
LED 7 oan mac song song tat hoac sang len. Mot giai phap n gian la s dung cac BJT
hoat ong vi chc nang nh la cac cong tac ong m e cho phep hoac khong cho phep
nguon cung cap a vao LED 7 oan, cac cong tac nay se c ieu khien bi cac pin
trong PORTB. S o nguyen l cua cac cong tac nay khi dung e ieu khien LED 7 oan
loai Anode chung nh sau:
5V
HI
10 K
RBx
LO
Hnh 4.9 S o nguyen l cong tac ieu khien cap nguon cho LED 7 oan Anode chung
Ta noi pin cua Port ieu khien vao cc B cua BJT loai pnp thong qua mot ien tr, gia
tr ien tr nay phu thuoc vao kha nang chu dong toi a cua LED 7 oan. Cc E cua BJT
c noi len nguon 5V va cc C c a vao pin VCC cua LED 7 oan. Khi pin ieu khien
mc logic 1, do VEB cua BJT bang 0 nen BJT khong dan, do o khong co dong ien o qua
LED. Khi Port ieu khien mc logic 0, dong o t cC E sang cc B cua BJT lam cho BJT
dan bao hoa, tr khang cua BJT xem nh bang 0 va LED 7 oan xem nh c noi trc tiep
vi nguon cung cap.
Vi ng dung tren, chang han ta s dung 2 pin RB0 (ieu khien LED hang n v) va
RB1 (ieu khien LED hang chuc) e ieu khien cap nguon cho cac LED. Khi o chng trnh
c viet nh sau:
;Chng trnh 4.3.1
; Chng trnh hien th mot so co hai ch so cho trc ra LED 7 oan
processor
16f877a
include
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
start
loop
count1
counta
countb
EQU
EQU
EQU
ORG
GOTO
0x000
start
BCF
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
CLRF
CLRF
STATUS, RP1
STATUS,RP0
0x00
TRISD
0x00
TRISB
STATUS,RP0
PORTB
PORTD
MOVLW
MOVWF
MOVLW
MOVWF
CALL
0x99
PORTD
b'11111101'
PORTB
delay_1ms
MOVLW
MOVWF
MOVLW
MOVWF
CALL
0x92
PORTD
b'11111110'
PORTB
delay_1ms
GOTO
loop
delay_1ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO $+2
0x20
0x21
0x22
; chon BANK1
; PORTD <- output
; PORTB <- output
; chon BANK0
; hien th so 4
; cap nguon cho LED hang chuc
; goi chng trnh con delay_1ms
; hien th so 5
END
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
countb,1
delay_0
count1,1
d1
Nh vay trong chng trnh tren, moi LED 7 oan se lan lt c bat sang trong
khoang thi gian 1 ms, sau o LED khac c bat len trong khoang thi gian 1 ms. Thao tac
nay c lap i lap lai trong vong lap loop. Thc chat la cac LED se chp tat lien tuc moi
khoang thi gian 1ms, nhng do thi gian chp tat qua nhanh nen mat ngi b anh la la
ca hai LED ang sang cung mot luc. Hien tng nay co the nhan biet ro rang hn bang cach
tang thi gian delay en mot mc nao o ma mat ngi co the nhan biet c, khi o ta se
thay ro rang la tng LED mot c bat tat mot cach tuan t.
Tng t ta co the m rong so lng LED bang cach noi song song tat ca chung lai
vi nhau va ap dung thuat toan tren e hien th.
Bay gi ta th giai quyet mot trng hp phc tap hn. Trong v du tren ta t an nh
ch so hien th, tuy nhien neu ch so can hien th (ch so hang chuc va hang n v) c
vha trong mot thanh ghi nao o th se co mot so van e phat sinh nh sau:
Th nhat, do d lieu trong thanh ghi c lu di dang d lieu 8 bit nen ch
so hang chuc se c cha trong 4 bit cao va ch so hang n v se c cha trong 4 bit
thap. Vay lam the nao e tach c ch so hang chuc va hang n v cha trong thanh ghi??
Mot thuat toan n gian la s dung phep toan AND. D lieu dang nh phan se gi nguyen gia
tr khi ta thc hien phep toan AND vi 1 va se c xoa ve 0 neu thc hien phep toan AND
vi gia tr 0. Bang cach o muon tach 4 bit thap, ta AND 4 bit cao vi 0, 4 bit thap vi 1 va
ngc lai oi vi trng hp can tach 4 bit cao.
Th hai, do d lieu c lu di dang ma HEX, bao gom cac ch so t 0 en
9 va cac k t t 0 en A. Vay lam the nao e chuyen oi d lieu t dang ma HEX ve dang
thap phan?? ( can lu y la tap lenh danh cho PIC khong co phep toan chia lay phan d hay
phan nguyen DIV va MOD cung nh cac phep toan so sanh). Phng phap n gian nhat la
so sanh vi tng ch so HEX va ap dung phep chuyen oi oi vi tng trng hp.
Va cuoi cung, lam sao hien th ch so thap phan tren ra LED 7 oan?? Nh
vay ta can tien hanh mot bc na la chuyen oi t ma thap phan sang ma LED 7 oan, va
mot phng phap ta van thng s dung trong cac ng dung trc la phng phap bang d
lieu se tiep tuc c s dung trong chng trnh nay. Gia tr cua ch so can chuyen oi se
c cong vao thanh ghi PCL e mang ma chuyen oi tng ng t bang d lieu tr ve.
Bay gi ta th viet chng trnh thc hien thao tac tren theo cac giai thuat a e ra.
Chng trnh se c viet nh sau:
start
count1
counta
countb
display_reg
hang_chuc
hang_don_vi
EQU
EQU
EQU
EQU
EQU
EQU
0x20
0x21
0x22
0X23
0X24
0X25
xx
xx1
EQU
EQU
0x26
0X27
ORG
GOTO
0x000
start
BCF
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
CLRF
STATUS, RP1
STATUS,RP0
0x00
TRISD
0x00
TRISB
STATUS,RP0
b'11111111'
PORTB
PORTD
MOVLW
MOVWF
ANDLW
MOVWF
0X5F
display_reg
0x0F
hang_don_vi
MOVLW
ANDWF
MOVWF
SWAPF
0xF0
display_reg,0
hang_chuc
hang_chuc,1
Loop
MOVF
CALL
hang_don_vi,0
chuyenma
MOVWF
BTFSC
hang_don_vi
xx1,0
INCF
MOVF
hang_chuc,1
hang_chuc,0
CALL
MOVWF
chuyen_ma
hang_chuc
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
hang_don_vi,0
table
PORTD
b'11111110'
PORTB
delay_1ms
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
GOTO
chuyen_ma
hang_chuc,0
table
PORTD
b'11111101'
PORTB
delay_1ms
loop
MOVWF
MOVLW
XORWF
BTFSC
GOTO
xx
0x00
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x01
xx,0
STATUS,Z
nho_hon_10
MOVLW
0x02
XORWF
BTFSC
GOTO
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x03
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x04
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x05
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x06
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x07
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x08
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x09
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
0x0A
xx,0
BTFSC
GOTO
STATUS,Z
bang_10
MOVLW
XORWF
BTFSC
GOTO
0x0B
xx,0
STATUS,Z
bang_11
MOVLW
XORWF
BTFSC
GOTO
0x0C
xx,0
STATUS,Z
bang_12
MOVLW
XORWF
BTFSC
GOTO
0x0D
xx,0
STATUS,Z
bang_13
MOVLW
XORWF
BTFSC
GOTO
0x0E
xx,0
STATUS,Z
bang_14
MOVLW
XORWF
BTFSC
GOTO
nho_hon_10
MOVLW
MOVWF
MOVF
0x0F
xx,0
STATUS,Z
bang_15
0x00
xx1
xx,0
RETURN
bang_10
MOVLW
MOVWF
RETLW
0x01
xx1
0x00
bang_11
MOVLW
MOVWF
0x01
xx1
; x l trng hp nho hn 10
; bit 0 cua thanh ghi xx1 mang gia tr 0
; lu gia tr sau chuyen oi cha trong
; thanh ghi xx vao thanh ghi W
; tr ve chng trnh chnh
; bit 0 cua thanh ghi xx1 mang gia tr 1
; e bao hieu can tang gia tr hang tiep theo
; mang gia tr chuyen oi tng ng tr ve
; chng trnh chnh thong qua thanh ghi W
; thao tac tng t vi cac trng hp con lai
RETLW
bang_12
MOVLW
MOVWF
RETLW
bang_13
MOVLW
MOVWF
RETLW
bang_14
MOVLW
MOVWF
RETLW
bang_15
MOVLW
MOVWF
RETLW
Table
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
delay_1ms
MOVLW
MOVWF
d1
MOVLW
MOVWF
MOVLW
MOVWF
delay_0
DECFSZ
GOTO $+2
DECFSZ
0x01
0x01
xx1
0x02
0x01
xx1
0x03
0x01
xx1
0x04
0x01
xx1
0x05
PCL,1
0xC0
0xF9
0xA4
0xB0
0x99
0x92
0x82
0xF8
0x80
0x90
d'1'
count1
0xC7
counta
0x01
countb
counta,1
countb,1
GOTO delay_0
DECFSZ
count1,1
GOTO d1
RETURN
END
Trong chng trnh con chuyen_ma, ta lan lt so sanh gia tr sau khi tach t thanh
ghi dplay_reg thanh hang chuc (cha trong thanh ghi hang_chuc) va hang n v (cha
trong thanh ghi hang_don_vi) so sanh vi tng gia tr t 0 en 15. Neu so can chuyen ma
nho hn 10, ta ch viec gi nguyen gia tr va tr ve chng trnh chnh. Neu so can chuyen
ma co gia tr ln hn hoac bang 10, ta a gia tr can chuyen vao thanh ghi W thong qua lenh
RETLW va thiet lap mot c hieu nao o do ta t tao e bao hieu rang ch so can chuyen
oi co gia tr ln hn 10 ( ay la bit 0 cha trong thanh ghi xx1 e bao hieu rang can tang
gia tr hang tiep theo len 1 n v). Chng trnh chnh se co oan chng trnh x l c
hieu nay e cho ra cac ch so thap phan thch hp ng vi cac ch so HEX. Cong viec con
lai la chuyen oi t so thap phan sang ma LED 7 oan thong qua bang d lieu va hien th ket
qua ra cac LED.
Nh vay trong muc nay ta a thc hien c mot so thao tac, chng trnh va giai
thuat c ban oi vi LED 7 oan va cach hien th tren LED. Cac thao tac bao gom cach hnh
thanh bang d lieu, cach ket noi LED 7 oan va phng phap hien th. Cac giai thuat bao
gom cac cach chuyen oi t ma HEX sang ma thap phan, t ma thap phan sang ma LED 7
oan va cach tach ch so hang chuc va hang n v cha trong mot thanh ghi bat k. T cac
thao tac c ban nay ta co the phat trien thanh nhieu ng dung phc tap hn cho vi ieu khien
khi lam viec vi LED 7 oan, ac biet la cac ng dung can hien th ket qua di dang so. Ta
se tiep ban k en cac ng dung nay trong phan tiep theo khi e cap en cac TIMER.
4.4 NGAT VA CAU TRUC CUA MOT CHNG TRNH NGAT
Ngat va cac loai ngat a c trnh bay cu the trong chng 2. ay ta ch tom tat lai
mot so ac iem quan trong cua ngat va thong tin mang tnh ng dung.
Co the noi ay la mot khai niem mang tnh tru tng cao nhng cung c thiet lap
da tren cac hien tng va tnh huong co thc trong thc te. Chang han nh trong cuoc song
hang ngay, oi khi ta phai tam ngng mot cong viec nao o e lam mot cong viec khac can
thiet hn, chang han nh tam ngng mot cong viec nao o ang lam e nghe ien thoai. S
tam ngng nay can c bao hieu bi mot tn hieu (trong trng hp tren la chuong ien
thoai chang han) va phai c ta cho phep trc o (neu ta khong cho phep ien thoai reo th
ien thoai se khong reo). T v du thc te tren ta co the lien tng en ngat va cach x l
ngat cua mot vi ieu khien. Mot ngat la mot tn hieu ieu khien bat buoc vi ieu khien tam
ngng cong viec ang lam e tien hanh cac thao tac ma ngat o qui nh thong qua chng
trnh ngat. Tn hieu ieu khien nay c bao hieu bi c ngat (tng ng vi chuong ien
thoai v du tren) va phai c ta cho phep trc o thong qua cac bit ieu khien cho phep
hoac khong cho phep ngat. Mot chng trnh ngat thong thng se c tach rieng vi
chng trnh chnh e bao am tnh oc lap cua chng trnh ngat.
oi vi vi ieu khien PIC16F877A, khi mot ngat (a c cho phep trc o) xay ra
th phan ng cua no la quay ve a ch 0004h va thc hien cac lenh bat au tai a ch nay.
Thong thng oi vi chng trnh viet cho vi ieu khien PIC, chng trnh ngat se c at
tai ay va chng trnh chnh se c bat au mot a ch cach o mot oan an toan sao
cho chng trnh chnh va chng trnh ngat khong bi chong len nhau. Neu ta s dung trnh
bien dch MPLAB, trnh bien dch se bao loi khi hien tng tren xay ra va ta co the khac
phuc bang cach di chng trnh chnh i mot oan xa hn.
Mot iem can lu y na la trong qua trnh thc hien chng trnh ngat, noi dung cua
mot so thanh ghi quan trong co kha nang b thay oi (thanh ghi W chang han). Do o trc
khi thc hien chng trnh ngat ta can thc hien mot thao tac la cat mot so thanh ghi quan
trong vao mot vai o nh nao o va phai tra lai gia tr ban au cho cac thanh ghi o trc khi
thoat khoi chng trnh ngat bang lenh RETFIE.
Neu s dung trnh bien dch MPLAB, cau truc chng trnh nay a c viet san, ta
ch viec a chng trnh ngat va chng trnh chnh vao cac v tr thch hp c chu thch
trong chng trnh, tuy nhien da vao cac nhan nh nh tren ta hoan toan co the t nh ra
mot cau truc chng trnh cho rieng mnh nh sau:
;------------------------------------------------------------------------------------------------------------; Mot so thong tin can ghi chu ve chng trnh
;------------------------------------------------------------------------------------------------------------TITLE "ten chng trnh"
processor
16f877a
include
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; V du ve cach khai bao mot vi ieu khien
;---------------------------------------------------------------------------------------------------------------; nh ngha phan cng
;---------------------------------------------------------------------------------------------------------------; nh ngha cac chan xuat nhap e de dang s dung
; v du
#DEFINE
DEN1
PORTB,0
#DEFINE
DEN2
PORTB,1
#DEFINE
DEN3
PORTB,2
RES
; Xoa c ngat trc khi thc hien cac lenh trong ngat
; Bat au cac lenh cho chng trnh ngat
;--------------------------------------------------------------------------------------------------------------; Ket thuc chng trnh ngat
; oan chng trnh bat buoc va khong c thay oi
; co tac dung phuc hoi gia tr ban au cho mot so thanh ghi quan trong
;--------------------------------------------------------------------------------------------------------------ENDINT
MOVF
MOVWF
MOVF
MOVWF
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE
FSR_SV,W
FSR
PCH_SV,W
PCLATH
STAT_SV,W
STATUS
W_SAVE,F
W_SAVE,W
; FSR = FSR_SV
; PCLATH = PCH_SV
; STATUS = swap_nibbles( STAT_SV )
; W = swap(swap( W_SAVE )) (no change Z bit)
; RETURN!
; 1 cycle to resumption of code (branch penalty)
;------------------------------------------------------------------------------------------------------------; Cham dt chng trnh ngat
; Bat au cac bc khi tao cho toan bo chng trnh
;------------------------------------------------------------------------------------------------------------ORG
0X0000
GOTO
START
ORG
0X0050
; Phai cach ra mot oan e tranh e len chng trnh ngat
START
;----------------------------------------------------------------------------------------------------------; Khi tao cac PORT
; Khi tao cac bien
; Khi tao cac khoi chc nang (Timer, CCP, PWM,)
;----------------------------------------------------------------------------------------------------------; Bat au vong lap chnh
MAIN
; Cac thao tac trong vong lap chnh
; Cac chng trnh con
END
So vi cac chng trnh trc ay th bat au t giai oan nay, cac chng trnh se tr
nen phc tap hn ve cau truc cung nh chc nang do co them chng trnh ngat. Tuy nhien ta
se de dang lam quen vi cau truc mi nay sau mot vai chng trnh n gian co lien quan
en ngat. Ta se bat au vi Timer va cac ngat cua Timer.
4.5 TIMER VA NG DUNG
Nh ta a biet PIC16F877A co 3 bo nh thi la Timer0, Timer1 va Timer2. Moi
Timer co mot cau truc va chc nang rieng tuy thuoc vao muc ch s dung. Co the phan chia
mot cach tng oi muc ch s dung cua mot Timer nh sau:
Tac dung nh thi (Timing): cac Timer se s dung xung clock ong bo c
cung cap bi oscillator cua vi ieu khien hoac t mot oscillator co nh RC0/T1OSO/T1CKI
va RC1/T1OSICCP2 oi vi Timer1. Gia tr em cha trong thanh ghi cua cac Timer se tang
tuan t sau mot khoang thi gian tuan t c nh trc da vao cac thong so cua prescaler,
postscaler, chu k lenh va cac gia tr nh trc c a vao cac thanh ghi cha gia tr em
cua cac Timer. Day cung la l do tai sao ta noi Timer co tac dung nh thi v da vao gia tr
em cua cac Timer, ta co the xac nh mot cach tng oi chnh xac thi gian thc.
Tac dung em (Counting): cac Timer se lay xung em t ben ngoai. Cac xung
em nay co tac dung phan anh mot hien tng nao o t the gii ben ngoai va thong qua
viec em cac xung clock o, ta co the xac nh c so lan mot hien tng nao o xay ra, t
o an nh cac thao tac tng ng oi vi hien tng o.
Thong thng cac thao tac oi vi Timer da vao cac ngat va chng trnh ngat. Ta
can xem lai cau truc mot chng trnh ngat c trnh bay phan trc e qua trnh viet
chng trnh cho Timer tr nen thuan li hn. Ben canh o cach thiet lap cac che o hoat
ong oi vi moi Timer cung khac nhau. Van e nay se c trnh bay cu the trong tng
chng trnh ng dung, ngoai ra co the tham khao them mot so tai lieu cua nha san xuat
Microchip e biet them chi tiet.
4.5.1 TIMER VA HOAT ONG NH THI
Trong phan nay ta se lam bc au lam quen vi cac Timer cua vi ieu khien
PIC16F877A va cac thao tac c ban oi vi cac Timer, bao gom thao tac khi tao va x l
ngat. e cu the hn ta se i sau vao ng dung sau:
ng dung 4.7: Hien th cac gia tr nh thi cua Timer ra LED 7 oan.
ng dung nay c phat trien da tren ng dung 4.6 ve hien th tren LED 7 oan.
ng dung 4.6 ta a lam quen vi cac thao tac c ban oi vi LED 7 oan. Trong ng dung
nay ta se dung cac Timer e hien th cac gia tr tang dan t 0 en 99 sau mot khoang thi
gian nh trc tren 2 LED hang chuc va hang n v. Cau truc phan cng van khong co g
thay oi, tuy nhien ve chng trnh se co nhng thay oi ang ke.
Trc het la giai thuat cho ng dung tren. Ta se khi tao Timer e hnh thanh thi
gian delay co nh. Thi gian delay se ket thuc bang mot tn hieu t ngat Timer, chng trnh
ngat co nhiem vu cap nhat gia tr em moi khi ngat xay ra, chng trnh chnh co tac dung
hien th cac gia tr a c cap nhat ra LED 7 oan. Trc tien ta se s dung Timer0 cho ng
dung tren va chng trnh cu the nh sau:
;----------------------------------------------------------------------------------------------------------; Ghi chu ve chng trnh
;----------------------------------------------------------------------------------------------------------; Chng trnh 4.5.1
; Chng trnh hien th so em tren hai LED 7 oan theo th t tang dan
; Timer s dung: Timer2
;-----------------------------------------------------------------------------------------------------------; Khai bao vi ieu khien
;-----------------------------------------------------------------------------------------------------------processor
16f877a
include
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; ----------------------------------------------------------------------------------------------------------; Khai bao bien
;-----------------------------------------------------------------------------------------------------------count1
EQU
0x20
; Cac thanh ghi s dung cho chng
counta
EQU
0x21
; trnh delay
countb
EQU
0x22
hang_don_vi
hang_chuc
EQU
EQU
0x23
0x24
W_save
EQU
0x25
; Cac thanh ghi dung e cat cac
PCLATH_save
EQU
0x26
; thanh ghi quan trong khi thc thi
STATUS_save
EQU
0x27
; chng trnh ngat
FSR_save
EQU
0x28
;------------------------------------------------------------------------------------------------------------; Chng trnh ngat
;------------------------------------------------------------------------------------------------------------ORG
0x0004
GOTO
ISR
ISR
INTCON,TMR0IF
exit_int
BCF
INTCON,TMR0IF
MOVF
FSR_save,W
MOVWF
FSR
MOVF
PCLATH_save,W
MOVWF
PCLATH
SWAPF
STATUS_save,W
MOVWF
STATUS
SWAPF
W_save,1
SWAPF
W_save,0
RETFIE
;---------------------------------------------------------------------------------------------------------------; Ket thuc chng trnh ngat
;---------------------------------------------------------------------------------------------------------------ORG
0x0000
GOTO
start
ORG
0x050
;---------------------------------------------------------------------------------------------------------------; Bat au chng trnh chnh
;---------------------------------------------------------------------------------------------------------------start
;--------------------------------------------; Khi tao cac PORT
;--------------------------------------------BCF
STATUS,RP1
BSF
STATUS,RP0
; Chon BANK1
MOVLW
MOVWF
MOVLW
MOVWF
0x00
TRISD
b'11111100'
TRISB
BCF
STATUS,RP0
; chon BANK0
CLRF
PORTD
MOVLW
b'00000011'
MOVWF
PORTB
;---------------------------------------; Khi tao Timer0
;---------------------------------------CLRF
TMR0
CLRF
INTCON
BSF
STATUS,RP0
MOVLW
MOVWF
b'10000001'
OPTION_REG
BCF
STATUS,RP0
BSF
INTCON,TMR0IE
BSF
INTCON,PEIE
BSF
INTCON,GIE
;---------------------------------------------; Khi tao cac bien
;---------------------------------------------CLRF
hang_chuc
CLRF
hang_don_vi
;---------------------------------------------; Vong lap chnh
;---------------------------------------------main
CALL
hien_thi
; goi chng trnh con
GOTO
main
;---------------------------------------------------------------------------------------------------------------; Chng trnh con hien th cac gia tr cha trong cac thanh ghi hang_chuc va hang_don_vi ra
; cac LED hang chuc va LED hang n v
;---------------------------------------------------------------------------------------------------------------hien_thi
MOVF
hang_chuc,0
; hien th LED hang chuc
CALL
table
MOVWF
PORTD
MOVLW
b'11111101'
MOVWF
PORTB
CALL
delay_1ms
MOVF
hang_don_vi,0
; hien th LED hang n v
CALL
table
MOVWF
PORTD
MOVLW
b'11111110'
MOVWF
PORTB
CALL
delay_1ms
RETURN
; ket thuc chng trnh con hien_thi
;-------------------------------------------------------------------------------------------------------; Cac chng trnh con dung cho chng trnh con hien_thi
;--------------------------------------------------------------------------------------------------------
table
delay_1ms
MOVLW
MOVWF
d2
MOVLW
MOVWF
MOVLW
MOVWF
delay_1
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END
PCL,1
0xC0
0xF9
0xA4
0xB0
0x99
0x92
0x82
0xF8
0x80
0x90
d'1'
count1
0xC7
counta
0x01
countb
counta,1
$+2
countb,1
delay_1
count1,1
d2
; chng trnh ket thuc tai ay
Ta nhan thay rang cau truc chng trnh tren hoan toan tng t nh cau truc cua
chng trnh mau, cac giai thuat ve hien th LED a c e cap cu the ng dung 4.6, do
o van e con lai ch la cac van e lien quan en Timer0. Cac bc khi tao Timer0 a c
e cap cu the trong cac tai lieu cua nha san xuat, ta ch viec da theo sn bai co san o
va them vao cac thong so thch hp at vao cac thanh ghi ieu khien (oi vi Timer0 la cac
thanh ghi OPTION_REG, thanh ghi INTCON va thanh ghi TMR0) e khi tao cac ieu kien
ban au cho Timer0 sao cho phu hp vi muc ch s dung.
Vi chng trnh tren, moi lan ngat Timer0 xay ra, vi ieu khien se t vong lap cua
chng trnh chnh quay tr ve chng trnh ngat. Chng trnh ngat se thc hien cong viec
tang gia tr em mot cach thch hp cac thanh ghi hang_chuc va thanh ghi hang_don_vi.
Thuat toan danh cho chng trnh ngat cung tng oi n gian, gia tr em se c lu trc
tiep di dang ma thap phan nen ta khong can phai chuyen oi t ma HEX sang ma thap
phan. Khi qua trnh cap nhat gia tr em ket thuc, vi ieu khien quay tr ve vong lap chnh
va tiep tuc qua trnh hien th cac gia tr a c cap nhat t chng trnh ngat.
Bay gi ta th tnh thi gian nh thi do Timer0 tao ra. Do ta khi tao Timer0 s
dung xung em la xung lenh nen moi xung co thi gian la 1 uS (oi vi oscillator 4 MHz),
xung lenh c chia 4 bi prescaler nen gia tr cua thanh ghi TMR0 se tang len 1 n v sau
khoang thi gian (4*1 uS) = 4 uS. Nh vay ngat se xay ra sau moi quang thi gian (256*4 uS)
= 1024 uS (Timer0 la bo em 8 bit va ngat xay ra khi TMR0 b tran).
Da vao chng trnh tren ta co the kiem tra c tac ong cua prescaler bang cach
thay oi gia tr a vao thanh ghi OPTION_REG. S thay oi thi gian nh thi khi ta thay
oi t so chia cua prescaler la tng oi ro rang.
Cung da vao chng trnh tren ta co the thay Timer0 bang Timer1 hoac Timer2 e
lam quen vi cac Timer cua vi ieu khien. S thay oi duy nhat so vi chng trnh tren la
cac bc khi tao, do moi Timer eu co mot cau truc va hoat ong oc lap vi nhau. Cac
bc khi tao co the c tham khao trong cac tai lieu cua nha san xuat. Chng trnh sau co
tac dung nh chng trnh 4.5.1 nhng lan nay ta se s dung Timer2 lam bo nh thi.
;----------------------------------------------------------------------------------------------------------; Ghi chu ve chng trnh
;----------------------------------------------------------------------------------------------------------; Chng trnh 4.5.2
; Chng trnh hien th so em tren hai LED 7 oan theo th t tang dan
; Timer s dung: Timer2
;-----------------------------------------------------------------------------------------------------------; Khai bao vi ieu khien
;-----------------------------------------------------------------------------------------------------------processor
16f877a
include
<p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
; ----------------------------------------------------------------------------------------------------------; Khai bao bien
;-----------------------------------------------------------------------------------------------------------count1
EQU
0x20
counta
EQU
0x21
countb
EQU
0x22
hang_don_vi
EQU
0x23
hang_chuc
EQU
0x24
W_save
PCLATH_save
STATUS_save
FSR_save
EQU
EQU
EQU
EQU
0x25
0x26
0x27
0x28
ORG
0x0004
GOTO
ISR
;------------------------------------------------------------------------------------------------------------; Chng trnh ngat
;------------------------------------------------------------------------------------------------------------ISR
;-----------------------------------------------------------------------------------------------------------; oan chng trnh bat buoc au chng trnh ngat
;-----------------------------------------------------------------------------------------------------------MOVWF
W_save
SWAPF
STATUS,W
CLRF
STATUS
MOVWF
STATUS_save
MOVF
PCLATH,W
MOVWF
PCLATH_save
CLRF
PCLATH
MOVF
FSR,W
MOVWF
FSR_save
;------------------------------------------------------------------------------------------------------------; Cac thao tac chnh cua chng trnh ngat
;------------------------------------------------------------------------------------------------------------BTFSS
PIR1,TMR2IF
GOTO
exit_int
BCF
INCF
MOVLW
XORWF
BTFSS
GOTO
CLRF
INCF
MOVLW
XORWF
BTFSS
GOTO
PIR1,TMR2IF
hang_don_vi,1
0x0A
hang_don_vi,0
STATUS,Z
exit_int
hang_don_vi
hang_chuc,1
0x0A
hang_chuc,0
STATUS,Z
exit_int
CLRF
hang_chuc
GOTO
exit_int
;--------------------------------------------------------------------------------------------------------------; oan chng trnh bat buoc trc khi thoat khoi chng trnh ngat
;--------------------------------------------------------------------------------------------------------------exit_int
MOVF
FSR_save,W
MOVWF
FSR
MOVF
PCLATH_save,W
MOVWF
PCLATH
SWAPF
STATUS_save,W
MOVWF
STATUS
SWAPF
W_save,1
SWAPF
W_save,0
RETFIE
;---------------------------------------------------------------------------------------------------------------; Ket thuc chng trnh ngat
;---------------------------------------------------------------------------------------------------------------ORG
0x0000
GOTO
start
ORG
0x050
;---------------------------------------------------------------------------------------------------------------; Bat au chng trnh chnh
;---------------------------------------------------------------------------------------------------------------start
;--------------------------------------------; Khi tao cac PORT
;--------------------------------------------BCF
STATUS,RP1
BSF
STATUS,RP0
MOVLW
MOVWF
MOVLW
MOVWF
0x00
TRISD
b'11111100'
TRISB
BCF
STATUS,RP0
CLRF
MOVLW
MOVWF
PORTD
b'00000011'
PORTB
STATUS,RP0
.249
PR2
PIE1,TMR2IE
BCF
STATUS,RP0
BSF
INTCON,PEIE
; cho phep cac ngat ngoai vi
BSF
INTCON,GIE
; cho phep toan bo cac ngat
;---------------------------------------------; Khi tao cac bien
;---------------------------------------------CLRF
hang_chuc
CLRF
hang_don_vi
;---------------------------------------------; Vong lap chnh
;---------------------------------------------main
CALL
hien_thi
GOTO
main
;---------------------------------------------------------------------------------------------------------------; Chng trnh con hien th cac gia tr cha trong cac thanh ghi hang_chuc va hang_don_vi ra
; cac LED hang chuc va LED hang n v
;---------------------------------------------------------------------------------------------------------------hien_thi
MOVF
hang_chuc,0
CALL
table
MOVWF
PORTD
MOVLW
b'11111101'
MOVWF
PORTB
CALL
delay_1ms
MOVF
CALL
MOVWF
hang_don_vi,0
table
PORTD
MOVLW
b'11111110'
MOVWF
PORTB
CALL
delay_1ms
RETURN
;-------------------------------------------------------------------------------------------------------; Cac chng trnh con dung cho chng trnh con hien_thi
;-------------------------------------------------------------------------------------------------------table
ADDWF
PCL,1
RETLW
0xC0
RETLW
0xF9
RETLW
0xA4
RETLW
0xB0
RETLW
0x99
RETLW
0x92
RETLW
0x82
RETLW
0xF8
RETLW
0x80
RETLW
0x90
delay_1ms
MOVLW
MOVWF
d2
MOVLW
MOVWF
MOVLW
MOVWF
delay_1
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END
d'1'
count1
0xC7
counta
0x01
countb
counta,1
$+2
countb,1
delay_1
count1,1
d2
Timer2 cung la bo em 8 bit c ho tr them thanh ghi so sanh PR2 va hai bo chia
tan so postscaler prescaler giup ta linh ong hn trong viec tao ra khoang thi gian delay
thch hp cho ng dung. Thanh ghi ieu khien Timer2 la thanh ghi T2CON. Chng trnh tren
khong co g mi, no ch giup ta on lai mot so ac iem cua Timer2 va cach khi tao no.
ng dung 4.8: ng dung PIC16F877A va cac LED 7 oan e lam ong ho.
Vi hai v du tren ta co the nam bat c cac khai niem c ban ve tac dung nh thi
dung Timer, va mot trong nhng ng dung pho bien nhat cua che o nh thi la lam ong ho
ien t. Ta co the s dung bat c Timer nao cua vi ieu khien e phuc vu cho ng dung nay,
tuy nhien e co mot cach nhn tong quat hn ve cac Timer, lan nay ta se s dung Timer1.
Bay gi ta se tien hanh tng bc e thc hien thanh cong ng dung nay.
Trc tien la van e ve cau truc phan cng, e hien th c gi, phut, giay ta can
en 6 LED 7 oan, cach ket noi hoan toan tng t nh cac ng dung s dung 2 LED v du
4.7, ch viec noi them 4 LED 7 oan mac song song vi hai LED trc o va ket noi them 4
cong tac dung BJT vao PORTB e ieu khien quet LED.
Tiep theo la van e ve chng trnh viet cho vi ieu khien. Cach phan cong oi vi
chng trnh se khong co g thay oi, tc la chng trnh chnh se lam nhiem vu hien th LED
va chng trnh ngat se thc hien cong viec cap nhat cac gia tr can hien th. Tuy nhien co
mot so van e phat sinh nh sau:
Th nhat, lam sao tao ra thi gian nh thi 1 giay?? Timer ta s dung la
Timer1 16 bit vi bo chia tan so prescaler co cac t so chia la 1:1, 1:2, 1:4, 1:8 va c ieu
khien bi thanh ghi T1CON (xem lai Timer1 e biet them chi tiet). Gia tr em toi a cua
Timer1 se la 65534, trong khi neu ta s dung oscillator 4 MHz (moi xung lenh co thi gian 1
uS) th Timer1 can phai em en gia tr 1 000 000, va neu ta co huy ong toi a kha nang
chia tan so cua prescaler (1:8 ) th gia tr em cung phai at en 1 000 000/8 = 125 000 (van
con ln hn rat nhieu so vi gia tr em toi a cua Timer1. Mot giai phap cho van e nay la
dung them mot thanh ghi em phu( thanh ghi count). Cu the nh sau: ta cho Timer1 em t 0
en 25000, do o ta can 5 lan em nh vay (5 lan ngat Timer1 xay ra) e at c gia tr
em 125 000. Nh vay trc khi cap nhat gia tr giay, ta can kiem tra xem bien phu count a
bang 5 hay cha, neu bang roi th mi tang gia tr giay va reset lai bien count.
Th hai, lam sao cap nhat gia tr gi??? Cac gia tr phut va giay tang t 0 en
60 nen thuat toan dung e cap nhat la tng oi n gian (tng t nh thuat toan ng dung
4.7, ch co ieu ta khong so sanh hang chuc vi 10 ma so sanh vi 6), con gia tr gi ch tang
t 0 en 24. Giai thuat e ra la ta khong cap nhat tng hang n v va hang chuc cua gia tr
gi nh oi voi phut va giay, thay vao o gia tr gi se c cap nhat vao mot thanh ghi, sau
o dung thuat toan tach hang chuc va hang n v cua gi nh ng dung 4.6 (chng trnh
4.3.2) e hien th cac gia tr thanh ghi cha gia tr gi ra LED 7 oan.
en ay ta a co the viet chng trnh cho ng dung theo cac giai thuat e ra tren.
Chng trnh cu the se c viet nh sau:
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x23
0x24
0x25
0x26
0x27
0x28
0x29
count
display_reg
xx
xx1
EQU
EQU
EQU
EQU
0x30
0x31
0x32
0x33
W_save
PCLATH_save
STATUS_save
FSR_save
EQU
EQU
EQU
EQU
0x34
0x35
0x36
0x37
ORG
GOTO
0x0004
ISR
T1CON,TMR1ON
PIR1,TMR1IF
INCF
MOVLW
XORWF
BTFSS
GOTO
CLRF
count
d'5'
count,0
STATUS,Z
exit_int
count
; Bat Timer1
; xoa c ngat e tiep tuc nhan biet thi iem tiep
; theo ngat xay ra
; bien em phu
; so sanh count vi gia tr 5
INCF
MOVLW
XORWF
BTFSS
GOTO
CLRF
INCF
MOVLW
XORWF
BTFSS
GOTO
hang_don_vi_giay,1
0x0A
hang_don_vi_giay,0
STATUS,Z
exit_int
hang_don_vi_giay
hang_chuc_giay,1
0x06
hang_chuc_giay,0
STATUS,Z
exit_int
CLRF
INCF
MOVLW
XORWF
BTFSS
GOTO
CLRF
INCF
MOVLW
XORWF
BTFSS
GOTO
hang_chuc_giay
; cap nhat gia tr phut
hang_don_vi_phut,1
0x0A
; so sanh hang n v cua gia tr phut vi 10
hang_don_vi_phut,0
STATUS,Z
exit_int
hang_don_vi_phut
hang_chuc_phut,1
0x06
; so sanh hang chuc cua gia tr phut vi 6
hang_chuc_phut,0
STATUS,Z
exit_int
CLRF
hang_chuc_phut
INCF
gio,1
; cap nhat gia tr gi
MOVLW
0x18
XORWF
gio,0
BTFSS
STATUS,Z
GOTO
exit_int
CLRF
gio
GOTO
exit_int
;---------------------------------------------------------------------------------------------------------------; oan chng trnh bat buoc dung e ket thuc chng trnh ngat
;---------------------------------------------------------------------------------------------------------------exit_int
MOVF
FSR_save,W
MOVWF
FSR
MOVF
PCLATH_save,W
MOVWF
PCLATH
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE
STATUS_save,W
STATUS
W_save,1
W_save,0
ORG
0x0000
GOTO
start
ORG
0x050
;--------------------------------------------------------------------------------------------------; Chng trnh chnh
;--------------------------------------------------------------------------------------------------start
;--------------------------------------------------------------; Khi tao cac PORT ieu khien
;--------------------------------------------------------------BCF
STATUS,RP1
BSF
STATUS,RP0
MOVLW
0x00
; PORTD <-output
MOVWF
TRISD
MOVLW
b'11000000'
; PORTB <5:0> <- output
MOVWF
TRISB
; Ta can 6 pin PORTB e ieu khien quet LED
BCF
STATUS,RP0
CLRF
PORTD
MOVLW
b'00111111'
; Tat tat ca cac LED
MOVWF
PORTB
;----------------------------------------------------------------; Khi tao Timer1
;----------------------------------------------------------------CLRF
T1CON
CLRF
INTCON
CLRF
TMR1H
CLRF
TMR1L
BSF
STATUS,RP0
; Chon BANK1
CLRF
PIE1
BSF
PIE1,TMR1IE
; Cho phep ngat Timer1
BCF
STATUS,RP0
; Chon BANK0
CLRF
PIR1
; xoa tat ca cac c ngat
MOVLW
0X30
; prescaler 1:8, xung em la xung lenh, tam thi
MOVWF
T1CON
; tat Timer1
MOVLW
MOVWF
MOVLW
MOVWF
0x61
TMR1H
0xA8
TMR1L
BSF
T1CON,TMR1ON ; Bat Timer1
BSF
INTCON,TMR1IE ; Cho phep ngat Timer1
BSF
INTCON,PEIE
; Cho phep ngat ngoai vi
BSF
INTCON,GIE
; Cho phep toan bo cac ngat
;-------------------------------------------------------------------------------; Khi tao cac bien
;-------------------------------------------------------------------------------CLRF
gio
CLRF
hang_chuc_gio
CLRF
hang_don_vi_gio
CLRF
hang_don_vi_phut
CLRF
hang_chuc_phut
CLRF
hang_chuc_giay
CLRF
hang_don_vi_giay
CLRF
count
;-------------------------------------------------------------------------------; Vong lap chnh
;-------------------------------------------------------------------------------main
CALL
hien_thi
GOTO
main
hien_thi
CALL
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
chuyen_ma_gio
hang_chuc_gio,0
table
PORTD
b'11011111'
PORTB
delay_1ms
hang_don_vi_gio,0
table
PORTD
b'11101111'
PORTB
delay_1ms
table
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
MOVF
CALL
MOVWF
MOVLW
MOVWF
CALL
RETURN
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
delay_1ms
MOVLW
PCL,1
0xC0
0xF9
0xA4
0xB0
0x99
0x92
0x82
0xF8
0x80
0x90
d'1'
MOVWF
d2
MOVLW
MOVWF
MOVLW
MOVWF
delay_1
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
chuyen_ma_gio
MOVF
MOVWF
ANDLW
MOVWF
MOVLW
ANDWF
MOVWF
SWAPF
MOVF
CALL
MOVWF
BTFSC
INCF
MOVF
CALL
MOVWF
RETURN
chuyen_ma
MOVWF
MOVLW
XORWF
BTFSC
GOTO
MOVLW
count1
0xC7
counta
0x01
countb
counta,1
$+2
countb,1
delay_1
count1,1
d2
gio,0
display_reg
0x0F
hang_don_vi_gio
0xF0
display_reg,0
hang_chuc_gio
hang_chuc_gio,1
hang_don_vi_gio,0
chuyen_ma
hang_don_vi_gio
xx1,0
hang_chuc_gio,1
hang_chuc_gio,0
chuyen_ma
hang_chuc_gio
xx
0x00
xx,0
STATUS,Z
nho_hon_10
0x01
XORWF
BTFSC
GOTO
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x02
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x03
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x04
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x05
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x06
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x07
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x08
xx,0
STATUS,Z
nho_hon_10
MOVLW
XORWF
0x09
xx,0
BTFSC
GOTO
STATUS,Z
nho_hon_10
MOVLW
XORWF
BTFSC
GOTO
0x0A
xx,0
STATUS,Z
bang_10
MOVLW
XORWF
BTFSC
GOTO
0x0B
xx,0
STATUS,Z
bang_11
MOVLW
XORWF
BTFSC
GOTO
0x0C
xx,0
STATUS,Z
bang_12
MOVLW
XORWF
BTFSC
GOTO
0x0D
xx,0
STATUS,Z
bang_13
MOVLW
XORWF
BTFSC
GOTO
0x0E
xx,0
STATUS,Z
bang_14
MOVLW
XORWF
BTFSC
GOTO
0x0F
xx,0
STATUS,Z
bang_15
nho_hon_10
MOVLW
MOVWF
MOVF
RETURN
bang_10
MOVLW
MOVWF
0x00
xx1
xx,0
0x01
xx1
RETLW
0x00
bang_11
MOVLW
MOVWF
RETLW
0x01
xx1
0x01
bang_12
MOVLW
MOVWF
RETLW
0x01
xx1
0x02
bang_13
MOVLW
MOVWF
RETLW
0x01
xx1
0x03
bang_14
MOVLW
MOVWF
RETLW
0x01
xx1
0x04
bang_15
MOVLW
MOVWF
RETLW
END
0x01
xx1
0x05
Thc ra ta co nhieu phng phap khac e tao thi gian nh thi 1s bang cach s dung
cac ac tnh cua Timer1, chang han ta co the s dung oscillator ngoai vi khac cho Timer1 ma
khong can dung chung vi oscillator cua vi ieu khien. Ta cung co the s dung cac Timer
khac cho ng dung nay va tuy theo ac iem cau tao cua tng Timer ta co the xac nh c
cac gia tr thch hp e tao thi gian nh thi 1s.
Tuy nhien du s dung phng phap nao i na ta cung khong the tao ra ong ho ien
t co o chnh xac tuyet oi khi sd dung vi ieu khien do thi gian thc thi lenh cua vi ieu
khien sau moi thi gian nh thi khong the c xac nh mot cach chnh xac. Tuy nhien
ay cung la ng dung hoan chnh nhat va mang tnh thc tien nhieu nhat so vi cac ng dung
trc.
S o khoi RA4.
S o khoi RA5
P1.2 PORTB
S o khoi RB3:RB0
S o khoi RB7:RB4
P1.3 PORTC
S o khoi RC7:RC5 va RC2:RC0
S o khoi RC4:RC3
P1.4 PORTD
S o khoi RD7:RD0
P1.5 PORTE
S o khoi RE2:RE0
Bit 7: IRP
bit chon bank bo nh d lieu can truy xuat (dung cho a ch gian tiep).
IRP = 0: bank 2,3 (t 100h en 1FFh)
IRP = 1: bank 0,1 (t 00h en FFh)
Bit 6,5:RP1:RP0 hai bit chon bank bo nh d lieu can truy xuat (dung cho a ch trc
tiep)
Bit 4:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
GIE
Bit 2
Bit 1
Bit 0
TMR0IF
Timer0 Interrupt Flag bit
TMR0IF = 1 thanh ghi TMR0 b tran (phai xoa bang chng
trnh) .
TMR0IF = 0 thanh ghi TMR0 cha b tran.
INTF BR0/INT External Interrupt Flag bit
INTF = 1 ngat RB0/INT xay ra (phai xoa c hieu bang chng
trnh).
INTF = 0 ngat RB0/INT cha xay ra.
RBIF RB Port Change Interrupt Flag bit
RBIF = 1 t nhat co mot chan RB7:RB4 co s thay oi trang
thai.Bit nay phai c xoa bang chng trnh sau khi a kiem tra lai
cac gia tr cua cac chan tai PORTB.
RBIF = 0 khong co s thay oi trang thai cac chan RB7:RB4.
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
PSPIF
Bit 7,6
Bit 5,4
0000 t so 1:1
0001 t so 1:2
0010 t so 1:3
1111 t so 1:16
Bit 2 TMR2ON Timer2 On bit
TMR2ON = 1 bat Timer2.
TMR2ON = 0 tat Timer2.
Bit 1,0 T2CKPS1:T2CKPS0 Timer2 Clock Prescaler Select bit
Cac bit nay ieu khien t so chi tan so cua prescaler
00
t so 1:1
01
t so 1:4
1x
t so 1:16
P2.19 Thanh ghi SSPBUF: a ch 13h
Thanh ghi em d lieu 8 bit cho chuan giao tiep MSSP.
P2.20 Thanh ghi SSPCON: a ch 14h
Thanh ghi ieu khien chuan giao tiep MSSP.
0101 Slave mode, xung clock lay t pin SCK, khong cho phep pin ieu khien
(
la pin I/O bnh thng).
0100 SPI Slave mode, xung clock lay t pin SCK, cho phep pin ieu khien .
0011 SPI Master mode, xung clock bang (ngo ra TMR2)/2.
0010 SPI Master mode, xung clock bang (FOSC/64).
0001 SPI Master mode, xung clock bang (FOSC/16).
0000 SPI Master mode, xung clock bang (FOSC/4).
Cac trang thai khong c liet ke hoac khong co tac dung ieu khien hoac ch
co tac dung oi vi che o I2C mode.
Khi MSSP che o I2C
Bit 7 WCOL Write Collition Detect bit
Khi truyen d lieu che o I2C Master mode:
WCOL = 1 a d lieu truyen i vao thanh ghi SSPBUF trong khi che o
truyen d lieu cua I2C cha san sang.
WCOL = 0 khong xay ra hien tng tren.
khi truyen d lieu che o I2C Slave mode:
WCOL = 1 d lieu mi c a vao thanh ghi SSPBUF trong khi d lieu cu
cha c truyen i.
WCOL = 0 khong co hien tng tren xay ra.
che o nhan d lieu (Master hoac Slave):
Bit nay khong co tac dung ch thi cac trang thai.
Bit 6 SSPOV Receive Overflow Indicator Flag bit.
Khi nhan d lieu:
SSPOV = 1 d lieu mi c nhan vao thanh ghi SSPBUF trong khi d lieu cu
cha c oc.
SSPOV = 0 khong co hien tng tren xay ra.
Khi truyen d lieu:
Bit nay khong co tac dung ch th cac trang thai.
Bit 5 SSPEN Synchronous Serial Port Enable bit
SSPEN = 1 cho phep cong giao tiep MSSP (cac pin SDA va SCL).
SSPEN = 0 khong cho phep cong giao tiep MSSP.
Can chu y la cac pin SDA va SCL phai c ieu khien trang thai bang cac bit
tng ng trong thanh ghi TRISC trc o).
Bit 4 CKP SCK Release Control bit
che o Slave mode:
CKP = 1 cho xung clock tac ong.
CKP = 0 gi xung clock mc logic thap (e bao am thi gian thiet lap d
lieu).
Bit 3,0 SSPM3:SSPM0
Cac bit nay ong vai tro la chon cac che o hoat ong cua MSSP.
1111 I2C Slave mode 10 bit a ch va cho phep ngat khi phat hien bit Start va
bit Stop.
1110 I2C Slave mode 7 bit a ch va cho phep ngat khi phat hien bit Start va
bit Stop.
1011 I2C Firmwave Controlled Master mode (khong cho phep che o Slave).
1000 I2C Master mode, xung clock = FOSC/(4*(SSPADD+1)).
0111 I2C Slave mode 10 bit a ch.
Cac trang thai khong c liet ke hoac khong co tac dung ieu khien hoac ch co tac
dung oi vi che o SPI mode.
P2.21 Thanh ghi CCPR1L: a ch 15h
Thanh ghi cha 8 bit thap cua khoi CCP1.
P2.22 Thanh ghi CCPR1H: a ch 16h
Thanh ghi cha 8 bit cao cua khoi CCP1.
P2.23 Thanh ghi CCP1CON va thanh ghi CCP2CON: a ch 17h (CCP1CON) va 1Dh
(SSP2CON)
Thanh ghi ieu khien khoi CCP1.
1001 CCPx hoat ong che o Compare, ngo ra c xuong mc thap va bit
CCPxIF c set khi cac gia tr can so sanh bang nhau.
1010 CCPx hoat ong che o Compare, khi cac gia tr can so sanh bang
nhau, ngat xay ra, bit CCPxIF c set va trang thai pin output khong b anh
hng.
1011 CCPx hoat ong che o Compare, khi cac gia tr can so sanh bang
nhau, xung trigger ac biet (Trigger Special Event) se c tao ra, khi o c
ngat CCPxIF c set, cac pin output khong thay oi trang thai, CCp1 reset
Timer1, CCP2 reset Timer1 va khi ong khoi ADC.
11xx CCPx hoat ong che o PWM.
P2.24 Thanh ghi RCSTA: a ch 18h
Thanh ghi cha cac bit trang thai va cac bit ieu khien qua trnh nhan d lieu qua
chuan giao tiep USART.
Bit 7
Bit 2
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bt 1
Bit 0
Bit 7
Bit 3
Bit 2
Bit 1
Bit 0
Trong o: A la ngo vao Analog, khi o gia tr cua cac pin nay oc t cac PORT luon bang 0.
B la ngo vao Digital.
P2.46 Thanh ghi CVRCON: a ch 9Dh
Thanh ghi ieu khien bo tao ien ap so sanh khi bo Comparator hoat ong vi cau
hnh 110.
Bit 7
Bit 7
Bit 7
WWW.MICROCHIP.COM
WWW.MICROCHIP.COM