Luận văn Giao tiếp giữa máy tính và vi xử lý trong hệ thống Scada

Tài liệu Luận văn Giao tiếp giữa máy tính và vi xử lý trong hệ thống Scada: ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN - ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG š&› LUẬN VĂN TỐT NGHIỆP ĐỀ TÀI : GVHD : THẦY HUỲNH HỮU PHƯƠNG SVTH : CHÂU THỊ BÍCH NGA MSSV : 49700931 LỚP : DD97-TỰ ĐỘNG THÁNG 1.2002 LỜI CẢM ƠN Luận văn tốt nghiệp là đúc kết quá trình học tập trong suốt những năm tháng dưới mái trường đại học, để đạt được kết quả ngày hôm nay, ngoài sự phấn đấu của bản thân em là công ơn sinh thành và dưỡng dục của cha mẹ, công ơn dạy dỗ của thầy cô, sự quan tâm giúp đỡ của những người thân bè bạn. Em xin dâng lên cha mẹ, thầy cô, bè bạn và những người thân yêu nhất với tấm lòng thành kính và tri ân sâu sắc. Nhân dịp này em xin chân thành cảm ơn các thầy cô trong trường Đại Học Bách Khoa nói chung và các thầy cô trong bộ môn Điều Khiển Tự Động nói riêng đã truyền đạt kiến thức cho em trong s...

