Báo cáo thực tập Vi điều khiển PIC
TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ THUAÄT TP.HCM
KHOA ÑIEÄN – ÑIEÄN TÖÛ
VI ÑIEÀU KHIEÅN PIC
BAÙO CAÙO TT VI XÖÛ LYÙ
GVHD: NGUYEÃN VAÊN HIEÄP
SVTH: NGUYEÃN DUY TÖÔÛNG
NGUYEÃN MINH TAØI
2010
Ñ A Ï I H O Ï C S Ö P H A Ï M K Y Õ T H U A Ä T
Muïc Luïc
CHÖÔNG 1.TOÅNG QUAÙT VEÀ VI ÑIEÀU KHIEÅN PIC.............................................
1.ÑAËC TÍNH CHUNG..........................................................................................3
2.KIEÁN TRUÙC CUÛA PIC......................................................................................5
3.RISC-CISC ........................................................................................................5
4.PIPELING..........................................................................................................6
5.CAÙC DOØNG PIC VAØ CAÙCH LÖÏA CHOÏN PIC.................................................7
6.NGOÂN NGÖÕ LAÄP TRÌNH CHO PIC.................................................................8
7.MAÏCH NAÏP PIC ...............................................................................................8
CHÖÔNG 2.KHAÛO SAÙT VÑK PIC16F877A. ............................................................
I.CAÁU TRUÙC VÑK PIC16F877A.........................................................................9
1.SÔ ÑOÀ CHAÂN VÑK ......................................................................................9
2.SÔ ÑOÀ KHOÁI VÑK ......................................................................................11
3.MOÄT SOÁ THOÂNG TIN .................................................................................12
II.TOÅ CHÖÙC BOÄ NHÔÙ.........................................................................................13
1.BOÄ NHÔÙ CHÖÔNG TRÌNH.........................................................................13
2.BOÄ NHÔÙ DÖÕ LIEÄU.......................................................................................13
3.CAÙC COÅNG XUAÁT NHAÄP CUÛA PIC ..........................................................21
4.TIMER0........................................................................................................27
5.TIMER1........................................................................................................29
6.TIMER2........................................................................................................31
7.ADC..............................................................................................................32
8.COMPARATOR...........................................................................................34
9.BOÄ NHÔÙ ÑIEÄN AÙP SO SAÙNH .....................................................................36
10.CCP.............................................................................................................37
11.GIAO TIEÁP NOÁI TIEÁP................................................................................42
12.GIAO TIEÁP SONG SONG..........................................................................68
13.TOÅNG QUAN VEÀ MOÄT SOÁ ÑAËC TÍNH CUÛA CPU..................................70
CHÖÔNG 3.CHÖÔNG TRÌNH BIEÂN DÒCH VAØ MAÏCH NAÏP VÑK ....................
I.CHÖÔNG TRÌNH BIEÂN DÒCH CHO VÑK PIC16F877A...............................76
1.PHAÀN MEÀM BIEÂN DÒCH MPLAB ...........................................................76
2.PHAÀN MEÀM BIEÂN DÒCH CCS .................................................................87
II.CHÖÔNG TRÌNH MAÏCH NAÏP VÑK PIC16F877A......................................92
1.CHÖÔNG TRÌNH NAÏP WINPIC800 ........................................................92
2.CHÖÔNG TRÌNH NAÏP IC-PRO ...............................................................93
CHÖÔNG 4.TAÄP LEÄNH CHO VI ÑIEÀU KHIEÅN PIC16F877A ..............................
1.NGOÂN NGÖÕ LAÄP TRÌNH ASM CUÛA MPLAB..............................................97
2.NGOÂN NGÖÕ LAÄP TRÌNH C CUÛA CCS C ....................................................105
CHÖÔNG 5.MOÄT SOÁ CHÖÔNG TRÌNH ÖÙNG DUÏNG......................................109
1.ÑIEÀU KHIEÅN I/O ..........................................................................................109
2.CHÖÔNG TRÌNH DELAY ...........................................................................111
3.MOÄT SOÁ CHÖÔNG TRÌNH VEÀ ÑAËC TÍNH I/O CAÙC PORT ÑK ...............116
4.MOÄT SOÁ BAØI TAÄP MAÃU THAM KHAÛO CAÙC CHÖÙ NAÊNG CUÛA PIC ......130
PHUÏ LUÏC 2 THANH GHI SFR (SPECIAL FUNCTION REGISTER) ...........196
TAØI LIEÄU THAM KHAÛO.......................................................................................221
Chöông 1
Toång quan veà vi ñieàu khieån Pic
1. ÑAËC TÍNH CHUNG.
Pic laø moät ho Vi ñieàu khieån RISC ñöôïc saûn xuaát bôûi coâng ty Microchip Technology.
Doøng Pic ñaàu tieân laø PIC1650 ñöôïc phaùt trieån bôûi Microelectronics Dicision thuoäc
General Instrument
PIC laø vieát taét cuûa ‚Programable Intelligent Computer‛, coù theå taïm dòch laø ‚maùy
tính thoâng minh khaû trình‛ do haõng Genenral Instrument ñaët teân cho vi ñieàu khieån ñaàu
tieân cuûa hoï: PIC1650 ñöôïc thieát keá ñeå duøng laøm caùc thieát bò ngoaïi vi cho vi ñieàu khieån
CP1600. Vi ñieàu khieån naøy sau ñoù ñöôïc nghieân cöùu phaùt trieån theâm vaø töø ñoù hình thaønh
neân doøng vi ñieàu khieån PIC ngaøy nay.
Hieän nay coù khaù nhieàu doøng vi ñieàu khieån Pic khaùc nhau nhö chung cuøng coù
chung 1 ñaëc ñieåm nhö sau:
+ Söõ duïng coâng nghe tích hôïp cao RISC CPU
+ Ngöôøi söõ duïng coù theå laäp trình vôùi 35 caâu leänh ñôn giaûn
+ Taát caû caùc caâu leänh thöïc hieän trong moät chu kì leänh ngoaïi tröø moäi soá caâu leänh reõ
nhaùnh thöïc hieän trong 2 chu kì leänh.
+ Toác ñoä hoaït ñoäng laø: - Xung ñoàng boä vaøo laø DC-20MHz
- Chu kyø leänh thöïc hieän trong 200ns
+ Boä nhôù chöông trình Flash 8K*14 Words
+ Boä nhôù Ram 368*8 bytes
+ Boä nhôù EFPRom 256*8 bytes
Khaû naêng cuûa boä vi xöõ lyù naøy:
+ Khaû naêng ngaét leân tôùi 14 nguoàn ngaét trong vaø ngaét ngoaøi
+ Ngaên nhôù Stack ñöôïc phaân chia laøm 8 möùc
+ Truy caäp boä nhôù baèng ñòa chæ tröïc tieáp hoaëc giaùn tieáp,
+ Nguoàn khoûi ñoäng laïi (POR)
+ Boä taïo xung thôøi gian (PWRT) vaø boä taïo dao ñoäng (OST)
+ Boä ñeám xung thôøi gian (WDT) vôùi nguoàn dao ñoäng treân chíp (nguoàn dao ñoäng
RC) hoaït ñoäng ñaùng tin caäy
+ Coù maõ chöông trình baûo veä
+ Phöông thöùc caát giöõ SLEEP
+ Coù baûng löïa choïng dao ñoäng
+ Coâng nheä CMOS FLASH/EEPROM nguoâng möùc thaáp, toác ñoä cao.
+ Thieát keá hoaøn toaøn tænh
+ Maïch chöông trình noùi tieáp coù 2 chaân
+ Vi xöõ lyù ñoïc/ghi boä nhôù chöông trình
+ Daûi ñieän theá hoaït doäng roäng : 2.0 v ñeán 5.5v
+ Nguoàn söõ duïng hieän taïi 25mA
+ Daõy nhieät ñoä coâng nghieäp vaø thuaän lôïi.
+ Coâng suaát tieâu thuï thaáp:
< 0.6 mA vôùi 5V.4MHz
20uA vôùi nguoàn ,32KHs
<1uA nguoàn döï phoøng
Caùc ñaëc tính noåi baät cuûa thieát bò ngoaïi vi treân chíp
+ Timer 0: 8bit cuûa boä ñònh thôøi, boä ñeám vôùi heä soá tyû leä tröôùc
+ Timer 1: 16bit cuûa boä ñònh thôøi, boä ñeám vôùi heä soá tæ leä, coù khaû naêng taêng trong
khi ôû cheá ñoä Sleep qua xung ñoàng hoà ñöôïc cung caáp beân ngoaøi.
+ Timer 2: 8 bit cuûa boä ñònh thôøi, boä ñeám vôùi 8bit cuûa heä soá tæ leä tröôùc vaø heä soá tæ leä
sau
+ Coù 2 cheá ñoä baét giöõ, so saùnh, ñieàu cheá ñoä roäng xung (PWM).
+ Cheá ñoä baét giöõ vôùi 16 bít vôùi toác ñoä 12.5ns, cheá ñoä so saùnh vôùi 16bit, toác ñoä giaûi
quyeát cöïc ñaïi laø 200ns, cheá ñoä roäng xung vôùi 10bit.
+ Boä chuyeån ñoåi tín hieäu soá sang töông töï vôùi 10bit.
+ Coång truyeàn thoâng noái tieáp SSP vôùi SPI phöông thöùc chuû
+ Boä truyeàn nhaän thoâng tin ñoàng boä, dò boä (USART/SCL) coù khaû naêng phaùt hieän
9bit ñòa chæ.
(chuû/tôù)
+ Coång phuï song song (PSP) vôùi 8bit môû roäng, vôùi RD, WR vaø CS ñieàu khieån.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 4
2. KIEÁN TRUÙC CUÛA PIC
Caáu truùc phaàn cöùng cuûa moät vi ñieàu khieån ñöôïc thieát keá theo hai daïng kieán truùc:
kieán truùc Von Neuman vaø kieán truùc Havard.
Hình 1.1: kieåu kieán truùc Harvard vaø Von-Neumann
Toå chöùc phaàn cöùng cuûa PIC ñöôïc thieát keá theo kieán truùc Havard. Ñieåm khaùc bieät
giöõa kieán truùc Havard vaø kieán truùc Von-Neuman laø caáu truùc boä nhôù döõ lieäu vaø boä nhôù
chöông trình.Ñoái vôùi kieán truùc Von-Neuman, boä nhôù döõ lieäu vaø boä nhôù chöông trình
naèm chung trong moät boä nhôù, do ñoù ta coù theå toå chöùc, caân ñoái moät caùch linh hoaït boä
nhôù chöông trình vaø boä nhôù döõlieäu. Tuy nhieân ñieàu naøy chæ coù yù nghóa khi toác ñoä xöû lí
cuûa CPU phaûi raát cao, vì vôùi caáu truùc ñoù, trong cuøng moät thôøi ñieåm CPU chæ coù theå
töông taùc vôùi boä nhôù döõ lieäu hoaëc boä nhôù chöông trình. Nhö vaäy coù theå noùi kieán truùc
Von-Neuman khoâng thích hôïp vôùi caáu truùc cuûa moät vi ñieàu khieån.Ñoái vôùi kieán truùc
Havard, boä nhôù döõ lieäu vaø boä nhôù chöông trình taùch ra thaønh hai boä nhôù rieâng bieät. Do
ñoù trong cuøng moät thôøi ñieåm CPU coù theå töông taùc vôùi caû hai boä nhôù, nhö vaäy toác ñoä xöû
lí cuûa vi ñieàu khieån ñöôïc caûi thieän ñaùng keå. Moät ñieåm caàn chuù yù nöõa laø taäp leänh trong
kieán truùc Havard coù theå ñöôïc toái öu tuøy theo yeâu caàu kieán truùc cuûa vi ñieàu khieån maø
khoâng phuï thuoäc vaøo caáu truùc döõ lieäu. Ví duï, ñoái vôùi vi ñieàu khieån doøng 16F, ñoä daøi
leänh luoân laø 14 bit (trong khi döõ lieäu ñöôïc toå chöùc thaønh töøng byte), coøn ñoái vôùi kieán
truùc Von-Neuman, ñoä daøi leänh luoân laø boäi soá cuûa 1 byte (do döõ lieäuñöôïc toå chöùc thaønh
töøng byte). Ñaëc ñieåm naøy ñöôïc minh hoïa cuï theå trong hình 1.1.
3. RISC vaø CISC
Nhö ñaõ trình baøy ôû treân, kieán truùc Havard laø khaùi nieäm môùi hôn so vôùi kieán truùc
Von-Neuman. Khaùi nieäm naøy ñöôïc hình thaønh nhaèm caûi tieán toác ñoä thöïc thi cuûa moät vi
ñieàu khieån.Qua vieäc taùch rôøi boä nhôù chöông trình vaø boä nhôù döõ lieäu, bus chöông trình
vaø bus döõ lieäu,CPU coù theå cuøng moät luùc truy xuaát caû boä nhôù chöông trình vaø boä nhôù döõ
lieäu, giuùp taêng toác ñoä xöû lí cuûa vi ñieàu khieån leân gaáp ñoâi. Ñoàng thôøi caáu truùc leänh
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 5
khoâng coøn phuï thuoäc vaøo caáu truùc döõ lieäu nöõa maø coù theå linh ñoäng ñieàu chænh tuøy theo
khaû naêng vaø toác ñoä cuûa töøng vi ñieàu khieån. Vaø ñeå tieáp tuïc caûi tieán toác ñoä thöïc thi leänh,
taäp leänh cuûa hoï vi ñieàu khieån PIC ñöôïc thieát keá sao cho chieàu daøi maõ leänh luoân coá ñònh
(ví duï ñoái vôùi hoï 16Fxxxx chieàu daøi maõ leänh luoân laø 14 bit) vaø cho pheùp thöïc thi leänh
trong moät chu kì cuûa xung clock ( ngoaïi tröø moät soá tröôøng hôïp ñaëc bieät nhö leänh nhaûy,
leänh goïi chöông trình con … caàn hai chu kì xung ñoàng hoà).Ñieàu naøy coù nghóa taäp leänh
cuûa vi ñieàu khieån thuoäc caáu truùc Havard seõ ít leänh hôn, ngaén hôn, ñôn giaûn hôn ñeå ñaùp
öùng yeâu caàu maõ hoùa leänh baèng moät soá löôïng bit nhaát ñònh.Vi ñieàu khieån ñöôïc toå chöùc
theo kieán truùc Havard coøn ñöôïc goïi laø vi ñieàu khieån RISC(Reduced Instruction Set
Computer) hay vi ñieàu khieån coù taäp leänh ruùt goïn. Vi ñieàu khieån ñöôïc thieát keá theo kieán
truùc Von-Neuman coøn ñöôïc goïi laø vi ñieàu khieån CISC (Complex Instruction Set
Computer) hay vi ñieàu khieån coù taäp leänh phöùc taïp vì maõ leänh cuûa noù khoâng phaûi laø moät
soá coá ñònh maø luoân laø boäi soá cuûa 8 bit (1 byte).
4. PIPELINING
Ñaây chính laø cô cheá xöû lí leänh cuûa caùc vi ñieàu khieån PIC. Moät chu kì leänh cuûa vi
ñieàu khieån seõ bao goàm 4 xung clock. Ví duï ta söû duïng oscillator coù taàn soá 4 MHZ, thì
xung leänh seõ coù taàn soá 1 MHz (chu kì leänh seõ laø 1 us). Giaû söû ta coù moät ñoaïn chöông
trình nhö sau:
1. MOVLW
2. MOVWF
3. CALL
55h
PORTB
SUB_1
PORTA,BIT3
4. BSF
5. instruction
@address SUB_1
ÔÛ ñaây ta chæ baøn ñeán qui trình vi ñieàu khieån xöû lí ñoaïn chöông trình treân thoâng
qua töøng chu kì leänh. Quaù trình treân seõ ñöôïc thöïc thi nhö sau
Hình 1.2 : cô cheá Pipelining
TCY0: ñoïc leänh 1
TCY1: thöïc thi leänh 1, ñoïc leänh 2
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 6
TCY2: thöïc thi leänh 2, ñoïc leänh 3
TCY3: thöïc thi leänh 3, ñoïc leänh 4.
TCY4: vì leänh 4 khoâng phaûi laø leänh seõ ñöôïc thöïc thi theo qui trình thöïc thi
cuûa chöông trình (leänh tieáp theo ñöôïc thöïc thi phaûi laø leänh ñaàu tieân taïi
label SUB_1)neân chu kì thöïc thi leänh naøy chæ ñöôïc duøng ñeå ñoïc leänh ñaàu
tieân taïi label SUB_1. Nhö vaäy coù theå xem leânh 3caàn 2 chu kì xung clock
ñeå thöïc thi.
TCY5: thöïc thi leänh ñaàu tieân cuûa SUB_1 vaø ñoïc leänh tieáp theo cuûa SUB_1.
Quaù trình naøy ñöôïc thöïc hieän töông töï cho caùc leänh tieáp theo cuûa chöông
trình.Thoâng thöôøng, ñeå thöïc thi moät leänh, ta caàn moät chu kì leänh ñeå goïi leänh ñoù, vaø moät
chu kì xung clock nöõa ñeå giaûi maõ vaø thöïc thi leänh. Vôùi cô cheá pipelining ñöôïc trình baøy
ôû treân, moãi leänh xem nhö chæ ñöôïc thöïc thi trong moät chu kì leänh. Ñoái vôùi caùc leänh maø
quaù trình thöïc thi noù laøm thay ñoåi giaù trò thanh ghi PC (Program Counter) caàn hai chu kì
leänh ñeå thöïc thi vì phaûi thöïc hieän vieäc goïi leänh ôû ñòa chæ thanh ghi PC chæ tôùi. Sau khi
ñaõ xaùc ñònh ñuùng vò trí leänh trong thanh ghi PC, moãi leänh chæ caàn moät chu kì leänh ñeå
thöïc thi xong
5. CAÙC DOØNG PIC VAØ CAÙCH LÖÏA CHOÏN VI ÑIEÀU KHIEÅN PIC
Caùc kí hieäu cuûa vi ñieàu khieån PIC:
PIC12xxxx: ñoä daøi leänh 12 bit
PIC16xxxx: ñoä daøi leänh 14 bit
PIC18xxxx: ñoä daøi leänh 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 hoaït ñoäng ôû ñieän aùp thaáp
LV: töông töï nhö LF, ñaây laø kí hieäu cuõ
Beân caïnh ñoù moät soá vi ñieäu khieån coù kí hieäu xxFxxx laø EEPROM, neáu coù theâm
chöõ A ôû cuoái laø flash (ví duï PIC16F877 laø EEPROM, coøn PIC16F877A laø flash). Ngoaøi
ra coøn coù theâm moät doøng vi ñieàu khieån PIC môùi laø dsPIC.
ÔÛ Vieät Nam phoå bieán nhaát laø caùc hoï vi ñieàu khieån PIC do haõng Microchip saûn
xuaát.Caùch löïa choïn moät vi ñieàu khieån PIC phuø hôïp:
Tröôùc heát caàn chuù yù ñeán soá chaân cuûa vi ñieàu khieån caàn thieát cho öùng duïng. Coù
nhieàu vi ñieàu khieån PIC vôùi soá löôïng chaân khaùc nhau, thaäm chí coù vi ñieàu khieån chæ coù
8 chaân,ngoaøi ra coøn coù caùc vi ñieàu khieån 28, 40, 44, … chaân.Caàn choïn vi ñieàu khieån PIC
coù boä nhôù flash ñeå coù theå naïp xoùa chöông trình ñöôïc nhieàu laàn hôn.Tieáp theo caàn chuù yù
ñeán caùc khoái chöùc naêng ñöôïc tích hôïp saün trong vi ñieàu khieån, caùc chuaån giao tieáp beân
trong.Sau cuøng caàn chuù yù ñeán boä nhôù chöông trình maø vi ñieàu khieån cho pheùp.Ngoaøi ra
moïi thoâng tin veà caùch löïa choïn vi ñieàu khieån PIC coù theå ñöôïc tìm thaáy trong cuoán saùch
‚Select PIC guide‛ do nhaø saûn xuaát Microchip cung caáp.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 7
6. NGOÂN NGÖÕ LAÄP TRÌNH CHO PIC
Ngoân ngöõ laäp trình cho PIC raát ña daïng. Ngoân ngöõ laäp trình caáp thaáp coù MPLAB
(ñöôïc cung caáp mieãn phí bôûi nhaø saûn xuaát Microchip), caùc ngoân ngöõ laäp trình caáp cao
hôn bao goàm C,Basic, Pascal, … Ngoaøi ra coøn coù moät soá ngoân ngöõ laäp trình ñöôïc phaùt
trieån daønh rieâng cho PIC nhö PICBasic, MikroBasic,…
7. MAÏCH NAÏP PIC
Ñaây cuõng laø moät doøng saûn phaåm raát ña daïng daønh cho vi ñieàu khieån PIC. Coù theå
söû duïng caùc maïch naïp ñöôïc cung caáp bôûi nhaø saûn xuaát laø haõng Microchip nhö:
PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II. Coù theå duøng caùc saûn
phaåm naøy ñeå naïp cho vi ñieàu khieån khaùc thoâng qua chöông trình MPLAB. Doøng saûn
phaåm chính thoáng naøy coù öu theá laø naïp ñöôïc cho taát caû caùc vi ñieàu khieån PIC, tuy nhieân
giaù thaønh raát cao vaø thöôøng gaëp raát nhieàu khoù khaên trong quaù trình mua saûn
phaåm.Ngoaøi ra do tính naêng cho pheùp nhieàu cheá ñoä naïp khaùc nhau, coøn coù raát nhieàu
maïch naïp ñöôïc thieát keá daønh cho vi ñieàu khieån PIC. Coù theå sô löôïc moät soá maïch naïp
cho PIC nhö sau:
JDM programmer: maïch naïp naøy duøng chöông trình naïp Icprog cho pheùp naïp caùc vi
ñieàu khieån PIC coù hoã trôï tính naêng naïp chöông trình ñieän aùp thaáp ICSP (In Circuit
Serial Programming). Haàu heát caùc maïch naïp ñeàu hoã trôï tính naêng naïp chöông trình
naøy.
WARP-13A vaø MCP-USB: hai maïch naïp naøy gioáng vôùi maïch naïp PICSTART PLUS
do nhaø saûn xuaát Microchip cung caáp, töông thích vôùi trình bieân dòch MPLAB, nghóa laø
ta coù theå tröïc tieáp duøng chöông trình MPLAB ñeå naïp cho vi ñieàu khieån PIC maø khoâng
caàn söû duïng moät chöông trình naïp khaùc, chaúng haïn nhö ICprog.
P16PRO40: maïch naïp naøy do Nigel thieát keá vaø cuõng khaù noåi tieáng. OÂng coøn thieát keá
caû chöông trình naïp, tuy nhieân ta cuõng coù theå söû duïng chöông trình naïp Icprog.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 8
Chöông 2
Khaûo saùt vi ñieàu khieån Pic16f877A
I. CAÁU TRUÙC VI ÑIEÀU KHIEÅN PIC16F877A
1. Sô ñoà chaân vi ñieàu khieån Pic16f877A
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 9
Hình 2.1 Vi ñieàu khieån PIC16F877A/PIC16F874A vaø caùc daïng sô ñoà chaân
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 10
2. sô ñoà khoái cuûa vi ñieàu khieån Pic 16f877A
Hình 2.2 Sô ñoà khoái vi ñieàu khieån PIC16F877A.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 11
3. Moät vaøi thoâng tin veà PIC16f877A
Ñaây laø vi ñieàu khieån thuoäc hoï PIC16Fxxx vôùi taäp leänh goàm 35 leänh coù ñoä daøi 14
bit.Moãi leänh ñeàu ñöôïc thöïc thi trong moät chu kì xung clock. Toác ñoä hoaït ñoäng toái ña
cho pheùp laø 20 MHz vôùi moät chu kì leänh laø 200ns. Boä nhôù chöông trình 8Kx14 bit, boä
nhôù döõ lieäu 368x8 byte RAM vaø boä nhôù döõ lieäu EEPROM vôùi dung löôïng 256x8 byte.
Soá PORT I/O laø 5 vôùi 33 pin I/O.
Caùc ñaëc tính ngoaïi vi bao goàmcaùc khoái chöùc naêng sau:
Timer0: boä ñeám 8 bit vôùi boä chia taàn soá 8 bit.
Timer1: boä ñeám 16 bit vôùi boä chia taàn soá, coù theå thöïc hieän chöùc naêng ñeám
döïa vaøo.xung clock ngoaïi vi ngay khi vi ñieàu khieån hoaït ñoäng ôû cheá ñoä
sleep.
Timer2: boä ñeám 8 bit vôùi boä chia taàn soá, boä postcaler.
Hai boä Capture/so saùnh/ñieàu cheá ñoä roâng xung.
Caùc chuaån giao tieáp noái tieáp SSP (Synchronous Serial Port), SPI vaø I2C.
Chuaån giao tieáp noái tieáp USART vôùi 9 bit ñòa chæ.
Coång giao tieáp song song PSP (Parallel Slave Port) vôùi caùc chaân ñieàu
khieån RD, WR,CS ôû beân ngoaøi.
Caùc ñaëc tính Analog:8 keânh chuyeån ñoåi ADC 10 bit.Hai boä so saùnh.Beân caïnh ñoù
laø moät vaøi ñaëc tính khaùc cuûa vi ñieàu khieån nhö:
Boä nhôù flash vôùi khaû naêng ghi xoùa ñöôïc 100.000 laàn.
Boä nhôù EEPROM vôùi khaû naêng ghi xoùa ñöôïc 1.000.000 laàn.
Döõ lieäu boä nhôù EEPROM coù theå löu tröõ treân 40 naêm.
Khaû naêng töï naïp chöông trình vôùi söï ñieàu khieån cuûa phaàn meàm.
Naïp ñöôïc chöông trình ngay treân maïch ñieän ICSP (In Circuit Serial
Programming) thoâng qua 2 chaân.
Watchdog Timer vôùi boä dao ñoäng trong.
Chöùc naêng baûo maät maõ chöông trình.
Cheá ñoä Sleep.
Coù theå hoaït ñoäng vôùi nhieàu daïng Oscillator khaùc nhau.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 12
II. TOÅ CHÖÙC BOÄ NHÔÙ
Caáu truùc boä nhôù cuûa vi ñieàu khieån PIC16F877A bao goàm boä nhôù chöông trình
(Program memory) vaø boä nhôù döõ lieäu (Data Memory).
1. BOÄ NHÔÙ CHÖÔNG TRÌNH
Boä nhôù chöông trình cuûa vi ñieàu khieån
PIC16F877A laø boä nhôù flash, dung löôïng
boänhôù 8K word (1 word = 14 bit) vaø ñöôïc
phaân thaønh nhieàu trang (töø page 0 ñeán page
3). Nhö vaäy boä nhôù chöông trình coù khaû
naêng chöùa ñöôïc 8*1024 = 8192 leänh (vì moät
leänh sau khi maõ hoùa seõ coù dung löôïng 1
word (14bit). Ñeå maõ hoùa ñöôïc ñòa chæ cuûa
8K word boä nhôù chöông trình, boä ñeám
chöông trình coù dung löôïng 13 bit
(PC<12:0>). Khi vi ñieàu khieån ñöôïc reset,
boä ñeámchöông trình seõ chæ ñeán ñòa chæ 0000h
(Reset vector). Khi coù ngaét xaûy ra, boä ñeám
chöông trình seõ chæ ñeán ñòa chæ 0004h
(Interrupt vector).
Boä nhôù chöông trình khoâng bao goàm
boä nhôù stack vaø khoâng ñöôïc ñòa chæ hoùa bôûi
boä ñeám chöông trình. Boä nhôù stack seõ ñöôïc
ñeà caäp cuï theå trong phaàn sau.
Hình 2.3 Boä nhôù chöông trình PIC16F877A
2. BOÄ NHÔÙ DÖÕ LIEÄU
Boä nhôù döõ lieäu cuûa PIC laø boä nhôù EEPROM ñöôïc chia ra laøm nhieàu bank. Ñoái vôùi
PIC16F877A boä nhôù döõ lieäu ñöôïc chia ra laøm 4 bank. Moãi bank coù dung löôïng 128
byte, bao goàm caùc thanh ghi coù chöùc naêng ñaëc bieät SFG (Special Function Register)
naèm ôû caùc vuøng ñòa chæ thaáp vaø caùc thanh ghi muïc ñích chung GPR (General Purpose
Register) naèm ôû vuøng ñòa chæ coøn laïi trong bank. Caùc thanh ghi SFR thöôøng xuyeân ñöôïc
söû duïng (ví duï nhö thanh ghi STATUS) seõ ñöôïc ñaët ôû taát caø caùc bank cuûa boä nhôù döõ
lieäu giuùp thuaän tieän trong quaù trình truy xuaát vaø laøm giaûm bôùt leänh cuûa chöông trình. Sô
ñoà cuï theå cuûa boä nhôù döõ lieäu PIC16F877A nhö sau:
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 13
Hình 2.4 Sô ñoà boä nhôù döõ lieäu PIC16F877A
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 14
2.1 Thanh ghi chöùa naêng ñaëc bieät cuûa SFR
Ñaây laø caùc thanh ghi ñöôïc söû duïng bôûi CPU hoaëc ñöôïc duøng ñeå thieát laäp vaø ñieàu
khieån caùc khoái chöùc naêng ñöôïc tích hôïp beân trong vi ñieàu khieån. Coù theå phaân thanh ghi
SFR laøm hai loïai: thanh ghi SFR lieân quan ñeán caùc chöùc naêng beân trong (CPU) vaø
thanh ghi SRF duøng ñeå thieát laäp vaø ñieàu khieån caùc khoái chöùc naêng beân ngoaøi (ví duï nhö
ADC, PWM, …). Phaàn naøy seõ ñeà caäp ñeán caùc thanh ghi lieân quan ñeán caùc chöùc naêng
beân trong. Caùc thanh ghi duøng ñeå thieát laäp vaø ñieàu khieån caùc khoái chöùc naêng seõ ñöôïc
nhaéc ñeán khi ta ñeà caäp ñeán caùc khoái chöùc naêng ñoù.
Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chöùa keát quaû thöïc hieän
pheùp toaùn cuûa khoái ALU, traïng thaùi reset vaø caùc bit choïn bank caàn truy xuaát trong boä
nhôù döõ lieäu.
Bit 7: IRP bit choïn bank boä nhôù döõ lieäu caàn truy xuaát (duøng cho ñòa chæ giaùn
tieáp).
IRP = 0: bank 2,3 (töø 100h ñeán 1FFh)
IRP = 1: bank 0,1 (töø 00h ñeán FFh)
Bit 6,5:RP1:RP0 hai bit choïn bank boä nhôù döõ lieäu caàn truy xuaát (duøng cho ñòa chæ
tröïc tieáp)
RP1:RP2
BANCK
00
01
10
11
0
1
2
3
Bit 4:
bit chæ thò traïng thaùi cuûa WDT(Watch Dog Timer)
=1 khi vi ñieàu khieån vöøa ñöôïc caáp nguoàn, hoaëc sau khi leänh
CLRWDT hay SLEEP ñöôïc thöïc thi.
=0 khi WDT bò traøn
Bit 3:
bit chæ thò trang thaùi nguoàn
= 1 khi vi ñieàu khieån ñöôïc caáp nguoàn hoaëc sau leänh CLRWDT
= 0 sau khi leänh SLEEP ñöôïc thöïc thi
Bit 2: Z bit Zero
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 15
Z =1 khi keát quaû cuûa pheùp toaùn hay logic baèng 0
Z = 0 khi keát quaû cuûa pheùp toaùn hay logic khaùc 0
Bit 1:DC Digit carry/Borrow
DC = 1 khi keát quaû pheùp toaùn taùc ñoäng leân 4 bit thaáp coù nhôù.
DC = 0 khi keát quaû pheùp toaùn taùc ñoäng leân 4 bit thaáp khoâng coù nhôù.
Bit 0: C Carry/borrow
C =1 khi keát quaû pheùp toaùn taùc ñoäng leân bit MSB coù nhôù.
C=0 khi keát quaû pheùp toùan taùc ñoäng leân bit MSB khoâng coù nhôù.
Thanh ghi OPTION_REG (81h, 181h): thanh ghi naøy cho pheùp ñoïc vaø ghi, cho
pheùp ñieàu khieån chöùc naêng pull-up cuûa caùc chaân trong PORTB, xaùc laäp caùc tham soá veà
xung taùc ñoäng, caïnh taùc ñoäng cuûa ngaét ngoaïi vi vaø boä ñeám Timer0.
Bit 7:
PORTB pull-up enable bit
= 1 khoâng cho pheùp chöùc naêng pull-up cuûa PORTB
= 0 cho pheùp chöùc naêng pull-up cuûa PORTB
Bit 6: INTEDG Interrupt Edge Select bit
INTEDG = 1 ngaét xaûy ra khi caïnh döông chaân RB0/INT xuaát hieän.
INTEDG = 0 ngaét xaûy ra khi caïnh aâm chaân BR0/INT xuaát hieän.
Bit 5 TOCS Timer0 Clock Source select bit
TOSC = 1 clock laáy töø chaân RA4/TOCK1.
TOSC = 0 duøng xung clock beân trong (xung clock naøy baèng vôùi
xung clock duøng ñeå thöïc thi leänh).
Bit 4 TOSE Timer0 Source Edge Select bit
TOSE = 1 taùc ñoäng caïnh leân.
TOSE = 0 taùc ñoäng caïnh xuoáng.
Bit 3 PSA Prescaler Assignment Select bit
PSA = 1 boä chia taàn soá (prescaler) ñöôïc duøng cho WDT
PSA = 0 boä chia taàn soá ñöôïc duøng cho Timer0
Bit 2:0 PS2:PS0 Prescaler Rate Select bit
Caùc bit naøy cho pheùp thieát laäp tæ soá chia taàn soá cuûa Prescaler
Bit value
000
TMR0 Rate
WDT Rate
1:2
1:4
1:8
1:1
1:2
1:3
1:8
001
010
011
1:16
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 16
100
101
110
111
1:32
1:64
1:128
1:256
1:16
1:32
1:64
1:128
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho pheùp ñoïc vaø ghi,chöùa
caùc bit ñieàu khieån vaø caùc bit côø hieäu khi timer0 bò traøn, ngaét ngoaïi vi RB0/INT vaø ngaét
interrput-on-change taïi caùc chaân cuûa PORTB.
Bit 7 GIE Global Interrupt Enable bit
GIE = 1 cho pheùp taát caû caùc ngaét.
GIE = 0 khoâng cho pheùp taát caû caùc ngaét.
Bit 6 PEIE Pheripheral Interrupt Enable bit
PEIE = 1 cho pheùp taát caû caùc ngaét ngoaïi vi
PEIE = 0 khoâng cho pheùp taát caû caùc ngaét ngoaïi vi
Bit 5 TMR0IE Timer0 Overflow Interrupt Enable bit
TMR0IE = 1 cho pheùp ngaét Timer0
TMR0IE = 0 khoâng cho pheùp ngaét Timer0
Bit 4 RBIE RB0/INT External Interrupt Enable bit
RBIE = 1 cho pheùp ngaét ngoaïi vi RB0/INT
RBIE = 0 khoâng cho pheùp ngaét ngoaïi vi RB0/INT
Bit 3 RBIE RB Port change Interrupt Enable bit
RBIE = 1 cho pheùp ngaét RB Port change
RBIE = 0 khoâng cho pheùp ngaét RB Port change
Bit 2 TMR0IF Timer0 Interrupt Flag bit
TMR0IF = 1 thanh ghi TMR0 bò traøn (phaûi xoùa baèng chöôngtrình) .
TMR0IF = 0 thanh ghi TMR0 chöa bò traøn.
Bit 1 INTF BR0/INT External Interrupt Flag bit
INTF = 1 ngaét RB0/INT xaûy ra (phaûi xoùa côø hieäu baèng
chöôngtrình).
INTF = 0 ngaét RB0/INT chöa xaûy ra.
Bit 0 RBIF RB Port Change Interrupt Flag bit
RBIF = 1 ít nhaát coù moät chaân RB7:RB4 coù söï thay ñoåi traïngthaùi.Bit
naøy phaûi ñöôïc xoùa baèng chöông trình sau khi ñaõ kieåm tra laïicaùc giaù
trò cuûa caùc chaân taïi PORTB.
RBIF = 0 khoâng coù söï thay ñoåi traïng thaùi caùc chaân RB7:RB4.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 17
Thanh ghi PIE1 (8Ch): chöùa caùc bit ñieàu khieån chi tieát caùc ngaét cuûa caùckhoái chöùc
naêng ngoaïi vi.
Bit
7 PSPIE Parallel Slave Port Read/Write Interrupt Enable bit
PSPIE = 1 cho pheùp ngaét PSP read/write.
PSPIE = 0 khoâng cho pheùp ngaé PSP read/write.
Bit 6 ADIE ADC (A/D converter) Interrupt Enable bit
ADIE = 1 cho pheùp ngaét ADC.
ADIE = 0 khoâng cho pheùp ngaét ADC.
Bit 5 RCIE USART Receive Interrupt Enable bit
RCIE = 1 cho pheùp ngaét nhaän USART
RCIE = 0 khoâng cho pheùpn gaét nhaän USART
Bit 4 TXIE USART Transmit Interrupt Enable bit
TXIE = 1 cho pheùp ngaét truyeàn USART
TXIE = 0 khoâng cho pheùp ngaét truyeàn USART
Bit 3 SSPIE Synchronous Serial Port Interrupt Enable bit
SSPIE = 1 cho pheùp ngaét SSP
SSPIE = 0 khoâng cho pheùp ngaét SSP
Bit 2 CCP1IE CCP1 Interrupt Enable bit
CCP1IE = 1 cho pheùp ngaét CCP1
CCP1IE = 0 khoâng cho pheùp ngaét CCP1
Bit 1 TMR2IE TMR2 to PR2 Match Interrupt Enable bit
TMR2IE = 1 cho pheùp ngaét.
TMR2IE = 0 khoâng cho pheùp ngaét.
Bit 0 TMR1IE TMR1 Overflow Interrupt Enable bit
TMR1IE = 1 cho pheùp ngaét.
TMR1IE = 0 khoâng cho pheùp ngaét.
Thanh ghi PIR1 (0Ch) chöùa côø ngaét cuûa caùc khoái chöùc naêng ngoaïi vi, caùc ngaét
naøy ñöôïc cho pheùp bôûi caùc bit ñieàu khieån chöùa trong thanh ghi PIE1.
Bit 7 PSPIF Parallel Slave Port Read/Write Interrupt Flag bit
PSPIF = 1 vöøa hoaøn taát thao taùc ñoïc hoaëc ghi PSP (phaûi xoùa baèng
chöông trình).
PSPIF = 0 khoâng coù thao taùc ñoïc ghi PSP naøo dieãn ra.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 18
Bit 6 ADIF
ADC Interrupt Flag bit
ADIF = 1 hoaøn taát chuyeån ñoåi ADC.
ADIF = 0 chöa hoaøn taát chuyeån ñoåi ADC.
Bit 5 RCIF USART Receive Interrupt Flag bit
RCIF = 1 buffer nhaän qua chuaån giao tieáp USART ñaõ ñaày.
RCIF = 0 buffer nhaân qua chuaån giao tieáp USART roãng.
Bit 4 TXIF USART Transmit Interrupt Flag bit
TXIF = 1 buffer truyeàn qua chuaån giao tieáp USART roãng.
TXIF = 0 buffer truyeàn qua chuaån giao tieáp USART ñaày.
Bit 3 SSPIF Synchronous Serial Port (SSP) Interrupt Flag bit
SSPIF = 1 ngaét truyeàn nhaän SSP xaûy ra.
SSPIF = 0 ngaét truyeàn nhaän SSP chöa xaûy ra.
Bit 2 CCP1IF CCP1 Interrupt Flag bit
Khi CCP1 ôû cheá ñoä Capture
CCP1IF=1 ñaõ caäp nhaät giaù trò trong thanh ghi TMR1.
CCP1IF=0 chöa caäp nhaät giaù trò trong thanh ghi TMR1.
Khi CCP1 ôû cheá ñoä Compare
CCP1IF=1 giaù trò caàn so saùnh baèng vôùi giaù trò chöùa trong
TMR1
CCP1IF=0 giaù trò caàn so saùnh khoâng baèng vôùi giaù trò trong
TMR1
Bit 0 TMR1IF TMR1 Overflow Interrupt Flag bit
TMR1IF = 1 thanh ghi TMR1 bò traøn (phaûi xoùa baèng chöông
trình).
TMR1IF = 0 thanh ghi TMR1 chöa bò traøn.
Thanh ghi PIE2 (8Dh): chöùa caùc bit ñieàu khieån caùc ngaét cuûa caùc khoái chöùc naêng
CCP2, SSP bus, ngaét cuûa boä so saùnh vaø ngaét ghi vaøo boä nhôù EEPROM
Bit 7, 5, 2, 1 Khoâng caàn quan taâm vaø maëc ñònh mang giaù trò 0.
Bit 6 CMIE Comparator Interrupt Enable bit
CMIE = 1 Cho pheùp ngaét cuûa boä so saùnh.
CMIE = 0 Khoâng cho pheùp ngaét.
Bit 4 EEIE EEPROM Write Operation Interrupt Enable bit
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 19
EEIE = 1 Cho pheùp ngaét khi ghi döõ lieäu leân boä nhôù EEPROM.
EEIE = 0 Khoâng cho pheùp ngaét khi ghi döõ lieäu leân boä nhôù
EEPROM.
Bit 3 BCLIE Bus Collision Interrupt Enable bit
BCLIE = 1 Cho pheùp ngaét.
BCLIE = 0 Khoâng cho pheùp ngaét.
Bit 0 CCP2IE CCP2 Interrupt Enable bit
CCP2IE = 1 Cho pheùp ngaét.
CCP2IE = 0 Khoâng cho pheùp ngaét.
Thanh ghi PIR2 (0Dh): chöùa caùc côø ngaét cuûa caùc khoái chöùc naêng ngoaïi vi, caùc
ngaét naøy ñöôïc cho pheùp bôûi caùc bit ñieàu khieån chöùa trong thanh ghi PIE2.
Bit 7, 5, 2, 1: khoâng quan taâm vaø maëc ñònh mang giaù trò 0.
Bit 6 CMIF Comparator Interrupt Flag bit
CMIF = 1 tín hieäu ngoõ vaøo boä so saùnh thay ñoåi.
CMIF = 0 tín hieäu ngoõ vaøo boä so saùnh khoâng thay ñoåi.
Bit 4 EEIF EEPROM Write Operation Interrupt Flag bit
EEIF = 1 quaù trình ghi döõ lieäu leân EEPROM hoaøn taát.
EEIF = 0 quaù trình ghi döõ lieäu leân EEPROM chöa hoaøn taát hoaëc chöa baét
ñaàu.
Bit 3 BCLIF Bus Collision Interrupt Flag bit
BCLIF = 1 Bus truyeàn nhaän ñang baän khi (ñang coù döõ lieäu truyeàn ñi trong
bus) khi SSP haït ñoäng ôû cheá ñoä I2C Master mode.
BCLIF = 0 Bus truyeàn nhaän chöa bò traøn (khoâng coù döõ lieäu truyeàn ñi trong
bus).
Bit 0 CCP2IFCCP2 Interrupt Flag bit
ÔÛ cheá ñoä Capture
CCP2IF = 1 ñaõ caäp nhaät giaù trò trong thanh ghi TMR1.
CCP2IF = 0 chöa caäp nhaät giaù trò trong thanh ghi TMR1.
ÔÛ cheá ñoä Compare
CCP2IF = 1 giaù trò caàn so saùnh baèng vôùi giaù trò chöùa trong
TMR1.
CCP2IF = 0 giaù trò caàn so saùnh chöa baèng vôùi giaù trò chöùa
trong TMR1.
Thanh ghi PCON (8Eh): chöùa caùc côø hieäu cho bieát traïng thaùi caùc cheá ñoä reset
cuûa vi ñieàu khieån.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 20
Bit 7, 6, 5, 4, 3, 2 Khoâng caàn quan taâm vaø maëc ñònh mang giaù trò 0.
Bit 1
Power-on Reset Status bit
= 1 khoâng coù söï taùc ñoäng cuûa Power-on Reset.
= 0 coù söï taùc ñoäng cuûa Power-on reset.
Brown-out Reset Status bit
Bit 0
= 1 khoâng coù söï taùc ñoäng cuûa Brown-out reset.
= 0 coù söï taùc ñoäng cuûa Brown-out reset.
2.2 Thanh ghi muïc ñích GPR
Caùc thanh ghi naøy coù theå ñöôïc truy xuaát tröïc tieáp hoaëc giaùn tieáp thoâng qua thanh
ghi FSG (File Select Register). Ñaây laø caùc thanh ghi döõ lieäu thoâng thöôøng, ngöôøi söû
duïng coù theå tuøy theo muïc ñích chöông trình maø coù theå duøng caùc thanh ghi naøy ñeå chöùa
caùc bieán soá, haèng soá, keát quaû hoaëc caùc tham soá phuïc vuï cho chöông trình.
2.3 STACK
Stack khoâng naèm trong boä nhôù chöông trình hay boä nhôù döõ lieäu maø laø moät vuøng
nhôù ñaëc bieät khoâng cho pheùp ñoïc hay ghi. Khi leänh CALL ñöôïc thöïc hieän hay khi moät
ngaét xaûy ra laøm chöông trình bò reõ nhaùnh, giaù trò cuûa boä ñeám chöông trình PC töï ñoäng
ñöôïc vi ñieàu khieån caát vaøo trong stack. Khi moät trong caùc leänh RETURN, RETLW hat
RETFIE ñöôïc thöïc thi, giaù trò PC seõ töï ñoäng ñöôïc laáy ra töø trong stack, vi ñieàu khieån seõ
thöïc hieän tieáp chöông trình theo ñuùng qui trình ñònh tröôùc. Boä nhôù Stack trong vi ñieàu
khieån PIC hoï 16F87xA coù khaû naêng chöùa ñöôïc 8 ñòa chæ vaø hoaït ñoäng theo cô cheá xoay
voøng. Nghóa laø giaù trò caát vaøo boä nhôù Stack laàn thöù 9 seõ ghi ñeø leân giaù trò caát vaøo Stack
laàn ñaàu tieân vaø giaù trò caát vaøo boä nhôù Stack laàn thöù 10 seõ ghi ñeø leân giaù trò caát vaøo Stack
laàn thöù 2.
Caàn chuù yù laø khoâng coù côø hieäu naøo cho bieát traïng thaùi stack, do ñoù ta khoâng bieát
ñöôïc khi naøo stack traøn. Beân caïnh ñoù taäp leänh cuûa vi ñieàu khieån doøng PIC cuõng khoâng
coù leänh POP hay PUSH, caùc thao taùc vôùi boä nhôù stack seõ hoaøn toaøn ñöôïc ñieàu khieån bôûi
CPU.
3. CAÙC COÅNG XUAÁT NHAÄP CUÛA PIC16F877A
Coång xuaát nhaäp (I/O port) chính laø phöông tieän maø vi ñieàu khieån duøng ñeå töông
taùc vôùi theá giôùi beân ngoaøi. Söï töông taùc naøy raát ña daïng vaø thoâng qua quaù trình töông
taùc ñoù, chöùc naêng cuûa vi ñieàu khieån ñöôïc theå hieän moät caùch roõ raøng.Moät coång xuaát
nhaäp cuûa vi ñieàu khieån bao goàm nhieàu chaân (I/O pin), tuøy theo caùch boá trí vaø chöùc naêng
cuûa vi ñieàu khieån maø soá löôïng coång xuaát nhaäp vaø soá löôïng chaân trong moãi coång coù theå
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 21
khaùc nhau. Beân caïnh ñoù, do vi ñieàu khieån ñöôïc tích hôïp saün beân trong caùc ñaëc tính giao
tieáp ngoaïi vi neân beân caïnh chöùc naêng laø coång xuaát nhaäp thoâng thöôøng, moät soá chaân
xuaát nhaäp coøn coù theâm caùc chöùc naêng khaùc ñeå theå hieän söï taùc ñoäng cuûa caùc ñaëc tính
ngoaïi vi neâu treân ñoái vôùi theá giôùi beân ngoaøi. Chöùc naêng cuûa töøng chaân xuaát nhaäp trong
moãi coång hoaøn toaøn coù theå ñöôïc xaùc laäp vaø ñieàu khieån ñöôïc thoâng qua caùc thanh ghi
SFR lieân quan ñeán chaân xuaát nhaäp ñoù.Vi ñieàu khieån PIC16F877A coù 5 coång xuaát nhaäp,
bao goàm PORTA, PORTB, PORTC,PORTD vaø PORTE. Caáu truùc vaø chöùc naêng cuûa
töøng coång xuaát nhaäp seõ ñöôïc ñeà caäp cuï theå trong phaàn sau.
3.1 PORTA : ñòa chæ 05h.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 22
PORTA (RPA) bao goàm 6 I/O pin. Ñaây laø caùc chaân ‚hai chieàu‛ (bidirectional
pin), nghóa laø coù theå xuaát vaø nhaäp ñöôïc. Chöùc naêng I/O naøy ñöôïc ñieàu khieån bôûi thanh
ghi TRISA (ñòa chæ 85h). Muoán xaùc laäp chöùc naêng cuûa moät chaân trong PORTA laø input,
ta ‚set‛ bit ñieàu khieån töông öùng vôùi chaân ñoù trong thanh ghi TRISA vaø ngöôïc laïi,
muoán xaùc laäp chöùc naêng cuûa moät chaân trong PORTA laø output, ta ‚clear‛ bit ñieàu
khieån töông öùng vôùi chaân ñoù trong thanh ghi TRISA. Thao taùc naøy hoaøn toaøn töông töï
ñoái vôùi caùc PORT vaø caùc thanh ghi ñieàu khieån töông öùng TRIS (ñoái vôùi PORTA laø
TRISA, ñoái vôùi PORTB laø TRISB, ñoái vôùi PORTC laø TRISC, ñoái vôùi PORTD laø
TRISD vaøñoái vôùi PORTE laø TRISE). Beân caïnh ñoù PORTA coøn laø ngoõ ra cuûa boä ADC,
boä so saùnh, ngoõ vaøo analog ngoõ vaøo xung clock cuûa Timer0 vaø ngoõ vaøo cuûa boä giao
tieáp MSSP (Master Synchronous Serial Port). Ñaëc tính naøy seõ ñöôïc trình baøy cuï theå
trong phaàn sau.
Caùc thanh ghi SFR lieân quan ñeán PORTA bao goàm:
PORTA (ñòa chæ 05h)
TRISA (ñòa chæ 85h)
CMCON (ñòa chæ 9Ch)
CVRCON (ñòa chæ 9Dh)
ADCON1 (ñòa chæ 9Fh)
: chöùa giaù trò caùc pin trong PORTA
: ñieàu khieån xuaát nhaäp
: thanh ghi ñieàu khieån boä so saùnh.
: thanh ghi ñieàu khieån boä so saùnh ñieän aùp
: thanh ghi ñieàu khieån boä ADC.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 23
3.2 PORTB: ñòa chæ 06h, 106h.
PORTB (RPB) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø
TRISB. Beân caïnh ñoù moät soá chaân cuûa PORTB coøn ñöôïc söû duïng trong quaù trình naïp
chöông trình cho vi ñieàu khieån vôùi caùc cheá ñoä naïp khaùc nhau. PORTB coøn lieân quan
ñeán ngaét ngoaïi vi vaø boä Timer0. PORTB coøn ñöôïc tích hôïp chöùc naêng ñieän trôû keùo leân
ñöôïc ñieàu khieån bôûi chöông trình.
Caùc thanh ghi SFR lieân quan ñeán PORTB bao goàm:
PORTB (ñòa chæ 06h,106h) : chöùa giaù trò caùc pin trong PORTB
TRISB (ñòa chæ 86h,186h) : ñieàu khieån xuaát nhaäp
OPTION_REG (ñòa chæ 81h,181h):ñieàu khieån ngaét ngoaïi vi vaø boä Timer0.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 24
3.3 PORTC: ñòa chæ 07h
PORTC (RPC) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø
TRISC. Beân caïnh ñoù PORTC coøn chöùa caùc chaân chöùc naêng cuûa boä so saùnh, boä Timer1,
boä PWM vaø caùc chuaån giao tieáp noái tieáp I2C, SPI, SSP, USART.
Caùc thanh ghi ñieàu khieån lieân quan ñeán PORTC:
PORTC (ñòa chæ 07h) : chöùa giaù trò caùc pin trong PORTC
TRISC (ñòa chæ 87h) : ñieàu khieån xuaát nhaäp.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 25
3.4 PORTD : ñòa chæ 08h
PORTD (RPD) goàm 8 chaân I/O, thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø
TRISD.PORTD coøn laø coång xuaát döõ lieäu cuûa chuaån giao tieáp PSP (Parallel Slave Port).
Caùc thanh ghi lieân quan ñeán PORTD bao goàm:
PORTD : chöùa giaù trò caùc pin trong PORTD.
TRISD : ñieàu khieån xuaát nhaäp.
TRISE : ñieàu khieån xuaát nhaäp PORTE vaø chuaån giao tieáp PSP.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 26
3.5 PORTE : ñòa chæ 09h
PORTE (RPE) goàm 3 chaân I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø
TRISE.Caùc chaân cuûa PORTE coù ngoõ vaøo analog. Beân caïnh ñoù PORTE coøn laø caùc chaân
ñieàu khieåncuûa chuaån giao tieáp PSP.
Caùc thanh ghi lieân quan ñeán PORTE bao goàm:
PORTE : chöùa giaù trò caùc chaân trong PORTE.
TRISE
: ñieàu khieån xuaát nhaäp vaø xaùc laäp caùc thoâng soá cho chuaån giao
tieáp PSP.
ADCON1 : thanh ghi ñieàu khieån khoái ADC.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
4. TIMER 0
Ñaây laø moät trong ba boä ñeám hoaëc boä ñònh thôøi cuûa vi ñieàu khieån PIC16F877A.
Timer0 laø boä ñeám 8 bit ñöôïc keát noái vôùi boä chia taàn soá (prescaler) 8 bit. Caáu truùc cuûa
Timer0 cho pheùp ta löïa choïn xung clock taùc ñoäng vaø caïnh tích cöïc cuûa xung clock.
Ngaét Timer0 seõ xuaát hieän khi Timer0 bò traøn. Bit TMR0IE (INTCON<5>) laø bit ñieàu
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 27
khieån cuûa Timer0. TMR0IE=1 cho pheùp ngaét Timer0 taùc ñoäng, TMR0IF= 0 khoâng cho
pheùp ngaét Timer0 taùc ñoäng. Sô ñoà khoái cuûa Timer0 nhö sau:
Hình 2.5 Sô ñoà khoái cuûa Timer0.
Muoán Timer0 hoaït ñoäng ôû cheá ñoä Timer ta clear bit TOSC (OPTION_REG<5>),
khi ñoù giaù trò thanh ghi TMR0 seõ taêng theo töøng chu kì xung ñoàng hoà (taàn soá vaøo
Timer0 baèng ¼ taàn soá oscillator). Khi giaù trò thanh ghi TMR0 töø FFh trôû veà 00h, ngaét
Timer0 seõ xuaát hieän. Thanh ghi TMR0 cho pheùp ghi vaø xoùa ñöôïc giuùp ta aán ñònh thôøi
ñieåm ngaét Timer0 xuaát hieän moät caùch linh ñoäng.
Muoán Timer0 hoaït ñoäng ôû cheá ñoä counter ta set bit TOSC (OPTION_REG<5>).
Khi ñoù xung taùc ñoäng leân boä ñeám ñöôïc laáy töø chaân RA4/TOCK1. Bit TOSE
(OPTION_REG<4>) cho pheùp löïa choïn caïnh taùc ñoäng vaøo boät ñeám. Caïnh taùc ñoäng seõ
laø caïnh leân neáu TOSE=0 vaø caïnh taùc ñoäng seõ laø caïnh xuoáng neáu TOSE=1.
Khi thanh ghi TMR0 bò traøn, bit TMR0IF (INTCON<2>) seõ ñöôïc set. Ñaây chính
laø côø ngaét cuûa Timer0. Côø ngaét naøy phaûi ñöôïc xoùa baèng chöông trình tröôùc khi boä ñeám
baét ñaàu thöïc hieän laïi quaù trình ñeám. Ngaét Timer0 khoâng theå ‚ñaùnh thöùc‛ vi ñieàu khieån
töø cheá ñoä sleep.
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 28
Boä chia taàn soá (prescaler) ñöôïc chia seû giöõa Timer0 vaø WDT (Watchdog
Timer). Ñieàu ñoù coù nghóa laø neáu prescaler ñöôïc söû duïng cho Timer0 thì WDT seõ khoâng
coù ñöôïc hoã trôï cuûa prescaler vaø ngöôïc laïi. Prescaler ñöôïc ñieàu khieån bôûi thanh ghi
OPTION_REG. Bit PSA (OPTION_REG<3>) xaùc ñònh ñoái töôïng taùc ñoäng cuûa
prescaler. Caùc bit PS2:PS0 (OPTION_REG<2:0>) xaùc ñònh tæ soá chia taàn soá cuûa
prescaler. Xem laïi thanh ghi OPTION_REG ñeå xaùc ñònh laïi moät caùch chi tieát veà caùc bit
ñieàu khieån treân. Caùc leänh taùc ñoäng leân giaù trò thanh ghi TMR0 seõ xoùa cheá ñoä hoaït ñoäng
cuûa prescaler. Khi ñoái töôïng taùc ñoäng laø Timer0, taùc ñoäng leân giaù trò thanh ghi TMR0
seõ xoùa prescaler nhöng khoâng laøm thay ñoåi ñoái töôïng taùc ñoäng cuûa prescaler. Khi ñoái
töôïng taùc ñoäng laø WDT, leänh CLRWDT seõ xoùa prescaler, ñoàng thôøi prescaler seõ ngöng
taùc vuï hoã trôï cho WDT.
Caùc thanh ghi ñieàu khieån lieân quan ñeán Timer0 bao goàm:
TMR0 (ñòa chæ 01h, 101h) : chöùa giaù trò ñeám cuûa Timer0.
INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp ngaét hoaït ñoäng
(GIE vaø PEIE).
OPTION_REG (ñòa chæ 81h, 181h): ñieàu khieån prescaler.
Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.
5. TIMER1
Timer1 laø boä ñònh thôøi 16 bit, giaù trò cuûa Timer1 seõ ñöôïc löu trong hai thanh ghi
(TMR1H:TMR1L). Côø ngaét cuûa Timer1 laø bit TMR1IF (PIR1<0>). Bit ñieàu khieån cuûa
Timer1 seõ laø TMR1IE (PIE<0>). Töông töï nhö Timer0, Timer1 cuõng coù hai cheá ñoä
hoaït ñoäng: cheá ñoä ñònh thôøi (timer) vôùi xung kích laø xung clock cuûa oscillator (taàn soá
cuûa timer baèng ¼ taàn soá cuûa oscillator) vaø cheá ñoä ñeám (counter) vôùi xung kích laø xung
phaûn aùnh caùc söï kieän caàn ñeám laáy töø beân ngoaøi thoâng qua chaân RC0/T1OSO/T1CKI
(caïnh taùc ñoäng laø caïnh leân). Vieäc löïa choïn xung taùc ñoäng (töông öùng vôùi vieäc löïa choïn
cheá ñoä hoaït ñoäng laø timer hay counter) ñöôïc ñieàu khieån bôûi bit TMR1CS
(T1CON<1>). Sau ñaây laø sô ñoà khoái cuûa Timer1:
BAÙO CAÙO TT VI XÖÛ LYÙ
trang 29
Tải về để xem bản đầy đủ
Bạn đang xem 30 trang mẫu của tài liệu "Báo cáo thực tập Vi điều khiển PIC", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bao_cao_thuc_tap_vi_dieu_khien_pic.pdf