Đề tài Giới thiệu họ MCS51

Tài liệu Đề tài Giới thiệu họ MCS51

doc100 trang | Chia sẻ: hunglv | Lượt xem: 1253 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Giới thiệu họ MCS51, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MUÏC LUÏC PHAÀN 1 : LYÙ THUYEÁT CHUNG Taøi lieäu tham khaûo 1. Taøi lieäu Vi Xöû Lyù_______________________Giaûng vieân Hoà Trung Myõ 2. The 8051 Microcontroller_________________I.Scott MacKenzie 3. Höôùng daãn thí nghieäm Vi Xöû Lyù. 4. Ño löôøng vaø ñieàu khieån baèng maùy tính______Ngoâ Dieân Taäp 5. Laäp trình gheùp noái maùy tính trong Windows__Ngoâ Dieân Taäp 6. Kyõ thuaät ño____________________________Nguyeãn Ngoïc Taân 7. Taøi lieäu höôùng daãn thí nghieäm maïch ñieän töû . PHAÀN 1 : LYÙ THUYEÁT CHUNG ÑAËT VAÁN ÑEÀ : Ngaøy nay cuøng vôùi söï phaùt trieån cuûa caùc ngaønh khoa hoïc kyõ thuaät, kyõ thuaät ñieän töû ma øtrong ñoù laø vieäc öùng duïng maùy vi tính vaøo kyõ thuaät ño löôøng vaø ñieàu khieån ñaõ ñem laïi nhöõng keát quaû ñaày tính öu vieät . Ñeå coù theå tieán haønh ñieàu khieån hoaëc giaùm saùt, ño löôøng caùc quaù trình thöïc baèng maùy tính, tröôùc heát phaûi coù ñöôïc moái lieân heä caàn thieát giöõa maùy tính vaø theá giôùi beân ngoaøi. Vôùi söï phaùt trieån maïnh cuûa nghaønh kyõ thuaät soá ñaëc bieät laø cho ra ñôøi caùc hoï vi xöû lí vaø vi ñieàu khieån raát ña chöùc naêng do ñoù vieäc duøng kyõ thuaät vi xöû lí, kyõ thuaät vi ñieàu khieån keát hôïp vôùi maùy tính ñaõ giaûi quyeát nhöõng beá taéc vaø kinh teá hôn maø phöông phaùp duøng IC rôøi keát noái laïi khoâng thöïc hieän ñöôïc. Caùc thieát bò, heä thoáng ño löôøng vaø ñieàu khieån gheùp noái vôùi maùy tính coù ñoä chính xaùc cao, thôøi gian thu thaäp soá lieäu ngaén, nhöng ñieàu ñaùng quan taâm hôn laø möùc ñoä töï ñoäng hoaù trong vieäc thu thaäp vaø xöû lyù caùc keát quaû ño, keå caû vieäc laäp baûng thoáng keâ cuõng nhö in ra keát quaû . Muïc ñích yeâu caàu cuûa ñeà taøi : Trong luaän vaên naøy, em thieát keá moät moâ hình thí nghieäm maïch ñieän vaø boä ño caùc ñaïi löôïng ñieän, coù giao dieän noái tieáp vôùi maùy tính ñeå hieån thò vaø veõ daïng tín hieäu ño leân maøn hình. Maïch vi xöû lyù nhaän caùc giaù trò ñaïi löôïng ñieän (ñieän aùp, doøng ñieän, ñieän trôû, ñieän dung, caûm khaùng taàn soá, coâng suaát) sau khi ñaõ qua maïch ñeäm ñöôïc chuyeån thaønh ñieän aùp thích hôïp töông öùng vôùi ngoõ vaøo analog cuûa boä bieán ñoåi ADC. Caùc giaù trò ño seõ ñöôïc truyeàn veà maùy tính ñeå xöû lyù vaø ñöôïc hieän thò leân maøn hình . Yeâu caàu : -Giaù trò ño phaûi chính xaùc, vaø thay ñoåi taàm ño moät caùch linh hoaït. -Maïch ñieän khoâng quaù phöùc taïp, baûo ñaûm ñöôïc söï an toaøn, deã söû duïng. -Giaù thaønh khoâng quaù maéc. Giôùi haïn cuûa ñeà taøi : Do maïch chæ thieát keá ño caùc ñaïi löôïng ñieän treân maïch thí nghieäm ñieän neân bò giôùi haïn veà giaù trò ño aùp (toái ña 12 V DC, 24 Vpp AC), doøng (0.1 A), caùc giaù trò ñieän khaùng, taàn soá, coâng suaát cuõng bò giôùi haïn taàm ño. Ta coù theå môû roäng ñeå ño caùc giaù trò lôùn hôn thoâng qua bieán doøng, bieán aùp, maïch phaân taàm ño vôùi tyû soá bieán ñoåi thích hôïp. Sô ñoà khoái toång quaùt : Khoái maïch ñeäm Khoái xöû lyù & chuyeån ñoåi Maùy tính GIÔÙI THIEÄU AT89C51: TOÙM TAÉT PHAÀN CÖÙNG : Giôùi thieäu hoï MCS51 : MCS51 laø moät hoï IC vi ñieàu khieån (microcontroller) do haõng Intel saûn xuaát . Caùc IC tieâu bieåu cho hoï MCS51 laø 8031 vaø 8051 . Cuøng vôùi thôøi gian, con ngöôøi ñaõ cho ra ñôøi nhieàu loaïi vi xöû lí töø 8 bit ñeán 64 bit vôùi caûi tieán ngaøy caøng öu vieät nhöng tuøy theo muïc ñích söû duïng maø vi xöû lí 8 bit vaãn coøn toàn taïi. Trong luaän vaên, em söû duïng vi ñieàu khieån AT89C51 . AT89C51 cuõng laø vi xöû lí 8 bit nhöng coù chöùa boä nhôù beân trong vaø coù theâm 2 boä ñònh thôøi, ngoaøi ra noù coù theå giao tieáp noái tieáp tröïc tieáp vôùi maùy tính . Vôùi boä nhôù trong, AT89C51 thích hôïp cho nhöõng chöông trình coù quy moâ nhoû, tuy nhieân AT89C51 coù theå keát hôïp ñöôïc vôùi boä nhôù ngoaøi cho chöông trình coù quy moâ lôùn. Sau ñaây laø giôùi thieäu cuûa em veà vi ñieàu khieån AT89C51 coù caùc ñaëc ñieåm chung nhö sau : 4 Kbyte ROM . 128 byte RAM . 4 port I/O 8 bit . 2 boä ñònh thôøi 16 bit . Giao tieáp noái tieáp . 64 K khoâng gian boä nhôù chöông trìng môû roäng . 64 K khoâng gian boä nhôù döõ lieäu môû roäng . Moät boä xöû lyù luaän lyù (thao taùc treân caùc bit ñôn ). 210 bit ñöôïc ñòa chæ hoaù . Boä nhaân/chia 4s . OTHER REGISTER 128 byte RAM 128 byte RAM 8032\8052 ROM 0K: 8031\8032 4K: 8031 8K:8052 INTERRUPT CONTROL INT1\ INT0\ SERIAL PORT TEMER0 TEMER1 TEMER2 8032\8052 CPU OSCILATOR BUS CONTROL I/O PORT SERIAL PORT EA\ RST ALE\ PSEN\ P0 P1 P2 P3 Address\Data TXD RXD TEMER2 8032\8052 TEMER1 TEMER1 Sô ñoà khoái AT89C51 Sô löôïc veà caùc chaân cuûa AT89C51 : AT89C51 coù taát caû 40 chaân coù chöùc naêng nhö caùc ñöôøng xuaát nhaäp . Trong ñoù coù 24 chaân coù coâng duïng keùp, moãi ñöôøng coù theå hoaït ñoäng nhö ñöôøng xuaát nhaäp hoaëc nhö ñöôøng ñieàu khieån hoaëc laø caùc thaønh phaàn cuûa bus döõ lieäu vaø bus ñòa chæ . Sô ñoà chaân AT89C51 : 40 Vcc P0.7 32 AD7 30pF 19 XTAL1 P0.6 33 AD6 P0.5 34 AD5 12MHz P0.4 35 AD4 18 XTAL2 P0.3 36 AD3 30pF P0.2 37 AD2 P0.1 38 AD1 P0.0 39 AD0 AT89C51 P1.7 8 29 O PSEN P1.6 7 P1.5 6 30 ALE P1.4 5 P1.3 4 31 O EA P1.2 3 P1.1 2 9 RST P1.0 1 RD 17 P3.7 P2.7 28 A15 WR 16 P3.6 P2.6 27 A14 T1 15 P3.5 P2.5 26 A13 T0 14 P3.4 P2.4 25 A12 INT1 13 P3.3 P2.3 24 A11 INT0 12 P3.2 P2.2 23 A10 TXD 11 P3.1 P2.1 22 A9 RXD 10 P3.0 Vss P2.0 21 A8 Port 0 : Port 0 laø moät port coù hai chöùc naêng treân caùc chaân 32 – 39 . Trong caùc thieát keá côõ nhoû ( khoâng duøng boä nhôù môû roäng ) noù coù caùc chöùc naêng nhö caùc ñöôøng I/O .Ñoái vôùi caùc thieát keá lôùn vôùi boä nhôù môû roäng, noù ñöôïc hôïp keânh giöõa bus ñòa chæ vaø bus döõ lieäu . Port 1 : Port 1 laø moät port I/O treân caùc chaân 1 – 8 . Caùc chaân ñöôïc kyù hieäu P1.0 , P1.1, P1.2 , … coù theå duøng cho giao tieáp vôùi caùc thieát bò ngoaøi neáu caàn .Port 1 khoâng coù chöùc naêng khaùc, vì vaäy chuùng chæ ñöôïc duøng cho giao tieáp vôùi caùc thieát bò ngoaøi . Port 2 : Port 2 laø moät port coù coâng duïng keùp treân caùc chaân 21 – 28 ñöôïc duøng nhö caùc ñöôøng xuaát nhaäp hoaëc laø caùc byte cao cuûa bus ñòa chæ ñoái vôùi caùc thieát keá duøng boä nhôù môû roäng . Port 3 : Port 3 laø moät port coâng duïng keùp treân caùc chaân 10 – 17 . Caùc chaân cuûa port naøy coù nhieàu chöùc naêng, caùc coâng duïng chuyeån ñoåi coù lieân heä vôùi caùc ñaëc tính ñaëc bieät cuûa AT89C51 nhö ôû baûng sau : Bit Teân Chöùc naêng chuyeån ñoåi P3.0 RXD Döõ lieäu nhaän cho port noái tieáp . P3.1 TXD Döõ lieäu phaùt cho port noái tieáp . P3.2 INT0 Ngaét 0 beân ngoaøi . P3.3 INT1 Ngaét 1 beân ngoaøi . P3.4 T0 Ngoõ vaøo cuûa timer/counter 0 . P3.5 T1 Ngoõ vaøo cuûa timer/counter 1 . P3.6 WR Xung ghi boä nhôù döõ lieäu ngoaøi . P3.7 RD Xung ñoïc boä nhôù döõ lieäu ngoaøi . PSEN ( Program Store Enable ) : AT89C51 coù 4 tín hieäu ñieàu khieån . PSEN laø tín hieäu ra treân chaân 29 . Noù laø tín hieäu ñieàu khieån ñeå cho pheùp boä nhôù chöông trình môû roäng vaø thöôøng ñöôïc noái ñeán chaân OE (Output Enable ) cuûa moät EPROM ñeå cho pheùp ñoïc caùc byte cuûa maõ leänh . PESEN seõ ôû möùc thaáp trong thôøi gian laáy leänh . Caùc maõ nhò phaân cuûa chöông trình ñöôïc ñoïc töø EPROM qua bus döõ lieäu vaø ñöôïc choát vaøo thanh ghi leänh cuûa AT89C51 ñeå giaûi maõ leänh . Khi thi haønh chöông trình trong ROM noäi ( AT89C51 ) PSENseõ ôû möùc thuï ñoäng ( möùc cao ). ALE (Adress Latch Enable ) : Tín hieäu ra ALE treân chaân 30 töông hôïp vôùi caùc thieát bò laøm vieäc vôùi caùc vi xöû lyù 8085, 8086, 8088 . AT89C51 duøng ALE moät caùch töông töï cho vieäc giaûi keânh caùc bus ñòa chæ vaø döõ lieäu . Khi port 0 ñöôïc duøng trong cheá ñoä chuyeån ñoåi cuûa noù : vöøa laø bus döõ lieäu vöøa laø byte thaáp cuûa bus ñòa chæ, ALE laø tín hieäu ñeå choát ñòa chæ vaøo moät thanh ghi beân ngoaøi trong nöõa ñaàu chu lyø boä nhôù. Sau ñoù caùc ñöôøng port 0 duøng ñeåxuaát hoaëc nhaäp döõ lieäu trong nöûa sau cuûa chu kyø boä nhôù . Caùc xung tín hieäu ALE coù toác ñoä baèng 1/6 laàn taàn soá dao ñoäng treân chip vaø coù theå ñöôïc duøng laøm nguoàn xung nhòp cho caùc phaàn khaùc cuûa heä thoáng . Neáu xung nhòp treân AT89C51 laø 12 MHz thì ALE coù taàn soá 2 MHz . Chæ ngoaïi tröø khi hình thaønh leänh MOVX , moät xung ALE seõ bò maát . Chaân naøy cuõng ñöôïc laøm ngoõ vaøo cho xung laäp trình cho EPROM trong AT89C51 . EA (External Access): Tín hieäu vaøo EA treân chaân 31 thöôøng ñöôïc maéc leân möùc cao (+5V )hoaëc möùc thaáp (GND ). Neáu ôû möùc cao, AT89C51 thi haønh chöông trình töø ROM noäi trong khoaûng ñòa chæ thaáp ( 4K). Neáu ôû möùc thaáp, chöông trình chæ ñöôïc thi haønh töø boä nhôù môû roäng . Khi duøng 8031, EA luoân ñöôïc noái möùc thaáp vì khoâng coù boä nhôù chöông trình treân chip . Neáu EA ñöôïc noái möùc thaáp boä nhôù beân trong chöông trình AT89C51 seõ bò caám vaø chöông trình thi haønh töø EPROM môû roäng . Ngöôøi ta coøn duøng EA laøm chaân caáp ñieän aùp 21V khi laäp trình cho EPROM trong AT89C51 . RST ( Reset ): Ngoõ vaøo RST treân chaân 9 laø ngoõ reset cuûa AT89C51 . Khi tín hieäu naøy ñöôïc ñöa leân möùc cao ( trong ít nhaát 2 chu kyø maùy ) , caùc thanh ghi beân trong AT89C51 ñöôïc taûi nhöõng giaù trò thích hôïp ñeå khôûi ñoäng heä thoáng . Caùc ngoõ vaøo boä dao ñoäng treân chíp : Nhö ñaõ thaáy trong caùc hình treân , AT89C51 coù moät boä dao ñoäng treân chip . Noù thöôøng ñöôïc noái vôùi moät thaïch anh ôû giöõa hai chaân 18 vaø 19 . Caùc tuï giöõ cuõng caàn thieát nhö ñaõ veõ . Taàn soá thaïch anh thoâng thöôøng laø 12 MHz . Caùc chaân nguoàn : AT89C51 vaän haønh vôùi nguoàn ñôn +5V. Vcc ñöôïc noái vaøo chaân 40 vaø Vss (GND) ñöôïc noái vaøo chaân 20 . Toå chöùc boä nhôù : AT89C51 coù boä nhôù theo caáu truùc Harvard : coù nhöõng vuøng boä nhôù rieâng bieät cho chöông trình vaø döõ lieäu . Nhö ñaõ noùi ôû treân , caû chöông trình vaø döõ lieäu coù theå ôû beân trong ( AT89C51); duø vaäy chuùng coù theå ñöôïc môû roäng baèng caùc thaønh phaàn ngoaøi leân ñeán toái ña 64 Kbyte boä nhôù chöông trình vaø 64 Kbyte boä nhôù döõ lieäu . Boä nhôù beân trong bao goàm ROM vaø RAM treân chip , RAM treân chip bao goàm nhieàu thaønh phaàn : phaàn löu tröõ ña duïng , phaàn löu tröõ ñòa chæ hoaù töøng bit , caùc bank thanh ghi vaø caùc thanh ghi chöùc naêng ñaëc bieät . Boä nhôù chöông trình ñöôïc choïn qua PSEN Boä nhôù döõ lieäu ñöôïc choïn qua WR vaø RD FFFF FFFF FF 00 0000 0000 Boä nhôù treân chip Boä nhôù môû roäng Toùm taét caùc vuøng boä nhôù cuûa AT89C51 Hai ñaëc tính caàn löu yù laø : Caùc thanh ghi vaø caùc port xuaát nhaäp ñaõ ñöôïc xeáp trong boä nhôù vaø coù theå ñöôïc truy xuaát tröïc tieáp gioáng nhö caùc ñòa chæ boä nhôù khaùc . Ngaên xeáp beân trong RAM noäi nhoû hôn so vôùi RAM ngoaøi nhö trong caùc boä vi xöû lyù khaùc . Chi tieát veà boä nhôù RAM treân chip : Nhö ta thaáy treân hình sau, RAM beân trong AT89C51 ñöôïc phaân chia giöõa caùc bank thanh ghi (00H – 1FH ), RAM ñòa chæ hoaù töøng bit (20H – 2FH ), RAM ña duïng (30H – 7FH) vaø caùc thanh ghi chöùc naêng ñaëc bieät (80H – FFH) . RAM ña duïng : Maëc duø treân hình cho thaáy 80 byte RAM ña duïng chieám caùc ñòa chæ töø 30H – 7FH, 32 byte döôùi cuøng töø 00H ñeán 1FH cuõng coù theå ñöôïc duøng vôùi muïc ñích töông töï (maëc duø caùc ñòa chæ naøy ñaõ coù muïc ñích khaùc ). 7F RAM ña duïng FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B E0 ACC D0 PSW B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 P3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 khoâng ñöôïc ñòa chæ hoaù bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D khoâng ñöôïc ñòa chæ hoaù bit TH1 22 17 16 15 14 13 12 11 10 8C khoâng ñöôïc ñòa chæ hoaù bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B khoâng ñöôïc ñòa chæ hoaù bit TL1 20 07 06 05 04 03 02 01 00 8A khoâng ñöôïc ñòa chæ hoaù bit TL0 1F Bank 3 89 khoâng ñöôïc ñòa chæ hoaù bit TMOD 18 88 TCON 17 Bank2 87 khoâng ñöôïc ñòa chæ hoaù bit PCON 10 0F Bank1 83 khoâng ñöôïc ñòa chæ hoaù bit DPH 08 82 khoâng ñöôïc ñòa chæ hoaù bit DPL 07 Bank thanh ghi (maëc ñònh cho R0-R7) 81 khoâng ñöôïc ñòa chæ hoaù bit SP 00 80 87 86 85 84 83 82 81 80 P0 CAÙC THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT RAM Moïi ñòa chæ trong vuøng RAM ña duïng deàu coù theå ñöôïc truy xuaát töï do duøng caùch ñaùnh ñòa chæ tröïc tieáp hoaëc giaùn tieáp . Ví duï , ñeå ñoïc noäi dung ôû ñòa chæ 5FH cuûa RAM noäi vaøo thanh tích luyõ , leänh sau seõ ñöôïc duøng : MOV A, 5FH ; Ñònh dòa chæ tröïc tieáp RAM beân trong cuõng coù theå ñöôïc truy xuaát duøng caùch ñaùnh ñòa chæ giaùn tieáp qua R0 hay R1 . Ví duï , hai leänh sau thi haønh cuøng nhieäm vuï nhö leänh ñôn ôû treân : MOV R0 , #5FH MOV A , @R0 Leänh ñaàu duøng ñòa chæ töùc thôøi ñeå di chuyeån giaù trò 5FH vaøo thanh ghi R0 , vaø leänh thöù hai duøng ñòa chæ tröïc tieáp ñeå di chuyeån döõ lieäu “ ñöôïc troû bôûi R0 “ vaøo thanh ghi tích luyõ . RAM ñòa chæ hoaù töøng bit : AT89C51 chöùa 210 bit ñöôïc ñòa chæ hoaù , trong ñoù 128 bit laø ôû caùc ñòa chæ byte 20H ñeán 2FH , vaø phaàn coøn laïi laø trong caùc thanh ghi chöùc naêng ghi ñaëc bieät . YÙ töôûng truy xuaát töøng bit rieâng leû baèng caùc phaàn meàm laø moät ñaëc tính tieän lôïi cuûa vi ñieàu khieån noùi chung. Caùc bit coù theå ñöôïc ñaët, xoaù, AND, OR, … vôùi moät leänh ñôn. Ña soá caùc vi xöû lyù ñoøi hoûi moät chuoãi leänh ñoïc–söûa–ghi ñeå ñaït ñöôïc hieäu quaû töông töï . Hôn nöõa, caùc port I/O cuõng ñöôïc ñòa chæ hoaù töøng bit laøm ñôn giaû phaàn meàm xuaát nhaäp töøng bit . Coù 128 bit ñöôïc ñòa chæ hoaù ña duïng ôû caùc byte 20H ñeán 2FH . Caùc ñòa chæ naøy ñöôïc truy xuaát nhö caùc byte hoaëc nhö caùc bit phuï thuoäc vaøo leänh ñöôïc duøng . Ví duï , ñeå ñaët bit 67H , ta duøng leänh sau : SETB 67H Chuù yù raèng “ñòa chæ bit 67H “ laø bit coù troïng soá lôùn nhaát (MSB) ôû “ ñòa chæ byte 2CH “ . Leänh treân seõ khoâng taùc ñoäng ñeán caùc bit khaùc ôû ñòa chæ naøy . Caùc vi xöû lyù seõ phaûi thi haønh nhieäm vuï töông töï nhö sau : MOV A, 2CH ; ñoïc caû byte ORL A, #10000000 ; set MSB MOV 2CH, A ; ghi laïi caû byte Caùc bank thanh ghi : 32 byte thaáp nhaát cuûa boä nhôù noäi laø daønh cho caùc bank thanh ghi . Boä leänh cuûa AT89C51 hoã trôï 8 thanh ghi (R0 ñeán R7) vaø theo maëc ñònh (sau khi reset heä thoáng) caùc thanh ghi naøy ôû caùc ñòa chæ 00H – 07H . Leänh sau ñaây seõ ñoïc noäi dung ôû cacù ñòa chæ 05H vaøo thanh ghi tích luyõ : MOV A, R5 Ñaây laø leänh 1 byte duøng ñòa chæ thanh ghi . Taát nhieân thao taùc töông töï coù theå ñöôïc thi haønh baèng leänh 2 byte duøng ñòa chæ tröïc tieáp naèm trong byte thöù hai : MOV A, 05H Caùc leänh duøng caùc thanh ghi R0 ñeán R7 thì seõ ngaén hôn vaø nhanh hôn caùc leänh töông öùng nhöng duøng ñòa chæ tröïc tieáp. Bank thanh ghi tích cöïc coù theå chuyeån ñoåi baèng caùch thay ñoåi caùc bit choïn bank thanh ghi trong töø traïng thaùi chöông trình (PSW) . Giaû söû raèng bank thanh ghi 3 ñöôïc tích cöïc , leänh sau seõ ghi noäi dung cuûa thanh ghi tích luyõ vaøo ñòa chæ 18H : MOV R0, A YÙ töôûng duøng caùc “bank thanh ghi “ cho pheùp “ chuyeån höôùng” chöông trình nhanh vaø hieäu quaû ( töøng phaàn rieâng reõ cuûa phaàn meàm seõ coù moät boä thanh ghi rieâng khoâng phuï thuoäc vaøo caùc phaàn khaùc) . Caùc thanh ghi chöùc naêng ñaëc bieät : Caùc thanh ghi noäi cuûa AT89C51 ñöôïc truy xuaát ngaàm ñònh bôûi moät boä leänh . Ví duï leänh “INC A” seõ taêng noäi dung cuûa thanh tích luyõ A leân 1 .Taùc ñoäng naøy ñöôïc ngaàm ñònh trong maõ leänh . Caùc thanh ghi trong AT89C51 ñöôïc ñònh daïng nhö moät phaàn cuûa RAM treân chip . Vì vaäy moãi thanh ghi seõ coù moät ñòa chæ (ngoaïi tröø thanh ghi ñieåm chöông trình vaø thanh ghi leänh vì caùc thanh ghi naøy hieám khi bò taùc ñoäng tröïc tieáp , neân khoâng coù lôïi loäc gì khi ñaët chuùng vaøo trong RAM treân chip) . Ñoù laø lyù do ñeå AT89C51 coù nhieàu thanh ghi nhö vaäy . Cuõng nhö R0 ñeán R7 , coù 21 thanh ghi chöùc naêng ñaëc bieät (SFR : Special Function Register) ôû vuøng treân cuûa RAM noäi , töø ñòa chæ 80H ñeán FFH . Haàu heát 128 ñòa chæ töø 80H ñeán FFH khoâng ñöôïc ñònh nghóa . Chæ coù 21 ñòa chæ SFR laø ñöôïc ñònh nghóa . Ngoaïi tröø tích luyõ (A) coù theå ñöôïc truy xuaát ngaàm nhö ñaõ noùi, ña soá caùc SFR ñöôïc truy xuaát duøng ñòa chæ tröïc tieáp. Chuù yù raèng moät vaøi SFR coù theå ñöôïc ñòa chæ hoaù baèng bit hoaëc byte . Ngöôøi thieát keá phaûi thaän troïng khi truy xuaát bit vaø byte . Ví duï leänh sau SETB 0E0H seõ set bit 0 trong thanh ghi tích luyõ , caùc bit khaùc khoâng thay ñoåi . Ta thaáy raèng E0H ñoàng thôøi laø ñòa chæ byte cuûa caû thanh ghi tích luyõ vaø laø ñòa chæ bit cuûa bit coù troïng soá nhoû nhaát trong thanh ghi tích luyõ . Vì leänh SETB chæ taùc ñoäng treân bit , neân chæ coù ñòa chæ bit laø coù hieäu quaû . Thanh ghi B : Thanh ghi B ôû ñòa chæ F0H ñöôïc duøng cuøng vôùi thanh ghi tích luyõ A cho caùc pheùp toaùn nhaân vaø chia . Leänh MUL AB seõ nhaân caùc giaù trò khoâng daáu 8 bit trong A vaø B roài traû veà keát quaû 16 bit trong A (byte thaáp ) vaø B (byte cao ). Leänh DIV AB seõ chia A cho B roài traû veà keát quaû nguyeân trong A vaø phaàn dö trong B. Thanh ghi B cuõng coù theå ñöôïc xem nhö thanh ghi ñeäm ña duïng . Noù ñöôïc ñòa chæ hoaù töøng bit baèng caùc ñòa chæ bit F0H ñeán F7H Töøø traïng thaùi chöông trình : Töø traïng thaùi chöông trình (PSW : Program Status Word) ôû ñòa chæ D0H chöùa caùc bit traïng thaùi nhö baûng toùm taét sau : Bit Kyù hieäu Ñòa chæ YÙ nghóa PSW.7 CY D7H Côø nhôù PSW.6 AC D6H Côø nhôù phuï PSW.5 F0 D5H Côø 0 PSW.4 RS1 D4H Bit 1 choïn bank thanh ghi PSW.3 RS0 D3H Bit 0 choïn bank thanh ghi 00 = bank 0 : ñòa chæ 00H – 07H 01 = bank 1 : ñòa chæ 08H – 0FH 10 = bank 2 : ñòa chæ 10H – 17H 11 = bank 3 : ñòa chæ 18H – 1FH PSW.2 OV D2H Côø traøn PSW.1 _ D1H Döï tröõ PSW.0 P D0H Côø parity chaün Côø nhôù : Côø nhôù (CY) coù coâng duïng keùp .Thoâng thöôøng noù ñöôïc duøng cho caùc leänh toaùn hoïc : noù seõ ñöôïc set neáu coù moät soá nhôù sinh ra bôûi pheùp coäng hoaëc coù moät soá möôïn bôûi pheùp tröø . Ví duï , neáu thanh ghi tích luyõ chöùa FFH , thì leänh sau : ADD A, #1 seõ traû veà thanh ghi tích luyõ keát quaû 00H vaø set côø nhôù trong PSW . Côø nhôù cuõng coù theå xem nhö moät thanh ghi 1 bit cho caùc leänh luaän lyù thi haønh treân bit . Ví duï , leänh sau seõ AND bit 25H vôùi côø nhôù vaø ñaët keát quaû trôû vaøo côø nhôù : ANL C, 25H Côø nhôù phuï : Khi coäng caùc soá BCD, côø nhôù phuï (AC) ñöôïc set neáu keát quaû cuûa 4 bit thaáp trong khoaûng 0AH ñeán 0FH . Neáu caùc giaù trò ñöôïc coäng laø soá BCD , thì sau leänh coäng caàn coù DA A(hieäu chænh thaäp phaân thanh ghi tích luyõ ) ñeå mang keát quaû lôùn hôn 9 trôû veà taàm töø 0 -> 9 . Côø 0 : Côø 0 (F0) laø moät bit côø ña duïng daønh cho caùc öùng duïng cuûa ngöôøi duøng . Caùc bit choïn bank thanh ghi : Caùc bit choïn bank thanh ghi (RS0 vaø RS1) xaùc ñònh bank thanh ghi ñöôïc tích cöïc . Chuùng ñöôïc ñöôïc xoaù sau khi reset heä thoáng vaø ñöôïc thay ñoåi baèng phaàn meàm neáu caàn . Ví duï , ba leänh sau cho pheùp bank thanh ghi 3 vaø di chuyeån noäi dung cuûa thanh ghi R7 (ñòa chæ byte 1FH ) ñeán thanh ghi tích luyõ : SETB RS1 SETB RS0 MOV A, R7 Khi chöông trình ñöôïc hôïp dòch , caùc ñòa chæ bit ñuùng ñöôïc thay theá cho caùc kyù hieäu “RS1” vaø “RS0” . Vaäy , leänh SETB RS1 seõ gioáng nhö leänh SETB 0D4H . Côø traøn : Côø traøn (OV)ñöôïc set sau moät leänh coäng hoaëc tröø neáu coù moät pheùp toaùn bò traøn . Khi caùc soá coù daáu ñöôïc coäng hoaëc tröø vôùi nhau , phaàn meàm coù theå kieåm tra bit naøy ñeå xaùc ñònh xem keát quaû coù naèm trong taàm xaùc ñònh khoâng . Khi caùc soá khoâng daáu ñöôïc coäng , bit OV coù theå ñöôïc boû qua . Caùc keát quaû lôùn hôn +127 hoaëc nhôû hôn –128 seõ set bit OV . Ví duï , pheùp coäng sau bò traøn vaø bit OV ñöôïc set : + + Hex 0F Thaäp phaân 15 7F 127 8E 142 Keát quaû laø moät soá coù daáu 8EH ñöôïc xen nhö –116 , khoâng phaûi laø keát quaû ñuùng (142) , vì vaäy , bit OV ñöôïc set . Con troû ngaên xeáp : Con troû ngaên xeáp (SP) laø moät thanh ghi 8 bit ôû ñòa chæ 81 H . Noù chöùa ñòa chæ cuûa byte döõ lieäu hieän haønh treân ñænh cuûa ngaên xeáp . Caùc leänh treân ngaên xeáp bao goàm caùc thao taùc caát döõ lieäu vaøo ngaên xeáp vaø laáy döõ lieäu ra khoûi ngaên xeáp. Leänh caát döõ lieäu vaøo ngaên xeáp seõ laøm taêng SP tröôùc khi ghi döõ lieäu vaø leänh laáy döõ lieäu ra khoûi ngaên xeáp seõ ñoïc döõ lieäu vaø giaûm SP. Ngaên xeáp cuûa AT89C51 ñöôïc giöõ trong RAM noäi vaø ñöôïc giôùi haïn caùc ñòa chæ coù theå truy xuaát baèng ñòa chæ giaùn tieáp. Chuùng laø 128 byte ñaàu cuûa AT89C51 . Ñeå khôûi ñoäng laïi SP vôùi ngaên xeáp baét ñaàu taïi 60H , caùc leänh sau ñaây ñöôïc duøng : MOV SP , # 5FH Treân AT89C51 ngaên xeáp bò giôùi haïn 32 byte vì ñòa chæ cao nhaát cuûa RAM treân chip laø 7FH . Sôû dó duøng giaù trò 5FH vì SP seõ taêng leân 60H tröôùc khi caát byte döõ lieäu ñaàu tieân . Ngöôøi thieát keá coù theå choïn khoâng phaûi khôûi ñoäng laïi con troû ngaên xeáp maø ñeå noù laáy giaù trò maëc ñònh khi reset heä thoáng . Giaù trò maëc ñònh ñoù laø 07H vaø keát quaû laø ngaên ñaàu tieân ñeå caát döõ lieäu coù ñòa chæ laø 08H . Neáu phaàn meàm öùng duïng khoâng khôûi ñoäng laïi SP , bank thanh ghi 1 ( coù theå caû 2 vaø 3 ) seõ khoâng duøng ñöôïc vì vuøng RAM naøy ñaõ ñöôïc duøng laøm ngaên xeáp . Ngaên xeáp ñöôïc truy xuaát tröïc tieáp baèng caùc leänh PUSH vaø POP ñeåû löu tröõ taïm thôøi vaø laáy laïi döõ lieäu, hoaëc ñöôïc truy xuaát ngaàm baèng caùc leänh goïi chöông trình con (ACALL vaø LCALL) vaø caùc leänh trôû veà (RET, RETI) ñeå caát vaø laáy laïi boä ñeám chöông trình . Con troû döõ lieäu : Con troû döõ lieäu (DPTR) ñöôïc duøng ñeå truy xuaát boä nhôù ngoaøi laø moät thanh ghi 16 bit ôû ñòa chæ 82H (DPL : byte thaáp ) vaø 83H (DPH : byte cao) . Ba leänh sau seõ ghi 55H vaøo RAM ngoaøi ñòa chæ 1000H : MOV A ,# 55H MOV DPTR, #1000H MOVX @DPTR, A Leänh ñaàu tieân duøng ñòa chæ töùc thôøi ñeå taûi döõ lieäu 55H vaøo thanh ghi tích luyõ . Leänh thöù hai cuõng duøng ñòa chæ töùc thôøi , laàn naøy ñeå taûi döõ lieäu 16 bit vaøo con troû duõ lieäu . Leänh thöù ba duøng ñòa chæ giaùn tieáp ñeå di chuyeån döõõ lieäu trong A (55H) ñeán RAM ngoaøi ôû ñòa chæ ñöôïc chöùa trong DPTR (1000H) . Caùc thanh ghi port xuaát nhaäp : Caùc Port cuûa 8031 goàm port 0 ôû ñòa chæ 80H, port 1 ôû ñòa chæ 90H, port 2 ôû ñòa chæ A0H vaø port 3 ôû ñòa chæ B0H. Taát caû caùc port naøy coù theå truy xuaát töøng bit neân raát thuaän tieän trong chöùc naêng giao tieáp. f. Caùc thanh ghi Timer: AT89C51 coù chöùa hai boä ñònh thôøi/ ñeám 16 bit ñöôïc duøng cho vieäc ñònh thôøi hoaëc ñeám söï kieän. Timer 0 ôû ñòa chæ 8AH (TLO: byte thaáp) vaø 8CH (THO: byte cao). Timer 1 ôû ñòachæ 8BH (TL1: byte thaáp)vaø 8DH (TH1: byte cao) vieäc khôûi ñoäng Timer ñöôïc set bôûi Timer mode (TMOD) ôû ñòa chæ 89 vaø thanh ghi ñieàu khieån Timer (TCON) ôû ñòa chæ 88H. Chæ coù TCON ñöôïc ñòa chæ hoùa töøng bit. g. Caùc thanh ghi port noái tieáp: AT89C51 chöùa 1 port noái tieáp duøng cho vieäc trao ñoåi thoâng tin vôùi caùc thieát bò noái tieáp nhö maùy tính modem hoaëc giao tieáp vôùi caùc IC khaùc (caùc boä chuyeån ñoåi A\D, caùc thanh ghi dòch…). Moät thanh ghi goïi laø boä ñeám döõ lieäu noái tieáp (SBUF) ôû ñòa chæ 99H seõ giöõ caû hai döõ lieäu phaùt vaø döõ lieäu nhaän. Khi truyeàn döõ lieäu thì ghi leân SUBF, khi nhaän döõ lieäu thì ñoïc SUBF. Caùc mode vaän haønh khaùc nhau ñöôïc laäp trình qua thanh ghi ñieàu khieån port noái tieáp (SCON: ñöôïc ñòa chæ hoùa töøng bit ôû ñòa chæ 98H). h. Caùc thanh ghi ngaét: AT89C51 coù caáu truùc 5 nguoàn ngaét vaø 2 möùc öu tieân. Caùc ngaét bò caám sau khi Reset heä thoáng vaø seõ ñöôïc cho pheùp baèng vieäc thanh ghi cho pheùp ngaét (IE) ôû ñòa chæ A8H. Caû hai thanh ghi ñöôïc ñòa chæ hoùa töøng bit. i. Thanh ghi ñieàu khieån coâng suaát: Thanh ghi ñieàu khieån coâng suaát (PCON) ôû ñòa chæ 97H chöùa nhieàu bit ñieàu khieån chuùng ñöôïc toùm taét ôû baûng sau: Bit Kí hieäu YÙ nghóa 7 6 5 4 3 2 1 0 SMOD - - - GF1 GF0 PD IDL Bit gaáp ñoâi toác ñoä baud, neáu ñöôïc set thì toác ñoä baud seõ taêng gaáp ñoâi trong caùc mode 1,2 vaø 3 cuûa port noái tieáp Khoâng ñònhù nghóa Khoâng ñònhù nghóa Khoâng ñònhù nghóa Bit côø ña duïng 1 Bit côø ña duïng 2 Giaûm coâng suaát, ñöôïc set hoaït mode giaûm coâng suaát, chæ thoaùt khi reset. Mode chôø, set ñeå kích hoaït mode chôø, chæ thoaùt khi coù ngaét hoaëc reset heä thoáng. Boä nhôù ngoaøi : AT89C51 coù khaû naêng môû roäng boä nhôù leân ñeán 64 kB boä nhôù chöông trình vaø 64 KB boä nhôùù döõ lieäu beân ngoaøi. Do ñoù coù theå duøng ROM vaø RAM neáu caàn. Khi duøng boä nhôù ngoaøi port 0 cuõng laø moät port I/O thuaàn tuyù. Noù ñöôïc keát hôïp vôùi Bus ñòa chæ (A0 - A7) vaø Bus döõ lieäu (D0 - D7) vôùi tín hieäu ALE ñeå choát byte thaáp cuûa Bus ñòa chæ khi baét ñaàu moãi chu kyø nhôù. Port 2 ñöôïc cho pheùp byte cao cuûa ñòa chæ. Trong nöõa ñaàu cuûa moãi chu kyø boä nhôù , byte thaáp cuûa ñòa chæ ñöôïc caáp trong port 0 vaø ñöôïc choát baèng xung ALE. Moät IC choát 74HC373 (hoaëc töông ñöông) seõ giöõ byte ñòa chæ thaáp trong phaàn coøn laïi cuûa chu kyø boä nhôù. Trong nöõa sau cuûa chu kyø boä nhôù port 0 ñöôïc duøng nhö bus döõ lieäu vaø ñöôïc ñoïc hoaëc ghi tuyø theo leänh. a. Truy xuaát boä nhôù chöông trình ngoaøi: Boä nhôù chöông trình beân ngoaøi laø moät ICù ROM ñöôïc cho pheùp bôûi tín hieäu PSEN. Hình veõ sau ñaây seõ moâ taû caùch keát noái 1ù EPROM vôùi AT89C51: Port 0 EA\ ALE Port 2 PSEN\ D7-D0 A7-A0 EPROM A15-A8 OE\ D Q 74373 E OSC ALE PSEN\ PORT2 PORT1 PCL Maõ leänh PCL Byte 2 PC PCH (byte cuûa PC) P1 P1 P1 P2 P2 P1 P2 P1 P1 P2 P2 P2 P1 P2 P1 S1 S2 S3 S4 S5 S6 S1 Moät chu kyø maùy Giaûn ñoà thôøi gian ñoïc boä nhôù chöông trình ngoaøi Moät chu kyø maùy cuûa AT89C51 coù 12 chu kyø xung nhòp. Neáu boä dao ñoäng treân chip ñöôïc laùi baèng thaïch anh 12 Mhz thì moät chu kyø maùy keùo daøi 1ms. Trong moät chu kyø maùy seõ coù 2 xung ALE vaø 2 byte ñöôïc ñoïc töø boä nhôù chöông trình (neáu leänh hieän haønh laø leänh 2 byte thì byte thöù hai ñöôïc loaïi boû). Giaûn ñoà thôøi gian cuûa moät laàn laáy leänh ñöôïc veõ ôû hình sau: Truy xuaát boä nhôù döõ lieäu ngoaøi: Boä nhôù döõ lieäu ngoaøi laø moät boä nhôù RAM ñöôïc cho pheùp ghi /ñoïc baèng caùc tín hieäu ñieàu khieån WR\ vaø RD\. AT89C51 coù moät leänh duy nhaát truy xuaát döõ lieäu cuûa boä nhôù döõ lieäu ngoaøi laø MOVX duøng con troû döõ lieäu 16 bit (DPTR) hoaëc R0 vaø R1 xem nhö thanh ghi ñòa chæ. Giao tieáp giöõa AT89C51 vaø RAM Keát noái bus ñòa chæ vaø bus döõ lieäu giöõa RAM vaø AT89C51 cuõng gioáng nhö EPROM vaø do ñoù cuõng coù theå leân ñeán 64 Kbyte boä nhôù RAM. Ngoaøi ra chaân RD cuûa AT89C51 ñöôïc noái vôùi chaân cho pheùp xuaát (OE) cuûa RAM vaø chaân WR ñöôïc noái vôùi chaân ghi (WR) cuûaRAM. Giaûn ñoà thôøi gian cho leänh ñoïc boä nhôù döõ lieäu ngoaøi ñöôïc veõ ôû hình sau ñoái vôùi leänh MOVX A,@DPTR: DPL PCL Maõ leänh ALE DPH (Byte cao cuûa con troû döõ lieäu) PCH Döõ lieäu nhaäp S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 Moät chu kyø maùy Moät chu kyø maùy Port 1 Port 2 Giaûn ñoà thôøi gian cuûa leänh MOVX Giaûn ñoà thôøi gian cho leänh ghi (MOVX @DPTR,A) cuõng töông töï chæ khaùc ñöôøng WR seõ thay vaøo ñöôøng RD vaø döõ lieäu ñöôïc xuaát ra treân port 0 (RD vaãn giöõ möùc cao). c. Giaûi maõ ñòa chæ: Neáu nhieàu EPROM vaø/hoaëc nhieàu RAM ñöôïc giao tieáp vôùi AT89C51 thì caàn coù maïch giaûi maõ ñòa chæ. Maïch giaûi maõ cuõng töông töï nhö caùc heä vi xöû lyù khaùc.Ví duï , neáu duøng nhieàu EPROM vaø RAM 8Kbyte thì bus ñòa chæ caàn phaûi ñöôïc giaûi maõ ñeå xaùc ñònh IC nhôù naøo ñöôïc choïn. Thöôøng duøng IC giaûi maõ 74HC138 vôùi caùc ngoõ ra ñöôïc noái tôùi caùc ngoõ vaøo choïn chip (CS) treân caùc IC nhôù . d. Xeáp choàng caùc vuøng boä nhôù vaø döõ lieäu beân ngoaøi: Vì boä nhôù chöông trình laø ROM neân naûy sinh moät vaán ñeà baát tieän khi phaùt trieån phaàn meàm cho AT89C51 laø toå chöùc boä nhôù nhö theá naøo ñeå coù theå söûa ñoåi chöông trình vaø coù theå ghi trôû laïi khi noù ñöôïc chöùa trong boä nhôù ROM. Caùch giaûi quyeát laø xeáp choàng caùc vuøng nhôù chöông trình vaø döõ lieäu. Moät boä nhôù RAM coù theå chöùa caû chöông trình vaø döõ lieäu baèng caùch noái ñöôøng OE cuûa RAM vôùi moät coång AND coù hai ngoõ vaøo PSEN\ vaø RD\. Sô ñoà maïch nhö hình sau cho pheùp boä nhôù RAM coù hai chöùc naêng vöøa laø boä nhôù chöông trình vöøa laø boä nhôù döõ lieäu: WR\ RAM OE\ WR\ RD\ PSEN\ Vaäy moät chöông trình coù theå ñöôïc taûi vaøo RAM baèng caùch xem noù nhö moät boä nhôù döõ lieäu vaø thi haønh baèng caùch xem noù nhö moät boä nhôù chöông trình. Ngoõ vaøo tín hieäu RESET: AT89C51 coù ngoõ vaøo Reset RST taùc ñoäng ôû möùc cao trong khoaûng thôøi gian hai chu kyø xung maùy, sau ñoù xuoáng möùc thaáp ñeå AT89C51 baét ñaàu laøm vieäc , RST coù theå kích baèng tay baèng moät phím thöôøng hôû, sô ñoà maïch Reset nhö sau: +5v 10mf 10kW 100kW Reset Traïng thaùi cuûa taát caû thanh ghi trong AT89C51 sau khi Reset heä thoáng ñöôïc toùm taét nhö sau: Thanh ghi Noäi dung Ñeám chöông trình PC Thanh ghi tích luõy A Thanh ghi B Thanh ghi traïng thaùi PSW SP DPRT Port 0 ñeán port 3 IP IE Caùc thanh ghi ñònh thôøi SCON SBUF PCON(HMOS) PCON(CMOS) 0000H 00H 00H 00H 07H 0000H FFH XXX0 0000B 0XX0 0000B 00H 00H 00H 0XXX XXXXB 0XXX 0000B Quan troïng nhaát trong caùc thanh ghi treân laø thanh ghi ñeám chöông trình, noù ñöôïc ñaët taïi 0000H. Khi Reset trôû laïi möùc thaáp, vieäc thi haønh chöông trình luoân baét ñaàu ôû ñòa chæ ñaàu tieân trong boä nhôù chöông trình: ñòa chæ 0000H. Noäi dung cuûa RAM treân chip khoâng bò thay ñoåi bôûi leänh Reset. HOAÏT ÑOÄNG CUÛA BOÄ ÑÒNH THÌ TIMER: Giôùi thieäu : Moät ñònh nghóa ñôn giaûn cuûa timer laø moät chuoãi caùc flip-flop chia ñoâi taàn soà noái tieáp vôùi nhau, chuùng nhaän tín hieäu vaøo laøm nguoàn xung nhòp. Ngoõ ra cuûa taàng cuoái laøm xung nhòp cho flip - flop baùo traøn cuûa timer, maø coù theå kieåm tra noù baèng phaàn meàm hoaëc noù taïo ra interrupt (flip - flop côø). Giaù trò nhò phaân trong caùc flip - flop cuûa timer coù theå xem nhö soá ñeám soá xung nhòp (hoaëc caùc söï kieän) töø khi khôûi ñoäng timer. Ví duï timer 16 bit seõ ñeám leân töø 0000H ñeán FFFFH. Côø baùo traøn seõ leân 1 khi soá ñeám traøn töø FFFFH ñeán 0000H. mCAT89C51 coù hai timer 16 bit, moãi timer coù 4 caùch laøm vieäc. Ngöôøi ta söû duïng caùc timer ñeå: Ñònh khoaûng thôøi gian. Ñeám söï kieän. Taïo toác ñoä baud cho port noái tieáp trong mCAT89C51. Do timer 16 bit , neân taàng cuoái hoaëc thöù 16 chia taàn soá clock vaøo cho 216= 65536. Trong caùc öùng duïng ñònh nghóa khoaûng thôøi gian, ngöôøi ta söû duïng laäp trình timer ôû moät khoaûng ñeàu ñaën vaø ñaët côø traøn timer. Côø ñöôïc söû duïng ñeå ñoàng boä hoùa chöông trình ñeå thöïc hieän moät taùc ñoäng nhö kieåm tra traïng thaùi cuûa caùc ngoõ vaøo hoaëc gôûi söï kieän ra caùc ngoõ ra. Caùc öùng duïng khaùc coù theå söû duïng vieäc taïo xung nhòp ñeàu ñaën cuûa timer ñeå ño thôøi gian troâi qua giöõa hai söï kieän (Ví duï: ño ñoä roäng xung). Ñeám söï kieän duøng ñeå xaùc ñònh soá laàn xaûy ra cuûa moät soá söï kieän. Moät “söï kieän” laø baát cöù taùc ñoäng ngoaøi naøo coù theå cung caáp moät chuyeån traïng thaùi 1 xuoáng 0 treân moät chaân cuûa AT89C51.Caùc timer cuõng coù theå cung caáp xung nhòp toác ñoä baud cho port noái tieáp noäi cuûa AT89C51. Truy xuaát caùc timer cuûa AT89C51 duøng 6 thanh ghi chöùc naêng ñaëc bieät trong baûng sau: SFR cho timer Muïc ñích Ñòa chæ Ñònh ñòa chæ bit TCON Ñieàu khieån timer 88H Coù TMOD Cheá ñoä timer 89H Khoâng TLO Byte thaáp cuûa timer 0 8AH Khoâng TL1 Byte thaáp cuûa timer 1 8BH Khoâng TH0 Byte cao cuûa timer 0 8CH Khoâng TH1 Byte cao cuûa timer 1 8DH Khoâng Thanh ghi cheá ñoä Timer (TMOD) : Thanh ghi TMOD chöùa hai nhoùm 4 bit duøng ñeå ñaët cheá ñoä laøm vieäc cho timer 0 vaø timer1. Bit Teân Timer Moâ taû 7 GATE 1 Bit (môû coång), khi leân, timer chæ chaïy khi INT1 ôû möùc cao 6 C/ 1 Bit choïn cheá ñoä counter/ timer 1 = Boä ñeám söï kieän 0 = Boä ñònh khoaûng thôøi gian 5 M1 1 Bit1 cuûa cheá ñoä ( mode) 4 M0 1 Bit 0 cuûa cheá ñoä Caùc cheá ñoä timer: 00: Cheá ñoä 0: timer 13 bit 01: Cheá ñoä 1: timer 16 bit 10: Cheá ñoä 2: töï ñoäng naïp laïi 8 bit 11: Cheá ñoä 3: taùch timer 3 GATE 0 Bit (môû) coång cuûa timer 0 2 C/ 0 Bit choïn counter/ timer cuûa timer 0 1 M1 0 Bit 1 cuûa cheá ñoä cuûa cheá ñoä timer 0 0 M0 0 Bit 0 cuûa cheá ñoä cuûa cheá ñoä timer 0 Toùm taét thanh ghi TMOD. Thanh ghi ñieàu khieån timer (TCON) : Thanh ghi TCON chöùa caùc bit traïng thaùi vaø caùc bit ñieàu khieån cho timer0 vaø timer1. Bit Kyù hieäu Ñòa chæ Moâ taû TCON.7 TF1 8FH Côø baùo traøn timer. Ñaët bôûi phaàn cöùng khi traøn, ñöôïc xoùa bôûi phaàn meàm hoaëc phaàn cöùng khi boä xöû lí chæ ñeán chöông trình phuïc vuï ngaét. TCON.6 TR1 8EH Bit ñieàu khieån timer1 chaïy. Ñaët/ xoùa baèng timer ñeå cho phaàn meàm chaïy/ ngöng. TCON.5 TF0 8DH Côø baùo traøn timer 0. TCON.4 TR0 8CH Bit ñieàu khieån timer chaïy. TCON.3 IE1 8BH Côø caïnh ngaét caïnh beân ngoaøi. Ñaët bôûi phaàn cöùng khi phaùt hieän moät caïnh xuoáng ôû INT1:xoùa baèng phaàn meàm hoaëc phaàn cöùng khi CPU chæ ñeán chöông trình phuïc vuï ngaét. TCON.2 IT1 8AH Côø kieåu ngaét moät beân ngoaøi. Ñaët/xoùa baèng phaàn meàm ñeå ngaét ngoaøi tích cöïc caïnh xuoáng/möùc thaáp. TCON.1 IE0 89H Côø caïnh ngaét 0 beân ngoaøi TCON.0 ITO 88H Côø kieåu ngaét 0 beân ngoaøi Toùm taét thanh ghi TCON. Cheá ñoä timer : a. Cheá ñoä 0 – Cheá ñoä TIMER 13 bit : Ñeå töông thích vôùi 8048 (coù tröôùc 8051). 3 bit cao cuûa TLx (TL0 vaø hoaëc TL1) khoâng duøng. TLx (5 bit) THx (8 bit) TFx Xung nhòp timer Côø baùo traøn b. Cheá ñoä 1 – Cheá ñoä TIMER 16 bit : Hoaït ñoäng nhö timer 16 bit ñaày ñuû. Côø baùo traøn laø bit TFx trong TCON coù theå ñoïc hoaëc ghi baèng phaàn meàm. MSB cuûa giaù trò trong thanh ghi timer laø bit 7 cuûa THx vaø LSB laø bit 0 cuûa TLx. Caùc thanh ghi timer (TLx/THx) coù theå ñoïc hoaëc ghi baát cöù luùc naøo baèng phaàn meàm. TLx (8 bit) THx (8 bit) TFx Xung nhòp timer Côø baùo traøn c. Cheá ñoä 2 – Cheá ñoä töï ñoäng naïp laïi 8 bit: TLx hoaït ñoäng nhö 1 timer 8 bit, trong ñoù THx vaãn giöõ nguyeân giaù trò khi naïp. Khi soá ñeám traøn töø FFH ñeán 00H, khoâng nhöõng côø timer ñöôïc xeùt maø giaù trò trong THx ñoàng thôøi ñöôïc naïp vaøo TLx, vieäc ñeám tieáp tuïc töø giaù trò naøy leân ñeán FFH xuoáng 00H vaø naïp laïi .v.v…Cheá ñoä naøy raát thoâng duïng vì söï traøn timer xaûy ra trong nhöõng khoaûng thôøi gian nhaát ñònh vaø tuaàn hoaøn moät khi khôûi ñoäng TMOD vaø THx. TLx (8 bit) THx (8 bit) TFx Xung nhòp timer Côø baùo traøn d. Cheá ñoä 3 – Cheá ñoä taùch timer: Timer 0 taùch thaønh 2 timer 8 bit (TL0 vaø TH0), TL0 coù côø baùo traøn laø TF0 vaø TH0 coù côø baùo traøn laø TF1. Timer 1 ngöng cheá ñoä 3, nhöng coù theå khôûi ñoäng baèng caùch chuyeån sang cheá ñoä khaùc. Giôùi haïn duy nhaát laø côø baùo traøn TF1 khoâng coøn bò taùc ñoäng khi timer 1 bò traøn vì noù ñöôïc noái vôùi tôùi TH0. Khi timer 0 ôû cheá ñoä 3, coù theå coù theå cho timer 1 chaïy vaø ngöng baéng caùch chuyeån noù ra ngoaøi vaø vaøo cheá ñoä 3. Noù vaãn coù theå ñöôïc söû duïng bôûi port noái tieáp nhö boä taïo toác ñoä baud hoaëc noù coù theå söû duïng baèng baát cöù caùch naøo maø khoâng caàn ngaét (vì noù khoâng coøn ñöôïc noái vôùi TF1). TL1 TH1 TH0 TH0 TF1 TF0 Xung nhòp timer Xung nhòp timer 1/12 fosc Côø baùo traøn Nguoàn taïo xung nhòp : Coù hai nguoàn taïo xung nhòp coù theå coù, ñöôïc choïn baèng caùch ghi vaøo C/T (counter/timer) trong TMOD khi khôûi ñoäng timer. Moät nguoàn taïo xung nhòp duøng cho ñònh khoaûng thôøi gian, caùi khaùc cho ñeám söï kieän. ¸ 12 Boä dao ñoängtrongchip C/T Thaïch anh Chaân T0 hoaëc T1 Xung nhòp timer 0: (leân) ñònh khoaûng thôøi gian Hình : Nguoàn taïo xung nhòp Ñònh khoaûng thôøi gian (interval timing): Neáu C/T=0 hoaït ñoäng timer lieân tuïc ñöôïc choïn vaø timer ñöôïc duøng cho vieäc ñònh khoaûng thôøi gian. Luùc ñoù, timer laáy xung nhòp töø boä dao ñoäng treân chip. Boä chia 12 ñöôïc theâm vaøo ñeå giaûm taàn soá xung nhòp ñeán giaù trò thích hôïp cho caùc öùng duïng. Nhö vaäy, thaïch anh 12 MHz seõ cho toác ñoä xung nhòp timer 1 MHz. Baùo traøn timer xaûy ra sau moät soá (coá ñònh) xung nhòp, phuï thuoäc vaøo giaù trò ban ñaàu ñöôïc naïp vaøo caùc thanh ghi timer TLx/THx. Ñeám söï kieän (Event Couting): Neáu C/T=1, timer laáy nguoàn xung nhòp töø beân ngoaøi.Trong haàu heát caùc öùng duïng, nguoàn beân ngoaøi naøy cung caáp cho timer moät xung khi xaûy ra moät söï kieän – timer duøng ñeám söï kieän. Soá söï kieän ñöôïc xaùc ñònh baèng phaàn meàm baèng caùch ñoïc caùc thanh ghi TLx/THx vì giaù trò 16 bit trong thanh ghi naøy taêng theâm moät cho moãi söï kieän. Nguoàn xung nhòp ngoaøi coù töø thay ñoåi chöùc naêng cuûa caùc port 3, bit 4 cuûa port 3 (P3.4) duøng laøm ngoõ vaøo taïo xung nhòp beân ngoaøi cho timer 0 vaø ñöôïc goïi laø “T0”. Vaø P3.5 hay “T1” laø ngoõ vaøo taïo xung nhòp cho timer 1. Trong caùc öùng duïng boä ñeám, caùc thanh ghi Timer ñöôïc taêng theâm 1 töông öùng vôùi chuyeån töø 1 xuoáng 0 ôû ngoõ vaøo beân ngoaøi: Tx. Nhö vaäy, khi ngoõ vaøo cao trong moät chu kyø vaø thaáp trong moät chu kyø keá thì soá ñeám ñöôïc taêng theâm moät. Do ñoù, maát 2 chu kyø maùy (2ms) ñeå ghi nhaän söï chuyeån 1 sang 0, taàn soá ngoaøi toái ña laø 500KHz (giaû söû hoaït ñoäng ôû 12 MHz). Baét ñaàu, döøng vaø ñieàu khieån caùc Timer: Phöông phaùp ñôn giaûn nhaát ñeå baét ñaàu (cho chaïy) vaø döøng caùc timer laø duøng caùc bit ñieàu khieån chaïy: TRx trong TCON. TRx bò xoùa sau khi Reset heä thoáng. Nhö vaäy, caùc timer theo maëc nhieân laø bò caám (bò döøng). TRx ñöôïc ñaët leân 1 baèng phaàn meàm ñeå cho caùc timer chaïy. TRx Xung nhòp timer 0 = leân: timer döøng 1 = xuoáng: timer chaïy Caùc thanh ghi timer Hình : cho chaïy vaø döøng caùc timer Vì TRx ôû trong thanh ghi TCON coù ñòa chæ bit, neân deã daøng cho vieäc ñieàu khieån caùc timer trong chöông trình. Ví duï, cho timer 0 chaïy baèng leänh: SETB TR0 Vaø döøng baèng leänh: CLR TRO Hình sau minh hoïa Timer 1 hoaït ñoäng ôû cheá ñoä 1 nhö moät timer 16 bit. Caùc thanh ghi timer TL1/TH1 vaø côø baùo traøn TF1 trong sô ñoà chæ caùc khaû naêng coù theå coù cuûa nguoàn taïo xung nhòp vaø deã cho chaïy, döøng vaø ñieàu khieån timer. ¸ 12 Boä dao ñoäng trong 0: leân 1: xuoáng TL1 TH1 TF1 T1 TR1 GAT INT1 0: leân 1: xuoáng C/T 12MHz Hình : Timer 1 hoaït ñoäng ôû cheá ñoä 1 Khôûi ñoäng vaø truy xuaát caùc thanh ghi timer : TMOD laø thanh ghi thöù nhaát ñöôïc khôûi ñoäng vì noù ñaët cheá ñoâï hoaït ñoäng. Ví duï caùc leänh sau khôûi ñoäng time1 nhö timer 16 bit(cheá ñoä 1) coù xung nhòp töø boä dao ñoäng treân chip cho vieäc ñònh khoaûng thôøi gian: MOV TMOD,#00010000B Timer thaät söï khoâng baét ñaàu ñònh thì cho ñeán khi bit ñieàu khieån chaïy cuûa noù TR1 ñöôïc ñaët leân 1. Neáu caàn soá ñeám ban ñaàu, caùc thanh ghi timer TL1/TH1 cuõng phaûi ñöôïc khôûi ñoäng. Nhôù laïi caùc timer ñeám leân vaø ñaët côø baùo traøn khi coù söï chuyeån tieáp FFFFH sang 0000H. Khi timer traøn, caàn döøng timer vaø xoùa côø baùo traøn trong phaàn meàm: CLR TR1 CLR TF1 * Ñoïc timer ñang chaïy: Trong moät soá öùng duïng caàn ñoïc giaù trò trong caùc thanh ghi timer ñang chaïy. Vì phaûi ñoïc 2 thanh ghi timer, “sai pha” neáu byte thaáp traøn vaøo byte cao giöõa hai laàn ñoïc. Giaù trò coù theå ñoïc ñöôïc khoâng ñuùng. Giaûi phaùp laø ñoïc byte cao tröôùc, keá ñoù ñoïc byte thaáp roài ñoïc byte cao moät laàn nöõa. Neáu byte cao ñaõ thay ñoåi thì laëp laïi caùc hoaït ñoäng ñoïc. Caùc leänh döôùi ñaây ñoïc caùc leänh thanh ghi timer TL1/TH1 vaøo caùc thanh ghi R6/R7: AGAIN: MOV A,TH1 MOV R6, TL1 CJNE R7, A Caùc khoaûng ngaén vaø caùc khoaûng daøi: Daõy caùc khoaûng thôøi gian coù theå ñònh thôøi laø bao nhieâu? vaán ñeà naøy ñöôïc khaûo saùt vôùi AT89C51 hoaït doäng vôùi taàn soá 12 Mhz. Nhö vaäy xung nhòp cuûa caùc timer coù taàn soá laø 1MHz. Khoaûng thôøi gian ngaénnhaát coù theå bò giôùi haïn khoâng chæ bôûi taàn soá xung nhòp cuûa timer maø coøn bôûi phaàn meàm. Do aûnh höôûng cuûa thôøi khoaûng thôøi gian thöïc hieän moät leänh, leänh ngaén nhaát cuûa mC8031/8051 laø moät chu kyø maùy hay 1 ms. Sau ñaây laø baûng toùm taét caùc kyõ thuaät ñeå taïo nhöõng khoaûng thôøi gian coù chieàu daøi khaùc nhau (vôùi giaû söû xung nhòp cho mC8031/8051 coù taàn soá 12MHz). Khoaûng thôøi gian toái ña (ms ) Kyõ thuaät 10 256 65535 Khoâng giôùi haïn Baèng phaàn meàm Timer 8 bit vôùi töï ñoäng naïp laïi Timer 16 bit Timer 16 bit coäng vôùi caùc voøng laëp phaàn meàm Caùc kyõ thuaät ñeå laäp trình caùc khoaûng thôøi gian (Fosc = 12 MHz) HOAÏT ÑOÄNG CUÛA BOÄ NGAÉT (INTERRUPT): Giôùi thieäu : Moät interrupt (ngaét) laø söï xaûy ra moät ñieàu kieän – moät söï kieän, maø noù gaây treo taïm thôøi chöông trình trong ñieàu kieän coù ñöôïc phuïc vuï bôûi moät chöông trình khaùc. Chöông trình giaûi quyeát ngaét goïi laø chöông trình phuïc vuï ngaét (ISR: Iterrupt Service Routine) hoaëc boä xöû lyù ngaét. ISR thöïc thi ñaùp öùng ngaét vaø thoâng thöôøng thöïc hieän taùc vuï nhaäp hay xuaát vôùi moät thieát bò. Khi ngaét xaûy ra, chöông trình chính taïm thôøi bò treo vaø reõ nhaùnh ñeán ISR: ISR thi haønh vaø keát thuùc baèng leänh trôû veà ngaét. Chöông trình tieáp tuïc thöïc thi taïi choã maø noù taïm döøng. Thöôøng ngöôøi ta xem chöông trình chính thöïc thi ôû möùc neàn (cô sôû) vaø caùc ISR thöïc thi ngaét (Interrupt Level). Ngöôøi ta duøng thuaät ngöõ Foreground (phía tröôùc) (Base – Level) chæ möùc neàn vaø Background (phía sau)(Interrupt – level) chæ möùc ngaét. Hình aûnh caùc ngaét ñöôïc moâ taû trong hình sau: CHÖÔNG TRÌNH CHÍNH Thöïc thi chöông trình khoâng coù ngaét C/tr cchinhchính C/tr chính C/tr chính C/tr chính ISR ISR ISR * * * * * * * * * Thöïc thi chöông trình coù ngaét * : goïi ngaét ** : quay veà töø ngaét Toå chöùc ngaét cuûa AT89C51: Thaät söï taát caû coù 5 nguoàn ngaét ôû AT89C51: 2 ngaét ngoaøi, 2 töø timer vaø moät ngaét Port noái tieáp. Taát caû caùc ngaét theo maëc nhieân ñeàu bò caám sau khi Reset heä thoáng vaø ñöôïc cho pheùp baèng phaàn meàm. Khi coù 2 hoaëc nhieàu ngaét ñoàng thôøi, 1 ngaét xaûy ra trong khi 1 ngaét khaùc ñang ñöôïc phuïc vuï, coù caû 2 söï tuaàn töï hoûi voøng vaø sô ñoà öu tieân 2 möùc duøng ñeå xaùc ñònh thöïc hieän ngaét. Vieäc hoûi voøng tuaàn töï thì coá ñònh nhöng öu tieân ngaét thì coù theå laäp trình ñöôïc. Caùc ngaét cuûa mCAT89C51: a. Caùc ngaét Timer: Caùc ngaét timer coù ñòa chæ vertor ngaét laø 000BH (Timer 0) vaø 001BH (Timer1). Ngaét Timer xaûy ra khi caùc thanh ghi Timer (TLX/THX) traøn vaø set caùc côø baùo traøn (TFX) leân 1. Chuù yù raèng caùc côø Timer (TFX) khoâng bò xoùa baèng phaàn meàm. Khi cho pheùp ngaét, töï ñoäng bò xoùa baèng phaàm cöùng khi CPU chuyeån ñeán ngaét. b. Caùc ngaét coång noái tieáp: Ngaét coång noái tieáp xaûy ra khi côø ngaét phaùt (TI) hoaëc côø ngaét thu (RI) ñöôïc ñaët leân 1. Ngaét phaùt xaûy ra khi truyeàn moät kyù töï tröôùc ñaõ ñöôïc ghi vaøo SBUF vöøa hoaøn taát. Ngaét thu xaûy ra khi moät kyù töï ñaõ ñöôïc nhaän xong vaø ñang ñôïi trong SBUF ñeå ñöôïc ñoïc. Ngaét coång noái tieáp hôi khaùc vôùi caùc ngaét Timer. Côø gaây ngaét coång noái tieáp khoâng bò xoùa baèng phaàn cöùng khi CPU chuyeån tôùi ngaét. Nguyeân do laø coù hai nguoàn coång ngaét noái tieáp: TI vaø RI. Nguoàn ngaét phaûi ñöôïc xaùc ñònh trong ISR vaø côø taïo ngaét seõ ñöôïc xoùa baèng phaàn meàm. c. Caùc ngaét ngoaøi: Caùc ngaét xaûy ra khi coù moät möùc thaáp hoaëc caïnh xuoáng treân chaân INT0 hoaëc INT1 cuûa mCAT89C51. Ñaây laø chöùc naêng chuyeån ñoåi cuûa caùc bit Port 3: P3.2 (Chaân 12) vaø P3.3 (chaân 13). Caùc côø taïo ngaét laø caùc bit IE0 vaø IE1 trong TCON. Khi quyeàn ñieàu khieån ñaõ chuyeån ñeán ISR, côø taïo ngaét chæ ñöôïc xoùa neáu ngaét ñöôïc tích cöïc ôû caïnh xuoáng. Neáu ngaét ñöôïc tích cöïc theo möùc, thì nguoàn yeâu caàu ngaét beân ngoaøi seõ ñieàu khieån möùc cuûa côø thay cho phaàn cöùng. Ñònh thì interrupt: Caùc interrupt ñöôïc laáy maãu & choát ôû S5P2 cuûa moãi chu kyø maùy. Chuùng ñöôïc hoûi voøng ôû chu kyø maùy keá vaø neáu moät ñieàu kieän interrupt toàn taïi, noù ñöôïc chaáp nhaän neáu : + Khoâng coù interrupt khaùc coù ñoä öu tieân baèng hoaëc cao hôn ñang xaûy ra. + Chu kyø hoûi voøng laø chu kyø cuoái trong moät leänh. + Leänh hieän haønh khoâng laø RETI (ñeå baûo ñaûm laø toái thieåu moät leänh thöïc thi sau moãi chöông trình phuïc vuï ngaét)hoaëc baát cöù truy xuaát naøo ñeán IE hoaëcIP. Trong hai chu kyø keá , boä xöû lyù caát PC vaøo ngaên xeáp vaø naïp vaøo PC ñòa chæ vector interrupt. ISR baét ñaàu thöïc thi. Thôøi gian giöõa 1 ñieàu kieän ngaét xaûy ra vaø ISR baét ñaàu goïi laø thôøi gian chôø interrupt .Thôøi gian chôø interrupt quan troïng trong nhieàu öùng duïng ñieàu khieån. Vôùi thaïch anh 12MHz, thôøi gian chôø interrupt coù theå ngaén laø 3.25ms ôû AT89C51. Heä thoáng AT89C51 maø söû duïng interrupt coù öu tieân cao seõ coù 1 thôøi gian chôø interrupt xaáu nhaát laø 9.25ms (giaû söû interrupt öu tieân cao luoân ñöôïc cho pheùp).Vieäc naøy xaûy ra neáu ñieàu kieän interrupt xaûy ra vöøa tröôùc leänh RETI cuûa ISR möùc 0 maø ñi theo sau laø leänh nhaân. HOAÏT ÑOÄNG PORT NOÁI TIEÁP : Giôùi thieäu : AT89C51 coù 1 port noái tieáp trong chíp coù theå hoaït ñoäng ôû nhieàu cheá ñoä treân moät daõi taàn soá roäng .Chöùc naêng chuû yeáu cuûa port noái tieáp laø thöc hieän chuyeån ñoåi song song sang noái tieáp ñoái vôùi döõ lieäu xuaát ,vaø chuyeån ñoåi noái tieáp sang song song vôùi döõ lieäu nhaäp. Truy xuaát phaàn cöùng ñeán port noái tieáp qua caùc chaân TXD vaø RXD .Caùc chaân naøy coù caùc chöùc naêng khaùc vôùi 2 bit cuûa port 3 ,P3.1 ôû chaân 11(TXD ) vaø P3.0 ôû chaân 10 (RXD). Port noái tieáp cho hoaït ñoäng song coâng ( thu vaø phaùt ñoàng thôøi) ,vaø ñeäm luùc thu ,cho pheùp 1 kyù töï seõ ñöôïc thu vaø ñöôïc giöõ trong khi kyù töï thöù 2 ñöôïc nhaän . Hai thanh ghi chöùc naêng ñaëc bieät cung caáp truy xuaát phaàn meàm ñeán port noái tieáp laø SBUF vaø SCON . Boä ñeäm port noái tieáp (SBUF) ôû ñòa chæ 99H thaät söï laø 2 boä ñeäm.Vieát vaøo SBUF naïp döõ lieäu seõ ñöôïc phaùt, vaø ñoïc SBUF truy xuaát döõ lieäu thu ñöôïc. Ñaây laø 2 thanh ghi rieâng bieät :thanh ghi chæ ghi ñeå phaùt vaø thanh ghi chæ ñoïc ñeå thu. TXD(P3.1) RXD(P3.0) SBUF(chæ ghi) D Thanh ghi dòch CLK Q CLK Xung nhòp Xung nhòp toác ñoä baud(phaùt) toác ñoä baud(thu) SBUF(chæ ñoïc) Bus noäi 8051 Hình: Sô ñoà khoái port noái tieáp Thanh ghi ñieàu khieån port noái tieáp (SCON) ôû ñòa chæ 98H laø thanh ghi coù ñòa chæ bit chöùa caùc bit traïng thaùi vaø caùc bit ñieàu khieån .Caùc bit ñieàu khieån ñaët cheá ñoä hoaït ñoäng cho port noái tieáp, caùc bit traïng thaùi chæ keát thuùc phaùt hoaëc thu kyù töï. Caùc bit traïng thaùi coù theå ñöôïc kieåm tra baèng phaàn meàm hoaëc coù theå ñöôïc laäp trình ñeå taïo interrupt . Taàn soá laøm vieäc cuûa port noái tieáp (toác ñoä baud) coù theå coá ñònh (laáy töø dao ñoäng treân chip 8051) hoaëc thay ñoåi ñöôïc (timer 1 cung caáp xung nhòp toác ñoä baud vaø phaûi ñöôïc laäp trình ) . Thanh ghi ñieàu khieån port noái tieáp : Cheá ñoä hoaït ñoäng cuûa port noái tieáp ñöôïc ñaët baèng caùch ghi vaøo thanh ghi cheá ñoä port noái tieáp (SCON) ôû ñòa chæ 98H. Tröôùc khi söû duïng port noái tieáp, phaûi khôûi ñoäng SCON cho ñuùng cheá ñoä … Baûng toùm taét thanh ghi cheá ñoä port noái tieáp : Bit Kyù hieäu Ñòa chæ Moâ taû SCON.7 SCON .6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0 SM0 SM1 SM2 SM3 SM4 SM5 SM6 SM7 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H Bit 0 cuûa cheá ñoä port noái tieáp Bit 1 cuûa cheá ñoä port noái tieáp Bit 2 cuûa cheù ñoä port noái tieáp. Cho pheùp truyeàn thoâng ña xöû lyù trong caùc cheá ñoä 2 vaø 3 ; RI seõ khoâng bò taùc ñoäng neáu bit thöù 9 thu ñöôïc laø 0. Cho pheùp boä thu, phaûi ñöôïc ñaët leân 1ñeå thu (nhaän) caùc kyù töï. Bit 8 phaùt ,bit thöù 9 ñöôïc phaùt trong cheá ñoä 2 & 3. Ñöôïc ñaët / xoaù baèng phaàn meàm. Bit 8 thu, bit thöù 9 thu ñöôïc. Côø interrupt phaùt. Ñaët leân 1 ôû keát thuùc phaùt kyù töï; Ñöôïc xoaù baèng phaàn meàm. Côø interrupt thu.Ñaët leân 1 khi keát thuùc thu kyù töï, ñöôïc xoaù baèng phaàn meàm. Baûng caùc cheá ñoä port noái tieáp : SM1 SM0 Cheá ñoä Moâ taû Toác ñoä baud 0 0 0 Thanh ghi dòch Coá ñònh (taàn soá dao ñoäng/12) 0 1 1 UART 8 bit Thay ñoåi (ñaët baèng timer) 1 0 2 UART 9 bit Coá ñònh (taàn soá dao ñoäng /12 hoaëc chia cho 64. 1 1 3 UART 9 bit Thay ñoåi (ñaët baèng timer) Caùc cheá ñoä hoaït ñoäng : Port noái tieáp coù 4 cheá ñoä hoaït ñoäng , ñöôïc choïn qua caùc bit SM0 & SM1 trong SCON. Ba trong caùc cheá ñoä cho pheùp truyeàn thoâng baát ñoàng boä, vôùi moãi kyù töï ñöôïc thu hoaëc phaùt ñöôïc ñoùng khung baèng 1 bit start vaø 1 bit stop . ÔÛ cheá ñoä thöù tö , port noái tieáp hoaït ñoäng nhö moät thanh ghi ñôn giaûn. Thanh ghi dòch 8 bit (cheá ñoä 0) : Döõ lieäu noái tieáp vaøo vaø ra qua RXD vaø TXD xuaát xung nhòp dòch. Taùm bit ñöôïc phaùt hoaëc thu vôùi bit ñaàu tieân laø LSB . Toác ñoä baud coá ñònh ôû 1/12 taàn soá dao ñoäng treân chip (cheá ñoä naøy ñöôøng RXD ñöôïc duøng ñeå nhaäp vaø xuaát döõ lieäu, ñöôøng TXD duøng laøm xung nhòp). Vieäc phaùt ñi ñöôïc khôûi ñoäng baèng baát cöù leänh naøo maø ghi döõ lieäu vaøo SBUF. Döõ lieäu ñöôïc dòch ra ngoaøi treân ñöôøng RXD vôùi caùc xung nhòp ñöôïc gôûi ra ñöôøng TXD. Vieäc thu ñöôïc khôûi ñoäng khi bit cho pheùp boä thu (REN ) laø 1 vaø bit interrupt thu (RI) laø 0. Caàn ñaët REN ôû baét ñaàu chöông trình ñeå khôûi ñoäng port noài tieáp, vaø roài xoaù RI ñeå baét ñaàu hoaït ñoäng nhaäp döõ lieäu. Khi RI bò xoaù, caùc xung nhòp ñöôïc ghi ra ñöôøng TXD, baét ñaàu chu kyø maùy sau, vaø döõ lieäu theo xung nhòp ôû ñöôøng RXD. Laáy xung nhòp cho döõ lieäu vaøo port noái tieáp xaûy ra ôû caïnh döông cuûa TXD. Moät öùng duïng cuûa cheá ñoä thanh ghi dòch laø môû roäng khaû naêng xuaát cuûa 8051.IC thanh ghi dòch noái tieáp ra song song coù theå ñöôïc noái vaøo caùc ñöôøng TXD vaø RXD cuûa 8051 ñeå cung caáp theâm 8 ñöôøng ra. AT89C51 TXD (P3.1) RXD (P3.0) Clock Thanh ghi Döõ lieäu dòch Theâm 8 ngoõ ra UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc (cheá ñoä 1) : ÔÛ cheá ñoä 1, port noái tieáp cuûa AT89C51 laøm vieäc nhö 1 UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc. Hoaït ñoäng chuû yeáu cuûa UART (boä phaùt /thu baát ñoàng boä vaïn naêng) laø chuyeån ñoåi song song sang noái tieáp vôùi döõ lieäu xuaát vaø chuyeån ñoåi noái tieáp ra song song vôùi döõ lieäu nhaäp. ÔÛ cheá ñoä 1, 10 bit ñöôïc phaùt treân TXD hoaëc thu treân RXD laø :1 bit start (luoân laø 0), 8 bit döõ lieäu (LSB ñaàu tieân) , vaø 1 bit stop (luoân laø 1). Vôùi hoaït ñoäng thu (nhaän), bit stop ñöôïc ñöa vaøo RB8 trong SCON. Trong AT89C51, toác ñoä baud ñöôïc ñaët baèng toác ñoä baùo traøn timer 1. Taïo xung nhòp vaø ñoàng boä hoaù caùc thanh ghi dòch port noái tieáp trong caùc cheá ñoä 1,2 vaø 3 ñöôïc thieát laäp baèng boä ñeám 4 bit chia cho 16, ngoõ ra laø xung nhòp toác ñoä baud. Ngoõ vaøo cuûa counter naøy ñöôïc choïn qua phaàn meàm. Truyeàn döõ lieäu ñöôïc khôûi ñoäng baèng caùch ghi vaøo SBUF, nhöng thaät söï khoâng baét ñaàu chaïy cho ñeán khi söï thay theá keá cuûa boä ñeám (chia cho 16) cung caáp toác ñoä baud coång noái tieáp. Côø interrupt phaùt/truyeàn (TI) ñöôïc ñaët leân 1 khi xuaát hieän bit stop treân TXD. Vieäc thu döõ lieäu ñöôïc khôûi ñoäng baèng 1 chuyeån traïng thaùi töø 1 xuoáng 0 treân RXD. Boä ñeám 16 töùc thôøi ñöôïc xoaù ñeå ñoàng boä soá ñeám vôùi luoàng bit ñeán. UART 9 bit vôùi toác ñoä baud coá ñònh (cheá ñoä 2) : ÔÛ cheá ñoä 2, 11 bit ñöôïc phaùt hoaëc thu : 1 bit start, 8 bit döõ lieäu, bit döõ lieäu thöù 9 coù theå laäp trình ñöôïc, vaø 1 bit sop. Khi phaùt, bit thöù 9 laø baát cöù gì ñaõ ñöôïc ñöa vaøo TB8 trong SCON (coù theå laø bit parity). Khi thu, bit thöù 9 thu ñöôïc thì ôû RB8. Toác ñoä baud ôû cheá ñoä 2 laø 1/32 hoaëc 1/16 taàn soá dao ñoäng. UART 9 bit vôùi toác ñoä baud thay ñoåi ñöôïc (cheá ñoä 3) : Cheá ñoä naøy gioáng cheá ñoä 2 ngoaïi tröø toác ñoä baud coù theå laäp trình ñöôïc vaø ñöôïc cung caáp bôûi timer. Khôûi ñoäng vaø truy xuaát caùc thanh ghi coång noái tieáp : a. Cho pheùp thu : Bit cho pheùp boä thu (REN) trong SCON phaûi ñöôïc ñaët leân 1 baèng phaàn meàm ñeå cho pheùp thu caùc kyù töï. Coù theå thöïc hieän theo caùch sau : SETB REN Hoaëc MOV SCON,#xxx1xxxxB b. Bit döõ lieäu thöù 9 : Bit döõ lieäu thöù 9 caàn phaùt trong caùc cheá ñoä 2 vaø 3 phaûi ñöôïc naïp vaøo TB8 baèng phaàn meàm. Bit döõ lieäu thöù 9 khi thu ñöôïc ñaët ôû RB8. c. Theâm moät bit parity : Thöôøng söû duïng bit döõ lieäu thöù 9 ñeå theâm parity vaøo kyù töï. Thí duï , neáu truyeàn thoâng caàn 8 bit döõ lieäu coäng theâm kieåm tra chaün, coù theå söû duïng caùc leänh sau ñeå truyeàn 8 bit trong thanh ghi tích luyõ vôùi kieåm tra chaün theâm vaøo bit thöù 9 : MOV C,P ; Ñaët bit parity chaün vaøo TB8 MOV TB8,C ; noù trôû thaønh bit döõ lieäu thöù 9 MOV SBUF,A ; Chuyeån 8 bit töø Acc vaøo SBUF Neáâu caàn parity leû thì ta theâm leänh CPL C vaøo. Söû duïng parity khoâng bò giôùi haïn ôû cheá ñoä 2 vaø 3. ÔÛ cheá ñoä 1, 8 bit döõ lieäu ñöôïc truyeàn coù theå bao goàm 7 bit döõ lieäu coäng theâm bit parity : CLR Acc.7 ; Baûo ñaûm MSB ñöôïc xoaù parity chaün ôû trong P MOV C,P ; MOV Acc.7,C ; Ñaët parity chaün vaøo MSB MOV SBUF,A ; Gôûi kyù töï ñi 7 bit döõ lieäu coäng parity chaün d. Caùc côø interrupt : Hai côø interrupt thu vaø phaùt (RI vaø TI) trong SCON ñöôïc ñaët leân 1 baèng phaàn cöùng, nhöng phaûi ñöôïc xoaù baèng phaàn meàm. Thöôøng RI ñöôïc ñaët leân 1 khi keát thuùc thu kyù töï vaø chæ “boä ñeäm thu traøn”. Neáu phaàn meàm muoán nhaäp 1 kyù töï töø thieát bò ñöôïc noái vaøo coång noái tieáp, noù phaûi ñôïi RI ñöôïc ñaët leân 1, roài xoaù RI vaø ñoïc kyù töï töø SBUF : WAIT : JNB RI,WAIT ; Kieåm tra RI cho ñeán khi noù = 1 CLR RI ; Xoaù RI MOV A,SBUF ; Ñoïc kyù töï TI ñöôïc ñaët leân 1 ôû cuoái luùc truyeàn (phaùt) kyù töï vaø chæ “boä ñeäm phaùt troáng”. Neáu phaàn meàm muoán göûi 1 kyù töï ñeán 1 thieát bò ñöôïc noái vaøo coång noái tieáp, noù phaûi kieåm tra xem coång noái tieáp saün saøng chöa : WAIT : JNB TI,WAIT ; Kieåm tra TI cho ñeán khi noù =1 CLR TI ; Xoaù TI MOV SBUF,A ; Göûi kyù töï ñi Truyeàn thoâng ña xöû lyù : Caùc cheá ñoä 2 & 3 ñaët bieät duøng cho truyeàn thoâng ña xöû lyù. Trong caùc cheá ñoä naøy, thu 9 bit döõ lieäu vaøbit thöù 9 ôû RB8. Port coù theå ñöôïc laäp trình ñeå khi nhaän ñöôïc bit stop, interrupt coång noái tieáp ñöôïc taùc ñoäng chæ neáu RB8 =1. Ñaëc tính naøy ñöôïc cho pheùp baèng caùch ñaët bit SM2 ôû SCON. ÖÙng duïng cuûa vieäc naøy trong moâi tröôøng noái maïng duøng nhieàu 8051 theo saép xeáp chuû (master)/ tôù (slave). SM2 khoâng coù aûnh höôûng trongcheá ñoä 0, vaø trong cheá ñoä 1 coù theå söû duïng noù ñeå kieåm tra söï hôïp leä cuûa bit stop. Khi nhaän ôû cheá ñoä 1, neáu SM2 =1, interrupt thu seõ khoâng ñöôïc taùc ñoäng tröø khi nhaän ñöôïc bit stop hôïp leä. Toác ñoä baud coång noái tieáp : Toác ñoä baud coá ñònh ôû cheá ñoä 0 vaø 2.Trong cheá ñoä 0, noù luoân laø taàn soá dao ñoäng treân chip ñöôïc chia cho 12. Giaû söû vôùi taàn soá dao ñoäng danh ñònh laø 12 MHz, thì toác ñoä baud cheá ñoä 0 laø 1 MHz. Hình : Caùc nguoàn taïo xung nhòp coång noái tieáp Chia 12 Dao ñoäng treân chip Xung nhòp toác ñoä baud Cheá ñoä 0 Chia 64 Chia 32 Xung nhòp toác doä baud Chia 32 Chia 16 Xung nhòp toác ñoä baud SMOD=0 Dao ñoäng treân chip SMOD=1 b) Cheá ñoä 2 SMOD=0 Traøn cuûa timer 1 SMOD=1 c) Cheá ñoä 1 vaø 3 Maëc nhieân sau reset heä thoáng, toác ñoä baud cheá ñoä 2 laø taàn soá dao ñoäng chia 64.Toác ñoä baud cuõng bò aûnh höôûng bôûi 1 bit trong thanh ghi ñieàu khieån nguoàn caáp , PCON .Bit 7 cuûa PCON laø bit SMOD . Ñaët bit SMOD leân 1 laøm gaáp ñoâi toác ñoä baud trong caùc cheá ñoä 1 ,2 vaø 3. Vì PCON khoâng coù ñònh ñòa chæ theo bit , vieäc ñaët bit SMOD leân 1 khoâng bò aûnh höôûng ñeán caùc bit PCON khaùc thì caàn taùc vuï “ ñoïc – söûa – ñoåi – ghi “. Caùc leänh sau ñaët SMOD leân 1: MOV A,PCON ; Laáy giaù trò hieän thôøi cuûa PCON SETB Acc.7 ; Ñaët bit 7 (SMOD) leân 1 MOV PCON,A ; Ghi giaù trò ngöôïc veà PCON Caùc toác ñoä baud trong cheá ñoä 1 vaø 3 ñöôïc xaùc ñònh baèng toác ñoä traøn cuûa timer 1. Vì timer hoaït ñoäng ôû taàn soá töông ñoái cao, traøn ñöôïc chia theâm cho 32 (hoaëc 16 neáu SMOD=1) tröôùc khi cung caáp xung nhòp toác ñoä baud cho coång noái tieáp. Söû duïng timer 1 laøm xung nhòp toác ñoä baud : Xeùt AT89C51, caùch thoâng duïng ñeå taïo toác ñoä baud laø khôûi ñoäng TMOD cho cheá ñoä 8 bit töï ñoäng naïp laïi (timer cheá ñoä 2) vaø ñaët giaù trò naïp laïi ñuùng vaøo TH1 ñeå cho toác ñoä traøn ñuùng cho toác ñoä baud. TMOD ñöôïc khôûi ñoäng nhö sau : MOV TMOD,#0010xxxxB Cuõng coù theå ñaït ñöôïc caùc toác ñoä baud thaáp baèng caùch söû duïng timer cheá ñoä 1 vôùi TMOD=0001xxxxB. Tuy nhieân caùc thanh ghi TH1/TL1 phaûi ñöôïc khôûi ñoäng laïi sau moãi laàn traøn. Moät löïa choïn khaùc laø caáp xung nhòp cho timer 1 töø ngoaøi duøng T1(P3.5). Vaø luoân luoân toác ñoä baud laø toác ñoä traøn cuûa timer 1 ñöôïc chia cho 32 (hoaëc chia 16 neáu SMOD=1). Trong caùc cheá ñoä 1 vaø 3 : Toác ñoä baud = Toác ñoä traøn cuûa timer 1 / 32 Toång quaùt thì cho pheùp dung sai 5% trong truyeàn thoâng baát ñoàng boä (start/stop) . Coù theå coù ñöôïc toác ñoä baud chính xaùc duøng thaïch anh 11.095 MHz . Baûng 6 – 3 toùm taét caùc giaù trò naïp laïi cho caùc toác ñoä baud thoâng duïng nhaát , duøng thaïch anh 12MHz hoaëc 11.059MHz . Baûng 6-3 : Toùm taét toác ñoä baud . Toác ñoä baud Taàn soá thaïch anh SMOD Giaù trò naïp laïi vaøo TH1 Toác ñoä baud thaät Sai soá 9600 2400 1200 19200 9600 2400 1200 12.000MHz 12.000MHz 11.059MHz 11.059MHz 11.059MHz 11.059MHz 1 0 0 1 0 0 0 -7 ( F9H ) -13 ( F3H ) -26 ( E6H ) -3 ( FDH ) -3 (FDH ) -12 (F4H ) -24 (E8H) 8923 2404 1202 19200 9600 2400 1200 7% 0.16% 0.16% 0 0 0 0 TAÄP LEÄNH CUÛA mCAT89C51: Taäp leänh cuûa mCAT89C51 goàm coù 225 leänh goàm 139 leänh moät byte, 92 leänh byte vaø 24 leänh 3 byte. Caùc cheá ñoä ñaùnh ñòa chæ : Trong taäp leänh coù 8 cheá ñoä ñaùnh ñòa chæ: Ñòa chæ thanh ghi (Register Addressing): mC AT89C51 coù boán bank thanh ghi, moãi bank thanh ghi coù 8 thanh ghi ñaùnh töø R0 ñeán R7. Taïi moãi thôøi ñieåm chæ coù moät bank thanh ghi ñöôïc tích cöïc. Muoán choïn bank thanh ghi naøo ta chæ caàn gaùn caùc bit nhò phaân thích hôïp vaøo RSI(PSW.4) vaø PRO(PSW.3) trong thanh ghi traïng thaùi chöông trình (PSW). Ngoaøi ra, moät thanh ghi coù chöùc naêng ñaëc bieät nhö 8 thanh ghi tích luõy, con troû döõ lieäu,…… cuõng ñöôïc xaùc ñònh trong caùc leänh neân khoâng caàn caùc bit ñòa chæ. Trong caùc leänh naøy thanh ghi tích luõy ñöôïc kyù hieäu laø”A”, con troû döõ lieäu laø”DTPR”, thanh ghi ñeám chöông trình “PC”, côø nhôù laø”C”, caëp thanh ghi tích luõy laø”A,B”. Maõ leänh n n n Ñòa chæ thanh ghi. Ñòa chæ tröïc tieáp (Direct Addressing): Trong cheá ñoä naøy, caùc thanh ghi beân trong mCAT89C51 ñöôïc ñaùnh ñòa chæ tröïc tieáp baèng 8 bit ñòa chæ naèm trong byte thöù hai cuûa maõ leänh. Ñòa chæ tröïc tieáp Maõ leänh Ñòa chæ tröïc tieáp Duø vaäy trình töï hôïp dòch cho pheùp goïi teân caùc thanh ghi coù chöùc naêng ñaëc bieät (coù ñòa chæ tröïc tieáp töø 80H ñeán FFH). Ví duï, Port cho Port 0, TMOD cho thanh ghi cheá ñoä Timer,… Ñòa chæ giaùn tieáp (Indirect Addressing): RO vaø RI ñöôïc duøng ñeå chæ ñòa chæ oâ nhôù maø taùc ñoäng ñeán. Ngöôøi ta qui öôùc duøng daáu @ tröôùc RO vaø RI Maõ leänh i Ñòa chæ giaùn tieáp Ñòa chæ töùc thôøi: Ngöôøi ta duøng daáu # tröôùc toaùn haïng töùc thôøi.Caùc toaùn haïng ñoù coù theå laø moät haèng soá, moät kyù soá hay moät bieåu thöùc toaùn hoïc… Trình hôïp dòch seõ töï ñoäng tính toaùn vaø thay theá döõ lieäu tröïc tieáp vaøo maõ leänh. Maõ leänh Döõ lieäu töùc thôøi Ñòa chæ töùc thôøi Ñòa chæ töông ñoái (Relaytive Addessing): Ñòa chæ töông ñoái ñöôïc duøng trong caùc leänh nhaûy. mC8031/8051 duøng giaù trò 8 bit coù daáu ñeå coäng thanh ñeám chöông trình (PC). Taàm nhaûy cuûa leänh naøy trong khoaûng töø –128 ñeán 127 oâ nhôù. Tröôùc khi coäng, thanh ghi PC seõ taêng ñeán ñòa chæ cuûa leänh nhaûy roài tính toaùn ñòa chæ offset caàn thieát ñeå nhaûy ñeán ñòa chæ yeâu caàu. Nhö vaäy ñòa chæ môùi laø ñòa chæ töông ñoái so vôùi leänh keá chöù khoâng phaûi leänh nhaûy. Thöôøng leänh naøy coù lieân quan ñeán nhaõn ñöôïc ñònh nghóa tröôùc. Maõ leänh offset töông ñoái Ñòa chæ töông ñoái f. Ñòa chæ tuyeät ñoái (Absolute Addessing): Ñòa chæ tuyeät ñoái duøng trong caùc leänh ACALL vaø AJMP. Caùc leänh 2 Byte duøng ñeå reõ nhaùnh vaøo moät trang 2 Kbyte cuûa boä nhôù chöông trình baèng caùch caáp 11 bit ñòa chæ thaáp (A0..A10) ñeå xaùc ñònh ñòa chæ ñích trong trang maõ. Coøn 5 bit cao cuûa ñòa chæ ñích (A11..A15) chính laø 5 bit cao hieän haønh trong thanh ghi ñeám chöông trình. Vì vaäy, ñòa chæ cuûa leänh theo sau leänh reõ nhaùnh vaø ñòa chæ ñích cuûa leänh reõ nhaùnh caàn phaûi cuøng trang maõ 2KByte (coù cuøng 5 bit ñòa chæ cao). Maõ leänh offset töông ñoái A10 A15 A11 A10 A0 Xaùc ñònh trang maõ Xaùc ñònh ñòa chæ töông ñoái trong maõ Ñòa chæ tuyeät ñoái g. Ñòa chæ daøi (Long Addressing): Ñòa chæ daøi duøng cho leänh LCALL vaø LJMP. Caùc leänh naøy chieám 3 byte vaø duøng 2 byte sau (byte 2 vaø byte 3) ñeå xaùc ñònh ñòa chæ ñích cuûa leänh (6bit). Öu ñieåm cuûa leänh naøylaø coù theå söû duïng trong toaøn vuøng nhôù 64KB. Tuy nhieân, leänh naøy chieám nhieàu byte vaø phuï thuoäc vaøo vò trí oâ nhôù. Maõ leänh A15-A8 A7-A0 Ñòa chæ daøi h. Ñòa chæ tham chieáu: Ñòa chæ tham chieáu duøng moät thanh ghi cô baûn (hoaëc thanh ghi ñeám chöông trình PC hoaëc thanh ghi con troû döõ lieäu DPTR) vaø ñòa chæ offset (trong thanh ghi tích luõy A) ñeå taïo ñòa chæ ñöôïc taùc ñoäng cho caùc leänh JMP hoaëc MOVC. Caùc baûng nhaûy vaø baûng tìm kieám deã daøng ñöôïc taïo ra ñeå söû duïng ñòa chæ tham chieáu. PC hoaëc DPTR ACC Ñòa chæ ñöôïc taùc ñoäng Offset Ñòa chæ cô baûn + = Ñòa chæ tham chieáu * Caùc nhoùm leänh: Leänh coù theå chia thaønh nhieàu nhoùm theo nhieàu caùch. Cusman ñeà nghò theo 4 caùch sau: Nhoùm leänh xöû lyù döõ lieäu : taùc ñoäng leân döõ lieäu theo nhieàu caùch bao goàm: leänh soá hoïc ; leänh luaân lyù; leänh so saùnh ; leänh dòch ; leänh ñaëc bieät. Nhoùm leänh truyeàn döõ lieäu : di chuyeån töø nôi naøy sang nôi khaùc trong maïch thieát keá maø khoâng laøm thay ñoåi döõ lieäu nhö sau : leänh truyeàn boä nhôù ; leänh xuaát nhaäp ; leänh ngaên xeáp. Nhoùm leänh kieåm soaùt chöông trình: chuyeån ñieàu khieån töø nôi naøy sang nôi khaùc ñeå ñaït ñeán leänh mong muoán : leänh nhaûy khoâng ñieàu kieän ; leänh nhaûy coù ñieàu kieän ; leänh goïi chöông trình con ; leänh döøng vaø khoâng hoaït ñoäng. Nhoùm leänh kieåm soaùt traïng thaùi: nhaèm thay ñoåi tình traïng cuûa maïch thieát keá maø khoâng aûnh höôûng ñeán döõ lieäu hay thöù töï thöïc hieän leänh. BIEÁN ÑOÅI A/D VAØ D/A : GIÔÙI THIEÄU ADC0809 : Bieán ñoåi Analog – Digital laø thaønh phaàn caàn thieát trong vieäc xöû lyù thoâng tin vaø caùc chöùc naêng ñieåu khieån söû duïng phöông phaùp soá, tín hieäu thöïc teá thì ôû daïng Analog. ADC0809 laø thieát bò chuyeån ñoåi analog sang digital 8 bit , multiplex 8 keânh vaø töông thích vôùi boä vi xöû lyù . ADC0809 söû duïng kyõ thuaät chuyeån ñoåi A/D xaáp xæ lieân tieáp . Sô ñoà khoái : Sô ñoà chaân : Khaû naêng : Giao tieáp deã daøng vôùi taát caû caùc boä vi xöû lyù . Hoaït ñoäng vôùi thang ño tyû leä vôùi 5VDC hoaëc ñieän aùp chuaån coù theå ñieàu chænh . Khoâng caàn chænh khoâng hay toaøn thang. Multiplex 8 keânh vôùi ñòa chæ logic . Taàm ñieän aùp vaøo 0 – 5V vôùi nguoàn cung caáp ñôn 5V . Ngoõ ra phuø hôïp vôùi möùc ñieän aùp TTL . Ñoä phaân giaûi 8 bit . Sai soá khoâng ñieàu chænh ñöôïc toång coäng : ± 1 LBS . Nguoàn cung caáp ñôn : 5VDC . Coâng suaát thaáp: 15mW . Thôøi gian chuyeån ñoåi : 100µs . Ñaëc tính kyõ thuaät : Kyù hieäu Thoâng soá Ñieàu kieän Toái thieåu Ñieån hình Toái ña Ñôn vò VREF+ Ñieän aùp cao nhaát cuûa thang ño Vcc Vcc+0.1 V VREF- Ñieän aùp thaáp nhaát cuûa thang ño -0.1 0 V IIN Doøng vaøo fCLK=640KHZ -2 ±0.5 2 µA VNT(1) Ñieän aùp vaøo logic 1 VCC –1.5 V VNI(0) Ñieän aùp vaøo logic 0 1.5 V VOUT(1) Ñieän aùp ra logic 1 IOUT = -360µA VCC –0.4 V VOUT(0) Ñieän aùp ra logic 0 IOUT = 1.6mA 0.45 V fCLK Taàn soá xung clock 10 640 1280 KHz tEOC Thôøi gian delay EOC ( Xem giaûn ñoà xung ) 0 8 + 2µs Chu kyø clock tC Thôøi gian bieán ñoåi fCLK = 640KHz 90 100 116 µs tWS Ñoä roäng xung Start toái thieåu (Xem giaûn ñoà thôøøi gian) 100 200 Ns tALE Ñoä roäng xung ALE toái thieåu (Xem giaûn ñoà thôøi gian ) 100 200 ns Moâ taû chöùc naêng : Maïch choïn keânh ( Multiplexer) : Moãi keânh ngoõ vaøo rieâng bieät ñöôïc choïn baèng caùch giaûi maõ ñòa chæ theo baûng sau : Keânh analog ñöôïc choïn Ñòa chæ A2 A1 A0 IN0 0 0 0 IN1 0 0 1 … IN7 1 1 1 Ñòa chæ ñöôïc choát vaøo boä giaûi maõ beân trong taûi caïnh leân cuûa xung choát ñòa chæ ( ALE) . Ñaëc tính chuyeån ñoåi : Thanh ghi xaáp xæ lieân tieáp (SAR – Successive Approximation Register) cuûa boä bieán ñoåi A/D ñöôïc reset taïi caïnh leân cuûa xung Start ( baét ñaàu chuyeån ñoåi ) . Söïchuyeån ñoåi ñöôïc baét ñaàu taïi caïnh xuoáng cuûa xung start . Quaù trình chuyeån ñoåi seõ bò ngaét neáu nhaän moät xung Start môùi . Söï chuyeån ñoåi lieân tieáp coù theå thöïc hieän baèng caùch noái ngoõ ra EOC ( End Of Convert – Keát thuùc chuyeån ñoåi) vaøo ngoõ Start . Neáu söû duïng ôû cheá ñoä naøy , moät xung Start beân ngoaøi phaûi ñöôïc cung caáp sau khi baät nguoàn . Xung EOC seõ xuoáng möùc thaáp sau caïnh leân cuûa xung Start töø 0 ñeán 8 xung clock vaû leân möùc cao khi vieäc chuyeån ñoåi ñaõ xong . Giaûn ñoà thôøi gian : Bieåu thöùc chuyeån ñoåi : Data ngoõ ra laø moät soá nguyeân N naèm trong taàm : 0 Giaûi thuaät ñieàu khieån :Chôø bieán ñoåi xong ( Taïo treã hoaëc chôø EOC = 1) BEGIN Khoâng cho pheùp ngoõ ra (OE = 0 ) Choïn keânh analog vaøo ( Xaùc laäp ñòa chæ CBA ) Taïo xung ALE Taïo xung Start Cho pheùp ngoû ra (OE =1) Ñoïc data END GIÔÙI THIEÄU DAC0808 : Hoï DAC0808 (DAC0808/DAC0807/DAC0806 )laø boä bieán ñoåi digital sang analog 8 bit , coù thôøi gian xöû lyù doøng ra toaøn thang laø 150ns , coâng suaát tieâu thuï chæ 33mW vôùi nguoàn ±5V . Hoï DAC0808 giao tieáp tröïc tieáp vôùi caùc möùc logic thoâng duïng nhö TTL , DTL hoaëc CMOS . Sô ñoà khoái : Sô ñoà chaân : Khaû naêng : Ñoä chính xaùc töông ñoái : ± 0.19% (8 – bit) vôùi DAC0808 Ñoä chính xaùc 6 bit vaø 7 bit vôùi DAC0807 vaø DAC0806 Thôøi gian xöû lyù nhanh : 150ns Ngoõ vaøo digital khoâng ñaûo töông thích TTL vaø CMOS Toác ñoä queùt cao : 8mA/s Taàm ñieän aùp cung caáp ±4.5V ñeán ± 18V Coâng suaát tieâu thuï thaáp : 33 mW vôùi nguoàn ± 5V Trò soá toái ña : Nguoàn cung caáp : VCC = +18 VDC VEE = -18 VDC Ñieän aùp ngoõ vaøo digital (V5 V12) : -10 VDC ñeán +18 VDC Ñieän aùp ngoõ ra ñöôïc duøng (V0) : -11 VDC ñeán +18 VDC Doøng chuaån (I14, I15) : VCC, VEE Hoaït ñoäng cô baûn : Doøng ñieän chuaån ñöôïc taïo ra baèng moät trong 2 caùch : chuaån döông hoaëc chuaån aâm . VREF döông VREF aâm Doøng ñieän vaøo chaån , I14, phaûi luoân luoân chaïy vaøo chaân 14 , baát chaáp caùch boá trí hoaëc cöïc tính nguoàn aùp chuaån . Caùch noái tieáp vôùi aùp döông nhö treân hình treân (H3.4) . Vôùi tín hieäu chuaån löôõng cöïc , R15 coù theå ñöôïc noái vôùi nguoàn aâm . Trò soá cuûa tuï buø phaûi taêng khi R14 taêng ñeå duy trì leà pha thích hôïp . Ví duï vôùi R14 laø 1, 2.5 vaø 5K thì trò toái thieåu cuûa tuï laø 15, 37 vaø 75pF . Tuï coù theå noái deán VEE hoaëc ñaát . Aùp chuaån aâm coù theå ñöôïc söû duïng neáu R14 ñöôïc noái ñaát vaø chuaån ñöôïc noái ñeán R15 nhö hình treân. Phöông phaùp naøy coù thuaän lôïi chính laø toång trôû vaøo cao ( taïi chaân 15). DAC0808 laø boä bieán ñoåi A/D taïo ra doøng ñieän coù trò soá tuyø theo giaù trò digital vaø doøng ñieän chuaån ngoõ vaøo . Doøng ñieän chuaån coù theå coù trò soá coá ñònh hoaëc thay ñoåi töø gaàn 0 ñeán 4 mA . Doøng ngoõ ra toaøn thang (IFS - Full scale ) laø moät haøm tuyeán tính cuûa doøng chuaån vaø cho bôûi : Doøng ñieän ra : R15 ( thoâng thöôøng baèng R14 ) ñöôïc söû duïng ñeå loaïi boû sai soá doøng phaân cöïc . R15 coù theå boû ñi , khi ñoù chæ taêng sai soá moät ít . Khi duøng dieän aùp chuaån DC thì neân söû duïng tuï bypass xuoáng ñaát . COÅNG NOÁI TIEÁP RS 232 : Coång noái tieáp RS 232 laø giao dieän phoå bieán roäng raõi nhaát. Ngöôøi duøng maùy tính PC coøn goïi caùc coång naøy laø COM 1 (keát noái vôùi mouse ôû maùy tính ñôøi tröôùc), vaø COM 2 ñeå töï do cho caùc öùng duïng khaùc : gheùp noái vôùi modem, maùy in, hoaëc caùc thieát bò ño löôøng. Coång noái tieáp RS 232 ñöôïc söû duïng raát thuaän tieän cho muïc ñích ño löôøng vaø ñieàu khieån. Vieäc söû duïng giao dieän noái tieáp mang laïi nhieàu öu ñieåm : Khaû naêng choáng nhieãu cuûa caùc coång noái tieáp cao hôn so vôùi coång maùy in. Thieát bò ngoaïi vi coù theå thaùo laép ngay caû khi maùy tính ñang ñöôïc caáp ñieän. Caùc maïch ñieän ñôn giaûn coù theå nhaän ñöôïc ñieän aùp nguoàn nuoâi qua coång noái tieáp. Vieäc trao ñoåi döõ lieäu qua coång noái tieáp trong caùc tröôøng hôïp thoâng thöôøng ñeàu qua ñöôøng daãn truyeàn noái tieáp TXD vaø ñöôøng daãn nhaän noái tieáp RXD. Taát caû caùc ñöôøng daãn coøn laïi coù chöùc naêng phuï trôï khi thieát laäp vaø khi ñieàu khieån cuoäc truyeàn döõ lieäu. Caùc ñöôøng daãn naøy goïi laø caùc ñöôøng daãn baét tay, coù öu ñieåm laø traïng thaùi cuûa chuùng coù theå ñaët hoaëc ñieàu khieån tröïc tieáp. Vieäc truyeàn döõ lieäu : Möùc tín hieäu treân chaân ra RxD tuyø thuoäc vaøo ñöôøng daãn TxD, thöôøng naèm trong khoaûng -12 V (traïng thaùi High naèm giöõa -3 V vaø -12 V) ñeán +12 V (traïng thaùi Low naèm giöõa +3 V vaø +12 V). ÔÛ traïng thaùi tónh, treân ñöôøng daãn coù ñieän aùp –12 V. Moät bit khôûi ñoäng (startbit) seõ môû ñaàu vieäc truyeàn döõ lieäu. Tieáp ñoù laø caùc bit döõ lieäu rieâng leû seõ ñeán, trong ñoù nhöõng bit giaù trò thaáp seõ ñöôïc göûi tröôùc tieân. Soá bit döõ lieäu töø 5 ñeán 8. ÔÛ cuoái moãi doøng döõ lieäu coù moät bit döøng (stopbit) ñeå ñaët trôû laïi traïng thaùi loái ra (-12 V). Baèng toác ñoä baud ta thieát laäp toác ñoä truyeàn döõ lieäu. Khuoân maãu truyeàn döõ lieäu caàn phaûi ñöôïc thieát laäp nhö nhau caû ôû beân göûi cuõng nhö ôû beân nhaän. Coång noái tieáp RS 232 coù 2 loaïi : loaïi coù 9 chaân vaø loaïi coù 25 chaân. Chaân ( loaïi 9 chaân) Chaân ( loaïi 25 chaân) Chöùc naêng 1 2 3 4 5 6 7 8 9 8 3 2 20 7 6 4 5 22 DCD - Data carrier Detect Loái vaøo RxD - Receive Data Loái vaøo TxD - Transmit Data Loái ra DTR - Data Terminal Ready Loái ra GND - Noái ñaát Loái ra DSR - Data Set Ready Loái vaøo RTS - Request to Send Loái ra CTS - Clear to Send Loái vaøo RI - Ring Indicator Loái vaøo Hình : Saép xeáp chaân cuûa coång noái tieáp ôû maùy tính PC. Stopbit 12V LOW D0 D1 D2 D3 D4 D5 D6 D7 HIGH -12V 1 1 0 1 0 0 1 0 104us T=1/fBaud 1.04 ms Startbit Hình : Doøng döõ lieäu treân coång RS232 vôùi toác ñoä 9600 baud. NGOÂN NGÖÕ LAÄP TRÌNH VISUAL BASIC VÔÙI TRUYEÀN THOÂNG NOÁI TIEÁP : Visual Basic (VB) laø moät ngoân ngöõ laäp trình höôùng ñoái töôïng chaïy treân neàn Windows.Vôùi söï phaùt trieån ngaøy caøng taêng cuûa caùc öùng duïng truyeàn thoâng, VB cuõng hoã trôï cho vieäc laäp trình gheùp noái maùy tính qua coång noái tieáp, cho pheùp ngöôøi duøng taïo giao dieän söû duïng moät caùch deã daøng. So vôùi caùc ngoân ngöõ khaùc nhö Visual C, Delphi, VB khoâng coù khaû naêng taùc ñoäng ñeán boä nhôù, thanh ghi, truy xuaát port, laäp trình söû duïng ngaét cuûa PC. Ñaây laø ñieåm haïn cheá cuûa ngoân ngöõ laäp trình naøy. Tuy nhieân, voán laø saûn phaåm cuûa nhaø saûn xuaát Microsoft, do ñoù VB ñöôïc hoã trôï bôûi nhöõng tieän ích cuûa Windows : caùc haøm saün coù trong caùc taäp tin *.dll (dynamic link library), ñaëc bieät laø trong winAPI (Application Programming Interface). Ñieàu naøy ñaõ laøm taêng söùc maïnh vaø môû roäng khaû naêng cuûa VB. VB coù hoã trôï ngöôøi laäp trình söû duïng coång COM baèng ñieàu khieån MS Comm Control vôùi caùc ñaëc tính ñieàu khieån truyeàn thoâng chính sau : CommPort : Ñaët vaø traû laïi soá coång truyeàn thoâng Settings : Ñaët vaø traû laïi caùc tham soá truyeàn thoâng nhö : toác ñoä truyeàn theo bit, chaün leû, soá caùc bit döõ lieäu. PortOpen : Môû/ñoùng moät coång (tuyø thuoäc vaøo thoâng soá) vaø ñaët thoâng soá cho coång. Input (nhaäp vaøo) : Traû laïi vaø loaïi boû caùc kyù töï khoûi boä ñeäm nhaän. Output (xuaát ra) : Vieát moät xaâu kyù töï tôùi vaøo boä ñeäm truyeàn. Baûng lieät keâ caùc giaù trò baud hôïp leä : Thoâng soá toác ñoä Baud 110 300 600 1200 2400 9600 (maëc ñònh) 14400 19200 38400(döï tröõ) 56000(döï tröõ) 188000(döï tröõ) 256000(döï tröõ) Baûng moâ taû caùc giaù trò chaün leû hôïp leä : Giaù trò Moâ taû E M N O S Even (chaün) Mark (daáu) None ( khoâng kieåm tra chaün leû – maëc ñònh) Odd (leû) Space (troáng) Soá bit döõ lieäu hôïp leä trong moät laàn truyeàn (khung truyeàn) : 4, 5, 6, 7, 8 . Soá bit stop hôïp leä : 1, 1.5, 2 . Ngoaøi ra coøn moät soá ñaëc tính khaùc nhö : DTREnable, RTSEnable, CTSHolding, CommEvent … GIAO TIEÁP VAØ HIEÅN THÒ KEÁT QUAÛ ÑO : Taát caû maïch ñeäm coù nhieäm vuï thu thaäp caùc thoâng soá quaù trình khaùc nhau, qua boä bieán ñoåi A/D vaø chuyeån tieáp caùc giaù trò digital ñeán maùy tính PC. Vieäc trao ñoåi döõ lieäu qua coång noái tieáp ôû ñöôøng daãn truyeàn noái tieáp TXD vaø ñöôøng daãn nhaän noái tieáp RXD. Coång gheùp noái söû duïng caùc thoâng soá truyeàn nhö sau : Toác ñoä truyeàn : 19200 Baud Ñoä daøi kyù töï : 8 bit Bit chaün leû : khoâng Bit döøng : 1. Caùc soá lieäu ño ñöôïc chuyeån ñoåi vaø xöû lyù treân maùy tính, sau ñoù ñöôïc hieån thò ra maøn hình. Veõ ñoà thò daïng soùng tính hieäu ño : Chuùng ta caàn xaùc ñònh caùc ñieåm theo caùc ñaïi löôïng coù ñöôïc thoâng qua caùc pheùp ño, vaø veõ moät ñöôøng cong sao cho khoaûng caùch cuûa caùc ñieåm treân vôùi ñöôøng cong laø nhoû nhaát. Nguyeân nhaân khieán ñöôøng cong khoâng theå ñi qua taát caû caùc ñieåm treân laø : Sai soá do thieát bò ño (nhieãu nhieät, nhieãu ñieän töø taùc ñoäng leân caùc linh kieän trong maïch ño), vaø giaù trò linh kieän treân maïch ñeäm . Sai soá do suït aùp nguoàn cung caáp cho caùc IC khi ñoùng rô le hoaëc cho maïch ño daãn ñeán hoaït ñoäng cuûa Op Amp khoâng oån ñònh (giôùi haïn aùp ngoõ vaøo, ñieän aùp leäch offset, swing ñieän aùp ra bò giaûm) . Nhöõng aûnh höôûng treân khieán giaù trò ño ñöôïc khoâng chính xaùc tuyeät ñoái, do ñoù ñöôøng cong khoâng theå ñi qua taát caû caùc ñieåm treân, nhöng ñöôøng cong naøy seõ gaàn gioáng vôùi daïng soùng tín hieäu nhaát . Ñeå veõ daïng soùng tín hieäu ño ñöôïc, chuùng ta söû duïng phöông phaùp noäi suy Spline baäc ba . KHUYEÁCH ÑAÏI THUAÄT TOAÙN (OPERATION AMPLIFIER) : Khueách ñaïi thuaät toaùn laø caùc maïch vi ñieän töû IC döôïc cheá taïo ñeå duøng vaøo vieäc giaûi quyeát nhöõng phöông trình toaùn hoïc hoaëc caùc lónh vöïc khaùc nhö taïo tín hieäu , khueách ñaïi ñaëc duïng … Vieäc söû duïng vi maïch KÑTTtrong hai lónh vöïc chính : Tuyeán tính : goàm caùc boä khueách ñaïi AC , loïc chuû ñoäng , khueách ñaïi DC , khueách ñaïi log antilog … Phi tuyeán : caùc maïch taïi soùng sine , vuoâng , tam giaùc , taïo haøm , so saùnh … SÔ ÑOÀ KHOÁI VAØ PHAÂN TÍCH MOÄT MAÏCH OP – AMP ÑÔN GIAÛN : Taàng nhaäp Taàng trung gian Taàng dòch möùc Taàng ra Op – Amp coù öu ñieåm laø gheùp taàng tröïc tieáp vaø coù ñoä lôïi voøng hôû raát cao . Caáu truùc beân trong goàm boán khoái nhö hình veõ coù theå ñöôïc giaûi thích nhö sau : Taàng nhaäp : coù coâng duïng khueách ñaïi tín hieäu vi sai ngoõ vaøo ( hai ngoõ vaøo ñaûo vaø khoâng ñaûo ) coøn ngoõ ra cuûa taàng laø caân baèng . Ñaëc dieåm taàng naøy laø trôû khaùng cao vaø CMRR khaù lôùn . Taàng trung gian cuõng laø maïch khueách ñaïi vi sai ñeå taêng cöôøng ñoä khueách ñaïi cho maïch , taàng naøy goàm hai ngoõ vaøo , ngoõ ra baát caân baèng . Taàng ñònh möùc : vì möùc DC khi gheùp giöûa caùc taàng coù cheânh leäch do aûnh höôûng cuûa cheá doä gheùp tröïc tieáp neân taàng naøy duøng 9eå dònh möùc DC . Taàng ra : Thöôøng laø maïch phaùt theo hay maïch khueách ñaïi ñaåy keùo boå phuï nhaèm taêng khaû naêng doøng ra vaø trôû khaùng ra nhoû . IC KHUYEÁCH ÑAÏI THUAÄT TOAÙN (OP AMP) : Caùc ñaëc tính cô baûn : Ñieän aùp offset vaøo : Ñieän aùp Vio taïi ngoõ vaøo laøm cho ngoõ ra Vo = 0Vdc laø ñieän aùp vaøo offset . Vio coù theå coù giaù trò aâm hoaëc döông tuy nhieân giaù trò tuyeät ñoái caøng nhoû caøng toát . Vo Vio Doøng offset vaøo : Doøng offset vaøo ñöôïc ñònh nghóa nhö sau : (trò tuyeät ñoái) taïi ngoõ vaøo khi ñieän theá ra laø 0V. giaù trò Iio caøng nhoû caøng toát Vo Doøng ñònh thieân vaøo : Doøng naøy ñöôïc ñònh nghóa laø doøng trung bình cuûa vaø : . Ñieän trôû vaøo vi sai : Laø ñieän trôû ño taïi moät ñaàu vaø ñaàu kia noái ñaát, thoâng thöôøng giaù trò naøy raát cao töø vaøi traêm KW trôû leân ñeán khoaûng MW . Ñieän dung vaøo : Ñöôïc ño taïi ñaàu coäng hoaëc ñaàu tröø cuûa Op Amp coøn ñaàu kia noái ñaát, giaù trò naøy khoaûng 1.4 pF cho 741C . Taàm chænh ñieän aùp offset : Coù khaû naêng chænh offset zero. Döïa hình döôùi, khi chænh bieán trôû laøm thay ñoåi ñieän aùp offset vaøo, ñoái vôùi 741C taàm coù khaû naêng chænh laø . Taàm ñieän aùp vaøo : Laø bieân ñoä ñieän aùp vaøo ñoàng pha lôùn nhaát ôû ngoõ vaøo khi maéc maïch nhö hình döôùi. Khaû naêng toái ña 741C laø . CMRR : Laø tyû soá cuûa heä soá khuyeách ñaïi vi sai chia cho heä soá khuyeách ñaïi ñoàng pha nhö trong maïch vi sai : CMRR = Ad/Acm . Vôùi Acm = Vocm/Vcm Vocm laø aùp ra ñoàng pha Vcm laø aùp vaøo ñoàng pha Giaù trò raát lôùn, 741C coù CMRR = 120dB . Tæ soá neùn nguoàn cung caáp : Söï thay ñoåi nguoàn cung caáp daãn ñeán söï thay ñoåi ñieän aùp offset Vio tyû soá ñaëc tröng laø SVRR (Supply Voltage Rejection Ratio) hoaëc laø PSRR (Power Supply Rejection Ratio) hoaëc PSS (Power Supply Sensitivity) . Ñôn vò hoaëc dB SVRR = 741C coù SVRR = . Swing ñieän aùp ra : Thoâng thöôøng ñieän aùp ñænh ñænh thöôøng beù hôn +Vcc vaø -Vee Ví duï : 741C = thì Swing aùp () . Ñieän trôû ra : Ñieän trôû R0 laø ñieän trôû do töø ngoõ ra so vôùi ñaát, ñoái vôùi 741C laø 75 . Doøng ngaén maïch ra : Laø doøng ngaén maïch lôùn nhaát ôû ngoõ ra. Ñoái vôùi 741C coù Isc = 25mA . Slew rate : Laø suaát cöïc ñaïi cuûa söï thay ñoåi ñieän aùp ra ôû ñieàu kieän tín hieäu lôùn .Eop.fp ,vôùi Eop :ñieän theá ra toái ña, fp :taàn soá ñaùp öùng toaøn boä coâng suaát . Ñoái vôùi 741C raát thaáp khoaûng . Giaù trò naøy quan troïng vì noù quyeát ñònh choïn Op Amp laøm vieäc ôû taàn soá cao, so saùnh, chuyeån maïch . Tích soá ñoä lôïi baêng thoâng : GBW laø baêng thoâng khi ñoä lôïi =1. Ñoái vôùi 741C laø 1MHz . Op Amp lyù töôûng : Moät Op Amp lyù töôûng phaûi ñöôïc thoaû maõn caùc ñieàu kieän sau : Ñoä lôïi aùp = . Ri = . BW = 0 ñeán . CMRR = . SR = . Ñöôøng cong truyeàn ñaït coù ñieän aùp offset laø zero . Maïch ño duøng IC Op-Amp (maïch khuyeách ñaïi thuaät toaùn ) : Ñaëc tính cô baûn : Nhöõng tín hieäu ño löôøng thöôøng coù trò soá nhoû ( hoaëc raát nhoû ) , cho neân caàn phaûi khuyeách ñaïi nhöõng tín hieäu naøy tröôùc khi ño . Nhöõng ñaëc tröng quan troïng cuûa maïch khuyeách ñaïi goàm : Heä soá khuyeách ñaïi phaûi ñöôïc choïn löïa phuø hôïp vôùi ñoä chính xaùc vaø ñoä tuyeán tính cao. Ngoõ vaøo vi sai coù khaû naêng toát nhaát ñeå coù heä soá truaát thaûi tín hieäu chung lôùn nhaát. Ñoä oån ñònh cho heä soá khuyeách ñaïi ñoái vôùi söï thay ñoåi nhieät ñoä hoaït ñoäng . Sai soá do söï troâi vaø ñieän aùp “offset” DC caøng nhoû caøng toát . Maïch khuyeách ñaïi daïng vi sai : Ecm : thaønh phaàn chung cuûa tín hieäu ño . Ecm + E1 Ecm + E2 Es PHAÀN 2 : THIEÁT KEÁ THIEÁT KEÁ PHAÀN CÖÙNG : Phöông aùn thieát keá : Caùc tín hieäu ño ñeàu ñöôïc chuyeån ñoåi thaønh tín hieäu ñieän aùp töông öùng vôùi möùc logic ngoõ vaøo analog cuûa boä chuyeån ñoåi ADC0809. Vì vaäy caùc tín hieäu ño caàn ñöôïc ñöa qua maïch ñeäm tröôùc khi ñi vaøo boä chuyeån ñoåi ADC . Caùc maïch ñeäm coù taùc duïng ñeå phoái hôïp trôû khaùng , laø maïch caùch ly veà ñieän vaø taïo ra möùc logic phuø hôïp vôùi möùc logic ngoõ vaøo cuûa ADC0809 (0 -> 5V). Tuyø theo moãi ñaïi löôïng ñieän caàn ño maø ta coù maïch ñeäm töông öùng. Tín hieäu caàn ño ñöôïc choïn töø maùy tính, maùy tính seõ phaùt tín hieäu cho vi xöû lyù AT89C51 thoâng qua giao tieáp noái tieáp RS232. Vi xöû lyù coù nhieäm vuï ñôïi tín hieäu töø maùy tính sau ñoù seõ choïn keânh ño töông öùng vaø choïn taàm ño phuø hôïp baèng caùch ñoùng ngaét rô le töông öùng baèng port 1. Tín hieäu sau ñoù ñöôïc ñoïc veà vaø chuyeån ñeán maùy tính, vaø vi xöû lyù tieáp tuïc chu kyø ñôïi leänh töø maùy tính . ÑO AÙP, DOØNG, TUÏ, CAÛM VAØ ÑIEÄN TRÔÛ : Ño ñieän aùp : Ñoái vôùi ñieän aùp DC , tín hieäu aùp DC ñöôïc ñöa qua maïch khuyeách ñaïi vi sai ( 1 :1 ) roài chia aùp xuoáng möùc logic thích hôïp tröôùc khi ñöa ñeán ngoõ vaøo analog cuûa ADC0809. Ñeå ño ñieän aùp AC , ta chuyeån ñoåi ñieän aùp AC sang ñieän aùp DC baèng 3 phöông phaùp sau : Phöông phaùp chænh löu duøng diod . Phöông phaùp trò hieäu duïng thöïc . Phöông phaùp trò ñænh . Trong ñeà aùn naøy , em duøng phöông phaùp trò ñænh ñeå ño ñieän aùp AC . Tín hieäu aùp AC sau khi qua maïch khuyeách ñaïi vi sai (1 : 1) seõ ñeán maïch nhaân ñoâi ñieän aùp . Maïch bieán ñoåi trò soá tín hieäu ño coù thaønh phaàn xoay chieàu thaønh tín hieäu DC coù trò soá baèng trò ñænh. Tín hieäu naøy ñöôïc qua caàu phaân aùp ñeå coù möùc logic thích hôïp ñeå ñeán ngoõ vaøo analog cuûa ADC0809. Vì ño ñieän aùp DC vaø AC ñeàu duøng chung maïch khuyeách ñaïi vi sai, neân em söû duïng rô le ñeå chuyeån keânh maïch ñeäm cho thích hôïp . Hình : Maïch nhaân ñoâi ñieän aùp Ño doøng ñieän : Ño doøng DC : Vieäc ño doøng ñieän ñöôïc tieán haønh baèng caùch aùp duïng ñònh luaät Ohm, trong ñoù ta ño suït aùp treân moät ñieän trôû do doøng ñieän ñi qua gaây neân. Ta chuyeån doøng ñieän ño thaønh ñieän aùp ño baèng caùch cho doøng ñieän ño qua ñieän trôû shunt Rs , sau ñoù ñöa qua maïch khuyeách ñaïi vi sai ñeå ño aùp DC . Phaân taàm ño doøng ñieän baèng caùch phaân aùp cho ñieän aùp ño ( taàm ño caøng lôùn thì ñieän trôû shunt caøng giaûm ) . Ño doøng AC : Ta chuyeån doøng ñieän AC thaønh ñieän aùp AC baèng ñieän trôû shunt Rs , sau ñoù chuyeån ñieän aùp ño AC thaønh ñieän aùp DC baèng nhöõng phöông phaùp ño ñieän aùp AC (ôû ñaây em duøng phöông phaùp trò ñænh) . Maïch ño doøng ñieän: Taàm ño thay ñoåi baèng caùch thay ñoåi ñieän trôû shunt. Trong maïch cöùng, Rs coù 2 giaù trò laø 1W (vôùi taàm ño nhoû hôn 0.1A) vaø 10W (vôùi taàm ño nhoû hôn 10 mA) . Ño ñieän dung : Nguyeân lyù : Toång trôû cuaû ñieän dung Cx ñöôïc xaùc ñònh bôûi voân keá vaø ampe keá ( neáu söï hao maát do ñieän moâi cuûa tuï ñieän khoâng ñaùng keå ). Suy ra : Nguoàn tín hieäu cung caáp cho maïch ño phaûi laø tín hieäu hình sin coù ñoä meùo daïng nhoû hoaï taàn ñöôïc coi laø khoâng ñaùng keå ) . Bieân ñoä vaø taàn soá cuûa tín hieäu phaûi oån ñònh ( khoâng thay ñoåi ) . Neáu hoaï taàn cuûa tín hieäu lôùn thì seõ taïo ra sai soá ñaùng keå cho keát quaû ño . Trong tröôøng hôïp maïch ño duøng theâm Watt – keá, ñieän trôû ræ Rx cuûa ñieän dung Cx ñöôïc xaùc ñònh bôûi bieåu thöùc sau . Rx = P / I Toång trôû cuûa ñieän dung : Vaø ñieän dung caàn ño : Ño ñieän caûm : Nguyeân lyù : Toång trôû cuûa ñieän caûm Lx ñöôïc xaùc ñònh : Vaø ñieän caûm Lx ñöôïc xaùc ñònh : Z ñöôïc xaùc ñònh bôûi voân keá vaø ampe keá , Rx ñöôïc xaùc ñònh tröôùc . Trong luaän vaên, toång trôû Z ñöôïc xaùc ñònh bôûi bieåu thöùc theo ñieän aùp nguoàn 6V vôùi taàn soá 50Hz vaø ñieän aùp ño treân ñieän khaùng : Vdo Vdo Giaù trò gaàn ñuùng laø : vaø , coù sai soá theo ñieän trôû roø Rx . Trong maïch cöùng, vôùi R = 1K thì taàm ño cuûa tuï ñieän C laø : (2m ; 100m). vaø taàm ño cuûa ñieän caûm laø : (5H ; 200H). Ño ñieän trôû : Coù nhieàu caùch ño ñieän trôû : Ño ñieän trôû baèng voân keá vaø ampe keá , ñaây laø caùch xaùc ñònh “ phaàn töû ñieän trôû” ñang hoaït ñoäng(“ño noùng”) theo yeâu caàu . Khi ñoù ñieän trôû caàn ño Rx ñöôïc xaùc ñònh : Trong maùy ño vaïn naêng , duøng ohm keá ñeå ño ñieän trôû thì traïng thaùi ño laø phaàn töû ñieän trôû ño (Rx) khoâng coù naêng löôïng ( ño “nguoäi”) , maïch ño seõ laø nguoàn naêng löôïng rieâng . Maïch thay ñoåi taàm ño goàm coù caùc ñieän trôû chuaån noái tieáp vôùi Rx , taàm ño ñieän trôû caøng lôùn thì ñieän trôû chuaån caøng taêng . Khi Rx = 0 W thì Vño = 0 V . Khi Rx -> µ W thì Vño= Vng . Tröôøng hôïp Rx baát kyø vôùi taàm ño töông öùng coù ñieän trôû chuaån R : Trong ñeà taøi naøy , em duøng phöông phaùp ño “nguoäi” . Duøng maïch ño ñieän trôû daïng noái tieáp cuøng vôùi nguoàn naêng löôïng 12V , em chuyeån ñaïi löôïng ñieän trôû sang ñaïi löôïng ñieän aùp sau ñoù phaân taàm aùp thaønh möùc logic thích hôïp ñeå ñöa ñeán ngoõ vaøo analog cuûa ADC0809 . Vôùi R1 = 1K, ta coù taàm ño R nhoû hôn 10K. Vôùi R2 = 10K, ta coù taàm ño R nhoû hôn 100K. Taàm ño ñöôïc choïn baèng caùch ñoùng ngaét rô le töø chaân port 1. ÑO TAÀN SOÁ, COSj, COÂNG SUAÁT : Ño taàn soá : Tín hieäu caàn ño ñöôïc ñi qua maïch so saùnh ñeå laáy tín hieäu xung vuoâng, vaø ñöôïc chuyeån xuoáng möùc logic thích hôïp ôû chaân P1.7. Ta laàn löôït ño ñoä roäng xung T_on vaø T_off döïa vaøo timer 0, soá lieäu ñöôïc truyeàn veà maùy tính ñeå xöû lyù vaø hieån thò . Ño cosj : Ñeå ño heä soá coâng suaát cosj, ta caàn ño ñoä leäch pha giöõa tín hieäu aùp vaø doøng treân taûi. Tín hieäu aùp vaø doøng taûi ñöôïc ñöa qua maïch so saùnh ñeå ta coù ñöôïc tín hieäu xung vuoâng. Tín hieäu xung aùp ñöôïc ñöa ñeán chaân P1.6 cuûa AT89C51 vôùi möùc logic phuø hôïp, vi xöû lyù seõ ño ñoä roäng xung aùp vaø truyeàn veà maùy tính. Tín hieäu xung doøng ñöôïc ñöa qua coång logic AND cuøng vôùi tín hieäu xung aùp, khi ñoù ngoõ ra ta seõ coù tín hieäu xung leäch pha. Tín hieäu xung leäch pha ñöôïc ñöa ñeán chaân P1.5 vôùi möùc logic phuø hôïp, vi xöû lyù seõ ño ñoä roäng xung leäch pha vaø truyeàn veø maùy tính. Ñeå nhaän bieát sôùm hay treã pha, ta caàn xeùt tín hieäu xung leäch pha coù caïnh leân cuøng vôùi caïnh leân xung aùp hay coù treã hôn, ta duøng côø vaø truyeàn veà maùy tính. Maùy tính seõ laáy ñoä roäng xung aùp tröø ñi ñoä roäng xung leäch pha, ta coù ñöôïc thôøi gian leäch pha. Giaù trò cosj seõ ñöôïc maùy tính xöû lyù vaø hieån thò cuøng ghi chuù sôùm hay treã pha. Xung aùp : Xung doøng : Xung leäch pha : Ño coâng suaát : Ñeå ño coâng suaát, ta caàn bieát tröôùc laø tín hieäu xoay chieàu hay moät chieàu. Khi ñoù maùy tính seõ baùo cho vi xöû lyù ñeå choïn keânh ño töông öùng. Ñoái vôùi tín hieäu DC : vi xöû lyù seõ laàn löôït ñoïc giaù trò aùp vaø doøng DC sau khi qua maïch ño ñeán keânh töông öùng. Soá lieäu ñöôïc truyeàn veà maùy tính vaø ñöôïc xöû lyù ñeå hieån thò : P = U * I . Ñoái vôùi tín hieäu AC : vi xöû lyù seõ laàn löôït ño ñoä roäng xung aùp, ñoä roäng xung leäch pha vaø nhaän bieát sôùm, treã pha. Giaù trò aùp vaø doøng AC cuõng ñöôïc ñoïc veà. Taát caû soá lieäu ñeàu ñöôïc truyeàn veà maùy tính ñeå xöû lyù vaø hieån thò : P = U*I*cosj . Q = U*I*sinj . BOÄ NGUOÀN LAÄP TRÌNH DAC : Ngoaøi moät soá boä nguoàn cung caáp tín hieäu DC , AC coù bieân ñoä ñöôïc taïo saün treân maïch cöùng deå cung caáp cho maïch thí nghieäm, em coøn thieát keá theâm boä nguoàn coù taàn soá ñöôïc choïn töø maùy tính. Maïch cöùng goàm 2 IC 8951 hoaït ñoäng ñoäc laäp, moät ñeå ñoïc caùc giaù trò ño theo yeâu caàu, moät keát hôïp DAC0808 taïo nguoàn theo yeâu caàu töø maùy tính. Tín hieäu taïo töø DAC coù bieân ñoä töø 0V ñeán 5V ñöôïc qua maïch khuyeách ñaïi 2 laàn sau ñoù ñöôïc coäng vôùi –5V, ta seõ coù boä nguoàn AC hoaëc Dc theo yeâu caàu. Caùc tín hieäu nguoàn cung caáp laø sin, tam giac, xung vuoâng coù bieân ñoä vôùi taàn soá thay ñoåi ñöôïc, tín hieäu DC coù bieân ñoä thay ñoåi. GIÔÙI THIEÄU CAÙC IC TREÂN KIT : µCAT89C51 : Boä xöû lyù chính laø IC AT89C51 vôùi taàn soá laøm vieäc laø 11.059 MHz. Chaân 18, 19 cuûa AT89C51 ñöôïc noái vôùi thaïch anh (cuõng coù theå thay theá thaïch anh baèng tín hieäu xung clock), chaân /EA ñöôïc maéc leân möùc cao. Boar maïch goàm 2 IC AT89C51, moät coù nhieäm vuï nhaän leänh töø maùy tính vaø thöïc hieän leänh choïn keânh, ñoïc tín hieäu töø ADC roài göûi veà maùy tính, coøn IC kia keát hôïp DAC0808 taïo boä nguoàn theo yeâu caàu maùy tính. Vi xöû lyù laøm vieäc truyeàn nhaän döõ lieäu vôùi maùy tính vôùi toác ñoä baud laø 19200 . Vi maïch MAX 232 : Vi maïch naøy nhaän möùc RS 232 ñöôïc göûi töø maùy tính PC vaø bieán ñoåi tín hieäu naøy thaønh tín hieäu TTL, sau ñoù daãn ñeán boä vi xöû lyù AT89C51. Tín hieäu töø boä vi xöû lyù ñeán Max 232 seõ ñöôïc bieán ñoåi thaønh möùc +12V/-12V vaø göûi tôùi maùy tính PC. Theo caùch naøy khoaûng caùch giöõa maùy tính vaø moâ ñun cô sôû coù theå ñaït ñeán treân 20m . ADC0809 : Boä chuyeån ñoåi tín hieäu töông töï sang tín hieäu soá naøy coù nhieäm vuï ñoïc tín hieäu analog ôû ngoõ vaøo ñöôïc choïn bôûi vi xöû lyù. Sau ñoù chuyeån ñoåi thaønh tín hieäu soá vaø xuaát ra ngoaøi ôû daïng song song 8 bit khi ngoõ cho pheùp ra (OE) tích cöïc . DAC0808 : DAC0808 keát hôïp vôùi AT89C51 taïo neân boä nguoàn coù bieân ñoä vaø taàn soá ñöôïc ñieàu khieån baèng maùy tính. Caùc tín hieäu soá 8 bit song song ñöôïc xuaát ra port 0 cuûa AT8951 ñi ñeán ngoõ vaøo 8 bit cuûa DAC0808 (töø D0 -> D7). Sau ñoù ñöôïc chuyeån ñoåi thaønh tín hieäu töông töï ôø ngoõ ra töông öùng vôùi tín hieäu soá ôû ngoõ vaøo . LM741 vaø LF353 : Ñaëc tính cheá taïo, caùc trò soá cöïc ñaïi cuûa LM741HC : Nguoàn nuoâi : Coâng suaát tieâu taùn beân trong : 500mW Cheânh leäch aùp ngoõ vaøo : Nhieät ñoä laøm vieäc : 0-700C Caùc thoâng soá caàn thieát : Doøng phaân cöïc ngoõ vaøo : 800nA Toång trôû nhaäp : 0.3 – 2MW Taàm ñieän aùp vaøo : , ñieån hình Heä soá loaïi tröø caùch chung CMRR : 90dB, ñieån hình Toång trôû ra : 75W Doøng ngoõ ra ngaén maïch : 25mA Doøng cung caáp : 2.8mA, ñieån hình Ñoä lôïi aùp vaø : 15000 Coâng suaát tieâu thuï : 8.5mW, ñieån hình Dao ñoäng ñieän aùp ngoõ ra , : , ñieån hình . IC LF353 : Laø IC goàm 2 Op Amp ñôn, sô ñoà chaân nhö hình döôùi : LM741HC LF353 Trong boar maïch, 2 loaïi IC naøy ñöôïc söû duïng vôùi chöùc naêng so saùnh (khi ño taàn soá), ñeäm phoái hôïp trôû khaùng vaø laøm maïch khuyeách ñaïi vi sai . OC C Qi 1 X HiZ 0 1 Di 0 0 Qio IC 74HC573 : Ñeäm doøng Qio : Giöõ nguyeân traïng thaùi tröôùc ñoù. HiZ : Toång trôû cao (hôû maïch). IC coù nhieäm vuï ñeäm doøng cho port 1 cuûa AT89C51 ñeå kích BJT cho pheùp ñoùng rô le ñeå chuyeån maïch. Ngoõ C ñöôïc noái leân Vcc, ngoõ OC ñöôïc noái mass . Rô le : Rô le laø khí cuï ñieän phaùt hieän möùc naêng löôïng cuûa maïch ñieän ñaàu vaøo vaø ñieàu khieån söï chuyeån maïch cuûa maïch ñieän ñaàu ra . Coù nhieàu loaïi rô le : Rô le ñieän töø ( rô le tieáp ñieåm ) . Rô le maïch raén (khoâng tieáp ñieåm) . Rô le ñaëc bieät (rô le böôùc) . Rô le ñieän töø cô baûn goàm loõi saét vaø cuoän daây seõ thaønh nam chaâm ñieän khi coù doøng qua . Chöùc naêng cuûa rô le ñieän töø : Khuyeách ñaïi . Cho pheùp noái cuoän daây vaø tieáp ñieåm ôû 2 maïch ñieän aùp khaùc nhau . Ví duï : ñaàu vaøo laø aùp moät chieàu _ ñaàu ra laø aùp xoay chieàu vaø ngöôïc laïi . Nhaân soá maïch ñieän ñaàu ra (ví duï : rô le cöïc keùp …). Duøng laøm taùc ñoäng logic (vaø, hoaëc, khoâng) . Ñeå môû roäng taàm caùc giaù trò ño, trong ñeà taøi naøy em ñaõ söû duïng loaïi rô le cöïc ñôn, haønh trình keùp, ngaét maïch ñôn, vôùi ñieän aùp chuyeån maïch ñònh möùc laø 12V. Maïch ñöôïc thieát keá nhö hình veõ döôùi . Cuoän daây ñöôïc noái vôùi nguoàn 12V vaø transistor, trong ñoù transistor laøm nhieäm vuï ñoùng ngaét doøng töø nguoàn qua cuoän daây. Transistor ñöôïc kích daãn bôûi vi xöû lyù. Diod maéc ngöôïc leân nguoàn nhaèm xaû doøng veà nguoàn ñeå doøng qua cuoän khoâng thay ñoåi nhanh traùnh quaù aùp khi transistor ngöng daãn. Khi transistor daãn, cuoän daây trôû thaønh nam chaâm ñieän huùt loõi theùp laøm chuyeån maïch : = 0 GIAO DIEÄN TREÂN MAÙY TÍNH VAØ SÖÛ DUÏNG : Coù theå choïn giao tieáp noái tieáp baèng COM 1 hoaëc COM 2 töø caùc option. Caùc ñaëc tính khung truyeàn coá ñònh : 19200 baud, 0 bit chaün leû, 8 bit döõ lieäu, 1 bit döøng . Phaàn cöùng coù thieát keá moät boä nguoàn laäp trình baèng vi xöû lyù keát hôïp vôùi DAC0808, vaø ñöôïc tuyø choïn töø maùy tính. Choïn nguoàn DC, coù bieân ñoä thay ñoåi töøng möùc töø –5V -> +5V. Choïn nguoàn AC, coù taàn soá 50Hz, 100Hz, 200Hz vôùi caùc daïng soùng sin, tam giaùc, raêng cöa, xung vuoâng coù bieân ñoä –5V, +5V. Giaù trò ño ñöôïc hieån thò ôû treân. Ta coù theå ño hoaëc döøng ño baèng caùch kích vaøo nuùt leänh töông öùng. Tín hieäu ño laø AC hoaëc DC . Ñaïi löôïng caàn ño ñöôïc choïn : aùp (V), doøng (A), ñieän trôû ( R ), ñieän dung (C), ñieän caûm (L), coâng suaát vaø heä soá coâng suaát (P), taàn soá (f) . Ñeå laáy soá lieäu baùo caùo, trong khi ño ta kích vaøo nuùt “Nhaän” ñeå ñöa soá lieäu vaøo danh saùch. Daïng soùng tín hieäu ño ñöôïc veõ ra treân giaûn ñoà vôùi tyû leä thôøi gian hoaëc ñoä lôùn aùp treân 1 oâ tuyø choïn. Ta coù theå ño hoaëc döøng khi kích treân cuøng moät nuùt leänh. Baùo caùo goàm caùc giaù trò ño ñöôïc vaø daïng soùng tín hieäu ño, vaø ñöôïc in ra . Sau ñaây laø moät soá ví duï veà keát quaû ño ñöôïc : Soá lieäu laáy veà coù theå ñöôïc chuù thích theâm. Daïng soùng coù theå theâm chuù thích. Soá lieäu vaø daïng soùng ñöôïc xem thöû treân moät trang rieâng baèng nuùt preview , vaø ñöôïc in khi nhaán nuùt in. LÖU ÑOÀ GIAÛI THUAÄT VAØ CHÖÔNG TRÌNH VI XÖÛ LYÙ : LÖU ÑOÀ GIAÛI THUAÄT : Baét ñaàu Khôûi ñoäng coång noái tieáp laøm vieäc ôû cheá ñoä UART 8 bit, 19200 baud : SCON ß #52H TMOD ß #21H TH1 ß #-3 Ñaët SMOD leân 1 . Khôûi ñoäng timer 1 . Ñôïi leänh (kyù töï) truyeàn töø maùy tính . Kyù töï laø “ V “ ? Kyù töï laø “ A “ ? Kyù töï laø “ R “ ? Kyù töï laø “ C “ ? Kyù töï laø “ L “ ? Kyù töï laø “ P “ ? Kyù töï laø “ F “ ? doV doA doR doCL doCL doP dof 1 Chöông trình chính : Kyù töï laø “ S “ ? Dsong 1 Löu ñoà ño coâng suaát : (B) = 1 doP Inchar (A) = ‘d’ Ñoïc giaù trò aùp DC: - Choïn keânh 2 - Ñoïc AD Outchar Ñoïc giaù trò doøng DC: - Choïn keânh 0 - Ñoïc AD Outchar Ljmp Nhan P1.6 = 1 ? P1.6 = 0 ? Setb TR0 Ño ñoä roäng xung aùp P1.5 = 1 ? (B) = 2 N Y Y Y N N Y N 2 -(A)<- (R1) - Outchar - (A)<- (TH0) - Outchar -(A)<- (TL0) - Outchar 2 P1.5 = 1 P1.5 = 0 Ño ñoä roäng xung leäch pha -(A)<- (R1) - Outchar -(A)<- (TH0) - Outchar -(A)<- (TL0) - Outchar Ñoïc aùp xoay chieàu : Choïn keânh 3 Ñoïc AD Outchar 3 Y Y N N Ljmp Nhan Outchar Ñoïc doøng xoay chieàu : Choïn keânh 1 Choïn taàm ño 1 Ñoïc AD Ñoïc doøng xoay chieàu : Choïn keânh 1 Choïn taàm ño 1 Ñoïc AD Outchar Ljmp Nhan 3 Löu ñoà ño aùp : doV Inchar (A) = ‘d’ Ñoïc giaù trò aùp DC: - Choïn keânh 2 - Setb P1.2 - delay2ms - Ñoïc AD Outchar N Y Ñoïc aùp xoay chieàu : - Choïn keânh 3 - Clr P1.2 - delay2ms - Ñoïc AD Outchar Ljmp Nhan Löu ñoà ño doøng : 4 doI Inchar (A)=”a” - Setb P1.1 - delay2ms - Choïn keânh 0. - Clr P1.1 - delay2ms - Choïn keânh 1. Inchar (A)=”1” (A)=”2” - Setb P1.0 - delay2ms - Ñoïc AD. - Clr P1.0 - delay2ms - Ñoïc AD. Outchar Ljmp nhan Outchar Ljmp nhan Ñoïc AD. P1.0 = 1 ? (A) #202 (A) #22 5 7 6 N Y N Y N Y N Y Y N 4 Y N 5 4 - Push Acc - (A)<-‘2’ Outchar - Pop Acc - Outchar Outchar Ljmp nhan - Clr P1.0 - delay2ms - Ñoïc AD. - Push Acc - (A)<-‘1’ - Pop Acc - Outchar Ljmp nhan 7 - Push Acc - (A)<-‘1’ Outchar - Pop Acc - Outchar Ljmp nhan 6 Outchar - Setb P1.0 - delay2ms - Ñoïc AD. - Push Acc - (A)<-‘2’ - Pop Acc - Outchar Ljmp nhan Löu ñoà ño ñieän trôû : 4 doR Inchar (A)=”1” (A)=”2” - Clr P1.4 - delay2ms - Ñoïc AD. - Setb P1.4 - delay2ms - Ñoïc AD. Outchar Ljmp nhan Outchar Ljmp nhan Ñoïc AD. P1.4 = 1 ? (A) #202 (A) #22 9 N Y N Y N Y N Y 8 Y N - Push Acc - (A)<-‘2’ Outchar - Pop Acc - Outchar Ljmp nhan - Push Acc - (A)<-‘1’ Outchar - Pop Acc - Outchar Ljmp nhan 8 Outchar - Setb P1.4 - delay2ms - Ñoïc AD. - Push Acc - (A)<-‘2’ - Pop Acc - Outchar Ljmp nhan 9 Outchar - Clr P1.4 - delay2ms - Ñoïc AD. - Push Acc - (A)<-‘1’ - Pop Acc - Outchar Ljmp nhan Löu ñoà ño tuï, caûm : doCL - Choïn keânh 5 - Ñoïc AD. Outchar Ljmp nhan Löu ñoà ño taàn soá : dof (R1) <- #0 (R2) <- #0 (TH0) <- #Hight(-50176) (TL0) <- #Low(-50176) P1.7 = 1 P1.7 = 0 Y Y N N - Setb TR0 - Acall Tf_on - Acall Tf_off R1 = 20 ? - (A)<- #’y’ - Outchar - (A)<- (R1) - Outchar - (A)<- (R4) - Outchar - (A)<- (R3) - Outchar - (A)<- (R5) - Outchar - (A)<- (R6) - Outchar - (A)<- (R2) - Outchar - (A)<-#’n’ - Outchar Ljmp nhan N Y Löu ñoà daïng soùng : Dsong - Choïnkeânh 2 - Setb p1. - Delay 2.5 ms Ñoïc AD Outchar R0 = 0 ? R4 = 0 ? R0 <- #3 R4 <- #250 Ljmp nhan N Y Y N Chöông trình con Inchar, Outchar: Outchar TI = 0 ? - Clr TI -(SBUF)<- (A) RET N Y Inchar RI = 0 ? - Clr RI - (A)<- (SBUF) RET N Y Chöông trình con ño ñoä roäng xung : Baét ñaàu TF0 = 0 - Clr TR0 - Clr TF0 - Inc R0 - (TH0) <- #Hight(-50176) - (TL0) <- #Low(-50176) - Setb TR0 P1.5 = 1 - Clr TR0 - Clr TF0 RET N Y N Y Chöông trình con delay2ms : (delay 2.5 ms) Baét ñaàu R3 <- #10 R2 <- #125 Ret R2 = R2 -1 R2 = 0 ? R3 = 0 ? R3 = R3 -1 N Y Y N CHÖÔNG TRÌNH VI XÖÛ LYÙ CHO AT89C51 : ;******************* Baét ñaàu chöông trình chính ************************* org 0h main: mov scon,#52h ;Coång noái tieáp,mode 1 mov tmod,#21h ;Timer 0 mode 1, timer 1 mode 2 mov th1,#-3 ;Soá ñeám naïp laïi cho 9600 baud mov a,87h ;Gaáp ñoâi toác ñoä baud setb acc.7 mov 87h,a setb tr1 ;Cho timer 1 chaïy cung caáp xung nhòp toác ñoä baud clr p1.0 clr p1.1 clr p1.2 clr p1.3 clr p1.4 nhan: acall inchar next1: cjne a,#'V',next2 ljmp doV next2: cjne a,#'A',next3 ljmp doA next3: cjne a,#'R',next4 ljmp doR next4: cjne a,#'P',next5 ljmp doP next5: cjne a,#'F',next6 ljmp doF next6: cjne a,#'L',next7 ljmp doCL next7: cjne a,#'C',next8 ljmp doCL next8: cjne a,#'S',nhan ljmp Dsong sjmp nhan ;******************** Daïng soùng tín hieäu ******************************* Dsong: acall inchar cjne a,#'4',ds0 mov r4,#240 sjmp ds3 ds0: cjne a,#'3',ds1 mov r4,#110 sjmp ds3 ds1: cjne a,#'2',ds2 mov r4,#65 sjmp ds3 ds2: sjmp ds4 ds3: clr p3.2 ;choïn keânh 2 setb p3.3 clr p3.4 setb p1.2 ;RL4 call delay2ms mov dptr,#0000h mov r0,#6 mov 30h,r4 tiep0: mov r4,30h tiep1: movx @dptr,a ;taïo xung Start vaø ALE mov r2,#60 djnz

Các file đính kèm theo tài liệu này:

  • docLV_89c51.DOC