doc93 trang | Chia sẻ: hunglv | Lượt xem: 1064 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Giao tiếp giữa máy tính và vi xử lý trong hệ thống Scada, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ MINH TRÖÔØNG ÑAÏI HOÏC BAÙCH KHOA KHOA ÑIEÄN - ÑIEÄN TÖÛ BOÄ MOÂN TÖÏ ÑOÄNG š&› LUAÄN VAÊN TOÁT NGHIEÄP ÑEÀ TAØI : GVHD : THAÀY HUYØNH HÖÕU PHÖÔNG SVTH : CHAÂU THÒ BÍCH NGA MSSV : 49700931 LÔÙP : DD97-TÖÏ ÑOÄNG THAÙNG 1.2002 LÔØI CAÛM ÔN Luaän vaên toát nghieäp laø ñuùc keát quaù trình hoïc taäp trong suoát nhöõng naêm thaùng döôùi maùi tröôøng ñaïi hoïc, ñeå ñaït ñöôïc keát quaû ngaøy hoâm nay, ngoaøi söï phaán ñaáu cuûa baûn thaân em laø coâng ôn sinh thaønh vaø döôõng duïc cuûa cha meï, coâng ôn daïy doã cuûa thaày coâ, söï quan taâm giuùp ñôõ cuûa nhöõng ngöôøi thaân beø baïn. Em xin daâng leân cha meï, thaày coâ, beø baïn vaø nhöõng ngöôøi thaân yeâu nhaát vôùi taám loøng thaønh kính vaø tri aân saâu saéc. Nhaân dòp naøy em xin chaân thaønh caûm ôn caùc thaày coâ trong tröôøng Ñaïi Hoïc Baùch Khoa noùi chung vaø caùc thaày coâ trong boä moân Ñieàu Khieån Töï Ñoäng noùi rieâng ñaõ truyeàn ñaït kieán thöùc cho em trong suoát thôøi gian hoïc taäp taïi tröôøng. Ñaëc bieät em xin caûm ôn Thaày Huyønh Höõu Phöông ñaõ taän tình höôùng daãn vaø taïo moïi ñieàu kieän giuùp em hoaøn thaønh luaän vaên toát nghieäp naøy. TP.HCM ngaøy 14/1/2002 Sinh vieân thöïc hieän Chaâu Thò Bích Nga Nhaän Xeùt Cuûa Giaùo Vieân Phaûn Bieän Nhaän Xeùt Cuûa Giaùo Vieân Höôùng Daãn MUÏC LUÏC: NOÄI DUNG trang Giôùi thieäu chung 01 CHÖÔNG 1: GIAO THÖÙC TRUYEÀN THOÂNG 03 Giôùi thieäu 03 Protocol 05 Khaùi nieäm 05 Xaây döïng Protocol 06 Caáu truùc frame döõ lieäu 06 Xaây döïng Protocol 08 Truyeàn thoâng noái tieáp 09 Thanh ghi dieàu khieån ñöôøng truyeàn 10 Thanh ghi ñieàu khieån MODEM 11 Thanh ghi traïng thaùi ñöôøng daây 12 Chuaån giao tieáp RS-232 13 Giôùi thieäu IC Max_232 15 CHÖÔNG 2: CÔ LÖÔÏC AT89C51 17 Khaùi quaùt veà hoï IC MCS-51 17 Giôùi thieäu AT89C52 18 Nhöõng ñaëc tröng cô baûn 20 Caáu hình chaân 20 Toå chöùc boä nhôù 25 RAM ña duïng 25 RAM ñòa chæ hoaù töøng bit 27 Caùc bank thanh ghi 27 Caùc thanh ghi chöùc naêng ñaëc bieät 29 Töø traïng thaùi chöông trình 30 Thanh ghi B 32 Con troû ngaên xeáp 32 Con troû döõ lieäu 33 Caùc thanh ghi port xuaát nhaäp 33 Caùc thanh ghi timer 34 Caùc thanh ghi port noái tieáp 35 Caùc thanh ghi ngaét 36 Thanh ghi ñieàu khieån coâng suaát 36 Baûo veä boä nhôù 36 Hoaït ñoäng cuûa port noái tieáp 37 Giôùi thieäu 37 Thanh ghi ñieàu khieån port noái tieáp 38 Caùc cheá ñoä hoaït ñoäng 40 Khôûi ñoäng vaø truy xuaát caùc thanh ghi coång noái tieáp 44 Toác ñoä baud port noái tieáp 47 CHÖÔNG 3: RTX51 TINY 50 Giôùi thieäu chung 50 Giôùi thieäu phaàn meàm KEIl 50 Chöông trình tuaàn hoaøn thôøi gian bieåu cuûa RTX51 51 Caùc yeâu caàu vaø ñònh nghóa 55 Caùc haøm thö vieän cuûa RTX51 56 CHÖÔNG 4: BOARD DEMO-KIT 59 Khoái hieån thò 60 Khoái giao tieáp A/D - D/A 62 Khoái RS-232 68 Khoái output (rôle) 70 Khoái input 71 CHÖÔNG 5: Phaàn 1: TAÄP LEÄNH 72 Giôùi thieäu taäp leänh 72 Noäi dung taäp leänh 73 Phaàn 2: MO TAÛ CHÖÔNG TRÌNH 76 Chöông trình nhaän chuoãi 78 Chöông trình kieåmtra 80 Chöông trình xöû lyù taäp leänh 81 Chöông trình ñoùng goùi döõ lieäu 83 Chöông trình Demo-Kit 85 Phaàn 3: Chöông trình 88 Baùo caùo keát quaû 146 Giôùi thieäu chung : Nhö chuùng ta ñaõ bieát trong ñieàu kieän khoa hoïc kyõ thuaät vaø kinh teá phaùt trieån nhö hieän nay thì qui trình töï ñoäng hoùa trong coâng nghieäp vaø saûn xuaát haàu nhö khoâng theå thieáu ñöôïc . Noù ñoùng moät vai troù heát söùc quan troïng trong vieäc giuùp taêng naêng suaát , taêng ñoä chính xaùc vaø do ñoù taêng hieäu quaû saûn xuaát . Trong ñoù moät vai troø khoâng theå khoâng nhaéc ñeán cuûa qui trình töï ñoäng hoùa laø thu thaäp döõ lieäu vaø ñieàu khieån töø xa . Ñeå kieåm tra tình hình saûn xuaát cuõng nhö traïng thaùi hoaït ñoäng cuûa töøng phaân xöôûng ta khoâng theå cöù cho ngöôøi ñeán taän nôi , kieåm soaùt töøng hoaït ñoäng vaø quay veà baùo caùo neáu coù söï coá xaûy ra maø nhaát thieát phaûi coù moät heä thoáng thu thaäp döõ lieäu töø xa . Khi ñoù, ngöôøi kyõ sö vaän haønh chæ caàn ngoài taïi baøn ñieàu khieån vaø quan saùt nhöõng traïng thaùi ñöôïc caäp nhaät veà lieân tuïc ñeå coù theå xöû lyù kòp thôøi nhöõng tình huoáng xaûy ra thoâng qua quaù trình lieân keát döõ lieäu, maø khoâng phaûi maát thôøi gian ñi ñeán nôi coù xaûy ra söï coá . Khoâng döøng ôû ñoù , vieäc thu thaäp döõ lieäu vaø ñieàu khieån töø xa coøn laø moät nhaân toá quaûn lyù, moät yeáu toá taát yeáu cho söï phaùt trieån cuûa taát caû caùc ngaønh ngheà , caùc lónh vöïc khaùc nhö giao thoâng vaän taûi ( theo doõi caùc traïm giao thoâng ñöôøng boä, haøng haûi , haøng khoâng … ) , ñieän löïc , y teá . . . Bieát ñöôïc yù nghóa vaø taàm quan troïng cuûa noù neân chuùng em quyeát ñònh nghieân cöùu vaø hy voïng coù cô hoäi môû roäng ñeà taøi naøy . Toång quan veà coâng vieäc thöïc hieän nhö sau : Xaây döïng moät taäp leänh trong giao tieáp giöõa Maùy tính vaø micro-controller. Xaây döïng moät giao thöùc truyeàn nhaän thoâng tin (Protocol). Söû duïng taäp leänh theo yeâu caàu mong muoán . Xaây döïng moät chöông trình demo nhö moät öùng duïng cuï theå cuûa ñeà taøi . Chöông 1: GIAO THÖÙC TRUYEÀN THOÂNG GIÔÙI THIEÄU: Sô ñoà caùc lôùp cô baûn xaây döïng cho quaù trình lieân keát döõ lieäu giöõa 2 ñoái töôïng söû duïng: Taäp leänh Frame döõ lieäu RS-232 USER 1 Lôùp vaät lyù Quaûn lyù truyeàn tin Lieân keát döõ lieäu Döõ lieäu USER 2 Lôùp vaät lyù Quaûn lyù truyeàn tin Lieân keát döõ lieäu Döõ lieäu Chöông trình ngöôi söû duïng Chöông trình ngöôøi söû duïng Xöû lyù giao tieáp thieát bò Muïc ñích chính cuûa luaän vaên naøy khoâng nhaèm thöïc hieän moät öùng duïng ñieàu khieån cuï theå maø taïo neân moät öùng duïng môùi trong giao tieáp döõ lieäu giöõa hai ñoái töôïng laø maùy tính vaø khoái vi xöû lyù. Vì theá, chöông trình ngöôøi söû duïng, lieân keát giöõa hai ñoái töôïng söû duïng- user 1vaø user2 ( töùc chöông trình Demo-Kit thöïc hieän trong phaàn cuoái chöông trình ) khoâng phaûi laø troïng taâm maø chæ laø moät öùng duïng cuï theå cuûa ñeà taøi. Vì theá, noù chæ xaây döïng caùc daïng soùng vaøo ra moät caùch ñôn giaûn, mang yù nghóa moâ phoûng cho nhöõng gì thöïc hieän ñöôïc trong vieäc xaây döïng chöông trình. Keát quaû mong muoán cuûa luaän vaên laø xaây döïng ñöôïc moät moâi tröôøng thuaän lôïi cho quaù trình trao ñoåi thoâng tin giöõa hai ñoái töôïng söû duïng. Hay noùi khaùc hôn, ñaây laø moät taàng ñeäm veà ngoân ngöõ giao tieáp, moät quaù trình trung gian giuùp cho vieäc lieân keát döõ lieäu ñöôïc dieãn ra moät caùch troâi chaûy theo mong muoán cuûa ngöôøi söû duïng. Caùc lôùp cô baûn ñöôïc xaây döïng trong heä thoáng naøy laø: lôùp vaät lyù, lôùp lieân keát döõ lieäu (datalink ), lôùp quaûn lyù truyeàn tin vaø sau cuøng laø lôùp döõ lieäu. Lôùp vaät lyù: laø caùc yeáu toá ñaëc tröng bôûi möùc ñieän aùp hay doøng ñieän cho caùc ngoõ vaøo ra. Tieâu bieåu cho lôùp naøy laø caùc phöông tieän nhö thieát bò ñieän (daây daãn, chaân IC…) hay caùc chuaån giao tieáp giuùp cho lôùp lieân keát döõ lieäu ñöôïc thöïc hieän. Moät trong caùc thuû tuïc protocol trong lieân keát döõ lieäu ñôn giaûn nhaát cho lôùp naøy laø söû duïng chuaån giao tieáp RS-232 trong truyeàn thoâng noái tieáp. Lôùp lieân keát döõ lieäu: lôùp naøy quan taâm ñeán caùc daïng truyeàn döõ lieäu (ñoàng boä hay baát ñoàng boä), toác ñoä söû duïng, kieåm tra vaø söûa loãi, cheá ñoä phaùt laïi (echo)… ñaây laø phaàn troïng taâm cuûa moät chöông trình lieân keát döõ lieäu, xaây döïng Protocol cho phaàn naøy laø thieát laäp caùc thuû tuïc lieân keát vaø truy xuaát döõ lieäu. Lôùp quaûn lyù truyeàn tin: lôùp naøy coù nhieäm vuï quaûn lyù döõ lieäu (ghi nhaän vaø truy xuaát döõ lieäu töø caùc vuøng ñòa chæ cuûa caùc tín hieäu vaøo ra theo ñònh nghóa cuûa taäp leänh), phaàn giôùi thieäu taäp leänh ñöôïc thöïc hieän trong chöông 5. Lôùp döõ lieäu: lôùp naøy ñaûm nhaän vai troø ghi nhaän caùc giaù trò döõ lieäu taïi ñaàu moãi user, bao goàm caùc daïng tín hieäu ñieàu khieån nhö daïng xung, daïng möùc vaø tín hieäu daïng A/D. Vaán ñeà caàn quan taâm chính cuûa chuùng ta laø xaây döïng moät chuaån cho taàng lieân keát döõ lieäu (caùc thuû tuïc protocol). PROTOCOL: Khaùi nieäm: Protocol cho taàng lieân keát döõ lieäu laø moät phöông thöùc hay thuû tuïc truyeàn thoâng ñöôïc ñaët ra maø moät qui trình truyeàn nhaän thoâng tin phaûi tuaân theo. Noù bao goàm taäp hôïp ñoàng nhaát caùc qui taéc ñieàu haønh nhaèm ñaûm baûo söï chính xaùc cuûa moät heä thoáng hoaëc maïng trong quaù trình trao ñoåi thoâng tin. Tröôùc khi tìm hieåu veà protocol cuûa taàng lieân keát döõ lieäu moät caùch chi tieát, chuùng ta xem qua moät soá kyõ thuaät söû duïng ñeå thöïc thi hoaëc moâ taû moät protocol. Theo lyù thuyeát, kieåm tra giaù trò cuûa moät quaù trình hoaït ñoäng nhaèm chaéc raèng trong quaù trình hoaït ñoäng cuûa heä thoáng seõ khoâng coù moät ñieàu kieän khoâng mong muoán naøo hoaëc caùc traïng thaùi baát thöôøng xaûy ra khi protocol hoaït ñoäng “break down” (ví duï nhö khi rôi vaøo moät voøng laëp voâ taän hoaëc gaëp phaûi moät tröôøng hôïp maø taát caû caùc hoaït ñoäng ñeàu bò döøng vaø heä thoáng bò khoùa “locks up” ). Vôùi muïc ñích minh hoïa nhöõng kyõ thuaät kieåm tra vaø moâ taû khaùc nhau naøy, chuùng ta xeùt moät taàng lieân keát döõ lieäu ñôn giaûn baùn song coâng: stop–and–wait vaø töï ñoäng laëp laïi yeâu caàu nhö moät ví duï.Veà cô baûn protocol naøy quaûn lyù hoaït ñoäng cuûa hai traïm ( ñöôïc xem laø ñoàng nhaát ) taïi moãi ñaàu cuûa moät lieân keát döõ lieäu .Protocol naøy bao goàm moät traïm ( ñaàu “1” ) gôûi moät frame döõ lieäu mang moät daõy soá ñeán moät traïm khaùc ( ñaàu “2” ). Frame döõ lieäu naøy seõ chöùa theâm vaøo moät goùi thoâng tin khaùc cuûa döõ lieäu thöïc taïi . Keát thuùc vieäc truyeàn coù moät vuøng ñeäm nhaän, nôi maø caùc goùi döõ lieäu naøy ñöôïc chöùa töø computer chuû cuïc boä hoaëc cuoái cuøng laø löu tröõ theo öu tieân trong moät frame döõ lieäu vaø baét ñaàu truyeàn qua datalink .Keå caû sau khi truyeàn döõ lieäu trong vuøng ñeäm vaøo “1” , caùc döõ lieäu gioáng nhau cuõng ñöôïc giöõ trong vuøng ñeäm cho ñeán khi coù thoâng baùo ñaõ nhaän ñöôïc töø moät ñaàu khaùc ( ñaàu “2” ) maø khung döõ lieäu chöùa goùi döõ lieäu naøy ñaõ nhaän ñöôïc thaønh coâng. Ñieàu kieän sau cuøng (nhaän thaønh coâng 1 frame döõ lieäu) ñöôïc cho bieát bôûi ñaàu traïm 2,ñaàu naøy gôûi frame daõy soá cuûa moät frame hôïp leä ñöôïc nhaän sau cuøng trôû veà töø traïm 1 nhö moät phaàn cuûa frame döõ lieäu keá baét ñaàu gôûi töø “2” sang “1” . Ví duï : Neáu ñaàu 1 vöøa gôûi moät frame ñeán ñaàu 2 noù seõ khoâng ñöôïc pheùp gôûi frame keá ( chöùa moät goùi döõ lieäu môùi ) cho ñeán khi noù nhaän ñöôïc moät frame töø ñaàu 2 mang theo thoâng tin traû lôøi ñaõ nhaän toát . Neáu ñaàu 1 khoâng nhaän ñöôïc thoâng baùo naøy trôû veà töø ñaàu 2 trong voøng moät khoaûng thôøi gian nghæ (timeout) ñöôïc ñònh tröôùc , noù seõ truyeàn laïi frame gôûi ñeán ñaàu 2 vaø hy voïng trong thôøi gian naøy noù nhaän ñöôïc thoâng baùo ñaõ nhaän ñuùng töø ñaàu 2 . Vaø neáu khoâng thì sau vaøi laàn laëp laïi (ñöôïc ñònh tröôùc ) maø ñaàu “1” vaãn khoâng nhaän ñöôïc thoâng baùo nhaän ñuùng töø ñaàu “2” noù xem nhö ñöôøng truyeàn bò loãi vaø thoâng baùo ra ngoaøi. Xaây döïng Protocol: Xaây döïng moät protocol cho quaù trình trao ñoåi döõ lieäu trong tröôøng hôïp maïch vi xöû lyù ñoùng vai troø slave vaø maùy tính (PC) ñoùng vai troø master trong quaù trình truyeàn nhaän thoâng tin. Caáu truùc frame döõ lieäu: Trong cheá ñoä hoaït ñoäng naøy khoái vi xöû lyù khoâng coù yeâu caàu gôûi cho PC maø chæ traû lôøi keát quaû theo yeâu caàu nhaän ñöôïc töø PC tuaân theo qui taéc cuûa taäp leänh ñöôïc xaây döïng trong luaän vaên naøy . Moät Protocol ñöôïc ñaët ra cho lieân keát döõ lieäu vôùi moät frame truyeàn ñöôïc chöùa caùc byte qui ñònh nhö sau : Header Maõ ID Control fiel Length Caùc byte DATA Boán byte ñaàu cuûa frame truyeàn ñöôïc goïi chung laø caùc byte control fiels bao goàm : Moät byte ñaàu tieân laø byte header : laø kyù töï qui ñònh nhaèm ñaùnh daáu cho ñaàu moãi frame truyeàn. Moät byte maõ ID laø maõ soá thöù töï cuûa frame truyeàn moãi khi coù moät yeâu caàu môùi cho vi xöû lyù (maõ ID ñöôïc ñaùnh soá lieân tuïc töø 0-99 vaø trôû veà 0). Maõ ID naøy seõ mang moät yù nghóa quan troïng cho vieäc môû roäng ñeà taøi luaän vaên sau naøy (keát noái nhieàu frame truyeàn lieân tieáp). Moät byte control fiel : ñaây laø byte chöùc naêng ñeå kieåm tra thoâng tin cho moãi frame truyeàn . Byte control fiel ñöôïc ñònh nghóa nhö sau : X X X X X b2 b1 b0 + 5bit ñaàu coù giaù trò tuøy ñònh (coù theå ñöôïc söû duïng khi môû roäng ñeà taøi naøy nhaèm duøng vaøo vieäc taêng bieán ñieàu khieån ). + bit b0 : kieåm tra noäi dung frame truyeàn . b0=0 : frame truyeàn coù döõ lieäu keøm theo (soá byte data >0 ) b0=1 : frame truyeàn khoâng coù döõ lieäu. Tröôøng hôïp naøy xaûy rakhi frame ñöôïc gôûi nhaèm muïc ñích nhaéc laïi noäi dung frame gôûi vöøa roài. + bit b1 : kieåm tra laàn gôûi cuûa moät yeâu caàu töø PC b1=0 : frame ñöôïc gôûi laàn ñaàu (gôûi 1 yeâu caàu môùi cho vi xöû lyù) b1=1 : frame gôûi laïi (mang cuøng moät noäi dung vôùi chuoãi DATA tröôùc ñoù). + bit b2 : bit naøy chæ ñöôïc gôûi ñi töø vi xöû lyù ñeå baùo vôùi PC keát quaû cuûa laàn truyeàn vöøa roài b2=0 : döõ lieäu gôûi töø PC ñeán vi xöû lyù nhaän ñuùng b2=1 : döõ lieäu gôûi töø PC ñeán vi xöû lyù bò loãi 1 byte length : chæ soá byte cuûa chuoãi data coäng moät byte “¿” keát thuùc frame truyeàn. Caùc byte data : mang thoâng tin yeâu caàu cuûa master (PC) ñoái vôùi slave (vi xöû lyù) döïa treân qui taéc taäp leänh . Chuoãi data bao goàm : ADDR ADDR . . . ¿ Hai byte ñaàu chöùa ñòa chæ (ñöôïc ñònh nghóa theo taäp leänh) vaø cuoái cuøng phaûi laø kí töï ‘¿’ Xaây döïng protocol: Vôùi frame truyeàn ñöôïc ñònh nghóa nhö treân ta thieát laäp moät protocol cho quaù trình giao tieáp döõ laø: - Khoái PC luoân ñoùng vai troø cuûa moät master, nghóa laø noù coù quyeàn quyeát ñònh cho vieäc trao ñoåi döõ lieäu coù xaûy ra hay khoâng, vaø quyeát ñònh nhöõng yeâu caàu caàn thöïc thi ñoái vôùi khoái vi xöû lyù. Khoái vi xöû lyù luoân ñoùng vai troø cuûa moät slave; trong quaù trình hoaït ñoäng, noù phaûi chôø chæ ñöôïc quyeàn gôûi tín hieäu traû lôøi moãi khi nhaän ñöôïc yeâu caàu töø PC. Do caùc taùc vuï trong chöông trình ñöôïc thöïc hieän song song theo heä thôøi gian thöïc (multitasking), neân ñoâi khi khoái vi xöû lyù coù theå gôûi tín hieäu traû lôøi ngay khi yeâu caàu töø PC gôûi ñeán chöa ñöôïc xöû lyù xong (neáu thôøi gian xöû lyù vöôït quaù khoaûng thôøi gian queùt toái ña qui ñònh cho 1 taùc vuï). Khi ñoù, khoái vi xöû lyù seõ taïo neân moät frame truyeàn traû veà PC, khoâng mang theo noäi dung traû lôøi cho yeâu caàu cuûa PC maø chæ coù caùc byte control fiels vôùi muïc ñích thoâng baùo keát qua vöøa nhaän ñöôïc töø PC laø ñuùng hay sai (nhôø vaøo bit b2 cuûa byte control fiel). - Neáu trong moät khoaûng thôøi ñònh tröôùc maø PC chöa nhaän ñöôïc tín hieäu traû lôøi töø vi xöû lyù, noù seõ gôûi tieáp moät frame khaùc. Frame naøy chæ goàm caùc byte control fiels maø khoâng mang theo yeâu caàu môùi cho vi xöû lyù nhaèm muïc ñích nhaéc laïi frame vöøa truyeàn. Khi nhaän ñöôïc frame naøy, khoái vi xöû lyù kieåm tra quaù trình xöû lyù tröôùc ñoù thöïc hieän xong chöa vaø traû lôøi laïi cho PC. - Neáu sau vaøi laàn gôûi maø PC vaãn khoâng nhaän ñöôïc traû lôøi töø vi xöû lyù thì xem nhö ñöôøng truyeàn bò loãi. Neáu ñöôøng truyeàn bò loãi hoaëc coù thoâng baùo loãi töø vi xöû lyù gôûi veà thì PC seõ gôûi moät frame truyeàn môùi mang ñaày ñuû thoâng tin ban ñaàu. Maõ ID cuûa frame truyeàn ñöôïc ñaët ra nhaèm muïc ñích ñeå môû roäng chöông trình sau naøy. Neáu trong tröôøng hôïp truyeàn nhaän chuoãi döõ lieäu coù ñoä daøi quaù lôùn hoaëc truyeàn nhaän file, ta khoâng theå truyeàn moät laàn treân moät frame maø phaûi caét ra thaønh nhieàu frame truyeàn. Khi ñoù, vieäc ñaùnh maõ ID chính xaùc seõ giuùp cho vieäc keát chuoãi döõ lieäu nhaän veà khoâng bò xaùo troän. Qui taéc ñaùnh maõ ID laø noù chæ ñöôïc taêng daàn sau moãi laàn trao ñoåi döõ lieäu thaønh coâng, töùc PC phaûi nhaän ñöôïc traû lôøi töø vi xöû lyù theo ñuùng yeâu caàu maø noù gôûi ñeán vaø keát thuùc moät chu trình lieân keát döõ lieäu. TRUYEÀN THOÂNG NOÁI TIEÁP: Ta coù theå thöïc hieän truyeàn döõ lieäu giöõa maùy tính vaø vi xöû lyù theo nhieàu chuaån khaùc nhau. Vì trong luaän vaên naøy söû duïng ñeán vieäc thu phaùt döõ lieäu theo kieåu noái tieáp neân caàn phaûi khaùi quaùt vaøi neùt veà caùc chuaån truyeàn thoâng. Truyeàn thoâng noái tieáp laø vieäc thu phaùt döõ lieäu ôû daïng chuoãi caùc xung ñieän – goïi laø caùc bit. Hieäp hoäi ñieän töû coâng nghieäp (EIA) ñöa ra caùc chuaån truyeàn thoâng khaùc nhau nhö : RS 232-C, RS-422, RS-423, RS-485, RS-449,v.v..Kyù hieäu RS laø vieát taét cuûa Recommended Standard, nghóa laø tieâu chuaån khuyeán caùo. Vieäc truyeàn döõ lieäu noái tieáp theo chuaån RS-232 coù öu ñieåm hôn truyeàn song song laø möùc ñieän aùp hoaït ñoäng laø +12V vaø –12V, khoaûng caùch truyeàn xa hôn, ít nhieãu hôn. Vieäc trao ñoåi döõ lieäu dieãn ra treân hai ñöôøng daãn TxD vaø RxD, möùc tín hieäu treân chaân ra RxD tuøy thuoäc vaøo ñöôøng daãn TxD vaø thöôøng naèm trong khoaûng –12V ñeán +12V, caùc bit döõ lieäu ñöôïc ñaûo ngöôïc laïi. Möùc cao naèm giöõa –3V vaø –12V, möùc thaáp naèm giöõa +3V vaø +12V. ÔÛ traïng thaùi tónh, treân ñöôøng daây coù ñieän aùp laø –12V. Moät chuoãi döõ lieäu truyeàn ñi ñöôïc baét ñaàu baèng moät bit khôûi ñaàu, tieáp theo ñoù laø caùc bit döõ lieäu, bit thaáp ñi tröôùc. Soá bit döõ lieäu naèm trong khoaûng 5 ñeán 8 bit, tieáp ñoù laø bit kieåm tra chaún leû vaø cuoái cuøng laø bit keát thuùc (stop bit). Toác ñoä truyeàn ñöôïc thieát laäp baèng tham soá Baudrate, laø soá bit truyeàn ñi trong 1 giaây, thoâng thöôøng laø 300, 600, 1200, 2400, 4800, 9600 vaø 19200. Vieäc thieát laäp caùc thoâng soá truyeàn noái tieáp ñöôïc thöïc hieän baèng caùch thay ñoåi caùc giaù trò trong caùc thanh ghi phuïc vuï truyeàn noái tieáp. Baûn ñoà thanh ghi noäi cuûa boä thu phaùt noái tieáp 8250 (khoâng ñoàng boä). Register name Code COM1 COM2 COM3 COM4 Function Transmitter holding register THR 3F8H 2F8H 3E8H 2E8H OUTPUT Receiver data register RDR 3F8H 2F8H 3E8H 2E8H INPUT Baud rate divisor (LSB) BRDL 3F8H 2F8H 3E8H 2E8H OUTPUT Baud rate divisor (MSB) BRDH 3F9H 2F9H 3E9H 2E9H OUTPUT Interrupt enable register IER 3F9H 2F9H 3E9H 2E9H OUTPUT Interrupt ID register IID 3FAH 2FAH 3EAH 2EAH INPUT Line control register LCR 3FBH 2FBH 3EBH 2EBH OUTPUT Modem control register MDC 3FCH 2FCH 3ECH 2ECH OUTPUT Line status register LST 3FDH 2FDH 3EDH 2EDH INPUT Modem status register MSR 3FEH 2FEH 3EEH 2EEH INPUT 1. Thanh ghi ñieàu khieån ñöôøng truyeàn (Line Control Register): Bit cao cuûa thanh ghi naøy goïi laø bit choát truy xuaát heä soá chia. Neáu bit naøy ñöôïc ñaët leân 1 thì giaù trò ôû thanh ghi cô sôû ñöôïc truy xuaát laøm byte thaáp cuûa thanh ghi heä soá chia choïn toác ñoä truyeàn, vaø giaù trò ôû thanh ghi cô sôû +1 seõ ñöôïc truy xuaát laøm byte cao cuûa thanh ghi heä soá chia choïn toác ñoä truyeàn. Neáu bit naøy ñöôïc xoùa veà 0 thì thanh ghi cô sôû seõ thaønh thanh ghi ñeäm thu phaùt. 7 6 5 4 3 2 1 0 Bit Noäi dung Bit 0 Bit 1 00 : 5 bit data ; 01 : 6 bit data 10 : 7 bit data ; 11 : 8 bit data Bit 2 0 : 1 bit stop 1 : 1,5 hay 2 bit stop Bit 3 0 : khoâng kieåm tra parity 1 : kieåm tra parity Bit 4 1 : kieåm tra parity chaün 0 : kieåm tra parity leû Bit 5 1 : neáu bit 4 = 1; 0 : neáu bit 4 = 0 Bit 6 Cho pheùp caám ñöôøng truyeàn noái tieáp 1 : ngoõ ra bò xoaù traéng ; 0 : caám Bit 7 1 : choïn heä soá chia; 0 : boä ñeäm thu, phaùt 2. Thanh ghi ñieàu khieån MODEM: Thanh ghi ñieàu khieån MODEM duøng ñeå ñaët giao thöùc baét tay khi söï truyeàn thoâng söû duïng MODEM. Bit: 7 6 5 4 3 2 1 0 Bit Noäi dung Bit 0 Data terminal ready 1 : DTR active; 0 : DTR inactive Bit 1 Request to send; 1 : RTS active; 0 : RTS inactive Bit 2 Output 1 (spare signal) 1 : OUT 1 : active; 0 : OUT 1 inactive Bit 3 Output 2 (interrupt enable signal) 1 : Communication interrupt active 0 : Communication interrupt inactive Bit 4 Loopback feature 1 : Transmitter output looped back to receiver register 0 : Normal operation Bit 5,6,7 000 3. Thanh ghi traïng thaùi ñöôøng daây (Line Status Register): Baùo cho maùy tính bieát thoâng tin, traïng thaùi cuûa döõ lieäu truyeàn ñi. Bit: 7 6 5 4 3 2 1 0 Bit Noäi dung Bit 0 1 : Coù döõ lieäu trong boä ñeäm nhaän Bit 1 1 : Overrun error : döõ lieäu bò choàng Bit 2 1 : sai parity Bit 3 1 : Framing error ( bit stop khoâng hôïp leä) Bit 4 1 : Baùo ngaét (ñöôøng truyeàn troáng ) Bit 5 1 : Thanh ghi phaùt troáng Bit 6 1 : Thanh ghi dòch vaø thanh ghi phaùt troáng 0 : Thanh ghi dòch coøn chöùa döõ lieäu Bit 7 0 4. Chuaån RS-232: Chuaån RS-232 laàn ñaàu tieân ñöôïc giôùi thieäu vaøo naêm 1962 do hieäp hoäi kyõ thuaät ñieän töû EIA (Electronics Industries Association) nhö laø chuaån giao tieáp truyeàn thoâng giöõa maùy tính vaø moät thieát bò ngoaïi vi (modem, maùy veõ, mouse, maùy tính khaùc,……). Coång giao 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 coång naøy laø COM 1, coøn COM 2 ñeå töï do cho caùc öùng duïng khaùc. Gioáng nhö coång maùy in, coång noái tieáp RS-232 ñöôïc söû duïng moät caùch raát thuaän tieän cho muïc ñích ño löôøng vaø ñieàu khieån. Vieäc truyeàn döõ lieäu qua RS-232 ñöôïc tieán haønh theo caùch noái tieáp, nghóa laø caùc bit döõ lieäu ñöôïc göûi ñi noái tieáp nhau treân moät ñöôøng truyeàn daãn. Tröôùc heát, loaïi truyeàn naøy coù theå duøng cho nhöõng khoaûng caùch lôùn hôn, bôûi vì caùc khaû naêng gaây nhieãu nhoû ñaùng keå hôn laø duøng coång song song. Vieäc duøng coång song song coù moät nhöôïc ñieåm ñaùng keå laø caùp truyeàn duøng quaù nhieàu sôïi, vaø vì vaäy raát ñaét tieàn. Hôn nöõa tín hieäu naèm trong khoaûng 0 - 5V toû ra khoâng thích öùng vôùi khoaûng caùch lôùn. Coång noái tieáp RS khoâng phaûi laø moät heä thoáng Bus, noù cho pheùp deã daøng taïo ra lieân keát döôùi hình thöùc ñieåm noái ñieåm giöõa hai maùy caàn trao ñoåi thoâng tin vôùi nhau. Moät thaønh phaàn thöù ba khoâng theå tham gia vaøo cuoäc trao ñoåi thoâng tin naøy. 1 2 3 5 4 6 7 8 9 Coång Com 9 chaân Baûng saép xeáp chaân cuûa coång noái tieáp ôû maùy tính: 9 chaân 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 _ Ground (Noái ñaát) 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 ra) Vieäc truyeàn döõ lieäu xaûy ra treân hai ñöôøng daãn. Qua chaân caém ra TxD, maùy tính gôûi döõ lieäu cuûa noù ñeán caùc thieát bò khaùc. Trong khi ñoù döõ lieäu maø maùy tính nhaän ñöôïc, laïi ñöôïc daãn ñeán chaân noái RxD. Caùc tín hieäu khaùc ñoùng vai troø nhö laø tín hieäu hoã trôï khi trao ñoåi thoâng tin vaø vì vaäy khoâng phaûi trong moïi öùng duïng ñeàu duøng ñeán. Caùc bit döõ lieäu ñöôïc gôûi ñi theo kieåu ñaûo ngöôïc, nghóa laø caùc bit coù giaù trò “1” seõ coù möùc ñieän aùp LOW, caùc bit coù giaù trò “0” seõ coù möùc ñieän aùp HIGH. Möùc tín hieäu nhaän vaø truyeàn qua chaân RxD vaø TxD thoâng thöôøng naèm trong khoaûng –12V ñeán +12V. Möùc ñieän aùp ñoái vôùi möùc HIGH naèm giöõa +3V ñeán +12V. ÔÛ traïng thaùi tónh treân ñöôøng daây vaãn coù ñieän aùp –12V. Moät bit khôûi ñoäng (Start bit) seõ môû ñaàu vieäc truyeàn döõ lieäu. Tieáp sau ñoù laø caùc bit rieâng leû ñeán, trong ñoù caùc bit coù giaù trò thaáp ñöôïc göûi tröôùc tieân. Con soá cuûa caùc bit döõ lieäu thay ñoåi giöõa naêm vaø taùm. ÔÛ cuoái doøng döõ lieäu coøn coù moät bit döøng (Stop bit) ñeå ñaët laïi traïng thaùi loái ra (-12V). Toác ñoä Baud coù giaù trò thoâng thöôøng laø : 300; 600; 1200; 4800; 9600; 19200 Baud. Kyù hieäu Baud töông öùng vôùi soá bit truyeàn trong 1 giaây (bit per second _ bps). Chaúng haïn nhö khi toác ñoä Baud baèng 9600 coù nghóa laø coù 9600 bit döõ lieäu ñöôïc truyeàn trong 1 giaây. Vì moãi byte döõ lieäu coù moät bit baét ñaàu vaø moät bit ñöôïc duøng gôûi keøm theo, do ñoù khi truyeàn moät byte döõ lieäu ñaõ coù 10 bit ñöôïc göûi ñi. Vôùi toác ñoä Baud thoâng thöôøng, moãi giaây cho pheùp truyeàn nhieàu nhaát töø 30 ñeán 1920 byte döõ lieäu, vì vaäy nhöôïc ñieåm lôùn nhaát cuûa coång truyeàn noái tieáp laø toác ñoä truyeàn döõ lieäu bò haïn cheá. So saùnh giöõa TTL vaø RS-232, ta thaáy TTL söû duïng möùc logic döông vaø 0,4V choáng nhieãu. Trong khi ñoù RS-232 söû duïng möùc ñieän aùp 612V ñeå ñaûm baûo truyeàn ñöôïc treân ñöôøng daây daøi. Vôùi khoaûng choáng nhieãu 12V cho pheùp tín hieäu ñi qua moâi tröôøng nhieãu maïnh maø ñoái vôùi TTL khoâng theå coù ñöôïc. Moät trong nhöõng yeâu caàu quan troïng cuûa RS-232 laø thôøi gian chuyeån töø moät möùc logic naøy tôùi moät möùc logic khaùc khoâng vöôït quaù 4% thôøi gian moät bit. Vì theá ôû toác ñoä 19200 Baud thôøi gian möùc logic phaûi nhoû hôn 0,04/19200s. Vaán ñeà naøy laøm giôùi haïn chieàu daøi ñöôøng truyeàn. Vôùi toác ñoä truyeàn 19200 Baud, ta coù theå truyeàn xa nhaát laø 50 feet (15,24 m). Moät trong nhöõng vaán ñeà quan troïng caàn chuù yù khi söû duïng RS-232 laø maïch thu phaùt khoâng caân baèng (ñôn cöïc). Ñieàu naøy coù yù nghóa laø tín hieäu vaøo ra ñöôïc so vôùi ñaát. Vì vaäy neáu ñieän theá taïi hai ñieåm ñaát cuûa hai maïch thu phaùt khoâng baèng nhau thi seõ coù doøng ñieän chaïy treân daây noái ñaát. Keát quaû seõ coù aùp rôi treân daây noái ñaát (V=I.R) seõ laøm suy yeáu tín hieäu logic. Neáu truyeàn tín hieäu ñi xa, R seõ taêng daàn ñeán aùp rôi treân ñaát seõ lôùn daàn ñeán luùc tín hieäu logic seõ rôi vaøo vuøng khoâng xaùc ñònh vaø maïch thu seõ khoâng nhaän ñuùng döõ lieäu ñöôïc truyeàn töø maïch phaùt. Chính söï khoâng caân baèng treân maïch thu phaùt laø moät trong nhöõng nguyeân nhaân giôùi haïn ñöôøng truyeàn. Do trong luaän vaên naøy khoâng söû duïng caùc chuaån giao tieáp khaùc ñöôïc giôi thieäu treân neân khoâng giôùi thieäu chi tieát. 5. Giôùi Thieäu IC MAX-232 : Ñaëc ñieåm: - Theo tieâu chuaån EIA (Electronics Industry Association ). - Nguoàn cung caáp 5V. - Duøng theâm 4 tuï ngoaøi 0.1mF. - Toác ñoä truyeàn coù theå leân ñeán 1Mbit treân 1 giaây. - Coù 2 boä ñeäm truyeàn vaø 2 boä ñeäm nhaän Moâ taû Töø hình 2 ta thaáy tín hieäu töø maùy tính truyeàn xuoáng MAX 232 theo chuaån TTL/CMOS , sau khi qua MAX 232 ñöôïc chuyeån thaønh chuaån RS-232. Tín hieäu chuaån naøy ñöôïc ñöa qua MAX 485 ñeå truyeàn treân ñöôøng bus theo daïng vi sai. Tín hieäu nhaän veà cuõng theo daïng vi sai , ñöôïc chuyeån ñoåi sang chuaån RS-232 tröôùc khi ñöôïc ñöa veà chuaån TTL/CMOS ñeå ñöa vaøo maùy tính. Chaân nguoàn caàn moät tuï Bypass ( vaøo khoaûng 0.1mF), coøn 4 tuï coøn laïi ôû caùc chaân C1, C2, V+ vaø V- coù theå söû duïng loaïi phaân cöïc hoaëc khoâng phaân cöïc. Caùc tuï naøy ít nhaát phaûi töø 0.1mF trôû leân ñeå laøm giaûm gôïn soùng ôû caùc ngoõ ra cuûa boä truyeàn vaø laøm giaûm ñaùng keå coâng suaát tieâu thuï cuûa nguoàn. Tuï ôû caùc chaân C2, V1 vaø V2 coù theå thay ñoåi giaù trò nhöng tuï C1 thì khoâng. Chöông 2: SÔ LÖÔÏC AT89C51 GIÔÙI THIEÄU KHAÙI QUAÙT VEÀ HOÏ IC MCS-51™: MCS-51ä laø moät hoï IC vi ñieàu khieån do Intel phaùt trieån vaø saûn xuaát. Moät soá nhaø saûn xuaát ñöôïc pheùp cung caáp caùc IC töông thích vôùi caùc saûn phaåm MCS-51ä cuûa Intel laø Siemens, Advanced Micro Devices, Fujitsu, Philips, Atmel… Caùc IC cuûa hoï MCS-51ä coù caùc ñaëc tröng chung nhö sau: 4 port I/O 8 bit Giao tieáp noái tieáp 64K khoâng gian boä nhôù chöông trình môû roäng 64K 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æ hoùa Boä nhaân/chia 4 ms. Ngoaøi ra, tuøy theo soá hieäu saûn xuaát maø chuùng coù nhöõng khaùc bieät veà boä nhôù vaø boä ñònh thôøi/boä ñeám nhö trong baûng so saùnh döôùi ñaây: Soá hieäu saûn xuaát Boä nhôù chöông trình treân chip Boä nhôù döõ lieäu treân chip Soá boä ñònh thôøi (boä ñeám) 8031 8051 8751 8951 0K 4K ROM 4K EPROM 4K FLASH 128 byte 128 byte 128 byte 128 byte 2 2 2 2 8032 8052 8752 8952 0K 8K ROM 8K EPROM 8K FLASH 256 byte 256 byte 256 byte 256 byte 3 3 3 3 GIÔÙI THIEÄU AT89C52 : AT89C52 laø moät Microcomputer 8 bit, hoï CMOS, coù toác ñoä cao vaø coâng suaát thaáp vôùi boä nhôù Flash coù theå laäp trình ñöôïc. Noù ñöôïc saûn xuaát vôùi coâng ngheä boä nhôù khoâng bay hôi maät ñoä cao cuûa haõng Atmel, vaø töông thích vôùi chuaån coâng nghieäp cuûa 80C51 vaø 80C52 veà chaân ra vaø boä leänh. Vì lyù do ñoù, keå töø ñaây veà sau ta seõ duøng thuaät ngöõ “80C51” (hoaëc "8051") Vôùi söï keát noái linh hoaït 8 bit CPU vôùi flash treân chip, AT89C52 cuûa Atmel laø moät micro-computer tuyeät vôøi vôùi ñoä linh hoaït cao vaø giaûi quyeát hieäu quaû nhieàu chöông trình ñieàu khieån ghi vaøo noù . Sô ñoà khoái cuûa AT89C51 Nhöõng ñaëc tröng cuûa AT89C52. + Töông thích vôùi caùc saûn phaåm MCS-51 + 8KByte boä nhôù Flash coù theå laäp trình laïi vôùi 1000 chu kyø ñoïc/xoaù + Hoaït ñoäng tónh ñaày ñuû: 0Hz ñeán 24MHz + Khoaù boä nhôù chöông trình ba caáp + 256 x 8 bit RAM noäi + 32 ñöôøng xuaát-nhaäp laäp trình ñöôïc (töông öùng 4 port) + Ba timer/counter 16 bit + Moät caáu truùc ngaét 6-vector 2 möùc + Moät port noái tieáp song coâng laäp trình ñöôïc daïng full + Maïch ñoàng hoà vaø boä dao ñoäng treân chip Caáu hình chaân cuûa AT89C52 nhö sau: Nhö vaäy AT89C52 coù taát caû 40 chaân. Moãi chaân coù chöùc naêng nhö caùc ñöôøng I/O (xuaát/nhaäp), trong ñoù 24 chaân coù coâng duïng keùp: moãi ñöôøng coù theå hoaït ñoäng nhö moät ñöôøng I/O hoaëc nhö moät ñöôøng ñieàu khieån hoaëc nhö thaønh phaàn cuûa bus ñòa chæ vaø bus ñöõ lieäu. Moâ taû chaân VCC (chaân 40) Chaân caáp nguoàn. GND (chaân 20) Chaân noái ñaát. Port 0 Port 0 laø moät port xuaát/nhaäp song höôùng cöïc maùng hôû 8 bit. Neáu ñöôïc söû duïng nhö laø moät ngoõ xuaát thì moãi chaân coù theå keùo 8 ngoõ vaøo TTL. Khi möùc 1 ñöôïc vieát vaøo caùc chaân cuûa port 0, caùc chaân naøy coù theå ñöôïc duøng nhö laø caùc ngoõ nhaäp toång trôû cao. Port 0 coù theå ñöôïc ñònh caáu hình ñeå hôïp keânh giöõa bus ñòa chæ vaø bus döõ lieäu (phaàn byte thaáp) khi truy caäp ñeán boä nhôù döõ lieäu vaø boä nhôù chöông trình ngoaøi. ÔÛ cheá ñoä naøy, P0 coù caùc ñieän trôû pullup beân trong. Port 0 cuõng nhaän caùc byte code (byte maõ chöông trình) khi laäp trình Flash, vaø xuaát ra caùc byte code khi kieåm tra chöông trình. Caàn coù caùc ñieän trôû pullup beân ngoaøi khi thöïc hieän vieäc kieåm tra chöông trình. Port 1 Port 1 laø moät port xuaát/nhaäp song höôùng 8 bit coù caùc ñieän trôû pullup beân trong. Caùc boä ñeäm ngoõ ra cuûa port 1 coù theå keùo hoaëc cung caáp 4 ngoõ nhaäp TTL. Khi möùc 1 ñöôïc vieát vaøo caùc chaân cuûa port 1, chuùng ñöôïc keùo leân cao bôûi caùc ñieän trôû pullup noäi vaø coù theå ñöôïc duøng nhö laø caùc ngoõ nhaäp. Neáu ñoùng vai troø laø caùc ngoõ nhaäp, caùc chaân cuûa port 1 (ñöôïc keùo xuoáng thaáp qua caùc ñieän trôû beân ngoaøi) seõ caáp doøng IIL do caùc ñieän trôû pullup beân trong. Port 2 Port 2 laø moät port xuaát/nhaäp song höôùng 8 bit coù caùc ñieän trôû pullup beân trong. Caùc boä ñeäm ngoõ ra cuûa port 2 coù theå keùo hoaëc cung caáp 4 ngoõ vaøo TTL. Khi caùc möùc 1 ñöôïc vieát vaøo caùc chaân cuûa port 2 thì chuùng ñöôïc keùo leân cao bôûi caùc ñieän trôû pullup noäi vaø coù theå ñöôïc duøng nhö caùc ngoõ vaøo. Khi ñöôïc duøng nhö caùc ngoõ vaøo, caùc chaân cuûa port 2 (ñöôïc keùo xuoáng qua caùc ñieän trôû beân ngoaøi) seõ caáp doøng IIL do coù caùc ñieän trôû keùo leân beân trong. Port 2 phaùt ra byte cao cuûa ñòa chæ khi ñoïc töø boä nhôù chöông trình ngoaøi vaø khi truy caäp boä nhôù döõ lieäu ngoaøi duøng caùc ñòa chæ 16 bit (MOVX @DPTR). Trong öùng duïng naøy, noù duøng caùc ñieän trôû pullup noäi "maïnh" khi phaùt ra caùc möùc 1. Khi truy caäp boä nhôù döõ lieäu ngoaøi duøng caùc ñòa chæ 8 bit (MOVX @RI), port 2 phaùt ra caùc noäi dung cuûa thanh ghi chöùc naêng ñaëc bieät P2. Port 2 cuõng nhaän caùc bit cao cuûa ñòa chæ vaø moät vaøi tín hieäu ñieàu khieån khi laäp trình vaø kieåm tra Flash. Port 3 Port 3 laø moät port xuaát-nhaäp song höôùng 8 bit coù ñieän trôû pullup noäi beân trong. Caùc boä ñeäm ngoõ ra cuûa port 3 coù theå keùo hoaëc cung caáp 4 ngoõ vaøo TTL. Khi caùc möùc 1 ñöôïc vieát vaøo caùc chaân cuûa port 3 thì chuùng ñöôïc keùo leân cao bôûi caùc ñieän trôû pullup noäi vaø coù theå ñöôïc duøng nhö caùc ngoõ vaøo. Khi ñöôïc duøng nhö caùc ngoõ vaøo, caùc chaân cuûa port 3 (ñöôïc keùo xuoáng qua caùc ñieän trôû beân ngoaøi) seõ caáp doøng IIL do coù caùc ñieän trôû pullup beân trong. Port 3 cuõng cung caáp caùc chöùc naêng cuûa caùc ñaëc tröng ñaëc bieät nhö ñöôïc lieät keâ döôùi ñaây: Chaân Teân Caùc chöùc naêng chuyeån ñoåi P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD TXD T0 T1 Port nhaäp noái tieáp Port xuaát noái tieáp Ngaét 0 beân ngoaøi Ngaét 1 beân ngoaøi Ngoõ vaøo Timer/Counter 0 Ngoõ vaøo Timer/Counter 1 Xung ghi boä nhôù döõ lieäu ngoaøi Xung ñoïc boä nhôù döõ lieäu ngoaøi Caùc chöùc naêng chuyeån ñoåi treân Port 3 RST (chaân 9) Ngoõ vaøo reset. Moät möùc cao treân chaân naøy khoaûng hai chu kyø maùy trong khi boä dao ñoäng ñang chaïy seõ reset thieát bò. ALE/ ALE laø moät xung ngoõ ra ñeå choát byte thaáp cuûa ñòa chæ trong khi truy caäp boä nhôù ngoaøi. Chaân naøy cuõng laø ngoõ nhaäp xung laäp trình () khi laäp trình Flash. Khi hoaït ñoäng bình thöôøng, ALE ñöôïc phaùt vôùi moät tyû leä khoâng ñoåi laø 1/6 taàn soá boä dao ñoäng vaø coù theå ñöôïc duøng cho caùc muïc ñích timing vaø clocking beân ngoaøi. Tuy nhieân, löu yù raèng moät xung ALE seõ bò boû qua moãi khi truy caäp boä nhôù döõ lieäu ngoaøi. Neáu muoán, hoaït ñoäng ALE coù theå caám ñöôïc baèng caùch set bit 0 cuûa SFR taïi ñòa chæ 8Eh. Neáu bit naøy ñöôïc set, ALE chæ döôïc hoaït ñoäng khi coù moät leänh MOVX hoaëc MOVC. Ngöôïc laïi, chaân naøy ñöôïc keùo leân cao bôûi caùc ñieän trôû pullup "nheï". Vieäc set bit caám-ALE khoâng coù taùc duïng khi boä vi ñieàu khieån ñang ôû cheá ñoä thi haønh ngoaøi. PSEN (Program Store Enable) laø xung ñoïc boä nhôù chöông trình ngoaøi. Khi AT89C52 ñang thi haønh maõ (code) töø boä nhôù chöông trình ngoaøi, ñöôïc kích hoaït hai laàn moãi chu kyø maùy, nhöng hai hoaït ñoäng seõ bò boû qua moãi khi truy caäp boä nhôù döõ lieäu ngoaøi. /Vpp (External Access Enable) phaûi ñöôïc noái vôùi GND ñeå cho pheùp thieát bò ñoïc code töø boä nhôù chöông trình ngoaøi coù ñòa chæ töø 0000H ñeán FFFFH. Tuy nhieân, löu yù raèng neáu bit khoaù 1 (lock-bit 1) ñöôïc laäp trình, seõ ñöôïc choát beân trong khi reset. phaûi ñöôïc noái vôùi Vcc khi thi haønh chöông trình beân trong. Chaân naøy cuõng nhaän ñieän aùp cho pheùp laäp trình Vpp=12V khi laäp trình Flash (khi ñoù aùp laäp trình 12V ñöôïc choïn). XTAL1 vaø XTAL2 XTAL1 vaø XTAL2 laø hai ngoõ vaøo vaø ra cuûa moät boä khueách ñaïi dao ñoäng nghòch ñöôïc caáu hình ñeå duøng nhö moät boä dao ñoäng treân chip. Hình. Caùc keát noái cuûa boä dao ñoäng Khoâng coù yeâu caàu naøo veà duty cycle cuûa tín hieäu xung ngoaøi,vì ngoõ nhaäp noái vôùi maïch taïo xung noäi laø moät flip-flop chia ñoâi, nhöng caùc chæ ñònh veà thôøi gian high vaø low, caùc möùc aùp toái ña vaø toái thieåu phaûi ñöôïc tuaân theo. Caùc ñaëc tröng khaùc seõ ñöôïc trình baøy moät caùch chi tieát hôn ôû nhöõng phaàn tieáp theo sau ñaây. TOÅ CHÖÙC BOÄ NHÔÙ: 8051/8031 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; 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 Kbytes boä nhôù chöông trình vaø 64 Kbytes 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 phaàn : phaàn löu tröõ ña duïng, phaàn löu tröõ ñòa chæ hoùa töøng bit, caùc bank thanh ghi vaø caùc thanh ghi chöùc naêng ñaëc bieät. 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: Theo hình veõ sau, RAM beân trong 8051/8031 ñöôïc phaân chia giöõa caùc bank thanh ghi (00H–1FH), RAM ñòa chæ hoùa 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). Moïi ñòa chæ trong vuøng RAM ña duïng ñeà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 ghi tích luõy, leänh sau seõ ñöôïc duøng : MOV A, 5FH Leänh naøy di chuyeån 1 byte döõ lieäu duøng caùch ñaùnh ñòa chæ tröïc tieáp ñeå xaùc ñònh “ñòa chæ nguoàn” (5FH). Ñích nhaän döõ lieäu ñöôïc ngaàm xaùc ñònh trong maõ leänh laø thanh ghi tích luõy A. 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 : Boä nhôù chöông trình ñöôïc choïn qua PSEN FFFF 0000 Boä nhôù döõ lieäu ñöôïc choïn qua WR vaø RD FFFF 0000 FF 00 Boä nhôù treân chip Boä nhôù môû roäng Toùm taét caùc vuøng boä nhôù cuûa 8031/8051 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 luõy. 7F 7E 7D 7C 7B 7A 79 78 2F 77 76 75 74 73 72 71 70 2E 6F 6E 6D 6C 6B 6A 69 68 2D 67 66 65 64 63 62 61 60 2C 5F 5E 5D 5C 5B 5A 59 58 2B 57 56 55 54 53 52 51 50 2A 4F 4E 4D 4C 4B 4A 49 48 29 47 46 45 44 43 42 41 40 28 3F 3E 3D 3C 3B 3A 39 38 27 37 36 35 34 33 32 31 30 26 2F 2E 2D 2C 2B 2A 29 28 25 27 26 25 24 23 22 21 20 24 1F 1E 1D 1C 1B 1A 19 18 23 17 16 15 14 13 12 11 10 22 0F 0E 0D 0C 0B 0A 09 08 21 07 06 05 04 03 02 071 00 20 Bank 3 1F 18 Bank 2 17 10 Bank 1 0F 08 Bank thanh ghi 0 (maëc ñònh cho R0-R7) 07 00 RAM ña duïng 7F 30 RAM Ñòa chæ bit Ñòa chæ byte 87 86 85 84 83 82 81 80 80 P0 khoâng ñöôïc ñòa chæ hoùa bit 81 SP khoâng ñöôïc ñòa chæ hoùa bit 82 DPL khoâng ñöôïc ñòa chæ hoùa bit 83 DPH khoâng ñöôïc ñòa chæ hoùa bit 87 PCON 8F 8E 8D 8C 8B 8A 89 88 88 TCON khoâng ñöôïc ñòa chæ hoùa bit 89 TMOD khoâng ñöôïc ñòa chæ hoùa bit 8A TL0 khoâng ñöôïc ñòa chæ hoùa bit 8B TL1 khoâng ñöôïc ñòa chæ hoùa bit 8C TH0 97 96 95 94 93 92 91 90 90 P1 9F 9E 9D 9C 9B 9A 99 98 98 SCON khoâng ñöôïc ñòa chæ hoùa bit 99 SBUF A7 A6 A5 A4 A3 A2 A1 A0 A0 P2 AF – – AC AB AA A9 A8 A8 IE – – – BC BB BA B9 B8 B8 IP E7 E6 E5 E4 E3 E2 E1 E0 E0 ACC D7 D6 D5 D4 D3 D2 – D0 D0 PSW B7 B6 B5 B4 B3 B2 B1 B0 B0 P3 F7 F6 F5 F4 F3 F2 F1 F0 F0 B CAÙC THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT Ñòa chæ byte Ñòa chæ bit khoâng ñöôïc ñòa chæ hoùa bit 8D TH1 FF Toùm taét boä nhôù döõ lieäu treân chip RAM ñòa chæ hoùa töøng bit : 8051/8031 chöùa 210 bit ñöôïc ñòa chæ hoùa, 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 ñaëc bieät. YÙ töôûng truy xuaát töøng bit rieâng reõ baèng 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, xoùa, 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æ hoùa töøng bit laøm ñôn giaûn phaàn meàm xuaát nhaäp töøng bit. Coù 128 bit ñöôïc ñòa chæ hoùa ñ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, #10000000B ; 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 8051/8031 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 ôû ñòa chæ 05H vaøo thanh ghi tích luõy : 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. Caùc giaù trò döõ lieäu ñöôïc duøng thöôøng xuyeân neân duøng moät trong caùc thanh ghi naøy. 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 luõy 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: Moät baûn ñoà vuøng boä nhôù treân chip ñöôïc goïi laø khoâng gian thanh ghi chöùc naêng ñaëc bieät (SFR) nhö ñöôïc trình baøy trong baûng. Löu yù raèng khoâng phaûi taát caû caùc ñòa chæ ñeàu ñöôïc söû duïng, vaø caùc ñòa chæ khoâng ñöôïc söû duïng coù theå khoâng ñöôïc cung caáp treân con chip. Caùc haønh ñoäng ñoïc ñeán caùc ñòa chæ naøy noùi chung seõ traû veà caùc döõ lieäu ngaãu nhieân, vaø caùc haønh ñoäng vieát seõ coù moät hieäu öùng khoâng xaùc ñònh. Caùc phaàn meàm ngöôøi duøng khoâng neân vieát caùc möùc 1 ñeán nhöõng vò trí khoâng ñöôïc lieät keâ naøy, vì chuùng coù theå ñöôïc duøng trong caùc saûn phaåm töông lai khi theâm vaøo caùc ñaëc tröng môùi. Trong tröôøng hôïp naøy, caùc giaù trò reset hoaëc khoâng tích cöïc cuûa caùc bit môùi seõ luoân laø 0. Caùc thanh ghi noäi cuûa 8051/8031 ñöôïc truy xuaát ngaàm ñònh bôûi boä leänh. Ví duï leänh “INC A” seõ taêng noäi dung cuûa thanh ghi tích luõy A leân 1. Taùc ñoäng naøy ñöôïc ngaàm ñònh trong maõ leänh. Caùc thanh ghi trong 8051/8031 ñöôï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 ñeá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 lôïi loäc gì khi ñaët chuùng vaøo trong RAM treân chip). Ñoù laø lyù do ñeå 8051/8031 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. Chuù yù raèng 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 luõy (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æ hoùa 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 luõy, caùc bit khaùc khoâng ñoåi. Ta thaáy raèng E0H ñoàng thôøi laø ñòa chæ byte cuûa caû thanh ghi tích luõy vaø laø ñòa chæ bit cuûa bit coù troïng soá nhoû nhaát trong thanh ghi tích luõy. Vì leänh SETB chæ taùc ñoäng treân bit, neân chæ coù ñòa chæ bit laø coù hieäu quaû. 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 luõy chöùa FFH, thì leänh ADD A, #1 seõ traû veà thanh ghi tích luõy 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 luõy) ñeå mang keát quaû lôùn hôn 9 vaøo nibble cao. * Côø 0 Côø 0 (F0) laø 1 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 xoùa 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 luõy : SETB RS1 SETB RS0 MOV A, R7 Khi chöông trình ñöôïc hôïp dòch, caùc ñaïi 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 nhoû hôn -128 seõ set bit OV. Keát quaû laø moät soá coù daáu 8EH ñöôïc xem nhö -116, khoâng phaûi laø keát quaû ñuùng (142), vì vaäy, bit OV ñöôïc set. Thanh ghi B. Thanh ghi B ôû ñòa chæ F0H ñöôïc duøng cuøng vôùi thanh ghi tích luõy 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æ hoùa töøng bit baèng caùc ñòa chi bit F0H ñeán F7H. Con troû ngaên xeáp . Con troû ngaên xeáp (SP) laø moät thanh ghi 8 bit ôû ñòa chæ 81H. 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 8051/8031 ñöôï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 8051/8031. Ñ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 8051/8031 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, 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 luõy. 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 1000H vaøo con troû döõ 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 8051/8031 bao 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 ñeàu ñöôïc ñòa chæ hoùa töøng bit. Ñieàu ñoù cung caáp moät khaû naêng giao tieáp thuaän lôïi. Ví duï, neáu moät motor ñöôïc noái qua moät cuoän daây coù transistor laùi ñeán bit 7 cuûa Port 1, noù coù theå ñöôïc baät vaø taét baèng moät leänh ñôn : SETB P1.7 ; baät motor CLR P1.7 ; taét motor Caùc leänh treân duøng daáu chaám ñeå xaùc ñònh moät bit trong moät byte. Trình hôïp dòch seõ thi haønh söï chuyeån ñoåi caàn thieát, vì vaäy hai leänh sau ñaây laø nhö nhau : CLR P1.7 CLR 97H Trong moät ví duï khaùc, xem xeùt giao tieáp ñeán moät thieát bò vôùi moät bit traïng thaùi goïi laø BUSY, ñöôïc set khi thieát bò ñang baän vaø ñöôïc xoùa khi thieát bò ñaõ saün saøng. Neáu BUSY ñöôïc noái tôùi P1.5, voøng laëp sau seõ ñöôïc duøng ñeå chôø thieát bò trôû laïi traïng thaùi saün saøng : WAIT : JB P1.5, WAIT Leänh naøy coù nghóa laø “neáu bit P1.5 ñöôïc set thì nhaûy tôùi nhaõn WAIT”. Noùi caùch khaùc “nhaûy trôû laïi vaø kieåm tra laàn nöõa”. Caùc thanh ghi timer: 8051/8031 chöùa ba 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 (TL0 : byte thaáp) vaø 8CH (TH0 : byte cao). Timer 1 ôû ñòa chæ 8BH (TL1 : byte thaáp) vaø 8DH (TH1 : byte cao). Timer 2 (TL2: byte thaáp vaø TH2: byte cao). Vieäc vaän haønh timer0 vaø timer1 ñöôïc set bôûi thanh ghi Timer Mode (TMOD) ôû ñòa chæ 89H vaø thanh ghi ñieàu khieån timer (TCON) ôû ñòa chæ 88H. Vieäc vaän haønh timer2 ñöôïc set bôûi thanh ghi Timer2 Mode ( T2MOD) ôû ñòa chæ 0C9H vaø thanh ghi ñieàu khieån (T2CON) ôû ñòa chæ 0C8H. Chæ coù TCON vaø T2CON ñöôïc ñòa chæ hoùa töøng bit. Ñöôïc cho ôû baûng sau: Thanh ghi TMOD (Timer Mode): duøng ñeå xaùc laäp cheá ñoä hoaït ñoäng cho boä timer. Gate C/ M1 M0 Gate C/ M1 M0 4 bit cao xaùc laäp Timer 1 4 bit thaáp xaùc laäp Timer 0 - M1,M0 : xaùc laäp Mode M1 M0 Mode 0 0 0 0 1 1 1 0 2 1 1 3 C/ = : boä timer nhaän xung clock töø dao ñoäng noäi. C/ = : boä timer nhaän xung clock töø beân ngoaøi ( töø ngoõ T0 hay T1) - Gate : ñieàu khieån môû roäng. Gate = 0 : boä Timer hoaït ñoäng bình thöôøng Gate = 1 : boä timer chæ hoaït ñoäng khi ngoõ INTx =0 Thanh ghi TCON ( Timer control) TF1 TR1 TF0 TR0 IE1 IT2 IE0 IT0 (4 bit thaáp khoâng duøng cho Timer) Thanh ghi T2CON : TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ CP/ 7 6 5 4 3 2 1 0 Xaùc laäp MODE timer2: RCLK + TCLK CP/ TR2 MODE 0 0 1 16-Bit Auto-Reload 0 1 1 16-Bit Capture 1 X 1 Baud Rate Generator X X 0 (Off) TFx : ( Timer flag) : côø traøn timer x : khi boä ñeám bò traøn thì TFx =1 ( sau khi traøn phaûi xoùa veà 0) Caùc thanh ghi port noái tieáp: 8051/8031 chöùa moät port noái tieáp treân chip daønh 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 cho vieäc giao tieáp vôùi caùc IC khaùc coù giao tieáp noái tieáp (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 truyeàn vaø nhaän. Khi truyeàn döõ lieäu thì ghi leân SBUF, khi nhaän döõ lieäu thì ñoïc SBUF. 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. Caùc thanh ghi ngaét: 8051/8031 coù caáu truùc 5 nguoàn ngaét, 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 ghi thanh ghi cho pheùp ngaét (IE) ôû ñòa chæ A8H. Caû hai thanh ghi ñöôïc ñòa chæ hoùa töøng bit. Thanh ghi ñieàu khieån coâng suaát. Thanh ghi ñieàu khieån coâng suaát (PCON) ôû ñòa chæ 87H chöùa nhieàu bit ñieàu khieån. Chuùng ñöôïc toùm taét trong baûng sau : 4 – Khoâng ñònh nghóa. 3 GF1 Bit côø ña duïng 1. 2 GF0 Bit côø ña duïng 0. 1 PD Giaûm coâng suaát, ñöôïc set ñeå kích hoaït mode giaûm coâng suaát, chæ thoaùt khi reset 0 IDL Mode chôø, set ñeå kích hoaït mode chôø, chæ thoaùt khi coù ngaét hoaëc reset heä thoáng. Bit Kyù hieäu YÙ nghóa 7 SMOD 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. 6 – Khoâng ñònh nghóa. 5 – Khoâng ñònh nghóa. BAÛO VEÄ BOÄ NHÔÙ : Caùc bit khoaù boä nhôù chöông trình. Vi ñieàu khieån AT89C52 coù 3 bit khoaù coù theå boû khoâng laäp trình (U) hoaëc ñöôïc laäp trình (P) ñeå nhaän caùc ñaëc tröng theâm vaøo ñöôïc lieät keâ trong baûng döôùi ñaây (vôùi LB1, LB2, LB3 laø caùc bit khoùa töông öùng). Cheá ñoä LB1 LB2 LB3 Kieåu baûo veä 1 U U U Khoâng khoaù chöông trình 2 P U U Caùc leänh MOVC ñöôïc thi haønh töø boä nhôù chöông trình ngoaøi bò caám khi laáy caùc byte maõ töø boä nhôù noäi, /EA ñöôïc laáy maãu vaø ñöôïc choát laïi khi reset vaø hôn nöõa, vieäc laäp trình boä nhôù Flash laø bò caám. 3 P P U Nhö cheá ñoä 2 nhöng vieäc kieåm tra cuõng bò caám 4 P P P Nhö cheá ñoä 3 nhöng vieäc thi haønh ngoaøi cuõng bò caám. Khi bit khoaù 1 ñöôïc laäp trình, möùc logic taïi chaân ñöôïc laáy maãu vaø choát laïi khi reset. Neáu thieát bò ñöôïc baät nguoàn maø khoâng coù reset, vieäc choát seõ ñöôïc khôûi taïo vôùi moät giaù trò ngaãu nhieân cho ñeán khi ñöôïc reset. Giaù trò ñöôïc choát cuûa phaûi baèng vôùi möùc logic hieän taïi ôû chaân ñoù ñeå cho thieát bò laøm vieäc moät caùch chính xaùc. HOAÏT ÑOÄNG CUÛA PORT NOÁI TIEÁP: Giôùi thieäu: 8051/8031 coù moät port noái tieáp trong chip 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 hai 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 (full duplex : thu vaø phaùt ñoàng thôøi), vaø ñeäm luùc thu (receiver buffering) cho pheùp moät kyù töï seõ ñöôïc thu vaø ñöôïc giöõ trong khi kyù töï thöù hai ñöôïc nhaän. Neáu CPU ñoïc kyù töï thöù nhaát tröôùc khi kyù töï thöù hai ñöôïc thu ñöôïc thu ñaày ñuû thì döõ lieäu seõ khoâng bò maát. Hai thanh ghi chöùc naêng ñaëc bieät cho pheùp phaàn meàm truy xuaát ñ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ø hai boä ñeäm. Vieát vaøo SBUF ñeå naïp döõ lieäu seõ ñöôïc phaùt, vaø ñoïc SBUF ñeå truy xuaát döõ lieäu thu ñöôïc. Ñaây laø hai thanh ghi rieâng bieät : thanh ghi chæ ghi ñeå phaùt vaø thanh ghi chæ ñoïc ñeå thu. CLK SBUF Q (chæ ghi) TXD (P3.1) Thanh ghi dòch D CLK Xung nhòp toác ñoä baud (phaùt) Xung nhòp toác ñoä baud (thu) RXD (P3.0) SBUF (chæ ñoïc) Bus noäi 8051/8031 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, vaø caùc bit traïng thaùi baùo keát thuùc vieä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 ngaét. Taàn soá laøm vieäc cuûa port noái tieáp, coøn goïi laø toác ñoä baud coù theå coá ñònh (laáy töø boä dao ñoäng treân chip). Neáu söû duïng toác ñoä baud thay ñoåi, Timer 1 seõ 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. Sau ñaây laø caùc baûng toùm taét thanh ghi SCON vaø caùc cheá ñoä cuûa port noái tieáp : Bit Kyù hieäu Ñòa chæ Moâ taû SCON.7 SM0 9FH Bit 0 cuûa cheá ñoä port noái tieáp. SCON.6 SM1 9EH Bit 1 cuûa cheá ñoä port noái tieáp. SCON.5 SM2 9DH 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. SCON.4 REN 9CH Cho pheùp boä thu phaûi ñöôïc ñaët leân 1 ñeå thu (nhaän) caùc kyù töï. SCON.3 TB8 9BH Bit 8 phaùt, bit thöù 9 ñöôïc phaùt trong caùc cheá ñoä 2 vaø 3; ñöôïc ñaët vaø xoùa baèng phaàn meàm. SCON.2 RB8 9AH Bit 8 thu, bit thöù 9 thu ñöôïc. SCON.1 TI 99H Côø ngaét phaùt. Ñaët leân 1 khi keát thuùc phaùt kyù töï; ñöôïc xoùa baèng phaàn meàm. SCON.0 RI 98H Côø ngaét thu. Ñaët leân 1 khi keát thuùc thu kyù töï; ñöôïc xoùa baèng phaàn meàm. Toùm taét thanh ghi cheá ñoä port noái tieáp SCON. 0 0 0 Thanh ghi dòch Coá ñònh (FOSC /12). 0 1 1 UART 8 bit Thay ñoåi (ñaët baèng timer). 1 0 2 UART 9 bit Coá ñònh (FOSC chia cho 12 hoaëc 64). 1 1 3 UART 9 bit Thay ñoåi (ñaët baèng timer). SM0 SM1 Cheá ñoä Moâ taû Toác ñoä baud Caùc cheá ñoä port noái tieáp. Tröôùc khi söû duïng port noái tieáp, phaûi khôûi ñoäng SCON cho ñuùng cheá ñoä. Ví duï, leänh MOV SCON, #01010010B khôûi ñoäng port noái tieáp cho cheá ñoä 1 (SM0/SM1 = 0/1), cho pheùp boä thu (REN = 1) vaø ñaët côø ngaét phaùt (T1 = 1) ñeå chæ boä phaùt saün saøng hoaït ñoäng. Caùc cheá ñoä hoaït ñoäng: Port noái tieáp coù 4 cheá ñoä hoat ñoäng, coù theå choïn ñöôïc baèng caùch vieát caùc soá 1 hay 0 vaøo caùc bit SM0 vaø SM1 trong SCON. Coù ba cheá ñoä cho pheùp truyeàn thoâng baát ñoàng boä, vôùi moãi kyù töï ñöôïc thu (nhaän) hoaëc phaùt ñeàu ñöôïc ñoùng khung baèng moät bit start vaø 1 bit stop. ÔÛ cheá ñoä thöù tö, port noái tieáp hoaït ñoäng nhö moät thanh ghi dòch ñôn giaûn. Thanh ghi dòch 8 bit (cheá ñoä 0): Cheá ñoä 0 ñöôïc choïn baèng caùch ghi caùc bit 0 vaøo SM1 vaø SM0 cuûa SCON, ñöa port noái tieáp vaøo cheá ñoä thanh ghi dòch 8 bit. Döõ lieäu noái tieáp vaøo vaø ra qua RXD vaø TXD xuaát xung nhòp dòch. 8 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. Vieäc phaùt ñi ñöôïc khôûi ñoäng baèng baát cöù leänh naøo ghi döõ lieäu vaøo SBUF. Döõ lieäu ñöôïc dòch ra ngoaøi treân ñöôøng RXD (P3.0) vôùi caùc xung nhòp ñöôïc göûi ra ñöôøng TXD (P3.1). Moãi bit phaùt ñi hôïp leä (treân RXD) trong moät chu kyø maùy. Trong moãi chu kyø maùy, tín hieäu xung nhaäp xuoáng thaáp ôû S3P1 vaø trôû veà möùc cao ôû S6P1. S1 P1 P2 S2 P1 P2 S3 P1 P2 S4 P1 P2 S5 P1 P2 S6 P1 P2 Moät chu kyø maùy OSC ALE Bit döõ lieäu hôïp leä Döõ lieäu xuaát Clock dòch Clock dòch (TXD) D0 D1 D2 D3 D4 D5 D6 D7 Döõ lieäu xuaát ALE Phoùng to Giaûn ñoà thôøi gian port noái tieáp phaùt ôû cheá ñoä 0. Vieäc thu ñöôïc khôûi ñoäng khi bit cho pheùp boä thu (REN) laø 1 vaø bit ngaét thu (RI) laø 0. Qui taéc toång quaùt laø ñaët REN khi baét ñaàu chöông trình ñeå khôûi ñoäng port noái tieáp, roài xoùa RI ñeå baét ñaàu hoaït ñoäng nhaäp döõ lieäu. Khi RI bò xoùa, caùc xung nhòp ñöôïc ñöa ra ñöôøng TXD, baét ñaàu chu kyø maùy keá tieáp, 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. Clock dòch (TXD) ALE Moät chu kyø maùy D0 D0 D0 D0 D0 D0 D0 D0 Döõ lieäu nhaäp (RXD) Giaûn ñoà thôøi gian port noái tieáp thu ôû cheá ñoä 0. 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/8031. 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/8031 ñeå cung caáp theâm 8 ñöôøng ra. Coù theå noái xaâu chuoãi theâm caùc thanh ghi dòch ñeå môû roäng theâm. Clock Thanh ghi Döõ lieäu dòch TXD (P3.1) RXD (P3.0) 8051 Theâm 8 ngoõ ra Cheá ñoä thanh ghi dòch cuûa port noái tieáp. 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 8051/8031 laøm vieäc nhö moät UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc. Moät UART (Universal Asynchronous Receiver/Transmitter : Boä thu/phaùt baát ñoàng boä vaïn naêng) laø moät duïng cuï thu vaø phaùt döõ lieäu noái tieáp vôùi moãi kyù töï döõ lieäu ñi tröôùc laø bit start ôû möùc thaáp vaø theo sau laø bit stop ôû möùc cao. Ñoâi khi xen theâm bit kieåm tra chaün leû giöõa bit döõ lieäu cuoái cuøng vaø bit stop. Hoaït ñoäng chuû yeáu cuûa UART 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 sang 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. Nhöõng bit ñoù laø : 1 bit start (luoân luoân laø 0), 8 bit döõ lieäu (LSB ñaàu tieân) vaø 1 bit stop (luoân luoân laø 1) . Vôùi hoaït ñoäng thu, bit stop ñöôïc ñöa vaøo RB8 trong SCON. Trong 8051/8031 cheá doä baud ñöôïc ñaët baèng toác ñoä baùo traøn cuûa Timer 1. Taïo xung nhòp vaø ñoàng boä hoùa caùc thanh ghi dòch cuûa 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 boä ñeám naøy ñöôïc choïn qua phaàn meàm Xung nhòp toác ñoä baud Thanh ghi dòch port noái tieáp ¸ 16 16 ´ toác ñoä baud Taïo xung nhòp port noái tieáp. Truyeàn döõ lieäu (phaùt) ñöôïc khôûi ñoäng baèng caùch ghi vaøo SBUF, nhöng vaãn chöa thaät söï baét ñaàu chaïy cho ñeán khi söï thay theá keá tieáp cuûa boä ñeám chia cho 16 cung caáp toác ñoä baud coång noái tieáp. Döõ lieäu ñöôïc dòch ra ngoaøi treân ñöôøng TXD baét ñaàu baèng bit start, theo sau laø 8 bit döõ lieäu vaø sau cuøng laø bit stop. Ñoä roäng (theo thôøi gian cuûa moãi bit) laø nghòch ñaûo cuûa toác ñoä baud ñöôïc laäp trình trong timer. Côø ngaét phaùt (TI) ñöôïc ñaët leân 1 khi xuaát hieän bit stop treân TXD. bit start bit stop D0 D1 D2 D3 D4 D5 D6 D7 TXD 1 toác ñoä baud TI (SCON.1) Ngaét phaùt (chuaån bò cho döõ lieäu) Ñaët côø TI port noái tieáp. Vieäc thu döõ lieäu ñöôïc khôûi ñoäng baèng moät chuyeån traïng thaùi töø 1 xuoáng 0 treân RXD. Boä ñeám 16 töùc thôøi ñöôïc xoùa ñeå ñoàng boä soá ñeám vôùi luoàng bit ñeán. Luoàng bit ñeán ñöôïc laáy maãu giöõa 16 laàn ñeám. Boä thu seõ phaùt hieän ñöôïc bit start sai baèng caùch yeâu caàu traïng thaùi 0 ôû (bit start) ôû laàn ñeám thöù 8 sau khi coù chuyeån traïng thaùi töø 1 xuoáng 0 ñaàu tieân. Neáu ñieàu naøy khoâng xaûy ra, ngöôøi ta giaû söû laø boä thu ñöôïc kích bôûi nhieãu chöù khoâng phaûi do moät kyù töï hôïp leä. Boä thu ñöôïc reset vaø quay veà traïng thaùi nghæ (idle), tìm kieám (ñôïi) chuyeån traïng thaùi töø 1 xuoáng 0 keá. Giaû söû ñaõ phaùt hieän ñöôïc bit start hôïp leä, thì tieáp tuïc thu kyù töï. Bit start ñöôïc boû qua vaø 8 bit döõ lieäu ñöôïc ñöa vaøo thanh ghi dòch coång noái tieáp theo xung nhòp. Khi ñaõ coù ñöôïc taát caû 8 bit, ñieàu sau ñaây xaûy ra : 1. Bit thöù 9 (bit stop) ñöôïc choát vaøo RB8 trong SCON. 2. SBUF ñöôïc naïp vôùi 8 bit döõ lieäu. 3. Côø ngaét boä thu (RI) ñöôïc ñaët leân 1. Tuy nhieân, nhöõng ñieàu naøy chæ xaûy ra neáu ñaõ coù nhöõng ñieàu kieän sau : 1. RI = 0 2. SM2 = 1 vaø bit stop thu ñöôïc laø 1, hoaëc SM2 = 0. Ñoøi hoûi RI = 0 ñeå baûo ñaûm laø phaàn meàm ñaõ ñoïc kyù töï tröôùc (vaø RI ñöôïc xoùa). Ñieàu kieän thöù hai hôi phöùc taïp nhöng chæ aùp duïng trong cheá ñoä truyeàn thoâng ña xöû lyù. Ñieàu ñoù haøm yù laø “khoâng ñaët RI leân 1 trong cheá ñoä truyeàn thoâng ña xöû lyù khi bit döõ lieäu thöù 9 laø 0). UART 9 bit vôùi toác ñoä baud coá ñònh (cheá ñoä 2): Khi SM1 = 1 vaø SM0 = 0, coång noái tieáp laøm vieäc ôû cheá ñoä 2, nhö moät UART 9 bit coù toác ñoä baud coá ñònh. 11 bit seõ ñöôï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 stop. 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 seõ ôû trong RB8. Toác ñoä baud ôû cheá ñoä 2 laø 1/32 hoaëc 1/16 taàn soá dao ñoäng treân chip. UART 9 bit vôùi toác ñoä baud thay ñoåi ñöôïc. Cheá ñoä naøy gioáng nhö 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. Thaät ra, caùc cheá ñoä 1,2 vaø 3 raát gioáng nhau. Caùc khaùc bieät laø ôû toác ñoä baud (coù ñònh trong cheá ñoä 2, thay ñoåi trong caùc cheá ñoä 1 vaø 3) vaø ôû soá bit döõ lieäu (8 trong cheá ñoä 1, 9 trong caùc cheá ñoä 2 vaø 3). Khôûi ñoäng vaø truy xuaát caùc thanh ghi coång noái tieáp: Cho pheùp thu: Bit cho pheùp boä thu (REN = Receiver Enable) 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öï. Thoâng thöôøng thöïc hieän vieäc naøy ôû ñaàu chöông trình khi khôûi ñoäng coång noái tieáp, timer, ... Coù theå thöïc hieän vieäc naøy theo hai caùch. Leänh SETB REN seõ ñaët REN leân 1, hoaëc leänh MOV SCON, #xxx1xxxxB seõ ñaët REN leân 1 vaø ñaët hoaëc xoùa caùc bit khaùc trong SCON khi caàn (Caùc x phaûi laø 0 hoaëc 2 ñeå ñaët cheá ñoä laøm vieäc). 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 trong TB8 baèng phaàn meàm. Bit döõ lieäu döõ lieäu thöù 9 thu ñöôïc ñaët ôû RB8. Phaàn meàm coù theå caàn hoaëc khoâng caàn bit döõ lieäu thöù 9, phuï thuoäc vaøo ñaëc tính kyõ thuaät cuûa thieát bò noái tieáp söû duïng. (Bit döõ lieäu thöù 9 cuõng ñoùng moät vai troø quan troïng trong truyeàn thoâng ña xöû lyù). Theâm 1 bit parity: Thöôøng söû duïng bit döõ lieäu thöù 9 ñeå theâm parity vaøo kyù töï. Nhö ñaõ xeùt ôû caùc chöông tröôùc, bit P trong töø traïng thaùi chöông trình (PSW) ñöôïc ñaët leân 1 hoaëc bò xoùa moãi chu kyø maùy ñeå thieát laäp kieåm tra chaün vôùi 8 bit trong thanh ghi tích luõy. Ví 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å phaùt 8 bit trong thanh ghi tích luõy 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ì söûa caùc leänh laïi nhö sau : MOV C, P ; Ñaët bit parity chaün vaøo côø C CPL C ; Ñoåi sang parity leû MOV TB8, C MOV SBUF, A Dó nhieân, vieäc söû duïng parity khoâng bò giôùi haïn ôû caùc cheá ñoä 2 vaø 3. ÔÛ cheá ñoä 1, 8 bit döõ lieäu ñöôïc truyeàn ñi coù theå bao goàm 7 bit döõ lieäu coäng theâm bit parity. Ñeå truyeàn maõ ASCII 7 bit vôùi parity chaün ôû bit 8, coù theå söû duïng caùc leänh sau : CLR ACC.7 ; baûo ñaûm MSB ñöôïc xoùa PMOV C, P ; parity chaün ôû trong 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 prity chaün. Caùc côø ngaét: Hai côø ngaét thu vaø phaùt (RI vaø TI) trong SCON ñoùng moät vai troø quan troïng trong truyeàn thoâng noái tieáp duøng 8051/8031. Caû hai bit ñöôïc ñaët leân 1 baèng phaàn cöùng, nhöng phaûi ñöôïc xoùa baèng phaàn meàm. Ví duï, thöôøng RI ñöôïc ñaët leân 1 khi keát thuùc vieäc thu kyù töï vaø baùo “boä ñeäm thu traøn”. Ñieàu kieän naøy coù theå ñöôïc kieåm tra trong phaàn meàm hoaëc coù theå ñöôïc laäp trình ñeå gaây ra moät ngaét. Neáu phaàn meàm muoán nhaäp moät kyù töï töø thieát bò ñöôïc noái vaøo coång noái tieáp (coù theå laø thieát bò ñaàu cuoái hieån thò video), noù phaûi ñôïi cho ñeán khi RI ñöôïc ñaët leân 1, roài xoùa RI vaø ñoïc kyù töï töø SBUF. Chöông trình nhö sau : WAIT : JNB RI, WAIT ; Kieåm tra RI cho ñeán khi noù = 1 CLR RI ; Xoùa RI MOV A, SBUF ; Ñoïc kyù töï TI ñöôïc ñaët leân 1 ôû cuoái luùc phaùt kyù töï vaø baùo “ boä ñeäm phaùt troáng”. Neáu phaàn meàm muoán göûi moät kyù töï ñeán moät thieát bò ñöôïc noái vaøo coång noái tieáp, tröôùc heát noù phaûi kieåm tra xem coång noái tieáp saün saøng chöa. Noùi caùch khaùc, neáu kyù töï tröôùc ñaõ ñöôïc gôûi ñi, ñôïi cho ñeán khi vieäc truyeàn döõ lieäu hoaøn taát tröôùc khi göûi kyù töï keá. Caùc leänh sau seõ truyeàn kyù töï trong thanh ghi tích luõy: WAIT : JNB TI, WAIT ; Kieåm tra TI cho ñeán khi noù baèng 1 CLR TI ; Xoùa TI MOV SBUF, A ; Gôûi kyù töï ñi. Caùc ñoaïn chöông trình treân laø moät phaàn cuûa caùc haøm nhaäp vaø xuaát kyù töï chuaån. Toác ñoä baud port noái tieáp: Nhö ñaõ noùi, toác ñoä baud coá ñònh ôû caùc cheá ñoä 0 vaø 2. Trong cheá ñoä 0, noù luoân luoân laø taàn soá dao ñoäng treân chip ñöôïc chia cho 12. Thoâng thöôøng thaïch anh aán ñònh taàn soá dao ñoäng treân chip cuûa 8051/8031, nhöng cuõng coù theå söû duïng nguoàn xung nhòp khaùc. 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. ¸ 12 xung nhòp toác ñoä baud dao ñoäng treân chip a) cheá ñoä 0 ¸ 64 xung nhòp toác ñoä baud dao ñoäng treân chip b) cheá ñoä 2 ¸ 32 SMOD = 0 SMOD = 1 ¸ 32 xung nhòp toác ñoä baud dao ñoäng treân chip c) caùc cheá ñoä 1 vaø 3. ¸ 16 SMOD = 0 SMOD = 1 Caùc nguoàn taïo xung nhòp cho port noái tieáp. Maëc nhieân sau khi reset heä thoáng, toác ñoä baud cheá ñoä 2 laø taàn soá boä dao ñoäng chia cho 64. Toác ñoä baud cuõng bò aûnh höôûng bôûi moät bit trong thanh ghi ñieàu khieån nguoàn cung 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. Trong cheá ñoä 2, toác ñoä baud coù theå bò gaáp ñoâi töø giaù trò maëc nhieân cuûa 1/64 taàn soá dao ñoäng (SMOD = 0) ñeán 1/32 taàn soá dao ñoäng (SMOD = 1). Vì PCON khoâng ñöôïc ñònh ñòa chæ theo bit, neân ñeå ñaët bit SMOD leân 1 caàn phaûi theo caùc leänh sau : 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 caùc 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 timer ñöôïc chia theâm cho 32 (16 neáu SMOD = 1) tröôùc khi cung caáp xung nhòp toác ñoä baudcho port noái tieáp. * Söû duïng Timer 1 laøm xung nhòp toác ñoä baud Xeùt 8051, 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 (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 vôùi toác ñoä baud. TMOD ñöôïc khôûi ñoäng nhö sau : MOV TMOD, #0010xxxxB Caùc x laø caùc bit 1 hoaëc 0 caàn cho timer. 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, toán theâm phaàn meàm vì caùc thanh ghi TH1/TL1 phaûi ñöôïc khôûi ñoäng laïi sau moãi laàn traøn. Vieäc naøy seõ ñöôïc thöïc hieän trong chöông trình phuïc vuï ngaét. Moät choïn löïa 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 cho 16, neáu SMOD = 1). Coâng thöùc toång quaùt ñeå xaùc ñònh toác ñoä baud trong caùc cheá ñoä 1 vaø 3 laø : Toác ñoä baud = Toác ñoä traøn cuûa Timer 1 ¸ 32. Ví duï, muoán laøm vieäc vôùi toác ñoä baud laø 1200 baud, thì toác ñoä traøn cuûa Timer 1 phaûi laø : 1200 ´ 32 = 38.4 KHz. Neáu duøng thaïch anh 12 MHz, Timer 1 ñöôïc caáp xung nhòp 1 MHz hay 1000 KHz. Vì toác ñoä traøn cuûa Timer 1 laø 38.4 KHz vaø timer ñöôïc caáp xung hòp 1000 KHz, thì caàn traøn sau 1000 ¸ 38.4 = 26.04 xung nhòp (laøm troøn laø 26). Vì timer ñeám leân vaø traøn xaûy ra khi coù söï thay ñoåi töø FFH xuoáng 00H ôû soá ñeám. Nhö vaäy giaù trò ñuùng caàn naïp vaøo TH1 laø –26. Caùch deã nhaát ñeå ñaët giaù trò naïp laïi vaøo TH1 laø : MOV TH1, # –26 Trình hôïp dòch seõ thöïc hieän chuyeån ñoåi caàn thieát. Trong tröôøng hôïp naøy –26 ñöôïc chuyeån thaønh 0E6H. Nhö vaäy, leänh treân hoaøn toaøn gioáng vôùi leänh : MOV TH1, # 0E6H Do vieäc laøm troøn neân coù sai soá nhoû trong toác ñoä baud. 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 neáu duøng thaïch anh 11.059 MHz. Baûng sau ñaây 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 12 MHZ hoaëc 11.059 MHz : Toác ñoä baud 9600 12.000 MHz 1 –7 (F9H) 8923 7% 2400 12.000 MHz 0 –13 (F3H) 2404 0.16% 1200 12.000 MHz 0 –26 (E6H) 1202 0.16% 19200 11.059 MHz 1 –3 (FDH) 19200 0 9600 11.059 MHz 0 –3 (FDH) 9600 0 2400 11.059 MHz 0 –12 (F4H) 2400 0 1200 11.059 MHz 0 –24 (E8H) 1200 0 Taàn soá thaïch anh SMOD Giaù trò naïp laïi vaøo TH1 Toác ñoä baud thaät Sai soá Baûng toùm taét toác ñoä baud. Chöông 3: RTX51 TINY GIÔÙI THIEÄU: Ñeå taêng hieäu quaû laøm vieäc cuõng nhö yeâu caàu nhaát thieát cuûa chöông trình laø phaûi thöïc hieän ñoàng thôøi nhieàu coâng vieäc hoaëc nhieàu taùc vuï. Vì theá chöông trình naøy ñöôïc vieát theo heä ñieàu haønh thôøi gian thöïc (real_time operating system) cho pheùp saép xeáp danh muïc ñoàng thôøi nhieàu taùc vuï trong heä thoáng nguoàn söû duïng chöông trình RTX-Tiny(RTX51) cuûa phaàn meàm Keil. Öu ñieåm cuûa vieäc xaây döïng chöông trình theo kieåu naøy laø hoaït ñoäng cuûa caùc coâng vieäc khaùc nhau trong chöông trình coù theå hoaït ñoäng ñoäc laäp, khoâng gaây aûnh höôûng vôùi nhau veà maët thôøi gian xöû lyù. Neáu vì moät lyù do khoâng mong muoán naøo ñoù maø moät taùc vuï trong heä thoáng chöông trình khoâng thöïc hieän ñöôïc hoaëc thôøi gian thöïc hieän quaù lôùn, hoaëc coù moät vaøi voøng laëp voâ taän trong chöông trình thì heä thoáng khoâng bò “treo” maø caùc taùc vuï khaùc vaãn coù theå hoaït ñoäng bình thöôøng. Giôùi thieäu phaàn meàm Keil: Khoâng nhö caùc chöông trình vieát cho vi xöû lyù tröôùc ñaây, chöông trình trong luaän vaên naøy khoâng duøng ngoân ngöõ hôïp ngöõ (assemler) maø ñöôïc vieát baèng ngoân ngöõ laäp trình C vaø lieân keát vôùi chöông trình C51-compile cuûa phaàn meàm Keil ñeå dòch sang ngoân ngöõ maùy. Ñaây laø phaàn meàm chuyeân duøng söû duïng ngoân ngöõ laäp trình C ñeå laäp trình cho caùc loaïi vi xöû lyù ñöôïc saûn xuaát bôûi nhieàu haõng khaùc nhau treân theá giôùi, chöông trình naøy chöùa taát caû caùc haøm C môû roäng caàn thieát cho vi ñieàu khieån ñöôïc söû duïng. Tieän ích cuûa caùch vieát naøy laø ngoân ngöõ laäp trình C laø ngoân ngöõ laäp trình caáp cao hôn vaø gaàn guûi vôùi ngöôøi söû duïng hôn ngoân ngöõ maùy tính assembler. Ngoaøi ra, caáu truùc chöông trình vieát baèng C cuõng goïn hôn vaø deã quaûn lyù hôn vôùi caùc caâu leänh vaø voøng laëp ñôn giaûn, ñieàu naøy thaät söï coù lôïi khi ta muoán naâng caáp hay môû roäng chöông trình. Song song vôùi nhöõng tieän ích treân, chöông trình C51 cuûa phaàn meàm Keil coøn hoå trôï cho ta moät soá haøm cô baûn nhö caùc haøm vaøo/ ra (ví duï nhö: haøm xuaát nhaäp kyù töï ñôn getchar(),putchar(); haøm xuaát nhaäp chuoãi kyù töï gets(), puts()), caùc haøm thôøi gian thöïc cuûa chöông trình RTX51 Tiny … vaø moät soá haøm khaùc giuùp heä thoáng hoaït ñoäng hoaøn haûo hôn. Beân caïnh ñoù, chöông trình bieân dòch vaø chöông trình chaïy moâ phoûng treân maùy tính (chöông trình Debug) cuûa phaàn meàm Keil laø moät thuaän lôïi raát lôùn. Noù giuùp cho ngöôøi laäp trình coù theå quan saùt chöông trình moät caùch chính xaùc vôùi caùc böôùc thöïc hieän vaø töøng leänh chaïy trong chöông trình, coù caû maõ chöông trình vieát baèng ngoân ngöõ C vaø chöông trình dòch sang maõ Assembler töông öùng do chöông trình C51-compiler thöïc hieän. Ngoaøi ra, vôùi phaàn meàm naøy ta coøn coù theå theo doõi ñöôïc söï thay ñoåi giaù trò cuûa caùc bieán caàn quan saùt, caùc haøm ngaét, caùc giaù trò vaøo/ra taïi caùc chaân Port, caùc giaù trò döõ lieäu truyeàn qua SBUF vaø caû caùc giaù trò timer v.v.. Giôùi thieäu chöông trình tuaàn hoaøn theo thôøi gian bieåu cuûa TRX51 tiny: RTX51 cuûa phaàn meàm Keil ñöôïc vieát theo heä ñieàu haønh thôøi gian thöïc giuùp chöông trình coù theå thöïc hieän ña nhieäm (multi-tasking), cho pheùp moät vaøi taùc vuï hoaëc vaøi voøng laëp voâ taän ñöôïc thöïc hieän gaàn nhö song song nhau trong chöông trình . Tuy nhieân caùc taùc vuï trong chöông trình naøy khoâng xaûy ra ñoàng thôøi maø do vieäc saép xeáp caùc taùc vuï theo caùc muùi thôøi gian ñöôïc chia nhoû, töùc taïi moät thôøi ñieåm chæ moät coâng vieäc ñöôïc thöïc hieän maø thoâi. Ñoàng hoà cuûa CPU coù theå ñöôïc chia thaønh nhieàu muùi thôøi gian vaø chöông trình seõ tuaàn töï saép xeáp moãi muùi thôøi gian cho moät taùc vuï. Moãi taùc vuï ñöôïc pheùp thöïc hieän trong khoaûng thôøi gian toái ña ñònh tröôùc vaø sau ñoù chöông trình seõ chuyeån sang moät taùc vuï khaùc ñaõ saün saøng thöïc hieän, chöông trình cöù theá laëp laïi tuaàn töï. Vì moãi muùi thôøi gian ñöôïc chia raát nhoû, thöôøng chæ vaøi mili giaây hoaëc nhoû hôn neân chöông trình luoân ñöôïc queùt qua lieân tuïc vaø vì theá caùc taùc vuï döôøng nhö xaûy ra ñoàng thôøi. Neáu taïi moät thôøi ñieåm naøo ñoù maø khoâng coù moät taùc vuï naøo thöïc hieän thì taùc vuï ñöôïc khôûi ñoäng keá tieáp seõ ôû traïng thaùi saün saøng (ready) hoaëc trang thaùi nghæ (time-out). RTX51 söû duïng caùc thuû tuïc thôøi gian ñöôïc ngaét bôûi phaàn cöùng cuûa timer 8051. Chu kyø ngaét ñöôïc xaây döïng vaø söû duïng theo ñoàng hoà cuûa RTX51. RTX51 khoâng yeâu caàu coù moät haøm Main trong chöông trình. Noù seõ töï ñoäng goïi vaø thöïc hieän chöông trình baét ñaàu töø taùc vuï 0. Neáu ta söû duïng haøm Main trong chöông trình, ta phaûi khôûi ñoäng RTX51 söû duïng haøm os_create_task vaø haøm os_start_system trong RTX51. Khi rôi vaøo traïng thaùi nghæ (timer out), thay vì taïm döøng thöïc hieän moät taùc vuï vaø ñöùng chôø moät laàn queùt khaùc, ta coù theå söû duïng haøm os_wait ñeå tín hieäu RTX51coù theå baét ñaàu chuyeån sang thöïc hieän moät taùc vuï khaùc. Haøm naøy thöïc hieän vieäc trì hoaõn taùc vuï hieän haønh vaø ñôïi cho ñeán khi coù moät söï kieän ñöôïc ñònh tröôùc xaûy ñeán. Trong khoaûng thôøi gian nghæ naøy baát cöù moät taùc vuï naøo khaùc cuõng coù theå ñöôïc thöïc hieän. Söû duïng thôøi gian nghæ (time-out) vôùi RTX51: Moät söï kieän ñôn giaûn nhaát maø ta coù theå ñôïi vôùi haøm os_wait laø khoaûng thôøi gian nghæ theo nhòp ñoàng hoà cuûa RTX51. Söï kieän naøy coù theå ñöôïc söû duïng trong nhöõng taùc vuï maø coù yeâu caàu delay. Trong vaøi tröôøng hôïp noù ñöôïc söû duïng nhö moät switch, maø switch naøy chæ caàn ñöôïc kieåm tra sau nhöõng khoaûng thôøi gian nhaát ñònh. Ñieàu ñöôïc minh hoïa trong ví duï sau: #include int counter0; int counter1; void job0 (void) _task_ 0 { os_create ( 1 ) ; while ( 1 ) { counter0 ++; os_wait (K_TMO, 3,0); } } void job1 (void) _task_ 1 { while (1) { counter1++; os_wait (K_TMO, 5, 0); } } trong ví duï treân, job0 coù theå thöïc hieän tröôùc job1. Nhöng hieän taïi, sau khi taêng counter0, job0 goïi haøm os_wait ñeå taïm döøng 3khoaûng chia thôøi gian. Ngay luùc naøy, RTX51 chuyeån sang taùc vuï keá tieáp, cuï theå laø job1,sau khi job1 taêng counter1, noù cuõng goïi haøm os_wait ñeå taïm döøng 5 khoaûng chia thôøi gian. Luùc naøy, RTX51 khoâng coù taùc vuï naøo khaùc ñeå thöïc hieän, vì theá noù rôi vaøo traïng thaùi khoâng laøm gì caû vaø ñôïi heát 3 khoaûng chia thôøi gian troâi qua tröôùc khi tieáp tuïc thöïc hieän job1. Keát quaû cuûa ví duï naøy laø counter0 cöù taêng sau moãi 3 khoaûng thôøi gian vaø counter1 cöù taêng sau moãi 5 khoaûng chia thôøi gian. Söû duïng tín hieäu vôùi RTX51: Ta coù theå duøng haøm os-wait ñeå taïm döøng moät taùc vuï trong khi ñôïi moät tín hieäu töø moät taùc vuï khaùc. Ñieàu naøy coù theå söû duïng cho hai hay nhieàu taùc vuï ngang baèng nhau. Ñôïi moät tín hieäu laøm vieäc coù nghóa laø: Neáu moät taùc vuï ñang ñôïi moät tín hieäu ,vaø côø tín hieäu laø 0, taùc vuï naøy seõ ñöôïc trì hoaõn cho ñeán khi coù tín hieäu gôûi ñeán. Neáu côø tín hieäu ñaõ leân 1 khi 1 taùc vuï hoûi, côø naøy seõ ñöôïc xoaù, vaø taùc vuï ñoù laïi tieáp tuïc thöïc hieän. Ñieàu naøy ñöôïc minh hoaï trong ví duï sau: #include int counter0; int counter1; void job0 (void) _task_ 0 { os_create ( 1 ) ; while ( 1 ) { if ( ++counter0 == 0 ) os_send_signal ( 1 ) ; } } void job1 (void) _task_ 1 { while (1) { os_wait (K_SIG, 0, 0); counter1++; } } Trong ví duï treân, job1 seõ ñôïi cho ñeán khi noù nhaän ñöôïc tín hieäu töø moät hoaëc vaøi taùc vuï khaùc gôûi ñeán. Khi nhaän ñöôïc tín hieäu, noù seõ taêng counter1 vaø laïi ñôïi moät tín hieäu khaùc. job0 lieân tuïc taêng counter0 noù traøn ñeán 0. Khi ñieàu ñoù xaûy ra, job 0 gôûi moät tín hieäu ñeán job1 vaø chöông trình RTX51 ñaùnh daáu job1 laø saün saøng thöïc hieän. Tuy nhieân, job1 seõ khoâng ñöôïc thöïc hieän trong suoát thôøi gian RTX51 nhaän noù cho ñeán khi chuyeån sang moät muùi thôøi gian keá tieáp. Söï öu tieân vaø quyeàn öu tieân: Moät baát lôïi cuûa chöông trình ví duï treân laø job1 khoâng ñöôïc baét ñaàu ngay khi nhaän ñöôïc tín hieäu töø job0 . Trong moät soá tröôøng hôïp ñieàu naøy khoâng ñöôïc chaáp nhaän vì lí do thôøi gian . RTX51 cho pheùp ta xaùc ñònh möùc öu tieân cho töøng taùc vuï . Moät taùc vuï vôùi möùc öu tieân cao hôn seõ ñöôïc ngaét hoaëc ñöôïc quyeàn öu tieân hôn ñoái vôùi moät taùc vuï coù möùc öu tieân thaáp hôn baát cöù khi naøo noù caàn ñöôïc thöïc hieän. Trong ví duï treân, ta coù theå thay ñoåi caùch khai baùo cho job1 nhaän möùc öu tieân cao hôn job0. Theo maëc ñònh, taát caû caùc taùc vuï ñöôïc ñònh möùc öu tieân laø 0, laø möùc öu tieân thaáp nhaát. Caùc möùc öu tieân cho pheùp laø töø 0 ñeán 3. Trong ví duï treân ta, coù theå ñònh nghóa job1 vôùi möùc öu tieân caáp 1 nhö sau: Void job1 (void) _ task_ 1 _priority_ 1 {While (1) { Os_wait (K_SIG, 0, 0 ); Counter1++; } } Vôùi caùch khai baùo naøy, baát cöù khi naøo job0 gôûi tín hieäu ñeán job1, job1 seõ baét ñaàu thöïc hieän ngay. Moät soá yeâu caàu vaø ñònh nghóa ñoái vôùi chöông trình RTX51 Tiny: Ñieàu khieån ngaét: RTX51 Tiny coù theå hoaït ñoäng song song vôùi caùc haøm ngaét. Töông töï nhö caùc öùng duïng khaùc cuûa 8051, nguoàn ngaét phaûi ñöôïc cho pheùp bôûi caùc thanh ghi phaàn cöùng cuûa 8051 ñeå taïo ra moät ngaét. RTX51 Tiny khoâng chöùa baát cöù moät söï ñieàu khieån naøo cho caùc ngaét; vì lyù do ñoù, moät cho pheùp ngaét cuï theå laø ñuû ñeå xöû lyù ngaét.RTX51 Tiny söû duïng timer 0 vaø ngaét timer0 cuûa 8051 cho heä thôøi gian thöïc. Ngoaïi tröø caùc caáu truùc khaùc cuûa 8051, ñeå traùnh söï truøng laëp trong xöû lyù ngaét timer0 khoâng neân ñöôïc söû duïng trong chöông trình. Registerbanks: RTX51 tiny qui taát caû caùc taùc vuï vaøo registerbank 0. Vì lyù do ñoù, taát caû caùc haøm taùc vuï phaûi ñöôïc chuyeån töø ngoân ngöõ caáp cao sang ngoân ngöõ caáp thaáp theo ñònh nghóa cuûa chöông trình C51. Caùc haøm ngaét coù theå söû duïng caùc registerbank coøn laïi. Tuy nhieân, RTX51 yeâu caàu 6 byte coá ñònh trong khoâng gian registerbank. Caùc registerbank ñöôïc söû duïng bôûi RTX51 Tiny coù theå ñöôïc ñònh nghóa theo bieán caáu hình INT_REGBANK trong thö vieän haøm cuûa chöông trình C51. Ñònh nghóa taùc vuï: Chöông trình thôøi gian thöïc hay ña nhieäm (multitasking) ñöôïc bieân soaïn vôùi moät hoaëc vaøi taùc vuï thöïc hieän rieâng bieät. RTX51 cho pheùp thöïc hieän leân ñeán 16 taùc vuï. Caùc taùc vuï laø nhöõng haøm ñôn cuûa chöông trình C coù giaù trò traû veà daïng void vaø danh saùch caùc ñoái soá daïng void ñöôïc khai baùo thuoäc tính haøm nhö sau: void func (void) _task_ num {…} vôùi num laø soá ID cuûa taùc vuï ñöôïc ñaùnh soá lieân tuïc töø 0 ñeán 15. Caùc haøm thö vieän cuûa RTX51-tiny : Haøm Moâ taû Os-create-task Ghi moät taùc vuï vaøo danh saùch thöïc hieän Os-delete_task Xoùa moät taùc vuï khoûi danh saùch thöïc hieän Os_send_signal Gôûi tín hieäu ñeán moät taùc vuï khaùc töø moät ngaét Os- clear_signal Xoùa tín hieäu ñaõ ñuôïc gôûi Os_running_task_id Trôû veà taùc vuï thöù ID töø taùc vuï hieän haønh Os-wait Taïm döøng taùc vuï hieän haønh vaø ñôïi moät hoaëc vaøi söï kieän nhö: 1 khoaûng thôøi gian qui ñònh, khoaûng thôøi gian nghæ hoaëc tín hieäu töø moät taùc vuï khaùc hay moät ngaét. Os-wait1 Taïm döøng taùc vuï hieän haønh vaø ñôïi moät söï kieän laø tín hieäu töø moät taùc vuï khaùc. Os-wait2 Taïm döøng taùc vuï hieän haønh vaø ñôïi moät hoaëc vaøi söï kieän nhö : 1khoaûng thôøi gian qui ñònh, khoaûng thôøi gian nghæ hoaëc tín hieäu töø moät taùc vuï khaùc hay moät ngaét. Caùc thoâng soá haøm: Haøm os_create_task: #include char os_create_task (unsigned char task_id) /*taùc vuï thöù id*/ Haøm Os-delete_task: #include char os_delete_task (insigned char task_id) Haøm Os_send_signal #include char os_send_signal (insigned char task_id) Haøm Os- clear_signal: #include char os_clear_signal (insigned char task_id) Haøm Os_running_task_id: #include char os_running_task_id (void) Haøm Os-wait: #include char os_wait (unsigned char event_sel, /*event: söï kieän chôø*/ unsigned char ticks, /*khoaûng thôøi gian chôø*/ unsigned int dummy); /*unused argument*/ caùc haèng soá söï kieân laø: K_IVL ñôïi moät khoaûng thôøi gian qui ñònh K_SIG ñôïi moät tín hieäu K_TMO ñôïi moät khoaûng thôøi gian nghæ Os-wait1: #include char os_wait1 (unsigned char event_sel); /*event: söï kieän chôø*/ Haèng soá söï kieän chæ laø K_SIG (ñôïi moät tín hieäu) Os-wait2: char os_wait (unsigned char event_sel, /*event: söï kieän chôø*/ unsigned char ticks); /*khoaûng thôøi gian chôø*/ caùc haèng soá söï kieân laø: K_IVL ñôïi moät khoaûng thôøi gian qui ñònh K_SIG ñôïi moät tín hieäu K_TMO ñôïi moät khoaûng thôøi gian nghæ Chöông 4: BOARD DEMO_KIT Demo_kit laø moät öùng duïng nhoû cuûa chöông trình nhaèm moâ taû moät soá hoaït ñoäng cuûa caùc leänh trong taäp leänh vaø caùc thuû tuïc Protocol ñöôïc xaây döïng trong chöông trình. Board maïch thöïc hieän cho chöông trình Demo_kit goàm caùc khoái sau: Sô ñoà khoái board Demo-Kit KHOÁI XÖÛ LYÙ TRUNG TAÂM (mP) KHOÁI RS-232 KHOÁI INPUT KHOÁI A/D KHOÁI D/A KHOÁI HIEÅN THÒ KHOÁI OUTPUT KHOÁI HIEÅN THÒ: Khoái hieån thò bao goàm 9 led 7ñoaïn ( loaïi catod chung ) xeáp thaønh 3 daõy (moät daõy 3 con) ñeå hieån thò caùc thoâng soá caàn quan saùt. IC choát 74573 xuaát caùc giaù trò caàn hieån thò cho caû 9 led. IC naøy giao tieáp vôùi vi xöû lyù qua port 0, nhoùm ñieän trôû RN1 caàn thieát vì port 0 coù ngoõ ra cöïc thu hôû. IC 4094 ñöôïc söû duïng vôùi muïc ñích choïn led hieån thò. Ñaây laø IC vôùi chöùc naêng laø thanh ghi dòch 8 bit (chuyeån ñoåi döõ lieäu töø noái tieáp sang song song). Lyù do chính cho vieäc söû duïng IC 4094 trong tröôøng hôïp naøy laø tieát kieäm caùc chaân giao tieáp vôùi vi xöû lyù. Ñeå xaùc laäp möùc tích cöïc cho led caàn hieån thò ta laàn löôït dòch vaøo caùc bit 0 hay 1, trong tröôøng hôïp söû duïng led laø catod chung (nhö treân hình veõ ) ñeå choïn led saùng ta dòch vaøo bit 0 (tích cöïc möùc thaáp ). Baûng söï thaät cuûa thanh ghi dòch 8 bit 4094: Inputs Parallel out Serial out CLK OE STR D Q1 … Q8 QS /QS ­ 0 X X HiZ … HiZ Q7n nc ¯ 0 X X HiZ … HiZ nc Q8n ­ 1 0 X nc … nc Q7n nc ­ 1 1 0 0 … Q7n Q7n nc ­ 1 1 1 1 … Q7n Q7n nc ¯ 1 1 1 nc … nc nc Q8n Q7n: traïng thaùi cuûa Q7  tröôùc khi coù xung clock nc: no connect IC ULN2803 duøng ñeå ñeäm doøng. KHOÁI GIAO TIEÁP A/D VAØ D/A: KHOÁI A/D: Khoái giao tieáp A/D coù nhieäm vuï ñoïc veà töø ngoõ input caùc giaù trò analog ño ñaït ñöôïc töø caùc ñoái töôïng ñieàu khieån beân ngoaøi (tín hieäu töø caûm bieán, giaù trò ñieän aùp...) ñöôïc chuyeån ñoåi thaønh soá digital ñeå ñöa vaøo caùc thanh ghi cuûa vi xöû lyù. Giôùi thieäu ADC0809 : ADC 0809 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. 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 voù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 LSB Nguoàn cung caáp ñôn : 5VDC. Coâng suaát thaáp : 15mW. Thôøi gian chuyeån ñoåi : 100ms Ñ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 mA VIN(1) Ñieän aùp vaøo logic 1 VCC -1.5 V VIN(0) Ñieän aùp vaøo logic 0 1.5 V VOUT(1) Ñieän aùp ra logic 1 IOUT=-360uA 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 +2ms Chu kyø clock tC Thôøi gian bieán ñoåi FCLK=640KHz 90 100 116 ms 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 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öï cguyeå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å ñöôïc 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 khi 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. Bieåu thöùc chuyeån ñoåi: Data ngoõ ra laø moät soá nguyeân N naèm trong taàm: VIN - VREF (-) VREF(+) - VREF (-) N= x 256 ± ñoä chính xaùc tuyeät ñoái Maïch taïo dao ñoäng cho ADC0809: Bieát taàn soá xung clock cuûa ADC0809 naèm trong khoaûng töø 10KHz ñeán 1280 KHz, neân taàn soá xung clock trong maïch ñöôïc laáy töø taàn soá dao ñoäng chuaån cuûa thaïch anh, ñöa qua IC ñeám 74393 vôùi coâng duïng laø IC chia taàn soá. Caùc ngoõ ra QA, QB, QC, QD laàn löôït chia taàn soá xung clock vaøo vôùi 2, 4, 8, 16. Vaäy taàn soá ra 74393 (vaøo xung clock ADC 0809) laø: 691.2KHz 11.0592MHz 16 = KHOÁI D/A: Khoái D/A giao tieáp vôùi vi xöû lyù vôùi nhieäm vuï chuyeån ñoåi caùc giaù trò digital trong caùc thanh ghi cuûa vi xöû lyù thaønh caùc giaù trò analog vaø xuaát ra caùc ñoái töôïng ñieàu khieån beân ngoaøi. 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 thöùc 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. 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 DAC0806 vaø DAC0807 Thôøi gian xöû lyù nhanh : 150 ns Ngoõ vaøo digital khoâng ñaûo töông thích TTL vaø CMOS Toác ñoä queùt cao : 8 mA/ms 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):-10VDC ñeán +18VDC Ñieän aùp ngoõ ra ñöôïc duøng (V0):-11 VDC ñeán +18 VDC Doøng chuaån (I14): 5 mA Ñieän aùp vaøo chuaån (V14,V15) : VCC,VEE Hoaït ñoäng cô baûn: Doøng ñieän chuaån ñöôïc taïo ra baèng moät trong hai caùch : chuaån döông hoaëc chuaån aâm. Vref döông Vref aâm DAC0808 DAC0808 Hình a: Hình b: Doøng ñieän vaøo chuaå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 keát noái vôùi aùp döông nhö treân hình a. Vôùi tín hieäu chuaån luôõ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 R15 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 ñeá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 b . 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 : IFS= IREF vôùi I14= I14= VREF Doøng ñieän ra: IOUT= IREF x giaù trò digital ngoõ vaøo 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 ñieän aùp chuaån DC thì neân söû duïng tuï bypasss xuoáng ñaát. KHOÁI RS-232: Khoái naøy thöïc hieän vieäc giao tieáp döõ lieäu giöõa maùy tính PC vaø vi xöû lyù söû duïng IC MAX 232 qua coång noái tieáp cuûa maùy tính treân hai ñöôøng TXD vaø RXD. Ta thaáy raèng MAX232 caàn coù 4 tuï ngoaøi (maéc vaøo giöõa C1+ vaø C1-, C2+ vaø C2-, V+ vaøo nguoàn döông, V- vaøo ñaát)ñeå bieán ñoåi ñieän aùp töø 0V ñeán 5V thaønh ñieän aùp -12V ñeán +12V phuø hôïp cho truyeàn thoâng theo chuaån RS-232. Ngoaøi ra, beân trong MAX 232 coù 4 boä khueách ñaïi ñaûo nhaèm chuyeån töø möùc logic TTL ra chuaån RS-232 vaø ngöôïc laïi. Sô ñoà sau ñaây cho thaáy caùc khoái beân trong MAX232 vaø caùc linh kieän maéc beân ngoaøi theo daïng chuaån : RS-232 OUTPUT Sô ñoà beân trong IC MAX-232 KHOÁI RÔLE: Caùc ngoõ ra output cuûa kit vi xöû lyù ñöôïc noái vôùi caùc Rôle ñeå ñieàu khieån ñoùng ngaét caùc thieát bò ñieän. Trong töøng öùng duïng cuï theå caùc rôle seõ ñöôïc keát noái ñeán caùc ñoái töôïng caàn ñieàu khieån. Cuõng nhö khoái hieån thò, ñeå tieát kieäm caùc chaân vi xöû lyù caùc tín hieäu ñieàu khieån rôle ñöôïc laáy töø 1 chaân port cuûa vi xöû lyù vaø dòch vaøo caùc rôle qua thanh ghi dòch 8 bit 4094 (chuyeån döõ lieäu töø daïng noái tieáp sang song song) duøng IC ñeäm ULN2803. KHOÁI INPUT: Khoái input bao goàm 4 nuùt nhaán vaø 4 ñaàu vaøo töï do (laáy tín hieäu töø beân ngoaøi vaøo coù caùch ly bôûi PC817 ). Ngöôïc vôùi khoái hieån thò vaø rôle, caùc ngoõ vaøo input ñöôïc noái qua IC 4021 cuõng laø moät loaïi thanh ghi dòch 8 bit nhöng chuyeån döõ lieäu vaøo töø daïng song song sang noái tieáp. Caùc ngoõ vaøo input ñöôïc ñoïc veà töøng bit theo xung clock cuûa thanh ghi dòch 4021 vaø ñöôïc chuyeån vaøo chaân P3.2 cuûa vi xöû lyù. Chöông 5: CHÖÔNG TRÌNH PHAÀN 1: TAÄP LEÄNH GIÔÙI THIEÄU TAÄP LEÄNH : Vieäc thu thaäp döõ lieäu vaø ñieàu khieån töø xa laø moät vaán ñeà ñaùng ñöôïc quan taâm trong lónh vöïc ñieàu khieån töï ñoäng. Tuy nhieân, thaät phieàn haø neáu nhö khoâng coù moät söï thoáng nhaát chung veà caâu leänh trong quaù trình trao ñoåi thoâng tin. Vì theá, moät phaàn noäi dung chính cuûa ñeà taøi laø xaây döïng ñöôïc moät taäp leänh trong giao tieáp döõ lieäu giöõa maùy tính vôùi vi xöû lyù vaø söû duïng ñöôïc noù. Vieäc xaây döïng taäp leänh giao tieáp RS-232 naøy ñöôïc xem nhö moät mong muoán taïo ra moät caâu leänh chung trong giao tieáp döõ lieäu giöõa maùy tính vaø vi xöû lyù veà maët ngoân ngöõ. Ñaây laø moät phöông tieän giao tieáp giöõa maùy tính vaø vi xöû lyù, nhaèm giuùp cho ngöôøi söû duïng khoâng phaûi maát nhieàu thôøi gian laäp trình laïi töø ñaàu moãi khi muoán thöïc hieän vaán ñeà giao tieáp maø vieäc trao ñoåi thoâng tin vaãn coù theå xaûy ra deã daøng thoâng qua vieäc söû duïng taäp leänh naøy. Taäp leänh ñöôïc xaây döïng bao goàm caùc leänh xuaát nhaäp ñaày ñuû caùc daïng tín hieäu nhö: tín hieäu daïng möùc, tín hieäu daïng xung, tín hieäu daïng analog/digital giuùp vieäc trao ñoåi thoâng tin khoâng bò giôùi haïn vaø ñoái töôïng ñieàu khieån (töø kit vi xöû lyù) cuõng ñöôïc phong phuù hôn. Ngoaøi ra, taäp leänh coøn coù moät soá leänh ñieàu khieån vaø quan saùt quaù trình hoaït ñoäng cuûa heä thoáng nhö: bieán caøi ñaët daïng soùng ngoõ ra (Kx), counter (Cx), döõ lieäu (Dx), bieán traïng thaùi xaùc laäp cheá ñoä hoaït ñoäng töø PC hay töø KIT (Sx) vaø bieán thöïc thi hieån thò cheá ñoä hoaït ñoäng RUN/STOP (Mx) giuùp cho quaù trình hoaït ñoäng cuûa heä thoáng dieãn ra moät caùch chaët cheõ, deã quan saùt vaø deã quaûn lyù hôn. NOÄI DUNG TAÄP LEÄNH: Caùc leänh ñöôïc xaây döïng trong taäp leänh giao tieáp RS-232 naøy nhìn chung chæ bao goàm caùc leänh giao tieáp döõ lieäu laø xuaát vaø nhaäp. Ñoái vôùi caùc leänh gôûi döõ lieäu veà maùy tính (PC): noäi dung döõ lieäu ñöôïc kit vi xöû lyù thu thaäp töø caùc ñoái töôïng ñieàu khieån beân ngoaøi ví duï nhö giaù trò dieän aùp, xung ñieàu khieån hoaëc caùc giaù trò ño ñöôïc töø caûm bieán v.v… vaø ñöa vaøo caùc vuøng ñòa chæ ñònh saün tuøy thuoäc vaøo daïng cuûa tín hieäu thu vaøo (daïng möùc, xung hay A/D) vaø gôûi ñeán PC moãi khi coù yeâu caàu. Ñoái vôùi caùc leänh gôûi döõ lieäu töø PC ñeán vi xöû lyù: noäi dung döõ lieäu nhaän veà töø PC, ví duï nhö caùc thoâng soá ñieàu khieån ñöôïc caøi ñaët saün, cuõng ñöôïc ñöa vaøo caùc vuøng ñòa chæ rieâng öùng vôùi caùc daïng döõ lieäu nhaän vaøo. Caùc giaù trò döõ lieäu naøy coù theå ñöôïc duøng ñeå ñieàu khieån caùc ñoái töôïng beân ngoaøi khaùc tuøy thuoäc vaøo öùng duïng cuï theå cuûa chöông trình. Caùc leänh khoâng mang döõ lieäu ñöôïc PC gôûi ñeán vi xöû lyù laø caùc leänh yeâu caàu vi xöû lyù gôûi döõ lieäu, caùc leänh khoâng mang döõ lieäu töø vi xöû lyù gôûi veà PC laø caùc leänh traû lôøi ñaõ nhaän ñöôïc noäi dung PC vöøa gôûi vì vi xöû lyù khoâng coù chöùc naêng yeâu caàu döõ lieäu. Baûng moâ taû caùc vuøng ñòa chæ cuûa board VXL: Stt Vuøng ñòa chæ Soá byte Daïng döõ lieäu Moâ taû 1 I0-I1 2x2 2 byte daïng ASCII Input möùc-16 ngoõ vaøo(bit) 2 N0-N1 2x5 5 byte daïng ASCII Input xung-2 ngoõ vaøo(99.999Hz max) 3 Q0-Q1 2x5 5 byte daïng ASCII Ngoõ vaøo A/D – 2 ngoõ vaøo (99.999max) 4 U0-U1 2x5 5 byte daïng ASCII Ngoõ vaøo A/D - 2 ngoõ vaøo (±4.999max) 5 O0-O1 2x2 2 byte daïng ASCII Output möùc-16 ngoõ ra(bit) 6 P0-P1 2x5 5 byte daïng ASCII Output xung-2 ngoõ ra (99.99Hz max) 7 A0-A1 2x5 5 byte daïng ASCII Ngo

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

  • docLuan van.doc