Có th phân thanh ghi SFR làm hai l ai: thanh ghi SFR liên quan đ n các ch c n ng bên trong CPU... - ADCON1 địa chỉ 9Fh : thanh ghi điều khiển bộ ADC... N u trong kho ng th i gian ny đi n
Trang 2Ngày nay, k thu t vi đi u khi n đã tr nên quen thu c trong các ngành k thu t và trong dân d ng T các dây chuy n s n xu t l n đ n các thi t b gia d ng, chúng ta
đ u th y s hi n di n c a vi đi u khi n Các b vi đi u khi n có kh n ng x lý nhi u ho t đ ng ph c t p mà ch c n 1 chip vi m ch nh , nó đã thay th các t đi u khi n l n và ph c t p b ng nh ng m ch đi n g n nh , d thao tác s d ng
tìm hi u b vi đi u khi n m t cách khoa h c và mang l i hi u qu cao là n n
t ng cho vi c xâm nh p vào nh ng h th ng t i tân h n Vi c trang b nh ng ki n
th c v vi đi u khi n cho sinh viên là h t s c c n thi t Xu t phát t th c ti n này
em đã đi đ n quy t đ nh “ i u khi n đ ng c b c – giao ti p máy tính” nh m đáp
ng nhu c u h c h i c a b n thân
Do th i gian nghiên c u và th c hi n đ tài ch gi i h n, v n ki n th c và vi c tìm
hi u sâu v m t h vi đi u khi n còn h n ch nên đ án này ch th c hi n trong
ph m vi sau: kh o sát vi đi u khi n PIC bao g m: c u trúc ph n c ng, các ng
d ng, l p trình thi t k và thi công m ch ng d ng PIC đ đi u khi n đ ng c b c
D a trên c s c a các đ tài vi x lý và vi đi u khi n, hi n th và gi i mã… nh m thi t k m t h th ng vi đi u khi n góp ph n làm phong phú thêm cho vi c hi u bi t
v l nh v c này đ ng th i có th m r ng và đ nh h ng cho nh ng đ tài sau
Trang 3L I C M N
Trong th i gian th c hi n đ tài em đã h c h i đ c nhi u đi u b ích t
th y h ng d n, th y cô Khoa Xây D ng – i n, b môn i n – i n t và các b n sinh viên cùng khóa đã đóng góp nh ng ý ki n quý báu đ em hoàn thành đ án t t nghi p đúng th i gian
Em xin bày t lòng bi t n đ n Th y Phan V n Hi p trên c ng v là ng i
h ng d n đ tài đã t n tình h ng d n và t o đi u ki n thu n l i cho em hoàn thành t t đ tài
Em c ng xin chân thành c m n quí th y, cô trong Khoa cùng các b n đã đóng góp ý ki n và kinh nghi m quý báu trong quá trình th c hi n đ tài này
Sinh vi n th c hi n
Hu nh Trí N ng
Trang 4L i m đ u
L i c m n
M c l c
CH NG 1 : T NG QUAN V VI I U KHI N PIC 1
1.1 GI I THI U S L C V VI I U KHI N PIC 1
1.2 C U TRÚC C A VI I U KHI N PIC 1
1.3 RISC VÀ CISC 2
1.4 M T VÀI C TÍNH C A VI I U KHI N PIC 2
1.5 CÁC DÒNG PIC VÀ CÁCH L A CH N VI I U KHI N PIC 2
1.6 NGÔN NG L P TRÌNH CHO PIC 3
1.7 M CH N P PIC 3
CH NG 2 : VI I U KHI N PIC16F877A 5
2.1 S CHÂN VI I U KHI N PIC16F877A 5
2.2 M T VÀI THÔNG S V VI I U KHI N PIC16F877A 6
2.3 S KH I VI I U KHI N PIC16F877A 7
2.4 T CH C B NH 8
2.4.1 B NH CH NG TRÌNH 8
2.4.2 B NH STACK 8
2.4.3 B NH D LI U 9
2.5 CH C N NG CÁC CHÂN C A PIC16F877A VÀ CÁC C NG XU T NH P 11
2.5.1 CH C N NG CÁC CHÂN C A PIC16F877A 11
2.5.2 CÁC C NG XU T NH P C A PIC16F877A 12
2.6 M T S C TÍNH KHÁC C A PIC16F877A 14
2.6.1 CONFIGURATION BIT 14
2.6.2 CÁC C TÍNH C A OSCILLATOR 14
2.6.3 CÁC CH RESET 15
2.6.4 WATCHDOG TIMER 16
2.6.5 CH SLEEP 16
CH NG 3: CÁC KH I CH C N NG C A V K PIC16F877A 18
3.1 CÁC B TIMER C A VI I U KHI N 18
3.1.1 TIMER 0 18
3.1.2 TIMER1 18
3.1.3 TIMER2 19
3.2 ADC 20
3.3 COMPARATOR 22
3.3.1 C CH HO T NG C A B COMPARATOR 22
3.3.2 CÁC THANH GHI LIÊN QUAN N COMPARATOR 22
3.4 CCP 23
3.4.1 CÁC THANH GHI C A KH I CCP 23
3.4.2 CAPTURE 23
3.4.3 COMPARE 24
3.4.4 CH C N NG PWM 25
3.5 NG T 26
3.5.1 C I M NG T C A V K PIC16F877A 27
3.5.2 M T S NG T QUAN TR NG C A V K 27
3.5.3 CÁC THANH GHI C S D NG PH C V NG T 28
CH NG 4: CÁC CHU N GIAO TI P C A VI I U KHI N PIC 29
4.1 USART 29
4.1.1 CÁC THANH GHI C S D NG TRONG GIAO TI P USART 29
4.1.2 C CH HO T NG C A GIAO TI P USART 30
4.1.3 CÁC CH GIAO TI P USART 31
4.2 CHU N GIAO TI P MSSP 32
4.2.1 CÁC THANH GHI I U KHI N GIAO TI P MSSP 32
Trang 54.3 C NG GIAO TI P SONG SONG 33
CH NG 5: T P L NH C A VI I U KHI N PIC 35
5.1 VÀI NÉT S L C V T P L NH C A V K PIC 35
5.2 T P L NH C A VI I U KHI N PIC 35
CH NG 6 : CÁC THI T B - LINH KI N LIÊN QUAN KHÁC 42
6.1 NG C B C 42
6.1.1 GI I THI U V NG C B C 42
6.1.2 M T S KHÁI NI M KHÁC V NG C B C 44
6.2 NG C DC 45
6.3 MÀN HÌNH LCD 46
6.3.1 GI I THI U 46
6.3.2 HÌNH DÁNG VÀ KÍCH TH C 46
6.3.3 CH C N NG CÁC CHÂN 47
6.3.4 S KH I C A HD44780 47
6.3.5 T P L NH C A LCD 51
6.3.6 ÁNH A CH CHO LCD 54
6.3.7 GIAO TI P GI A LCD VÀ MPU 54
6.3.8 KH I T O LCD 55
6.3.9 M CH KH I T O BÊN TRONG CHIP HD44780 55
6.4 TRANSISTOR H1061 VÀ 2N3055 56
6.5 IC GIAO TI P MAX232 56
6.6 IC C M BI N NHI T LM35 56
6.7 OPTP 4N35 57
CH NG 7 : THI T K - THI CÔNG M CH 58
7.1 GI I THI U T NG QUÁT 58
7.1.1 S KH I 58
7.1.2 CH C N NG C A CÁC KH I 58
7.2 CÁC S M CH I N 58
7.3 H NG D N S D NG M CH 61
7.4 THI CÔNG M CH 62
7.4.1 HÌNH M CH SAU KHI HOÀN CH NH 62
7.4.2 S M CH IN 63
CH NG 8 : L P TRÌNH CHO PIC16F877A 64
8.1 L U GI I THU T C A CH NG TRÌNH 64
8.2 MÃ NGU N C A CH NG TRÌNH TRONG PIC16F877A 65
CH NG 9 : L P TRÌNH I U KHI N TRÊN PC 76
9.1 C B N V GIAO TI P RS232 76
9.2 VI T CH NG TRÌNH I U KHI N TRÊN PC 76
9.2.1 GI I THI U VISUAL BASIC 76
9.2.2 M T S THU C TÍNH C B N C A MSCOMM 77
9.2.3 MÃ NGU N C A CH NG TRÌNH TRÊN PC 78
9.2.4 GIAO DI N CH NG TRÌNH TRÊN PC 81
K T LU N
TÀI LI U THAM KH O
Trang 6CH NG 1 : T NG QUAN V VI I U KHI N PIC
1.1 GI I THI U S L C V VI I U KHI N PIC
PIC b t ngu n là ch vi t t t c a “Programmable Intelligent Computer” (Máy tính kh trình thông minh) là m t s n ph m c a hãng General Instruments đ t cho dòng s n ph m đ u tiên c a h là PIC1650 Lúc này, PIC1650 đ c dùng đ giao
ti p v i các thi t b ngo i vi cho máy ch 16bit CP1600 N m 1985 General Instruments bán b ph n vi đi n t c a h , và ch s h u m i là công ty Microchip Technology Sau này PIC đ c b sung EEPROM đ t o thành m t b đi u khi n vào ra kh trình Ngày nay r t nhi u dòng PIC đ c xu t x ng v i hàng lo t các module ngo i vi tích h p s n (nh USART, PWM, ADC,…), v i b nh ch ng trình t 512 Word đ n 32K Word
do đó ta có th t ch c, cân đ i m t cách linh ho t b nh ch ng trình và b nh
d li u Tuy nhiên đi u này ch có ý ngh a khi t c đ x lý c a CPU ph i r t cao, vì
v i c u trúc đó, trong cùng m t th i đi m CPU ch có th t ng tác v i b nh d
ki u ho c b nh ch ng trình i v i ki n trúc Havard, b nh d li u và b nh
ch ng trình tách ra thành hai b nh riêng bi t Do đó trong cùng m t th i đi m CPU có th t ng tác v i c hai b nh , nh v y t c đ x lý c a vi đi u khi n
đ c c i thi n đáng k M t chú ý n a là t p l nh trong ki n trúc Havard có th
đ c t i u tùy theo yêu c u ki n trúc c a vi đi u khi n mà không ph thu c vào
c u trúc d li u Ví d , đ i v i vi đi u khi n dòng 16F, đ dài l nh luôn là 14 bit (trong khi d li u đ c t ch c thành t ng byte), còn đ i v i ki n trúc Von-Neuman, đ dài l nh luôn là b i s c a 1 byte (do d li u đ c t ch c thanh t ng byte)
Trang 71.3 RISC VÀ CISC
Do vi đi u khi n PIC có ki n trúc Havard nên CPU có th cùng m t lúc truy
xu t c b nh ch ng trình và b nh d li u, giúp t ng t c đ x lý c a vi đi u khi n Và đ ti p t c c i ti n t c đ th c thi l nh, t p l nh c a h vi đi u khi n PIC
đ c thi t k sao cho chi u dài mã l nh luôn c đ nh (ví d đ i v i h 16Fxxxx chi u dài mã l nh luôn là 14 bit) và cho phép th c thi l nh trong m t chu k l nh (m t chu k l nh b ng 4 chu k c a xung clock), ngo i tr m t s tr ng h p đ c
bi t nh l nh nh y, l nh g i ch ng trình con … c n hai chu k l nh i u này có ngh a t p l nh c a vi đi u khi n thu c c u trúc Havard s ít l nh h n, ng n h n, đ n
gi n h n đ đáp ng yêu c u mã hóa l nh b ng m t s l ng bit nh t đ nh Vi đi u khi n đ c t ch c theo ki n trúc Havard còn đ c g i là vi đi u khi n RISC (Reduced Instruction Set Computer) hay vi đi u khi n có t p l nh rút g n Vi đi u khi n đ c thi t k theo ki n trúc Von-Neuman còn đ c g i là vi đi u khi n CISC (Complex Instruction Set Computer) hay vi đi u khi n có t p l nh ph c t p vì mã
l nh c a nó không ph i là m t s c đ nh mà luôn là b i s c a 8 bit (1 byte)
1.4 M T VÀI C TÍNH C A VI I U KHI N PIC
Hi n nay có khá nhi u dòng PIC và có r t nhi u khác bi t v ph n c ng nh ng chúng ta co th đi m qua m t vài nét nh sau:
- CPU 8/16 bit, xây d ng theo ki n trúc Havard có s a đ i
- Flash và ROM có th tùy ch n t 256 byte đ n 256Kbyte
- Các c ng xu t/nh p (I/O ports)
- Timer 8/16 bit
- Các chu n giao ti p (n i ti p ho c xong xong, đ ng b ho c b t đ ng b )
- B chuy n đ i ADC (Analog to Digital Converters) 10/12 bit
- B so sánh đi n áp (Voltage Comparators)
- Các module Capture/Compare/PWM
- Module đi u khi n đ ng c , đ c Encoder
- H tr giao ti p USB
- H tr đi u khi n Ethernet
1.5 CÁC DÒNG PIC VÀ CÁCH L A CH N VI I U KHI N PIC
Các kí hi u c a vi đi u khi n PIC:
+ PIC12xxxx: đ dài l nh 12 bit
+ PIC16xxxx: đ dài l nh 14 bit
+ PIC18xxxx: đ dài l nh 16 bit
- C: PIC có b nh EPROM (ch có 16C84 là EEPROM)
- F: PIC có b nh flash
- LF: PIC có b nh flash ho t đ ng đi n áp th p
- LV: t ng t nh LF, đây là kí hi u c
Bên c nh đó m t s vi đi u khi n có kí hi u xxFxxx là EEPROM, n u có thêm
ch A cu i là flash (ví d PIC16F877 là EEPROM, còn PIC16F877A là
flash).Ngoài ra còn có thêm m t dòng vi đi u khi n PIC m i là dsPIC
Trang 8Vi t Nam ph bi n nh t là các h vi đi u khi n PIC do hãng Microchip s n
xu t
Cách l a ch n m t vi đi u khi n PIC phù h p:
- Tr c h t c n chú ý đ n s chân c a vi đi u khi n c n thi t cho ng d ng
Có nhi u vi đi u khi n PIC v i s l ng chân khác nhau, th m chí có vi
đi u khi n ch có 8 chân, ngoài ra còn có các vi đi u khi n 28, 40, 44, … chân
- C n ch n vi đi u khi n PIC có b nh flash đ có th n p xóa ch ng trình
đ c nhi u l n h n Ti p theo c n chú ý đ n các kh i ch c n ng đ c tích
h p s n trong vi đi u khi n, các chu n giao ti p bên trong
- Sau cùng c n chú ý đ n b nh ch ng trình mà vi đi u khi n cho phép
- Ngoài ra m i thông tin v cách l a ch n vi đi u khi n PIC có th đ c tìm
th y trong cu n sách “Select PIC guide” do nhà s n xu t Microchip cung c p
đ tìm ra cách l a ch n vi đi u khi n PIC phù h p v i m c đích s d ng
1.6 NGÔN NG L P TRÌNH CHO PIC
Ngôn ng l p trình cho PIC r t đa d ng Ngôn ng l p trình c p th p có
MPLAB (đ c cung c p mi n phí b i nhà s n xu t Microchip), các ngôn ng l p trình c p cao h n bao g m C, Basic, Pascal, … Ngoài ra còn có m t s ngôn ng
l p trình đ c phát tri n dành riêng cho PIC nh PICBasic, MikroBasic,…
1.7 M CH N P PIC
ây c ng là m t dòng s n ph m r t đa d ng dành cho vi đi u khi n PIC Có th
s d ng các m ch n p đ c cung c p b i nhà s n xu t là hãng Microchip nh : PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II Có th dùng các
s n ph m này đ n p cho vi đi u khi n khác thông qua ch ng trình MPLAB Dòng
s n ph m chính th ng này có u th là n p đ c cho t t c các vi đi u khi n PIC, tuy nhiên giá thành r t cao và th ng g p r t nhi u khó kh n trong quá trình mua
s n ph m
Ngoài ra do tính n ng cho phép nhi u ch đ n p khác nhau, còn có r t nhi u
m ch n p đ c thi t k dành cho vi đi u khi n PIC Có th s l c m t s m ch
n p cho PIC nh sau:
- JDM programmer: m ch n p này dùng ch ng trình n p Icprog cho phép n p các vi đi u khi n PIC có h tr tính n ng n p ch ng trình đi n áp th p ICSP (In Circuit Serial Programming) H u h t các m ch n p đ u h tr tính n ng n p
ch ng trình này
- WARP-13A và MCP-USB: hai m ch n p này gi ng v i m ch n p PICSTART PLUS do nhà s n xu t Microchip cung c p, t ng thích v i trình biên d ch MPLAB, ngh a là ta có th tr c ti p dùng ch ng trình MPLAB đ n p cho vi
đi u khi n PIC mà không c n s d ng m t ch ng trình n p khác, ch ng h n
nh ICprog
- P16PRO40: m ch n p này do Nigel thi t k và c ng khá n i ti ng Ông còn thi t
k c ch ng trình n p, tuy nhiên ta c ng có th s d ng ch ng trình n p Icprog
- M ch n p Universal c a Williem: đây không ph i là m ch n p chuyên d ng dành cho PIC nh P16PRO40
Trang 9Các m ch n p k trên có u đi m r t l n là đ n gi n, r ti n, hoàn toàn có th t
l p ráp m t cách d dàng, và m i thông tin v s đ m ch n p, cách thi t k , thi công, ki m tra và ch ng trình n p đ u d dàng tìm đ c và download mi n phí thông qua m ng Internet Tuy nhiên các m ch n p trên có nh c đi m là h n ch v
s vi đi u khi n đ c h tr , bên c nh đó m i m ch n p c n đ c s d ng v i m t
ch ng trình n p thích h p
Trang 10CH NG 2 : VI I U KHI N PIC16F877A 2.1 S CHÂN VI I U KHI N PIC16F877A
Hình 2.1: Vi đi u khi n PIC16F877A/PIC16F874A và các d ng s đ chân
Trang 112.2 M T VÀI THÔNG S V VI I U KHI N PIC16F877A
ây là vi đi u khi n thu c h PIC16Fxxx v i t p l nh g m 35 l nh có đ dài 14 bit M i l nh đ u đ c th c thi trong m t chu kì xung clock T c đ ho t đ ng t i
đa cho phép là 20 MHz v i m t chu kì l nh là 200ns B nh ch ng trình 8Kx14 bit, b nh d li u 368x8 byte RAM và b nh d li u EEPROM v i dung l ng 256x8 byte S PORT I/O là 5 v i 33 pin I/O Có 8 kênh chuy n đ i A/D
Ü Các đ c tính ngo i vi bao g mcác kh i ch c n ng sau:
- Timer0: b đ m 8 bit v i b chia t n s 8 bit
- Timer1: b đ m 16 bit v i b chia t n s , có th th c hi n ch c n ng đ m
d a vào xung clock ngo i vi ngay khi vi đi u khi n ho t đ ng ch đ sleep
- Timer2: b đ m 8 bit v i b chia t n s , b postcaler
- Hai b Capture/so sánh/đi u ch đ rông xung
- Các chu n giao ti p n i ti p SSP (Synchronous Serial Port), SPI và I2C
- Chu n giao ti p n i ti p USART v i 9 bit đ a ch
- C ng giao ti p song song PSP (Parallel Slave Port) v i các chân đi u khi n RD, WR
Ü Bên c nh đó là m t vài đ c tính khác c a vi đi u khi n nh :
- B nh flash v i kh n ng ghi xóa đ c 100.000 l n
- B nh EEPROM v i kh n ng ghi xóa đ c 1.000.000 l n
- B t o xung th i gian (PWRT) và b t o dao đ ng (OST)
- C ng ngh CMOS FLASH/EEPROM tiêu th công su t th p t c đ cao
Trang 122.3 S KH I VI I U KHI N PIC16F877A
Hình 2.2: S đ kh i vi đi u khi n PIC16F877A
- Kh i ALU – Arithmetic Logic Unit
- Kh i b nh ch a ch ng trình – Flash Program Memory
- Kh i b nh ch a d li u EPROM – Data EPROM
Trang 13- Kh i b nh file thanh ghi RAM – RAM file Register
- Kh i gi i mã l nh và đi u khi n – Instruction Decode Control
PIC16F877A là b nh flash, dung l ng b
nh 8K word (1 word = 14 bit) và đ c phân
thành nhi u trang (t page0 đ n page 3)
Stack không n m trong b nh ch ng trình hay b nh d li u mà là m t vùng
nh đ c bi t không cho phép đ c hay ghi Khi l nh CALL đ c th c hi n hay khi
m t ng t x y ra làm ch ng trình b r nhánh, giá tr c a b đ m ch ng trình PC
Trang 14t đ ng đ c vi đi u khi n c t vào trong stack Khi m t trong các l nh RETURN, RETLW hat RETFIE đ c th c thi, giá tr PC s t đ ng đ c l y ra t trong stack,
vi đi u khi n s th c hi n ti p ch ng trình theo đúng qui trình đ nh tr c
B nh Stack trong vi đi u khi n PIC h 16F87xA có kh n ng ch a đ c 8 đ a
ch và ho t đ ng theo c ch xoay vòng Ngh a là giá tr c t vào b nh Stack l n
th 9 s ghi đè lên giá tr c t vào Stack l n đ u tiên và giá tr c t vào b nh Stack
l n th 10 s ghi đè lên giá tr 6 c t vào Stack l n th 2
2.4.3 B NH D LI U
B nh d li u c a PIC là b nh EEPROM đ c chia ra làm nhi u bank i
v i PIC16F877A b nh d li u đ c chia ra làm 4 bank M i bank có dung l ng
128 byte, bao g m các thanh ghi có ch c n ng đ c bi t SFG (Special Function Register) n m các vùng đ a ch th p và các thanh ghi m c đích chung GPR (General Purpose Register) n m vùng đ a ch còn l i trong bank Các thanh ghi SFR th ng xuyên đ c s d ng (ví d nh thanh ghi STATUS) s đ c đ t t t
cà các bank c a b nh d li u giúp thu n ti n trong quá trình truy xu t và làm
gi m b t l nh c a ch ng trình
S đ c th c a b nh d li u PIC16F877A nh sau:
Trang 15Hình 2.4 S đ b nh d li u PIC16F877A
a) Thanh ghi ch c n ng đ c bi t
ây là các thanh ghi đ c s d ng b i CPU ho c đ c dùng đ thi t l p và đi u khi n các kh i ch c n ng đ c tích h p bên trong vi đi u khi n Có th phân thanh ghi SFR làm hai l ai: thanh ghi SFR liên quan đ n các ch c n ng bên trong (CPU)
Trang 16và thanh ghi SRF dùng đ thi t l p và đi u khi n các kh i ch c n ng bên ngoài (ví
d nh ADC, PWM, …) Ph n này s đ c p đ n các thanh ghi liên quan đ n các
ch c n ng bên trong Các thanh ghi dùng đ thi t l p và đi u khi n các kh i ch c
n ng s đ c nh c đ n khi ta đ c p đ n các kh i ch c n ng đó
b) Thanh ghi m c đích chung
Các thanh ghi này có th đ c truy xu t tr c ti p ho c gián ti p thông qua thanh ghi
FSG (File Select Register) ây là các thanh ghi d li u thông th ng, ng i s
d ng có th tùy theo m c đích ch ng trình mà có th dùng các thanh ghi này đ
- Vpp: ngõ vào nh n đi n áp l p trình khi l p trình cho PIC
• Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có 2 ch c n ng
- RA0,1,2: xu t/ nh p s
- AN 0,1,2: ngõ vào t ng t c a kênh th 0,1,2
Trang 17• Chân RA2/AN2/VREF-/CVREF+(4): xu t nh p s / ngõ vào t ng t c a kênh th 2/ nhõ vào đi n áp chu n th p c a b AD/ ngõ vào đi n áp ch n cao
c a b AD
• Chân RA3/AN3/VREF+(5): xu t nh p s / ngõ vào t ng t kênh 3/ ngõ vào
đi n áp chu n (cao) c a b AD
• Chân RA4/TOCK1/C1OUT(6): xu t nh p s / ngõ vào xung clock bên ngoài cho Timer 0/ ngõ ra b so sánh 1
• Chân RA5/AN4/ / C2OUT(7): xu t nh p s / ngõ vào t ng t kênh 4/ ngõ vào ch n l a SPI ph / ngõ ra b so sánh 2
• Chân RB0/INT (33): xu t nh p s / ngõ vào tín hi u ng t ngoài
• Chân RC3/SCK/SCL(18): xu t nh p s / ngõ vào xung clock n i ti p đ ng
b , ngõ ra ch đ SPI./ ngõ vào xung clock n i ti p đ ng b , ngõ ra c a ch
đ I2C
• Chân RC4/SDI/SDA(23): xu t nh p s / d li u vào SPI/ xu t nh p d li u I2C
• Chân RC5/SDO(24): xu t nh p s / d li u ra SPI
• Chân RC6/TX/CK(25): xu t nh p s / truy n b t đ ng b USART/ xung
đ ng b USART
• Chân RC7/RX/DT(26): xu t nh p s / nh n b t đ ng b USART
• Chân RD0-7/PSP0-7(19-30): xu t nh p s / d li u port song song
• Chân RE0/ /AN5(8): xu t nh p s / đi u khi n port song song/ ngõ vào
Trang 18chân trong m i c ng cĩ th khác nhau Bên c nh đĩ, do vi đi u khi n đ c tích h p
s n bên trong các đ c tính giao ti p ngo i vi nên bên c nh ch c n ng là c ng xu t
nh p thơng th ng, m t s chân xu t nh p cịn cĩ thêm các ch c n ng khác đ th
hi n s tác đ ng c a các đ c tính ngo i vi nêu trên đ i v i th gi i bên ngồi Ch c
n ng c a t ng chân xu t nh p trong m i c ng hồn tồn cĩ th đ c xác l p và đi u khi n đ c thơng qua các thanh ghi SFR liên quan đ n chân xu t nh p đĩ
Vi đi u khi n PIC16F877A cĩ 5 c ng xu t nh p, bao g m PORTA, PORTB, PORTC, PORTD và PORTE C u trúc và ch c n ng c a t ng c ng xu t nh p s
ng c l i, mu n xác l p ch c n ng c a m t chân trong PORTA là output, ta “clear” bit đi u khi n t ng ng v i chân đĩ trong thanh ghi TRISA Thao tác này hồn tồn t ng t đ i v i các PORT và các thanh ghi đi u khi n t ng ng TRIS (đ i
v i PORTA là TRISA, đ i v i PORTB là TRISB, đ i v i PORTC là TRISC, đ i
v i PORTD là TRISD vàđ i v i PORTE là TRISE)
Bên c nh đĩ PORTA cịn là ngõ ra c a b ADC, b so sánh, ngõ vào analog ngõ vào xung clock c a Timer0 và ngõ vào c a b giao ti p MSSP (Master Synchronous Serial Port) c tính này s đ c trình bày c th trong ph n sau Các thanh ghi SFR liên quan đ n PORTA bao g m:
- PORTA (đ a ch 05h) : ch a giá tr các pin trong PORTA
- TRISA (đ a ch 85h) : ch a giá tr các pin trong PORTA
- CMCON (đ a ch 9Ch) : thanh ghi đi u khi n b so sánh
- CVRCON (đ a ch 9Dh) : thanh ghi đi u khi n b so sánh đi n áp
- ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
b) PORTB
PORTB (RPB) g m 8 pin I/O Thanh ghi đi u khi n xu t nh p t ng ng là TRISB Bên c nh đĩ m t s chân c a PORTB cịn đ c s d ng trong quá trình n p
ch ng trình cho vi đi u khi n v i các ch đ n p khác nhau PORTB cịn liên quan
đ n ng t ngo i vi và b Timer0 PORTB cịn đ c tích h p ch c n ng đi n tr kéo lên đ c đi u khi n b i ch ng trình
Các thanh ghi SFR liên quan đ n PORTB bao g m:
- PORTB (đ a ch 06h,106h) : ch a giá tr các pin trong PORTB
- TRISB (đ a ch 86h,186h) : đi u khi n xu t nh p
- OPTION_REG (đ a ch 81h,181h) : đi u khi n ng t ngo i vi và b Timer0
c) PORTC
PORTC (RPC) g m 8 pin I/O Thanh ghi đi u khi n xu t nh p t ng ng là TRISC Bên c nh đĩ PORTC cịn ch a các chân ch c n ng c a b so sánh, b Timer1, b PWM và các chu n giao ti p n i ti p I2C, SPI, SSP, USART
Các thanh ghi đi u khi n liên quan đ n PORTC:
Trang 19- PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
- TRISC (địa chỉ 87h) : điều khiển xuất nhập
d) PORTD
PORTD (RPD) g m 8 chân I/O, thanh ghi đi u khi n xu t nh p t ng ng là TRISD PORTD cịn là c ng xu t d li u c a chu n giao ti p PSP (Parallel Slave Port)
Các thanh ghi liên quan đ n PORTD bao g m:
- Thanh ghi PORTD : ch a giá tr các pin trong PORTD
- Thanh ghi TRISD : đi u khi n xu t nh p
e) PORTE
PORTE (RPE) g m 3 chân I/O Thanh ghi đi u khi n xu t nh p t ng ng là TRISE Các chân c a PORTE cĩ ngõ vào analog Bên c nh đĩ PORTE cịn là các chân đi u khi n c a chu n giao ti p PSP
Các thanh ghi liên quan đ n PORTE bao g m:
- PORTE : ch a giá tr các chân trong PORTE
- TRISE : đi u khi n xu t nh p và xác l p các thơng s cho chu n giao ti p PSP
- ADCON1 : thanh ghi đi u khi n kh i ADC
2.6 M T S C TÍNH KHÁC C A PIC16F877A
2.6.1 CONFIGURATION BIT
ây là bit dùng đ l a ch n các đ c tính c a CPU Các bit này đ c ch a trong
b nh ch ng trình t i đ a ch 2007h và ch cĩ th đ c truy xu t trong quá trình
l p trình cho vi đi u khi n
2.6.2 CÁC C TÍNH C A OSCILLATOR
PIC16F877A cĩ kh n ng s d ng m t trong 4 lo i oscillator, đĩ là:
- LP: (Low Power Crystal)
- XT: Th ch anh bình th ng
- HS: (High-Speed Crystal)
- RC: (Resistor/Capacitor) dao đ ng do m ch RC t o ra
i v i các lo i oscillator LP, HS, XT, oscillator đ c g n vào vi đi u khi n thơng
qua các pin OSC1/CLKI và OSC2/CLKO
i v i các ng d ng khơng c n các lo i oscillator t c đ cao, ta cĩ th s d ng
m ch dao đ ng RC làm ngu n cung c p xung ho t đ ng cho vi vi đi u khi n T n
s t o ra ph thu c vào các giá tr đi n áp, giá tr đi n tr và t đi n, bên c nh đĩ là
s nh h ng c a các y u t nh nhi t đ , ch t
l ng c a các linh ki n
Các linh ki n s d ng cho m ch RC oscillator ph i b o đ m các giá tr sau:
Trang 203 K < REXT < 100 K Hình 2.5: RC oscillator
CEXT >20 pF
2.6.3 CÁC CH RESET
Cĩ nhi u ch đ reset vi đi u khi n, bao g m:
- Power-on Reset POR (Reset khi c p ngu n ho t đ ng cho vi đi u khi n)
- reset trong quá trình ho t đ ng
- reset t ch đ sleep
- WDT reset (reset do kh i WDT t o ra trong quá trình ho t đ ng)
- WDT wake up t ch đ sleep
- Brown-out reset (BOR)
reset: Khi pin m c logic th p, vi đi u khi n s đ c reset Tín
hi u reset đ c cung c p b i m t m ch ngo i vi v i các yêu c u c th sau:
Hình 2.6 Mạch Reset qua pin
- Khơng n i pin tr c ti p lên ngu n VDD
- R1 ph i nh h n 40 K đ đ m b o các đ c tính đi n c a vi đi u khi n
- R2 ph i l n h n 1 K đ h n dịng đi vào vi đi u khi n reset cịn đ c
ch ng nhi u b i m t b l c đ tránh các tín hi u nh tác đ ng lên pin
Power-on reset (POR): ây là xung reset do vi đi u khi n t o ra khi phát hi n ngu n cung c p VDD Khi ho t đ ng ch đ bình th ng, vi đi u khi n c n đ c
đ m b o các thơng s v dịng đi n, đi n áp đ ho t đ ng bình th ng Nh ng n u các tham s này khơng đ c đ m b o, xung reset do POR t o ra s đ a vi đi u khi n v tr ng thái reset và ch ti p t c ho t đ ng khi nào các tham s trên đ c
đ m b o
Power-up Timer (PWRT): đây là b đ nh th i ho t đ ng d a vào m ch RC bên trong vi đi u khi n Khi PWRT đ c kích ho t, vi đi u khi n s đ c đ a v tr ng thái reset PWRT s t o ra m t kho ng th i gian delay (kho ng 72 ms) đ VDD
t ng đ n giá tr thích h p
Oscillator Start-up Timer (OST): OST cung c p m t kho ng th i gian delay
Trang 21b ng 1024 chu kì xung c a oscillator sau khi PWRT ng ng tác đ ng (vi đi u khi n
đã đ đi u ki n ho t đ ng) đ đ m b o s n đ nh c a xung do oscillator phát ra Tác đ ng c a OST cịn x y ra đ i v i POR reset và khi vi đi u khi n đ c đánh
th c t ch đ sleep OST ch tác đ ng đ i v i các l ai oscillator là XT, HS và LP Brown-out reset (BOR): N u VDD h xu ng th p h n gi tr VBOR (kho ng 4V) khơng đi trong kho ng th i gian l n h n TBOR (kho ng 100 us), BOR đ c kích
ho t vi đi u khi n đ c đ a v tr ng thi BOR reset N u đi n p cung c p cho vi
đi u khi n h xu ng th p h n VBOR trong kho ng th i gian ng n h n TBOR, vi đi u khi n s kh ng đ c reset Khi đi n p cung c p đ cho vi đi u khi n ho t đ ng, PWRT đ c kích ho t đ t o ra m t kho ng th i gian delay (kho ng 72ms) N u trong kho ng th i gian ny đi n p cung c p cho vi điều khiển lại tiếp tục hạ xuống dưới mức điện áp VBOR, BOR reset sẽ lại được kích hoạt khi vi điều khiển đủ điện áp hoạt động Một điểm cần chú ý là khi BOR reset được cho phép, PWRT cũng sẽ hoạt động bất chấp trạng thái của bit PWRT
Tĩm l i đ vi đi u khi n ho t đ ng đ c t khi c p ngu n c n tr i qua các b c sau:
- n th i đi m này vi đi u khi n m i b t đ u ho t đ ng bình th ng
- Thanh ghi đi u khi n và ch th tr ng thái ngu n cung c p cho vi đi u khi n là thanh ghi PCON
2.6.4 WATCHDOG TIMER (WDT)
Watchdog timer (WDT) là b đ m đ c l p dùng ngu n xung đ m t b t o xung
đ c tích h p s n trong vi đi u khi n và khơng ph thu c vào b t kì ngu n xung clock ngo i vi nào i u đĩ cĩ ngh a là WDT v n ho t đ ng ngay c khi xung clock
đ c l y t pin OSC1/CLKI và pin OSC2/CLKO c a vi đi u khi n ng ng ho t
đ ng (ch ng h n nh do tác đ ng c a l nh sleep) Bit đi u khi n c a WDT là bit WDTE n m trong b nh ch ng trình đ a ch 2007h (Configuration bit)
2.6.5 CH SLEEP
ây là ch đ ho t đ ng c a vi đi u khi n khi l nh SLEEP đ c th c thi Khi đĩ
n u đ c cho phép ho t đ ng, b đ m c a WDT s b xĩa nh ng WDT v n ti p t c
ho t đ ng, bit (STATUS<3>) đ c reset v 0, bit đ c set, oscillator
ng ng tác đ ng và các PORT gi nguyên tr ng thái nh tr c khi l nh SLEEP đ c
th c thi
Do khi ch đ SLEEP, dịng cung c p cho vi đi u khi n là r t nh nên ta c n
th c hi n các b c sau tr c khi vi đi u khi n th c thi l nh SLEEP:
- a t t c các pin v tr ng thái VDD ho c VSS
- C n b o đ m r ng khơng cĩ m ch ngo i vi nào đ c đi u khi n b i dịng đi n
c a vi đi u khi n vì dịng đi n nh khơng đ kh n ng cung c p cho các m ch ngo i vi ho t đ ng
- T m ng ng ho t đ ng c a kh i A/D và khơng cho phép các xung clock t bên ngồi tác đ ng vào vi đi u khi n
Trang 22- ý đ n ch c n ng kéo lên đi n tr PORTB
- Pin ph i m c logic cao
Trang 23CH NG 3 : CÁC KH I CH C N NG C A V K PIC16F877A
3.1 CÁC B TIMER C A VI I U KHI N
3.1.1 TIMER 0
ây là m t trong ba b đ m ho c b đ nh th i c a vi đi u khi n PIC16F877A
Timer0 là b đ m 8 bit đ c k t n i v i b chia t n s (prescaler) 8 bit C u trúc
c a Timer0 cho phép ta l a ch n xung clock tác đ ng và c nh tích c c c a xung
clock Ng t Timer0 s xu t hi n khi Timer0 b tràn Bit TMR0IE
(INTCON<5>) là bit đi u khi n c a Timer0 TMR0IE=1 cho phép ng t Timer0 tác
đ ng, TMR0IF= 0 không cho phép ng t Timer0 tác đ ng S đ kh i c a Timer0
nh sau:
Hình 3.1 S đ kh i c a Timer0
Các thanh ghi đi u khi n liên quan đ n Timer0 bao g m:
Timer1 là b đ nh th i 16 bit, giá tr c a Timer1 s đ c l u trong hai thanh ghi
(TMR1H:TMR1L) C ng t c a Timer1 là bit TMR1IF (PIR1<0>) Bit đi u khi n
c a Timer1 s là TMR1IE (PIE<0>)
T ng t nh Timer0, Timer1 c ng có hai ch đ ho t đ ng: ch đ đ nh th i
(timer) v i xung kích là xung clock c a oscillator (t n s c a timer b ng ¼ t n s
c a oscillator) và ch đ đ m (counter) v i xung kích là xung ph n ánh các s ki n
c n đ m l y t bên ngoài thông qua chân RC0/T1OSO/T1CKI (c nh tác đ ng là
Trang 24c nh lên) Vi c l a ch n xung tác đ ng (t ng ng v i vi c l a ch n ch đ ho t
đ ng là timer hay counter) đ c đi u khi n b i bit TMR1CS (T1CON<1>)
Sau đây là s đ kh i c a Timer1:
Hình 3.2 S đ kh i c a Timer1
Các thanh ghi liên quan đ n Timer1 bao g m:
- INTCON (đ a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phép ng t ho t đ ng (GIE
và PEIE)
- PIR1 (đ a ch 0Ch): ch a c ng t Timer1 (TMR1IF)
- PIE1( đ a ch 8Ch): cho phép ng t Timer1 (TMR1IE)
- TMR1L (đ a ch 0Eh): ch a giá tr 8 bit th p c a b đ m Timer1
- TMR1H (đ a ch 0Eh): ch a giá tr 8 bit cao c a b đ m Timer1
- T1CON (đ a ch 10h): xác l p các thông s cho Timer1
3.1.3 TIMER2
Timer2 là b đ nh th i 8 bit và đ c h tr b i hai b chia t n s prescaler và postscaler Thanh ghi ch a giá tr đ m c a Timer2 là TMR2 Bit cho phép ng t Timer2 tác đ ng là TMR2ON (T2CON<2>) C ng t c a Timer2 là bit TMR2IF (PIR1<1>) Xung ngõ vào (t n s b ng ¼ t n s oscillator) đ c đ a qua b chia
t n s prescaler 4 bit (v i các t s chia t n s là 1:1, 1:4 ho c 1:16 và đ c đi u khi n b i các bit T2CKPS1:T2CKPS0 (T2CON<1:0>))
Trang 25Hình 3.3 S đ kh i Timer2
Timer2 còn đ c h tr b i thanh ghi PR2 Giá tr đ m trong thanh ghi TMR2
s t ng t 00h đ n giá tr ch a trong thanh ghi PR2, sau đó đ c reset v 00h Khi reset thanh ghi PR2 đ c nh n giá tr m c đ nh FFh
Các thanh ghi liên quan đ n Timer2 bao g m:
- INTCON (đ a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn b các ng t (GIE và PEIE)
- PIR1 (đ a ch 0Ch): ch a c ng t Timer2 (TMR2IF)
- PIE1 (đ a ch 8Ch): ch a bit đi u khi n Timer2 (TMR2IE)
- TMR2 (đ a ch 11h): ch a giá tr đ m c a Timer2
- T2CON (đ a ch 12h): xác l p các thông s cho Timer2
- PR2 (đ a ch 92h): thanh ghi h tr cho Timer2
3.2 ADC
ADC (Analog to Digital Converter) là b chuy n đ i tín hi u gi a hai d ng
t ng t và s PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0) Hi u
đi n th chu n VREF có th đ c l a ch n là VDD, VSS hay hi u đi n th chu n
đ c xác l p trên hai chân RA2 và RA3 K t qu chuy n đ i t tín ti u t ng t sang tín hi u s là 10 bit s t ng ng và đ c l u trong hai thanh ghi ADRESH:ADRESL Khi không s d ng b chuy n đ i ADC, các thanh ghi này có
th đ c s d ng nh các thanh ghi thông th ng khác Khi quá trình chuy n đ i hoàn t t, k t qu s đ c l u vào hai thanh ghi ADRESH:ADRESL, bit
(ADCON0<2>) đ c xóa v 0 và c ng t ADIF đ c set
Quy trình chuy n đ i t t ng t sang s bao g m các b c sau:
1 Thi t l p các thông s cho b chuy n đ i ADC:
- Ch n ngõ vào analog, ch n đi n áp m u (d a trên các thông s c a thanh ghi ADCON1)
- Ch nh kênh chuy n đ i AD (thanh ghi ADCON0)
- Ch nh xung clock cho kênh chuy n đ i AD (thanh ghi ADCON0)
- Cho phép b chuy n đ i AD ho t đ ng (thanh ghi ADCON0)
2 Thi t l p các c ng t cho b AD
- Clear bit ADIF
- Set bit ADIE
- Set bit PEIE
- Set bit GIE
3 i cho t i khi quá trình l y m u hoàn t t
4 B t đ u quá trình chuy n đ i (set bit )
5 i cho t i khi qu trình chuy n đ i h n t t b ng cch:
- Ki m tra bit N u =0, quá trình chuy n đ i đã hoàn t t
Trang 26Hình 3.4 S đ kh i b chuy n đ i ADC
C n chú ý là có hai cách l u k t qu chuy n đ i AD, vi c l a ch n cách l u đ c
đi u khi n b i bit ADFM và đ c minh h a c th trong hình sau:
Hình 3.5 Các cách l u k t qu chuy n đ i AD
Các thanh ghi liên quan đ n b chuy n đ i ADC bao g m:
- INTCON (đ a ch 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ng t (các bit GIE, PEIE)
- PIR1 (đ a ch 0Ch): ch a c ng t AD (bit ADIF)
- PIE1 (đ a ch 8Ch): ch a bit đi u khi n AD (ADIE)
- ADRESH (đ a ch 1Eh) và ADRESL (đ a ch 9Eh): các thanh ghi ch a k t
qu chuy n đ i AD
- ADCON0 (đ a ch 1Fh) và ADCON1 (đ a ch 9Fh): xác l p các thông s cho b chuy n đ i AD
Trang 27- PORTA (đ a ch 05h) và TRISA (đ a ch 85h): liên quan đ n các ngõ vào analog PORTA
- PORTE (đ a ch 09h) và TRISE (đ a ch 89h): liên quan đ n các ngõ vào analog PORTE
3.3 COMPARATOR
B so sánh bao g m hai b so so sánh tín hi u analog và đ c đ t PORTA Ngõ vào b so sánh là các chân RA3:RA0, ngõ ra là hai chân RA4 và RA5 Thanh ghi đi u khi n b so sánh là CMCON Các bit CM2:CM0 trong thanh ghi CMCON đóng vai trò ch n l a các ch đ ho t đ ng cho b Comparator
D a vào hình v ta th y đáp ng t i ngõ ra không ph i là t c th i so v i thay đ i
t i ngõ vào mà c n có m t kho ng th i gian nh t đ nh đ ngõ ra thay đ i tr ng thái (t i đa là 10 us) C n chú ý đ n kho ng th i gian đáp ng này khi s d ng b so sánh
C c tính c a các b so sánh có th thay đ i d a vào các giá tr đ t vào các bit C2INV và C1INV (CMCON<4:5>)
3.3.2 CÁC THANH GHI LIÊN QUAN N COMPARATOR
Các thanh ghi liên quan đ n b so sánh bao g m:
- CMCON (đ a ch 9Ch) và CVRCON (đ a ch 9Dh): xác l p các thông s cho b so sánh
- Thanh ghi INTCON (đ a ch 0Bh, 8Bh, 10Bh, 18Bh): ch a các bit cho phép các ng t (GIE và PEIE)
- Thanh ghi PIR2 (đ a ch 0Dh): ch a c ng t c a b so sánh (CMIF)
- Thanh ghi PIE2 (đ a ch 8Dh): ch a bit cho phép b so sánh (CNIE)
- Thanh ghi PORTA (đ a ch 05h) và TRISA (đ a ch 85h): các thanh ghi
Trang 28đi u khi n PORTA
3.4 CCP (CAPTURE/COMPARE/PWM)
CCP (Capture/Compare/PWM) bao g m các thao tác trên các xung đ m cung
c p b i các b đ m Timer1 và Timer2 PIC16F877A đ c tích h p s n hai kh i CCP : CCP1 và CCP2.M i CCP có m t thanh ghi 16 bit (CCPR1H:CCPR1L và CCPR2H:CCPR2L), pin đi u khi n dung cho kh i CCPx là RC2/CCP1 và RC1/T1OSI/CCP2 Các ch c n ng c a CCP bao g m:
li t kê trong b ng sau:
T b ng trên cho th y: n u c hai module dùng cùng ch c n ng Capture thì s dùng chung b đ m Timer1, ngh a là m i ho t đ ng và đi u ch nh Timer1 đ u nh
h ng đ n hai module T ng t , n u dùng cùng ch c n ng PWM s dùng chung Timer2 Còn n u m t module là Capture, module kia là Compare thì ph i l u ý
ch c n ng Compare có th clear Timer1 và c ng nh h ng đ n ch c n ng c a CCP còn l i, hai tr ng h p cu i thì bình th ng
3.4.1 CÁC THANH GHI C A KH I CCP
Thanh ghi CCPR1L (đ a ch 15h): thanh ghi ch a 8 bit th p c a kh i CCP1
Thanh ghi CCPR1H (đ a ch 16h): thanh ghi ch a 8 bit cao c a kh i CCP1
Thanh ghi CCPR2L (đ a ch 1Bh): thanh ghi ch a 8 bit th p c a kh i CCP2
Thanh ghi CCPR2H (đ a ch 1Ch): thanh ghi ch a 8 bit cao c a kh i CCP2
Thanh ghi CCP1CON và thanh ghi CCP2CON (đ a ch 17h và 1Dh): dùng đ
đi u khi n kh i CCP1 và CCP2
3.4.2 CAPTURE
Khi ho t đ ng ch đ Capture thì khi có m t “hi n t ng” x y ra t i pin RC2/CCP1 (ho c RC1/T1OSI/CCP2), giá tr c a thanh ghi TMR1 s đ c đ a vào thanh ghi CCPR1 (CCPR2) Các “hi n t ng” đ c đ nh ngh a b i các bit CCPxM3:CCPxM0 (CCPxCON<3:0>) và có th là m t trong các hi n t ng sau:
- M i khi có c nh xu ng t i các pin CCP
Trang 29ra mà giá tr trong thanh ghi CCPRx ch a đ c x lí, giá tr ti p theo nh n đ c s
t đ ng đ c ghi đè lên giá tr c
M t s đi m c n chú ý khi s d ng CCP nh sau:
- Các pin dùng cho kh i CCP ph i đ c n đ nh là input (set các bit t ng
ng trong
- thanh ghi TRISC) Khi n đ nh các pin dùng cho kh i CCP là output, vi c
đ a giá tr vào PORTC c ng có th gây ra các “hi n t ng” tác đ ng lên
kh i CCP do tr ng thái c a pin thay đ i
- Timer1 ph i đ c ho t đ ng ch đ Timer ho c ch đ đ m đ ng b
- Tránh s d ng ng t CCP b ng cách clear bit CCPxIE (thanh ghi PIE1), c
ng t CCPIF nên đ c xóa b ng ph n m m m i khi đ c set đ ti p t c
Ch c n ng c a Compare đ c mô t trong hình d i đây:
Trang 30Hình 3.8 S đ kh i CCP (Compare mode)
T ng t nh ch đ Capture, Timer1 ph i đ c n đ nh ch đ ho t đ ng là timer
ho c đ m đ ng b Ngoài ra, khi ch đ Compare, CCP có kh n ng t o ra hi n
t ng đ c bi t (Special Event trigger) làm reset giá tr thanh ghi TMR1 và kh i
đ ng b chuy n đ i ADC i u này cho phép ta đi u khi n giá tr thanh ghi TMR1
m t cách linh đ ng h n
3.4.4 CH C N NG PWM ( I U CH R NG XUNG)
Khi ho t đ ng ch đ PWM (Pulse Width Modulation _ kh i đi u ch đ r ng xung), tín hi u sau khi đi u ch s đ c đ a ra các pin c a kh i CCP (c n n đ nh các pin này là output) s d ng ch c n ng đi u ch này tr c tiên ta c n ti n hành các b c cài đ t sau:
1 Thi t l p th i gian c a 1 chu kì c a xung đi u ch cho PWM (period) b ng cách đ a giá tr thích h p vào thanh ghi PR2
2 Thi t l p đ r ng xung c n đi u ch (duty cycle) b ng cách đ a giá tr vào thanh ghi CCPRxL và các bit CCP1CON<5:4>
3 i u khi n các pin c a CCP là output b ng cách clear các bit t ng ng trong thanh ghi TRISC
4 Thi t l p giá tr b chia t n s prescaler c a Timer2 và cho phép Timer2 ho t
đ ng b ng cách đ a giá tr thích h p vào thanh ghi T2CON
5 Cho phép CCP ho t đ ng ch đ PWM
Hình sau đây mô t ch c n ng và ho t đ ng c a PWM :
Trang 31Hình 3.9 S đ kh i CCP (PWM mode)
Trong đó giá tr 1 chu kì (period) c a xung đi u ch đ c tính b ng công th c:
r ng c a xung đi u ch (duty cycle) đ c tính theo công th c:
Nh v y 2 bit CCPxCON<5:4> s ch a 2 bit LSB Thanh ghi CCPRxL ch a byte cao c a giá tr quy t đ nh đ r ng xung Thanh ghi CCPRxH đóng vai trò là buffer cho kh i PWM Khi giá tr trong thanh ghi CCPRxH b ng v i giá tr trong thanh ghi TMR2 và hai bit CCPxCON<5:4> b ng v i giá tr 2 bit c a b chia t n s prescaler, pin c a kh i CCP l i đ c đ a v m c th p, nh v y ta có đ c hình nh
Trang 32ch p tr ng thái c a bit GIE, tuy nhiên ho t đ ng ng t v n ph thuôc vào bit GIE và các bit đi u khi n khác Bit đi u khi n ng t RB0/INT và TMR0 n m trong thanh ghi INTCON, thanh ghi này còn ch a bit cho phép các ng t ngo i vi PEIE Bit đi u khi n các ng t n m trong thanh ghi PIE1 và PIE2 C ng t c a các ng t n m trong thanh ghi PIR1 và PIR2
Trong m t th i đi m ch có m t ch ng trình ng t đ c th c thi, ch ng trình
ng t đ c k t thúc b ng l nh RETFIE Khi ch ng trình ng t đ c th c thi, bit GIE
t đ ng đ c xóa, đ a ch l nh ti p theo c a ch ng trình chính đ c c t vào trong
b nh Stack và b đ m ch ng trình s ch đ n đ a ch 0004h L nh RETFIE đ c dùng đ thoát kh i ch ng trình ng t và quay tr v ch ng trình chính, đ ng th i bit GIE c ng s đ c set đ cho phép các ng t ho t đ ng tr l i Các c hi u đ c dùng đ ki m tra ng t nào đang x y ra và ph i đ c xóa b ng ch ng trình tr c khi cho phép ng t ti p t c ho t đ ng tr l i đ ta có th phát hi n đ c th i đi m
Ng t này d a trên s thay đ i tr ng thái c a pin RB0/INT C nh tác đ ng gây ra
ng t có th là c nh lên hay c nh xu ng và đ c đi u khi n b i bit INTEDG (thanh ghi OPTION_REG<6>) Khi có c nh tác đ ng thích h p xu t hi n t i pin RB0/INT,
c ng t INTF đ c set Ng t này có kh n ng đánh th c vi đi u khi n t ch đ sleep n u bit cho phép ng t đ c set tr c khi l nh SLEEP đ c th c thi
b) Ng t RB
Ng t này ch ho t đ ng khi các chân t RB4 đ n RB7 b thay đ i tr ng thái so
v i làn ch t tr c đó c a vi đi u khi n Ng t này đ c đi u khi n b i bit RBIE trong thanh ghi INTCON<4> Khi m t trong các chân t RB4 đ n RB7 b thay đ i
tr ng thái thì bit RBIF (INTCON<0>) s đ c set lên m c 1
Cách ho t đ ng c a 2 ng t này c ng gi ng nh ng t Timer0 Các bit đi u khi n
ng t là TMR1IE và TMR2IE Khi đó ng t x y ra thì các c ng t TMR1IF và
Trang 33TMR2IF s đ c set
e) Ng t ADC
Khi quá trình chuy n đ i ADC hoàn t t thì vi đi u khi n s set bit ADIF và ng t
s x y ra Bit đi u khi n cho ng t này là ADIE
3.5.3 CÁC THANH GHI C S D NG PH C V NG T
1 Thanh ghi INTCON (đ a ch 0Bh, 8Bh, 10Bh, 18Bh): thanh ghi ch a các bit
đi u khi n và các bit c hi u khi Timer0 b tràn, ng t ngo i vi RB0/INT và ng t interrupt-on-change t i các chân c a PORTB
2 Thanh ghi PIR1 (đ a ch 0Ch): thanh ghi ch a c ng t c a các kh i ngo i vi
3 Thanh ghi PIR2 (đ a ch 0Dh)
4 Thanh ghi PIE1 (đ a ch 8Ch): ch a các bit cho phép các ng t ngo i vi
5 Thanh ghi PIE2 (đ a ch 8Dh): ch a các bit cho phép các ng t ngo i vi
Trang 34CH NG 4 : CÁC CHU N GIAO TI P C A V K PIC16F877A 4.1 USART
USART (Universal Synchronous Asynchronous Receiver Transmitter) là m t trong hai chu n giao ti p n i ti p.USART còn đ c g i là giao di n giao ti p n i
ti p n i ti p SCI (Serial Communication Interface) Có th s d ng giao di n này cho các giao ti p v i các thi t b ng ai vi, v i các vi đi u khi n khác hay v i máy tính Các d ng c a giao di n USART ng ai vi bao g m:
PIC16F877A đ c tích h p s n b t o t c đ baud BRG (Baud Rate Genetator)
8 bit dùng cho giao di n USART BRG th c ch t là m t b đ m có th đ c s
d ng cho c hai d ng đ ng b và b t đ ng b và đ c đi u khi n b i thanh ghi PSBRG d ng b t đ ng b , BRG còn đ c đi u khi n b i bit BRGH ( TXSTA<2>) d ng đ ng b tác đ ng c a bit BRGH đ c b qua
4.1.1 CÁC THANH GHI C S D NG TRONG GIAO TI P USART
Trong PIC16F877A có t t c 5 thanh ghi liên quan đ n quá trình đi u khi n USART: trong đó có hai thanh ghi ch c n ng TXSTA, RCSTA, hai thanh ghi d
li u RCREG, TXREG và thanh ghi đ nh t c đ Baund: SPBRG
a) Thanh ghi TXSTA (đ a ch 98h)
Ch a các bit tr ng thái và đi u khi n vi c truy n d li u thông qua chu n giao ti p USART
b) Thanh ghi RCSTA (đ a ch 18h)
Thanh ghi ch a các bit tr ng thái và các bit đi u khi n quá trình nh n d li u qua chu n giao ti p USART
c) Thanh ghi TXREG (đ a ch 19h)
Thanh ghi đóng vai trò là buffer đ m 8 bit trong quá trình truy n d li u thông qua chu n giao ti p USART
d) Thanh ghi RCREG (đ a ch 1Ah)
Thanh ghi đóng vai trò là buffer đ m trong quá trình nh n d li u thông qua chu n giao ti p USART
Trang 35đ c đi u khi n b i bit TXIE (PIE1<4>) C hi u TXIF v n đ c set b t ch p tr ng thái c a bit TXIE hay tác đ ng c a ch ng trình (không th xóa TXIF b ng ch ng trình) mà ch reset v 0 khi có d li u m i đ c đ a vào thanh ghi TXREG
truy n d li u theo giao di n USART, ta c n th c hi n các b c sau:
- T o xung truy n Baud b ng cách đ a các giá tr c n thi t vào thanh ghi RSBRG và bit đi u khi n m c t c đ baud BRGH
- Thi t l p ch đ giao ti p: đ ng b ho c b t đ ng b , master hay slave
- Set bit TXIE n u c n s d ng ng t truy n
- Set bit TX9 n u đ nh d ng d li u c n truy n là 9 bit
- Set bit TXEN đ cho phép truy n d li u
- N u đ nh d ng d li u là 9 bit, đ a bit d li u th 9 vào bit TX9D
- a 8 bit d li u c n truy n vào thanh ghi TXREG
- N u s d ng ng t truy n, c n ki m tra l i các bit GIE và PEIE (thanh ghi INTCON)
b) Ch đ nh n d li u
Bit đi u khi n cho phép kh i nh n d li u là bit RCEN (RCSTA<4>) Thành
ph n quan tr ng nh t c a kh i nh n d li u là thanh ghi nh n d li u RSR (Receive Shift Register) Sau khi nh n di n bit Stop c a d li u truy n đ n, d li u nh n
đ c trong thanh ghi RSR s đ c đ a vào thanh ghi RCGER, sau đó c hi u RCIF (PIR1<5>) s đ c set và ng t nh n đ c kích ho t Ng t này đ c đi u khi n b i bit RCIE (PIE1<5>) Bit c hi u RCIF là bit ch đ c và không th b tác đ ng b i
ch ng trình RCIF ch reset v 0 khi d li u nh n vào thanh ghi RCREG đã đ c
đ c và khi đó thanh ghi RCREG r ng
Trang 36Hình 4.2 S đ kh i c a kh i nh n d li u USART
Khi s d ng giao di n nh n d li u USART c n ti n hành tu n t các b c sau:
- Thi t l p t c đ Baud (đ a giá tr thích h p vào thanh ghi SPBRG và bit BRGH)
- Ch n ch đ giao ti p cho USART
- N u c n s d ng ng t nh n d li u, set bit RCIE
- N u d li u truy n nh n có đ nh d ng là 9 bit, set bit RX9
- Cho phép nh n d li u b ng cách set bit CREN
- Sau khi d li u đ c nh n, bit RCIF s đ c set và ng t đ c kích ho t
- c giá tr thanh ghi RCSTA đ đ c bit d li u th 9 và ki m tra xem quá trình nh n d li u có b l i không
- c 8 bit d li u t thanh ghi RCREG
- N u quá trình truy n nh n có l i x y ra, xóa l i b ng cách xóa bit CREN
- N u s d ng ng t nh n c n set bit GIE và PEIE (thanh ghi INTCON)
4.1.3 CÁC CH GIAO TI P USART
a) Ch đ USART b t đ ng b
ch đ truy n này các bit truy n đi s bao g m 1 bit Start, 8 hay 9 bit d li u (thông th ng là 8 bit) và 1 bit Stop Bit LSB s đ c truy n đi tr c Các kh i truy n và nh n data đ c l p v i nhau s dùng chung t n s t ng ng v i t c đ baud cho quá trình d ch d li u (t c đ baud g p 16 hay 64 l n t c đ d ch d li u tùy theo giá tr c a bit BRGH) và đ đ m b o tính hi u qu c a d li u thì hai kh i truy n và nh n ph i dùng chung m t đ nh d ng d li u
b) Ch đ USART đ ng b
Giao di n USART đ ng b đ c kích ho t b ng cách set bit SYNC C ng giao
ti p n i ti p v n là hai chân RC7/RX/DT, RC6/TX/CK và đ c cho phép b ng cách set bit SPEN USART cho phép hai ch đ truy n nh n d li u là Master mode và Slave mode Master mode đ c kích ho t b ng cách set bit CSRC (TXSTA<7>), Slave mode đ c kích ho t b ng cách clear bit CSRC i m khác bi t duy nh t
gi a hai ch đ này là Master mode s l y xung clock đ ng b t b t o xung baud BRG còn Slave mode l y xung clock đ ng b t bên ngoài qua chân RC6/TX/CK
Trang 37i u này cho phép Slave mode ho t đ ng ngay c khi vi đi u khi n đang ch đ sleep
Khi nh n đ c d li u, vi đi u khi n th c hi n các công vi c gi ng nh giao
ti p USART b t đ ng b , k c các c hi u, ng t nh n và các thao tác trên các thành
ph n đó i m khác bi t duy nh t là giao di n này cho phép hai ch đ nh n d
li u, đó là ch nh n 1 word d li u (set bit SCEN) hay nh n m t chu i d li u (set bit CREN) cho đ n khi ta clear bit CREN
4.2 CHU N GIAO TI P MSSP
MSSP ( Master Synchronous Serial Port) là giao di n đ ng b n i ti p dùng đ giao ti p v i các thi t b ngo i vi (EEPROM, ghi d ch, chuy n đ i ADC,…) hay các
vi đi u khi n khác MSSP có th ho t đ ng d i hai d ng giao ti p:
+ SPI (Serial Pheripheral Interface)
+ I2C (Inter-Intergrated Circuit)
4.2.1 CÁC THANH GHI I U KHI N GIAO TI P MSSP
a) Thanh ghi SSPSTAT
Thanh ghi này có đ a ch 94h, ch a các bit tr ng thái c a chu n giao ti p MSSP
b) Thanh ghi SSPCON1
SSPCON1 có đ a ch 14h, đ c dùng đ đi u khi n chu n giao ti p MSSP
c) Thanh ghi SSPBUF
Thanh ghi đ m d li u 8 bit cho chu n giao ti p MSSP và có đ a ch 13h
d) Thanh ghi SSPCON2
Thanh ghi này có đ a ch 91h, đ c s d ng đ đi u khi n các ch đ ho t đ ng
c a chu n giao ti p I2C
e) Thanh ghi SSPADD
SSPADD có đ a ch 93h, đây là thanh ghi ch a đ a ch c a vi đi u khi n khi ho t
đ ng chu n giao ti p I2C Slave mode Khi không dùng đ ch a đ a ch (I2C Master mode) SSPADD đ c dùng đ ch a giá tr t o ra xung clock đ ng b t i pin SCL
4.2.2 GIAO TI P SPI
Chu n giao ti p SPI cho phép truy n nh n đ ng b Ta c n s d ng 4 pin cho chu n giao ti p này:
Trang 38RC5/SDO: ngõ ra d li u d ng n i ti p (Serial Data output)
RC4/SDI/SDA: ngõ vào d li u d ng n i ti p (Serial data input)
RC3/SCK/SCL: xung đ ng b n i ti p (Serial Clock)
RA5/AN4/SS/C2OUT: ch n đ i t ng giao ti p (Serial Select) khi giao ti p
ch đ Slave mode
Khi giao ti p v i các thi t b khác dùng chu n MSSP ta ph i ch nh các thông s sau:
- Master mode hay Slave mode ch đ Master mode, xung clock đ ng b
s đi ra t chân RC3/SCK/SCL i v i ch đ Slave mode, xung clock đ ng b
s đ c nh n t bên ngoài qua chân RC3/SCK/SCL
- M c logic c a xung clock khi tr ng thái t m ng ng quá trình truy n nh n (Idle)
S đ k t n i c a chu n giao ti p SPI nh sau:
Hình 4.3 S đ k t n i c a chu n giao ti p SPI
Theo s đ k t n i này, kh i Master s b t đ u quá trình truy n nh n d li u
b ng cách g i tín hi u xung đ ng b SCK D li u s d ch t thanh ghi SSPSR đ a
ra ngoài n u có m t c nh c a xung đ ng b tác đ ng và ng ng d ch khi có tác đ ng
c a c nh còn l i
C hai kh i Master và Slave nên đ c n đ nh chung các qui t c tác đ ng c a xung clock đ ng b đ d li u có th d ch chuy n đ ng th i
4.3 C NG GIAO TI P SONG SONG PSP (PARALLEL SLAVE PORT)
Ngoài các c ng n i ti p và các giao đi n n i ti p đ c trình bày ph n trên, vi
đi u
khi n PIC16F877A còn đ c h tr m t c ng giao ti p song song và chu n giao
Trang 39ti p song song thông qua PORTD và PORTE Do c ng song song ch ho t đ ng
ch đ Slave mode nên vi đi u khi n khi giao ti p qua giao di n này s ch u s đi u khi n c a thi t b bên ngoài thông qua các pin c a PORTE, trong khi d li u s
đ c đ c ho c ghi theo d ng b t đ ng b thông qua 8 pin c a PORTD
Bit đi u khi n PSP là PSPMODE (TRISE<4>) PSPMODE đ c set s thi t l p
ch c n ng các pin c a PORTE là các pin cho phép đ c d li u , cho pheùp ghi d li u và pin ch n vi đi u khi n ph c v cho vi c truy n nh n d li u song song thông qua bus d li u 8 bit c a PORTD PORTD lúc này đóng vai trò là thanh ghi ch t d li u 8 bit, đ ng th i tác đ ng c a thanh ghi TRISD c ng s đ c b qua do PORTD lúc này ch u s đi u khi n c a các thi t b bên ngoài PORTE v n ch u s tác đ ng c a thanh ghi TRISE, do đó c n xác l p tr ng thái các pin PORTE là input b ng các set các bit TRISE<2:0> Ngoài
ra c n đ a giá tr thích h p các bit PCFG3:PCFG0 (thanh ghi ADCON1<3:0>) đ
n đ nh các pin c a PORTE là các pin I/O d ng digital (PORTE còn là các pin ch c
n ng c a kh i ADC)
Trang 40CH NG 5 : T P L NH C A VI I U KHI N PIC
5.1 VÀI NÉT S L C V T P L NH C A VI I U KHI N PIC
Do PIC16F877A là vi đi u khi n có t p l nh rút g n RISC (Reduced Information Set Computer), bao g m 35 l nh và có th đ c phân ra thành 3 nhóm
c b n:
- Nhóm l nh thao tác trên bit
- Nhóm l nh thao tác trên byte
- Nhóm l nh đi u khi n
i v i dòng vi đi u khi n PIC16Fxxx, m i l nh đ c mã hóa thành 14 bit, bao
g m các bit opcode (xác đ nh l nh mã hóa) và các bit mô t m t hay vài tham s
Tác d ng: th c hi n phép toán AND gi a thanh ghi và giá tr k, k t qu đ c
ch a trong thanh ghi W
Bit tr ng thái: Z