Luận văn Ứng dụng kit 8051 dùng để chuyển đổi A/D & D/A

Tài liệu Luận văn Ứng dụng kit 8051 dùng để chuyển đổi A/D & D/A: BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ Đề tài : ỨNG DỤNG KIT 8051 DÙNG ĐỂ CHUYỂN ĐỔI A/D & D/A Sinh viên thực hiện : NGUYỄN VŨ ANH DUY Lớp : 95 KĐĐ Giáo viên hướng dẫn : LÊ THANH ĐẠO TPHCM, tháng 2-2000 LỜI CẢM ƠN Để hoàn thành được luận án này, đầu tiên em xin được gửi lời cám ơn đến Ban Giám Hiệu, các Thầy Cô đặc biệt là Thầy Cô trong bộ môn Điện tử thuộc Khoa Điện – Điện Tử trường Đại Học Sư Phạm Kỹ Thuật TP.HCM, đã tận tình chỉ dạy, truyền đạt kiến thức cũng như tạo điều kiện thuận lợi cho em trong suốt quá trình học tập vừa qua Em xin chân thành cảm ơn Thầy Lê Thanh Đạo đã quan tâm theo dõi, tận tình hướng dẫn và động viên em để thực hiện tốt luận án tốt nghiệp này Ngoài ra em cũng xin gửi lời cảm ơn đến tất cả các bạn bè cùng khóa và người thân chung...

doc92 trang | Chia sẻ: haohao | Lượt xem: 953 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Ứng dụng kit 8051 dùng để chuyển đổi A/D & D/A, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
BOÄ GIAÙO DUÏC VAØ ÑAØO TAÏO ÑAÏI HOÏC QUOÁC GIA TP.HCM TRÖÔØNG ÑAÏI HOÏC SÖ PHAÏM KYÕ THUAÄT KHOA ÑIEÄN – ÑIEÄN TÖÛ BOÄ MOÂN ÑIEÄN TÖÛ Ñeà taøi : ÖÙNG DUÏNG KIT 8051 DUØNG ÑEÅ CHUYEÅN ÑOÅI A/D & D/A Sinh vieân thöïc hieän : NGUYEÃN VUÕ ANH DUY Lôùp : 95 KÑÑ Giaùo vieân höôùng daãn : LE THANH ÑAÏO TPHCM, thaùng 2-2000 LÔØI CAÛM ÔN Ñeå hoaøn thaønh ñöôïc luaän aùn naøy, ñaàu tieân em xin ñöôïc göûi lôøi caùm ôn ñeán Ban Giaùm Hieäu, caùc Thaày Coâ ñaëc bieät laø Thaày Coâ trong boä moân Ñieän töû thuoäc Khoa Ñieän – Ñieän Töû tröôøng Ñaïi Hoïc Sö Phaïm Kyõ Thuaät TP.HCM, ñaõ taän tình chæ daïy, truyeàn ñaït kieán thöùc cuõng nhö taïo ñieàu kieän thuaän lôïi cho em trong suoát quaù trình hoïc taäp vöøa qua Em xin chaân thaønh caûm ôn Thaày Leâ Thanh Ñaïo ñaõ quan taâm theo doõi, taän tình höôùng daãn vaø ñoäng vieân em ñeå thöïc hieän toát luaän aùn toát nghieäp naøy Ngoaøi ra em cuõng xin göûi lôøi caûm ôn ñeán taát caû caùc baïn beø cuøng khoùa vaø ngöôøi thaân chung quanh ñaõ giuùp ñôõ veà vaät chaát vaø tinh thaàn ñeå em ñaït ñöôïc thaønh tích nhö ngaøy hoâm nay. MUÏC LUÏC PHAÀN DAÃN NHAÄP PHAÀN I : GIÔÙI THIEÄU TOÅNG QUAÙT Chöông I: Bieán ñoåi töông töï soá vaø soá töông töï Trang 1 Bieán ñoåi töông töï soá 1 I – Toång quaùt 1 II – Caùc kyõ thuaät AD 4 III – Giao tieáp phaàn meàm 11 IV – Giao tieáp phaàn cöùng 11 Bieán ñoåi soá töông töï 12 I – Toång quaùt 12 II – Giao tieáp vôùi vi xöû lyù 13 Chöông II : Giao tieáp ngoaïi vi 8255 A 14 I – Toång quaùt 14 II – Moâ taû chi tieát 15 III – Cheá ñoä hoaït ñoäng 17 Chöông III: Toång quan veà hoï vi ñieàu khieån MCS-51 24 I – Caáu truùc 8051 24 II – Sô löôïc veà caùc chaân 25 III – Caáu truùc coång xuaát nhaäp 28 IV – Toå chöùc boä nhôù 29 V – Caùc thanh ghi coù chöùc naêng ñaëc bieät 31 VI – Boä nhôù ngoaøi 36 VII – Hoaït ñoäng reset 41 Chöông IV: Toùm taét taäp leänh 43 I – Giôùi thieäu 43 II – Caùc mode ñònh vò 43 Chöông V: Giôùi thieäu veà KIT vi ñieàu khieån 8051 53 Chöùc naêng cuûa caùc phím 53 Giôùi thieäu caáu truùc phaàn cöùng kit vi ñieàu khieån 55 PHAÀN II: THIEÁT KEÁ Chöông I: Thieát keá phaàn cöùng 60 I – Maïch chuyeån ñoåi AD 60 II – Maïch DA 62 Chöông II: Thieát keá phaàn meàm 68 I – Löu ñoà giaûi thuaät chöông trình 68 II – Chöông trình 71 PHAÀN III: PHUÏ LUÏC PHAÀN DAÃN NHAÄP I – ÑAËT VAÁN ÑEÀ: Vaøo ñaàu nhöõng naêm thaäp nieân 60, kyõ thuaät soá ñaõ ñöa vaøo öùng duïng trong thöïc teá nhöng ôû phaïm vi nhoû. Cho ñeán ngaøy hoâm nay kyõ thuaät soá ñaõ ñöôïc phaùt trieån moät caùch maïnh meõ vaø ñöôïc öùng duïng vaøo moïi laõnh vöïc cuûa cuoäc soáng. Töø nhöõng chieác maùy vi tính (computer), maùy CD, maùy VDC, truyeàn hình soá … cho ñeán caùc baêng diaõ CD ñaõ daàn daàn thay theá caùc maùy vaø baêng töø tín hieäu töông töï (analog) bôûi boä phaân giaûi roäng, ñoä chính xaùc cao vaø deã daøng trong quaù trình xöû lyù tín hieäu. Tuy nhieân trong cuoäc soáng haèng ngaøy chuùng ta laïi thöôøng tieáp xuùc vôùi nhöõng tín hieäu töông töï nhieàu hôn. vd: Ñieän thoaïi, soùng ñaøi truyeàn hình, doøng ñieän sinh hoaït, aâm thanh … vì theá phaûi caàn coù moät söï chuyeån ñoåi töø tín hieäu töông töï (Analog) – soá (Digital) ñeå xöû lyù döõ lieäu, sau ñoù laïi chuyeån ñoåi ngöôïc laïi töø soá (Digital) – töông töï (Analog) ñeå ñöa vaøo ñieàu khieån, khoáng cheá thieát bò. Ñoù laø nhöõng lyù do ñeå em thöïc hieän ñeà taøi naøy. II – MUÏC ÑÍCH YEÂU CAÀU CUÛA ÑEÀ TAØI Coù raát nhieàu phöông phaùp ñeå thöïc thi vieäc chuyeån ñoåi A/D vaø D/A Söû duïng vi maïch soá Söû duïng vi xöû lyù Söû duïng vi ñieàu khieån Vôùi ñeà taøi naøy em söû duïng vi ñieàu khieån ñeå thöïc hieän vieäc chuyeån ñoåi A/D vaø D/A Muïc ñích: Chuyeån ñoåi tín hieäu Analog – Digital ñeå xöû lyù, sau ñoù chuyeån ñoåi ngöôïc laïi töø Digital – Analog ñeå ñieàu khieån, khoáng cheá thieát bò Yeâu caàu: Hieåu roõ veà kyõ thuaät soá, caùc quaù trình chuyeån ñoåi A/D vaø D/A beân trong nhöõng vi maïch chuyeân duïng (IC ADC 0809 vaø DAC 0808), naém vöõng caùch söû duïng keát noái phaàn cöùng vaø phaàn meàm cuûa KIT 8051. III – GIÔÙI HAÏN ÑEÀ TAØI Do söï chuyeån ñoåi A/D vaø D/A ñeå ñieàu khieån vaø xöû lyù baèng KIT 8051 raát phong phuù vaø ña daïng maø kieán thöùc cuûa em thì coøn raát nhieàu haïn cheá ñaët bieät ñoái vôùi vi ñieàu khieån 8051 laø phaàn khoâng coù trong chöông trình giaûng daïy cuûa nhaø tröôøng, chuû yeáu laø em töï tìm toøi hoïc hoûi, nghieân cöùu laø chính. Beân caïnh ñoù chæ vôùi thôøi gian 6 tuaàn ñeå tìm hieåu, vieát luaän vaên vaø thi coâng thì ñeà taøi naøy em xin ñöôïc trình baøy vaø thöïc hieän moät quaù trình chuyeån ñoåi A/D vaø D/A cô baûn nhaát. Ngaøy 25 Thaùng 02 Naêm 2000 Sinh vieân thöïc hieän Nguyeãn Vuõ Anh Duy PHAÀN I GIÔÙI THIEÄU TOÅNG QUAÙT Chöông I BIEÁN ÑOÅI TÖÔNG TÖÏ – SOÁ VAØ SOÁ – TÖÔNG TÖÏ A – BIEÁN ÑOÅI TÖÔNG TÖÏ SOÁ (ADC): Bieán ñoåi töông töï – soá (analog – digital) laø thaønh phaàn caàn thieát trong vieäc xöû lyù thoâng tin vaø caùc caùch ñieàu khieån söû duïng phöông phaùp soá. Tín hieäu thöïc ôû Analog. Moät heä thoáng tieáp nhaän döõ lieäu phaûi coù caùc boä phaän giao tieáp Analog – Digital (A/D). Caùc boä chuyeån ñoåi töông töï soá, vieát taét laø ADC thöïc hieän hai chöùc naêng cô baûn laø löôïng töû hoùa vaø maõ hoùa. Löôïng töû hoùa laø gaùn cho nhöõng maõ nhò phaân cho töøng giaù trò rôøi raïc sinh ra trong quaù trình löôïng töû hoùa. I – TOÅNG QUAÙT 1 – Quan heä In – Out: Bieán ñoåi AD coù tính chaát tæ leä. Tín hieäu vaøo Analog ñöôïc bieán ñoåi thaønh moät phaân soá X baèng caùch so saùnh vôùi tín hieäu tham chieáu Vref. Ñaàu ra cuûa boä ADC laø maõ cuûa phaân soá naøy. Baát kyø moät sai soá tín hieäu Vref naøo cuõng seõ daãn ñeán sai soá möùc ra, vì vaäy ngöôøi ta coá gaén giöõ cho Vref caøng oån ñònh caøng toát. ADC Vref Vin Digital output Hình 2.1 Quan heä vaøo ra caùc khoái ADC Neáu boä ADC xuaát maõ ra goàm n bit thì soá möùc ra rôøi raïc laø 2n. Ñoái quan heä tuyeán tính, taàn vaøo ñöôïc löôïng töû hoùa theo ñuùng möùc naøy. Moãi möùc nhö vaäy laø moät tín hieäu Analog ñöôïc phaân bieät vôùi hai maõ keá tieáp nhau, noù chính laø kích thöôùc cuûa LSB (Least Significant Bit). FS Q=LSB= 2N Trong ñoù : Q : Löôïng töû LSB : bit coù troïng soá thaáp nhaát FS : giaù trò toaøn thang Taát caû caùc giaù trò Analog cuûa löôïng töû Q ñöôïc bieåu dieãn bôûi maõ soá, maø maõ naøy töông öùng vôùi giaù trò trung bình cuûa löôïng töû (coù theå hieåu laø giöõa khoaûng LSB) goïi laø möùc ngöôõng. Caùc giaù trò Analog naèm trong khoaûng töø möùc ngöôõng sai bieät ñi ± ½ LSB vaãn ñöôïc theå hieän baèng cuøng moät maõù, ñoù laø sai soá löôïng töû hoùa. Sai soá naøy coù theå seõ giaûm ñi baèng caùch taêng soá bit trong maõ ra boä ADC. 2 – Ñoä phaân giaûi: Laø giaù trò bieán ñoåi nhoû nhaát cuûa tín hieäu vaøo ra ñöôïc yeâu caàu ñeå thay ñoåi maõ leân moät möùc. Ñoä phaân giaûi ñöôïc ñöa ra vôùi giaû thieát lyù töôûng. 3 – Ñoä chính xaùc: Söï sai bieät giöõa caùc giaù trò ñieän aùp tín hieäu vaøo so vôùi giaù trò FS töông ñöông vôùi maõ xuaát ra. Thöôøng coù ghi trong ñaëc tính cuûa caùc boä ADC thöông maïi. 4 – ADC: Tuøy theo coâng ngheä cheá taïo maø boä ADC coù ñaàu vaøo ñôn cöïc hay löôõng cöïc, ña soá naèm trong khoaûng 0…5V hoaëc 0…10V ñoái vôùi ñôn cöïc vaø -5…+5V hoaëc –10V…+10V ñoái vôùi ADC löôõng cöïc. Tín hieäu vaøo caàn phuø hôïp vôùi taàm vaøo xaùc ñònh cho töøng boä ADC. Neáu ñaàu vaøo khoâng heát thang seõ taïo maõ voâ duïng ôû ñaàu ra. Vaán ñeà naøy ñöôïc giaûi quyeát baèng caùch choïn taàm ñaàu vaøo boä ADC sau ñoù chænh ñoä lôïi thích hôïp cho ñaàu vaøo cuûa nguoàn Analog. Khi söû duïng boä ADC ñôn cöïc maø coù tín hieäu vaøo laø löôõng cöïc trong khoaûng ±Vpp thì ta caàn phaûi coäng ñieän aùp vaøo Vi vôùi moät ñieän aùp neàn baèng +Vpp, khi ñoù ta seõ coù Vi naèm trong khoaûng 0..+2Vpp; tín hieäu naøy seõ ñöôïc ñöa tôùi ñaàu vaøo boä ADC. Neáu söû duïng ADC löôõng cöïc thì khoâng caàn coäng tín hieäu vaø ñaàu ra ta seõ nhaän ñöôïc maõ löôõng cöïc. 5 – Ñaàu ra boä ADC: Ña soá caùc ADC coù ñaàu ra 8 Bits, 16 Bits … duø vaäy cuõng coù loaïi 3½ Digit, maõ BCD, 10 Bits, 14 Bits. Ñaàu caùc boä ADC thöôøng laø maõ nhò phaân töï nhieân hoaëc coù daáu. ADC duøng cho maùy ño chæ thò soá ña duïng thöôøng laø maõ BCD. 5 – Tín hieäu tham chieáu Vr: ADC Vi+ (EOC) End of Convertion Vi - OE (Output Enable) Vr Start Digital Output Clock Hình 2.3 Caùc ngoõ vaøo, ra chính cuûa boä ADC Hình veõ cho thaáy ñaàu vaøo vaø ñaàu ra cuûa boä ADC. Moïi ADC ñeàu yeâu caàu coù tín hieäu Vr. Baát kyø moät sai soá naøo treân Vr ñeàu gaây ra loãi ñoä lôïi ôû ñaëc tính cuûa AD. Vì vaäy Vr laø tín hieäu ñaûm baûo ñoä chính xaùc vaø oån ñònh cuûa boä AD. Duøng IC oån aùp coù theå thoûa maõn ñieàu naøy. 7 – Tín hieäu ñieàu khieån: Moïi boä ADC ñeàu coù tính xung Clock vaø tín hieäu ñieàu khieån ñeå hoaït ñoäng. Thieát bò ngoaøi giao tieáp vôùi ADC seõ khôûi ñoäng quaù trình AD baèng caùch phaùt moät xung Start vaøo ñaàu vaøo Start cuûa ADC, ADC seõ nhaän bieát caïnh leân cuûa xung Start vaø ngay sau ñoù noù seõ keùo ñöôøng EOC (End of Conversion) xuoáng thaáp (khoâng tích cöïc). Luùc naøy ADC ñang thöïc hieän quaù trình bieán ñoåi, töông öùng vôùi moãi xung Clock ñöa vaøo ADC seõ thöïc hieän ñöôïc moät böôùc bieán ñoåi, sau moät böôùc nhaát ñònh tuøy theo boä ADC, thì quaù trình bieán ñoåi hoaøn thaønh. Khi bieán ñoåi xong, AD seõ naâng ñöôøng EOC leân möùc cao, tín hieäu naøy coù theå duøng ñeå kích moät ngaét cöùng cuûa maùy tính (neáu duøng giao tieáp vôùi maùy tính). Ñeå ñoïc ñöôïc döõ lieäu ñaàu ra cuûa boä ADC thì phaûi naâng ñöôøng OE (Output Enable) cuûa ADC leân möùc cao, sau khi ñoïc xong thì laïi traû ñöôøng naøy veà möùc thaáp. II – CAÙC KYÕ THUAÄT AD: 1 – ADC coù Vr daïng naác thang: Control Clock Counter DAC Analog Vht Vref input Vi Reference Comparateur Digital output Hình 2.4 Sô ñoà khoái AD coù Vr daïng naác thang Counter: Boä ñeám taïo ñaàu ra cho boä ADC baèng hoaëc lôùn hôn giaù trò vaøo Vi. Noù ñöôïc reset taïi moïi thôøi ñieåm baét ñaàu thöïc hieän AD vaø ñeám daàn leân sau moãi xung Clock. Cöù moãi laàn ñeám boä DAC laïi naâng leân moãi naác thang (1 LSB). Boä so saùnh seõ duøng boä ñeám laïi khi ñieän aùp DAC (aùp hoài tieáp) ñaït tôùi giaù trò vaøo Vi. Nhöôïc ñieåm cuûa phöông phaùp naøy laø Tc (thôøi gian chuyeån ñoåi) theo möùc tín hieäu vaøo vaø ñoâi khi raát laâu. Tc=2ⁿ x Tclock ñoái vôùi boä DAC n bit khi bieán ñoåi moät tín hieäu vaøo ôû möùc FS (Full Scale). Moät caûi tieán cuûa phöông naøy laø “tracking” hay “servo” söû duïng boä ñeám thuaän nghòch cho pheùp DAC ñöa tín hieäu vaøo lieân tuïc. Baèng söï khoáng cheá boä ñeám töø beân ngoaøi taïi moät ñieåm nhaát ñònh ta duøng boä DAC kieåu tracking nhö moät boä S & H (Sample and Hold). 2 – ADC thaêng baèng lieân tuïc: Sô ñoà khoái gioáng nhö phöông phaùp tröôùc, nhöng boä ñeám laø boä ñeám thuaän nghòch. Veà cô baûn cuõng gioáng nhö phöông phaùp treân nhöng boä ñeám hoaït ñoäng ñöôïc ôû cheá ñoä thuaän nghòch. Khi tín hieäu Vht < Vi thì boä ñeám seõ ñeám leân, ngöôïc laïi thì boä ñeám seõ ñeám xuoáng. Quaù trình xaùc laäp ghi nhaän ñöôïc khi giaù trò Vht dao ñoäng xung quanh giaù trò Vi. Tc cuõng phuï thuoäc vaøo Vi vaø nhöôïc ñieåm sai soá cuõng gioáng phöông phaùp treân: sai soá ñoäng phuï thuoäc vaøo thôøi gian bieán ñoåi vaø sai soá tónh chuû yeáu ôû boä bieán ñoåi DA vaø boä so saùnh. 3 – Phöông phaùp bieán ñoåi AD haøm doác tuyeán tính: (Phuông phaùp tích phaân moät ñoä doác) Veà baûn chaát thöïc hieän bieán ñoåi trung gian töø ñieän aùp ra khoaûng thôøi gian sau ñoù ño khoaûng thôøi gian theo phöông phaùp soá. Quaù trình bieán ñoåi seõ xaûy ra nhö sau: Gate Clock Couter Scan Comparator Vi V1 Vs V2 Start Result Hình 2.6 Sô ñoà khoái phöông phaùp ADC haøm doác tuyeán tính Sau thôøi gian kích khôûi, boä ñeám seõ baét ñaàu ñeám leân vaø maïch queùt seõ baét ñaàu taïo ra tín hieäu tuyeán tính thôøi gian. Tín hieäu queùt vaø tín hieäu vaøo Vi ñöôïc so saùnh vôùi nhau, khi hai tín hieäu naøy baèng nhau thì maïch so saùnh seõ ñoùng coång khoâng cho xung tôùi boä ñeám nöõa. Nhö vaäy noäi dung cuûa boä ñeám seõ tæ leä vôùi thôøi gian to, maø to laïi tæ leä thuaän vôùi giaù trò Vi neân noäi dung boä ñeám tæ leä vôùi Vi. Ñoä chính xaùc cuûa phöông phaùp naøy phuï thuoäc vaøo ñoä tuyeán tính cuûa tín hieäu queùt (sai soá ñoä doác caøng nhoû, ñoä chính xaùc caøng cao), tín hieäu phuï thuoäc vaøo taàn soá cuûa töøng xung. Phöông phaùp naøy coù toác ñoä hoaït ñoäng cao hôn caùc phöông phaùp ban ñaàu, vaø ñoä chính xaùc cuõng cao hôn do khoâng caàn söû duïng boä bieán ñoåi DA. 4 – ADC xaáp xæ lieân tieáp: SAR Clock DAC Analog Input Vi Comparateur Vref Reference Digital output Hình 2.8 ADC xaáp xæ lieân tieáp Phöông phaùp naøy ñöôïc duøng trong kyõ thuaät bieán ñoåi AD toác ñoä cao – trung bình. Noù cuõng duøng moät boä DAC beân trong ñeå taïo ra moät ñieän aùp baèng möùc vaøo vaø cuûa tín hieäu sau ñuùng baèng n chu kyø xung Clock cho tröôøng hôïp ADC n bit. Phöông phaùp naøy cho pheùp ruùt ngaén Tc raát nhieàu vaø khoâng phuï thuoäc vaøo tín hieäu vaøo Vi. Kyõ thuaät naøy phuï thuoäc vaøo söï xaáp xæ tín hieäu vaøo vôùi maõ nhò phaân, sau ñoù thay ñoåi caùc bit trong maõ naøy moät caùch lieân tieáp cho ñeán khi ñaït ñöôïc maõ gaàn ñuùng nhaát. Taïi moãi böôùc cuûa quaù trình naøy, giaù trò xaáp xæ cuûa maõ nhò phaân thu ñöôïc seõ ñöôïc löu vaøo SAR (Successive Approximate Register). Vieäc bieán ñoåi luoân ñöôïc baét ñaàu taïi MSB (Most Significant Bit) cuûa SAR khi ñoù ñöôïc baät leân. Boä so saùnh seõ so saùnh ñaàu ra cuûa ADC vôùi Vi vaø ra leänh cho boä ñieàu khieån ngaét MSB neáu nhö giaù trò ban ñaàu naøy vöôït quaù ñaàu vaøo AD. Trong chu kyø xung Clock keá tieáp, MSB laïi ñöôïc phaùt trôû laïi. Moät laàn nöõa boä so saùnh seõ quyeát ñònh laáy hay boû MSB naøy. Söï bieán ñoåi naøy seõ tieán daàn ñeán söï ñuùng nhaát so vôùi tín hieäu vaøo xuaát döõ lieäu naøy ra. DAC output 100 MSB LSB 1 1 0 SAR output Hình 2.9 Ñoà thò daïng soùng cuûa maïch 111 111 110 110 101 101 100 100 010 011 011 010 011 001 000 Hình 2.10 Sô ñoà thay ñoåi möùc logic 5 – ADC tích phaân hai ñoä doác: Kyõ thuaät naøy thaáy roõ treân sô ñoà khoái. Ta thaáy ñieän aùp vaøo ñöôïc tích phaân trong khoaûng thôøi gian t1, ñuùng baèng luùc boä ñeám ñeám heát. Taïi cuoái t1, boä ñeám seõ reset vaø boä tích phaân chuyeån qua möùc tham chieáu aâm, ñaàu ra cuûa boä tích phaân seõ giaûm tuyeán tính veà zero taïi ñoù boä ñeám ngöng ñeám vaø ñöôïc reset. Ñieän tích naïp tuï trong khoaûng thôøi gian t gaàn baèng ñieän tích xaû trong khoaûng thôøi gian t2: t1 x V1 = t2 x V2 Þ t2 = V1 = x t1 V2 Tæ soá x cuõng chính laø tæ soá maø maõ nhò phaân cuûa boä ñeám lôùn nhaát Þ giaù trò ñeám ñöôïc vaøo cuoái t2 cuõng laø giaù trò xuaát ra. Kyõ thuaät naøy coù moät soá öu ñieåm, nhaát laø chaát löôïng khöû oàn. Tín hieäu vaøo ñöôïc tích phaân qua moät chu kyø, do ñoù baát kyø möùc oàn naøo cuõng coù taàn soá laø boäi soá cuûa 1/t1 ñeàu bò loaïi. Control logic Clock Couter Analog reference + Vr - - + Vi Digital Output Hình 2.11 Sô ñoà khoái ADC tích phaân hai ñoä doác Chuù yù raèng, taàn soá xung Clock khoâng aûnh höôûng gì ñeán ñoä phaân giaûi. Ñoä phaân giaûi cuûa kyõ thuaät naøy chæ bò giôùi haïn bôûi chaát löôïng maïch vaø khoâng phuï thuoäc vaøo ñoä phi tuyeán cuûa boä AD: Do ñoù ñaàu ra cuûa boä tích phaân coù theå nhaûy caáp töï do maø khoâng sôï phaùt sinh maõ loãi ôû ñaàu ra. Vì vaäy maø ñoä phaân giaûi toát raát deã ñaït ñöôïc vaø coù theå thay ñoåi baèng caùch chænh kích thöôùc cuûa voøng ñeám vaø taàn soá xung Clock. Taàn soá thaáp laø nhöôïc ñieåm duy nhaát cuûa phöông phaùp. Phöông phaùp naøy thöôøng ñöôïc duøng cho caùc ñoàng hoà hieän soá, maùy ño ña naêng chæ thò soá, caûm bieán nhieät ñoä vaø nhöõng öùng duïng coù yeâu caàu khoâng cao veà taàn soá laáy maãu. 6 – ADC duøng bieán ñoåi V – F (ñieän aùp – taàn soá): VFC Boä phaùt Boä thu Ñònh thôøi Ñeám Digital output Hình 2.13 Sô ñoà khoái boä bieán ñoåi AD daïng VF Hình treân cho thaáy kyõ thuaät naøy trong boä bieán ñoåi AD. AÙp vaøo Analog ñöôïc moät boä VF chính xaùc bieán thaønh moät daõy xung coù taàn soá tæ leä vôùi aùp vaøo. Moät boä ñeám seõ ñeám soá xung naøy trong moät khoaõng thôøi gian nhaát ñònh roài xuaát soá ñeám cho boä AD. Gioáng kyõ thuaät tích phaân ñoä doác keùp, kyõ thuaät naøy coù taàn soá thaáp nhöng khöû nhieãu toát. Neáu thôøi gian Tc thaáp ôû möùc coù theå chaáp nhaän ñöôïc thì phöông phaùp VF cho pheùp ñaït ñöôïc ñoä phaân giaûi cao vôùi tín hieäu thay ñoåi chaäm vôùi giaù thaønh haï. Öu ñieåm cuûa phöông phaùp naøy laø coù khaû naêng ñieàu khieån töø xa trong moâi tröôøng oàn. Coù theå laøm moät boä VF nhö moät haøm truyeàn döõ lieäu töø xa döôùi daïng soá ñeán traïm kieåm soaùt, taïi ñaây coù boä xöû lyù (tieáp nhaän + boä ñeám + xuaát döõ lieäu). Ñieàu naøy traùnh ñöôïc vieäc truyeàn tín hieäu Analog qua moâi tröôøng nhieãu coù khaû naêng laøm xaáu tín hieäu. Vieäc truyeàn baèng tín hieäu VF cuõng coù khaû naêng trieät nhieãu baèng caùch taïo söï caùch ly giöõa boä bieán ñoåi vôùi thieát bò caûm bieán, moät yeâu caàu quan troïng trong caùc traïm kieåm soaùt vaø ñieàu khieån caùc heä thoáng ñieän cao aùp. Thöïc teá, kyõ thuaät naøy phuï thuoäc vaøo caùc vi maïch VFC thoâng duïng, reû tieàn, coù chaát löôïng toát (tuyeán tính vaø oån ñònh). 7 – ADC song song: Encoder Vr Vi R Digital output R R 2 2n-1 Comparator Hình 2.14 Sô ñoà khoái AD song song Ñöôïc duøng trong kyõ thuaät caàn bieán ñoåi AD toác ñoä cao, nhö kyõ thuaät Video, kyõ thuaät Radar, dao ñoäng kyù soá. Trong kyõ thuaät naøy tín hieäu vaøo ñöôïc so saùnh ngay laäp töùc vôùi taát caû caùc möùc ngöôõng baèng caùch duøng nhieàu boä so saùnh. Vieäc löôïng töû hoùa do vaäy thöïc hieän hoaøn taát trong cuøng moät luùc. Boä giaûi maõ nhanh laäp töùc ñoåi caùc tín hieäu so saùnh ñöôïc tôùi ñaàu ra. ADC duøng phöông phaùp naøy coù taàn soá laáy naãu phuï thuoäc vaøo toác ñoä (thôøi gian treã) cuûa caùc boä so saùnh. Thoâng thuôøng vi maïch so saùnh coù thôøi gian treã trong khoaûng 10-12ns, vì vaäy treân lyù thuyeát, taàn soá laáy maãu cuûa ADC coù ñoä phaân giaûi 8 Bits caàn tôùi 2 8 – 1=255 boä so saùnh, do vaäy kích thöôùc vi maïch seõ raát lôùn. III – GIAO TIEÁP PHAÀN MEÀM: Döõ lieäu truyeàn giöõa ADC vaø vi xöû lyù coù theå toå chöùc trong phaàn meàm theo 3 caùch: 1 – Memory – Mapped – Transfers (Truyeàn theo baûn ñoà nhôù): Trong baûn ñoà boä nhôù, ADC ñöôïc chæ ñònh trong moät vuøng boä nhôù thöïc söï chöa söû duïng. Beân caïnh vieäc söû duïng toái ña boä nhôù, ta coù duøng phaàn cöùng giaûi maõ ñòa chæ töø toái thieåu ñeán toái ña ñeå khoâng laõng phí khoâng gian trong boä nhôù. 2 – Input / Output Mapped Tranfers (Truyeàn theo baûn ñoà I/O): Moät vaøi heä thoáng taïo ra vuøng I/O coù ñòa chæ raát rieâng bieät, maø ôû ñoù ñòa chæ coù theå gioáng ñòa chæ boä nhôù, coù theå phaân bieät chuùng vôùi nhau baèng caùch duøng tín hieäu ñieàu khieån ñaëc bieät IOR, IOW treân heä thoáng Bus cuûa IBM – PC. Söï phaân bieät giöõa I/O vaø 2 vuøng boä nhôù laøm cho thieát keá heä thoáng trôû neân toát hôn. Noù cho pheùp giaûi maõ ñòa chæ söû duïng phaàn cöùng laø toái thieåu, giaûi maõ töø vuøng IO ñôn giaûn vaø toát hôn boä nhôù coù giaù trò chöa söû duïng. 3 – DMA (Direct Memory Access : truy maát tröïc tieáp boä nhôù): Khi chæ coù truyeàn döõ lieäu ñôn giaûn giöõa boä nhôù vaø ngoaïi vi ñöôïc duøng tích luõy trong quaù trình chuyeàn laøm chaäm quaù trình moät caùch khoâng caàn thieát. Baèng vieäc söû duïng keát hôïp trong phaàn cöùng trong daïng thieát bò phuïc vuï goïi laø “ñieàu khieån DMA”. Vieäc truyeàn tröïc tieáp coù taùc ñoäng nhanh hôn nhieàu, haàu heát caùc boä vi xöû lyù cho pheùp DMA thöïc hieän ñaày ñuû baèng caùch caáp ñieàu khieån cuûa Bus heä thoáng cho khoaûng ñònh tröôùc. Ñieàu khieån DMA laáy ñòa chæ yeâu caàu vaø tín hieäu ñieàu khieån. Taïi cuoái khoaûng, ñieàu khieån Bus quay laïi vi xöû lyù. Truyeàn döõ lieäu hoaøn toaøn coù theå laáy nhieàu chu kyø DMA ñeå thi haønh. IV – GIAO TIEÁP PHAÀN CÖÙNG: Thieát keá phaàn cöùng theo moâ hình döõ lieäu song song hay noái tieáp. 1 – Döõ lieäu truyeàn song song: Phaàn cöùng cho giao tieáp döõ lieäu song song haàu heát bao goàm ngoõ ra ñeäm ba traïng thaùi maø ADC noái vôùi Bus döõ lieäu cuûa vi xöû lyù. Ñòa chæ giaûi maõ vaø tín hieäu ñieàu khieån ghi ñoïc cuûa cho pheùp ñeäm truyeàn döõ lieäu ADC vaøo mP. Giaûi maõ töông öùng vaø tín hieäu ñieàu khieån cuûa mP taïo thaønh leänh baét ñaàu cho boä bieán ñoåi. Noù khoâng caàn duøng ñieàu khieån R/W rieâng bieät, duø sao vieäc laøm naøy cho pheùp ñòa chæ gioáng nhau cho vieäc gôûi leänh ñeán ADC vaø ñeå ñoïc ngoõ ra ADC. Caùc ADC môùi hôn coù boä ñeäm ba traïng thaùi vôùi maïch ñieàu khieån cuûa chuùng. Nhöõng ADC naøy coù theå noái tröïc tieáp vôùi Bus döõ lieäu cuûa vi xöû lyù. Giao tieáp nhieàu thieát bò, thì ta phaûi cung caáp giaûi maõ vaø ñoâi khi phaûi moät vaøi coång quaûn lyù tín hieäu ñieàu khieån. Giao tieáp vôùi heä thoáng mP thì ñôn giaûn bôûi vì mP cung caáp ñòa chæ Port tröïc tieáp vaø vieäc giaûi maõ ñòa chæ laø khoâng caàn thieát. 2 – Moâ hình döõ lieäu noái tieáp : Duøng trong vieäc truyeàn döõ lieäu ñi xa. Truyeàn ñoàng boä noái tieáp duøng cho tuyeán phuïc vuï hay tuyeán ñieän thoaïi. Thieát bò goïi laø UART (truyeàn nhaän khoâng hoaøn toaøn ñoàng boä). UART nhaän vaø truyeàn döõ lieäu daïng tuaàn töï nhöng giao tieáp vôùi mP daïng song song. B – BIEÁN ÑOÅI TÖÔNG TÖÏ SOÁ (DAC) : Bieán ñoåi DA thöôøng laø giai ñoaïn cuoái cuûa moät heä thoáng xöû lyù soá: Sau khi tín hieäu töông töï ôû ñaàu vaøo ñöôïc maïch ADC bieán ñoåi sang daïng soá, noù ñöôïc xöû lyù, löu tröõ döôùi daïng soá bôûi heä xöû lyù trung taâm roài keát quaû xöû lyù seõ ñöôïc ñöa ñeán maïch DAC ñeå xuaát ra döõ lieäu daïng töông töï. Maïch DAC nhaän ôû ñaàu vaøo moät giaù trò soá nhò phaân töï nhieân vaø xuaát ra ôû ngoõ ra moät ñieän aùp daïng töông töï coù giaù trò tæ leä vôùi giaù trò ngoõ vaøo. I – TOÅNG QUAÙT: 1 – Quan heä vaøo ra: Vref V0 (I0) DAC Digital input Hình 2.15 Quan heä vaøo ra boä DAC Bieán ñoåi DA coù tính chaát tæ leä. Tín hieäu vaøo Digital N ñöôïc bieán ñoåi thaønh moät ñieän aùp (hoaëc doøng ñieän) coù giaù trò Q (phuï thuoäc vaøo tín hieäu tham chieáu Vref) baèng caùch so saùnh giaù trò ôû ñaàu vaøo vôùi giaù trò ñaày thang cuûa ñaàu vaøo. Baát kyø moät sai soá tín hieäu Vref naøo cuõng seõ daãn tôùi sai soá möùc ra, vì vaäy ngöôøi ta coá gaéng cho Vref caøng oån ñònh caøng toát. Thoâng thöôøng, ôû caùc boä bieán ñoåi DAC thöông maïi, ngoõ ra seõ xuaát hieän doøng ñieän, vì vaäy ta phaûi maéc theâm moät bieán ñoåi doøng thaønh aùp coù theå nhaän ñöôïc ñieän aùp ra. 2 – Ñaàu vaøo boä DAC: Ña soá caùc boä DAC coù ñaàu vaøo 8 Bits, 10 Bits, 12 Bits, 16 Bits … Ñaàu vaøo caùc boä DAC thöôøng laø caùc maõ nhò phaân töï nhieân hoaëc coù daáu. Neáu maõ ñaàu vaøo ñaàu vaøo coù daáu thì tín hieäu tham chieáu Vref phaûi laø tín hieäu löôõng cöïc. Boä DAC seõ lieân tuïc bieán ñoåi soá ôû ngoõ vaøo thaønh giaù trò töông töï ôû ngoõ ra, thôøi gian cho moät laàn bieán ñoåi nhö vaäy tuøy theo boä DAC. Vì vaäy ñeå ñaûm baûo chính xaùc, ngöôøi ta maéc theâm ôû ngoõ vaøo boä DAC moät maïch choát döõ lieäu ñeå traùnh hieän töôïng boä DAC xuaát ra tín hieäu khoâng xaùc ñònh trong khoaûng thôøi gian töï do giöõa hai laàn caäp nhaät döõ lieäu ôû ngoõ vaøo. 3 – Ñaàu ra boä DAC Tuøy theo coâng ngheä cheá taïo maø ñaàu ra cuûa boä DAC coù theå laø doøng hoaëc aùp. 4 – Tín hieäu ñieàu khieån: Haàu heát caùc boä DAC ñeàu khoâng caàn tín hieäu ñieàu khieån. II – GIAO TIEÁP DAC VÔÙI VI XÖÛ LYÙ: 1 – Xuaát döõ lieäu tuaàn töï: Khi coù yeâu caàu xuaát moät chuoãi döõ lieäu ra coång, phaàn meàm xöû lyù seõ tuaàn töï xuaát töøng Byte döõ lieäu trong boä ñeäm ra coång. Ñeå taïo ñöôïc taàn soá xuaát theo mong muoán, ñaàu tieân chöông trình phaûi tính ñöôïc toác ñoä cuûa CPU coù theå xuaát ra coång giao tieáp trong moät dòch vuï thôøi gian (1 giaây). Töø thoâng tin ñoù, phaàn meàm coù theå tính ñöôïc thôøi gian treã (Delay) giöaõ hai laàn xuaát döõ lieäu ñeå taïo ra taàn soá xuaát theo yeâu caàu. Phöông phaùp naøy taïo ra taàn soá xuaát döõ lieäu raát cao (leân tôùi khoaûng 40Khz hoaëc cao hôn tuøy theo kieåu maùy tính), nhöng taàn soá raát khoù ñeå coù theå taïo ra moät caùch chính xaùc. Maët khaùc CPU cuõng seõ bò baän trong suoát quaù trình xuaát döõ lieäu. 2 – Caøi ñaët moät ngaét ngoaïi vi: Phöông phaùp naøy söû duïng xung Start ñeå maïch laáy maãu ADC ñeå kích hoaït moät chöông trình phuïc vuï ngaét, chöông trình phuïc vuï naøy seõ laøm nhieäm vuï xuaát moät Byte döõ lieäu ra coång. Xung Start ôû ñöôïc lôïi duïng ñeå taïo ra moät taàn soá kích ngaét baèng taàn soá laáy maãu. 3 – Söû duïng ngaét ñoàng hoà: Ta bieát raèng trong heä thoáng cuûa maùy tính coù ngaét soá 8 laø moät ngaét coù kích hoaït ñònh kyø theo thôøi gian, goïi laø ngaét ñoàng hoà, chu kyø kích ngaét coù theå coù theå thay ñoåi ñöôïc baèng caùch laäp trình cho boä ñònh thì 8253. Lôïi duïng ngaét coù saün naøy, ta coù caøi theâm moät chöông trình phuïc vuï ngaét cuûa maùy roài laäp trình cho boä 8253 ñeå taïo ra moät taàn soá kích ngaét theo mong muoán. Chöông II GIAO TIEÁP NGOAÏI VI 8255A PPI 8255A (PROGRAMABLE PARALLEL INTERFACE) I – TOÅNG QUAÙT: 1 – Boä ñeäm truyeàn döõ lieäu: Boä ñeäm 8 Bits, 2 chieàu, 3 traïng thaùi duøng ñeå giao tieáp 8255 vôùi CPU. Döõ kieän ñöôïc phaùt hay nhaän bôûi boä ñeäm khi thöïc hieän leänh IN, OUT bôûi CPU. Caùc töø ñieàu khieån cuõng truyeàn qua döõ kieän. Ñeäm döõ kieän Ñieàu khieån Nhoùm A Nhoùm A Cöûa A Nhoùm A Cöûa C Phaàn cao Nhoùm B Cöûa C Phaàn thaáp Nhoùm B Cöûa B Kieåm soaùt ñoïc ghi Ñieàu khieån nhoùm B I/O PA0-DA7 I/O PC4-PC7 I/O PC0-PO3 I/O PB0-PB7 Hình 3.1 Caáu truùc khoái cuûa 8255 2 – Phaàn kieåm soaùt ñoïc ghi: Chöùc naêng cuûa khoái naøy laø kieåm soaùt taát caû caùc söï truyeàn ñaït beân trong vaø beân ngoaøi cuûa töø ñieàu khieån vaø döõ kieän. Noù nhaän ngoõ vaøo töø tuyeán ñòa chæ vaø söï ñieàu khieån cuûa CPU, phaùt ra caùc leänh caàn thieát cho caû hai nhoùm A vaø B. CS: ngoõ vaøo = 0 cho pheùp truyeàn tin giöõa 8255 vaø CPU. RD: = 0 cho pheùp 8255 gôûi döõ kieän ñeán CPU treân tuyeán döõ kieän chuû yeáu laø cho pheùp CPU ñoïc döõ kieän töø 8255. WR=0 – CPU töø ñieàu khieån hay döõ kieän ra 8255. A0 A1 Choïn cöûa 0 0 Cöûa A 0 1 Cöûa B 1 0 Cöûa C 1 1 Cöûa ñieàu khieån RESET: =1 xoùa caùc thanh ghi beân trong goàm thanh ghi ñieàu khieån vaø caùc cöûa A, B, C ôû mode nhaän. 3 – Ñieàu khieån nhoùm A vaø B: Caáu hình hoaït ñoäng cuûa moãi nhoùm ñöôïc laäp trình bôûi phaàn meàm, chuû yeáu laø CPU xuaát phaùt töø ñieàu khieån ñeán 8255. Töø ñieàu khieån goàm caùc thoâng tin nhö cheá ñoä (mode), bit set, bit reset, v.v … seõ khôûi ñoäng caáu hình hoaït ñoäng cuûa 8255. Thanh ghi töø ñieàu khieån chæ coù theå vieát vaøo maø khoâng ñoïc ra. 4 – Caùc cöûa A, B, C: 8255 goàm 3 cöûa A, B vaø C. Moãi cöûa goàm 8 bits. Caùc cöûa naøy coù theå ñöôïc laäp trình bôûi phaàn meàm ñeå coù theå hoaït ñoäng ôû cheá ñoä thích hôïp. Cöûa A: goàm boä ñeäm, caøi ngoõ ra 8 bits vaø caøi ngoõ vaøo 8 bits. Cöûa B: goàm boä ñeäm, caøi ngoõ ra 8 bits vaø caøi ngoõ vaøo 8 bits. Cöûa C: ñeäm vaø caøi ngoõ ra 8 bits vaø ñeäm 8 bits ngoõ vaøo (khoâng caøi). Cöûa C coù theå chia laøm 2 phaàn, moãi phaàn 4 bits cho ñieàu khieån mode. Moãi phaàn ñöôïc duøng keát hôïp vôùi cöûa A hay B taïo neân caùc tín hieäu ñieàu khieån. II – MO TAÛ CHI TIEÁT: 1 – Choïn cheá ñoä (Mode): Coù 3 cheá ñoä hoaït ñoäng cô baûn thích hôïp cho phaàn meàm: Mode 0 : Vaøo/ra cô baûn Mode 1 : Vaøo/ra “baét tay” (chæ cho pheùp 1 trong chieàu) Mode 2 : Truyeàn döõ kieän hai chieàu Khi RESET, taát caû caùc cöûa ñöôïc thieát laäp ôû cheá ñoä nhaäp (input), töùc laø caû 24 ñöôøng ñeàu ôû 3 traïng thaùi. Sau khi RESET 8255 coù theå duy trì ôû cheá ñoä nhaäp maø khoâng caàn khôûi ñoäng gì theâm. Trong khi thöïc hieän chöông trình heä thoáng, coù theå choïn baát kyø mode naøo baèng caùch xuaát ñeán 8255 töø ñieàu khieån. Ñieàu naøy cho pheùp chæ caàn moät 8255 maø coù theå phuïc vuï nhieàu kieåu thieát bò ngoaïi vi. Caùc cheá ñoä cöûa A vaø B coù theå ñònh nghóa rieâng bieät. Coøn cuûa C ñöôïc chia laøm hai phaàn cho hai nhoùm tuøy yeâu caàu ñònh nghóa cheá ñoä cöûa A vaø B. Ta coù töø ñieàu khieån cho 8255 nhö sau: (trang sau). 2 – Ñaëc tính xoùa/thieát laäp bit cho cöûa C khi noù duøng laøm tín hieäu traïng thaùi/ñieàu khieån cho cöûa A/B: Ta duøng leänh OUT xuaát ra töø moät ñieàu khieån, trong ñoù bit D7 = 0. D7 D6 D5 D4 D3 D2 D1 D0 Nhoùm B 1:in Mode set flag Cöûa C(phaàn thaáp) 0: out 1-active Cöûa B 1:in 0:out Choïn cheá ñoä 0:mode 0 1: mode 1 NhoùmA Cöûa C 1:in (phaàn cao) 0:out Cöûa A 1: in 0: out 00: mode 0 Choïn mode 01: mode 1 1X: mode 2 Hình 3.2 Khi choïn mode cho port A, caùc bit D3, D4, D5 khoâng coøn yù nghóa nöõa. Luùc ñoù cöûa A laø hai chieàu, coøn phaàn cao cöûa C seõ laøm tín hieäu ñieàu khieån vaø traïng thaùi cho cöûa A. (Bitset vaø reset flag), phaàn coøn laïi cuûa ñieàu khieån coù yù nghóa nhö sau: D7 D6 D5 D4 D3 D2 D1 D0 x x x Bit set / Reset 0: Reset 1:set Bit select Bit set / Reset fleg 0 - active 01010101 00110011 00001111 01234567 Hình 3.3 Moãi laàn xuaát ra moät töø ñieàu khieån ñeán 8255 vôùi D7 = 0, chæ taùc ñoäng ñeán 1 bit cuûa cöûa C (ñöôïc choïn bôûi Bit select). 3 – Chöùc naêng kieåm soaùt ngaét quaõng: Khi 8255 ñöôïc laäp trình ôû mode 1 hay 2, caùc tín hieäu ñieàu khieån ñöôïc cung caáp coù theå ñöôïc duøng ñeå yeâu caàu ngaét quaõng CPU. Tín hieäu yeâu caàu ngaét quaõng phaùt ra töø cöûa C coù theå bò caám hay cho pheùp baèng caùch set hay reset flip-flop INTE töông öùng, duøng chöùc naêng set/reset bit cuûa cöûa C. Chöùc naêng naøy cho pheùp CPU caám hay cho pheùp caùc thieát bò I/O ñaõ xaùc ñònh ngaét quaõng CPU maø khoâng laøm aûnh höôûng caùc thieát bò khaùc trong caáu truùc ngaét quaõng. III – CHEÁ ÑOÄ HOAÏT ÑOÄNG: 1 – Mode 0 (Vaøo/ra cô baûn) Khoâng coù “baét tay”, döõ kieän ñöôïc ghi vaø ñoïc moät caùch dôn giaûn ñeán phöùc taïp hay töø 1 cöûa ñaõ chæ ra. Caùc ñaëc tính cô baûn ôû mode 0: 2 cöûa 8 bits vaø 2 cöûa 4 bits Baát kyø cöûa naøo cuõng coù theå laø ra hay vaøo Ngoõ ra ñöôïc caøi Ngoõ vaøo khoâng caøi Cho pheùp 16 daïng vaøo / ra ôû mode Ví duï : Töø ñieàu khieån 83h xaùx ñònh cöûa A ra, B vaøo. Phaàn cao cuûa C : ra, phaàn thaáp cuûa C : vaøo. 2 – Mode 1 (Vaøo/ra coù baét tay): ÔÛ mode 1, cöûa A vaø B duøng nhöõng ñöôøng ôû cöûa C ñeå phaùt hay nhaän caùc tín hieäu baét tay. Ñònh nghóa caùc tín hieäu baét tay cho phaàn nhaäp: STB (Strobe Input): möùc thaáp ôû ngoõ vaøo naøy naïp döõ lieäu vaøo 8255. IBF (Input Buffer Full): ngoõ ra =1 ñeå thoâng baùo döõ kieän ñaõ ñöôïc naïp vaøo maïch caøi nhaäp Noùi caùch khaùc, möùc thaáp cuûa STB seõ thieát laäp IBF = 1, vaø IBF bò xoùa bôûi caïnh leân RD. * INTR (Interput Request): ngoõ ra = 1 ñeå yeâu caàu ngaét khoaûng CPU, INTR ñöôïc set bôûi STB = 1 vaø IBF = 1, INTR = 1. INTR bò reset bôûi caïnh xuoáng RD INTR A kieåm soaùt bôûi bit set / reset PC 4 INTR B kieåm soaùt bôûi bit set / reset PC 2 Hình 3.4 Ñònh nghóa tín hieäu ñieàu khieån phaàn xuaát: OBF (Output Buffer Full FF) Ngaõ ra xuoáng 0 ñeå baùo laø CPU ñaõ ghi thoâng tin ra cöûa xaùc ñònh. OBF FF ñöôïc set bôûi caïnh leân cuûa xung WR töø CPU vaø bò reset bôûi ACK = 0 do ngoaïi vi (töùc laø ôû möùc khoâng tích cöïc). *ACK (Acknowledge Input) Möùc thoâng baùo cho 8255 bieát thoâng tin töø cöûa A hay B ñaõ nhaän bôûi ngoaïi vi. *INTR (Interput Request) Möùc 1 ôû ngoõ ra duøng ñeå yeâu caàu ngaét quaõng CPU khi ngoaïi vi ñaõ nhaän döõ kieän phaùt bôûi CPU. INTR set bôûi ACK = 1, OBF = 1 vaø INTE = 1 INTR bò xoùa bôûi caïnh xuoáng xung WR INTE A kieåm soaùt bôûi bit set / reset PC 6 INTE B kieåm xoaùt bôûi bit set / reset PC Hình 3.5 Caùc keát hôïp cuûa mode 1: Cöûa A : vaøo, B : ra töø ñieàu khieån Cöûa A : ra, B : vaøo töø ñieàu khieån 1: in PC 4,5 0: out 1 0 1 0 1/0 x x x 1 0 1 0 1/0 1 1 x 1: in PC 4,5 0: out Hình 3.6 3 – Mode 2 : Xuaát nhaäp 2 chieàu baét tay Caùc ñaëc tính cô baûn cuûa mode 2: * Chæ duøng cho nhoùm A * 1 cöûa 2 chieàu 8 bits (A) vaø moät cöûa ñieàu khieån 5 bits (C) cho cöûa A * Caû ra / vaøo ñeàu coù caøi Ñònh nghóa caùc tín hieäu ñieàu khieån xuaát nhaäp 2 chieàu: * INTR (Interput Request): Möùc 1 ôû ngoõ ra naøy baùo cho CPU bieát yeâu caàu ngaét khoaûng cho pheùp nhaäp hay xuaát (chung). * Pheùp xuaát : OBF (Output Buffer Full FF) output OBF xuoáng 0 ñeå baùo cho ngoaïi vi bieát CPU ñaõ ghi döõ kieän ra cöûa ACK (Acknowledge) Input Möùc 0 töø ngoaïi vi cho pheùp boä ñeäm ra 3 traïng thaùi cuûa cöûa A môû ñeå phaùt ra döõ kieän, boä ñeäm ra ôû 3 traïng thaùi. INTE 1 (INTE FF lieân quan vôùi OBF) Kieåm soaùt bôûi bit set / reset PC 6 * Pheùp nhaäp: STB: Möùc thaáp ôû ngoõ vaøo naøy caøi data vaøo maïch caøi ngoõ nhaäp. IBF: (Input Buffer Full FF) output Möùc 1 thoâng baùo cho CPU bieát döõ kieän ñaõ nhaäp vaøo maïch caøi nhaäp INTE 2 (lieân quan vôùi IBF) Kieåm soaùt bôûi bit set/reset PC 4 Hình 3.7 Keát hôïp mode 2 vaø caùc mode khaùc: Mode 2 vaø mode 0 (in) : töø ñieàu khieån : 11 XXX 01 1/0 Mode 2 vaø mode 1 (out) : töø ñieàu khieån : 11 XXX 01 1/0 Mode 2 vaø mode 1 (in) : töø ñieàu khieån : 11 XXX 00 X Mode 2 vaø mode 0 (in) : töø ñieàu khieån : 11 XXX 10 X Söï keát hôïp caùc mode ñaëc bieät: Coù moät soá toå hôïp caùc mode maø khoâng phaûi taát caû cöûa C ñeàu duøng laøm ñieàu khieån hay traïng thaùi, caùc bit coøn laïi ñöôïc duøng nhö sau: Neáu laäp trình laø ngoõ vaøo: Caùc bit ôû phaàn cao cöûa C (C4-C7) phaûi ñöôïc truy xuaát rieâng reõ duøng chöùc naêng bit set / reset. Caùc bit ôû phaàn thaáp cöûa C (C0-C3) coù theå truy xuaát duøng chöùc naêng bit set/reset thay truy xuaát nhö nhoùm 3 baèng caùch ghi ra cöûa C. 4 – Ñoïc traïng thaùi cöûa C: ÔÛ mode o, cöûa C truyeàn döõ kieän ñeán hay töø ngoaïi vi 8255 ñöôïc laäp trình ôû mode 1 hay 2, cöûa C trôû neân caùc tính ñieàu khieån baét tay cho cöûa A vaø C. Ñoïc noäi dung cöûa C cho pheùp ngöôøi laäp trình kieåm tra traïng thaùi cuûa moãi thieát bò ngoaïi vi thay chieàu chöông trình töông öùng. Khoâng coù leänh ñaëc bieät ñeå ñoïc thoâng tin traïng thaùi töø C. Pheùp ñoïc bình thöôøng cuûa C duøng ñeå thöïc hieän chöùc naêng naøy. D7 D6 D5 D4 D3 D2 D1 D0 I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB NHOÙM A NHOÙM B MODE 1 (Input) OBFA INTEA I/O I/O INTRA IOB1B OBIB INTRB NHOÙM A NHOÙM B MODE 1 (Output) OBFA INTE IBFA INTE2 INTRA NHOÙM A NHOÙM B Ñònh nghóa bôûi choïn mode 0 hay 1 MODE 2 Chöông III TOÅNG QUAN VEÀ HOÏ VI ÑIEÀU KHIEÅN MCS-51 Hoï vi ñieàu khieån Mcs – 51 ra ñôøi töø naêm 1980 bôûi haõng Intel, vôùi saûn phaåm ñaàu tieân laø 8051. Caùc IC naøy goïi laø vi ñieàu khieån vì chuùng bao goàm caû ROM, RAM, timer, caùc coång noái tieáp vaø song song. Ñaây laø ñaëc ñieåm chính ñeå ta phaân bieät giöõa vi ñieàu khieån vaø vi xöû lyù. 8051 khoâng ñöôïc söû duïng trong maùy tính nhöng ñöôïc söû duïng roäng raõi trong coâng nghieäp vaø trong saûn phaåm maùy moùc tieâu duøng. Cuøng hoï vôùi 8051 coù moät soá vi ñieàu khieån khaùc. Veà cô baûn chuùng ñeàu gioáng nhau, chuùng chæ khaùc nhau ôû vuøng nhôù noäi bao goàm vuøng nhôù maõ leänh, vuøng nhôù döõ lieäu vaø soá timer. Söï khaùc nhau ñoù ñöôïc moâ taû baèng baûng döôùi ñaây. Vi ñieàu khieån Vuøng maõ leänh noäi Vuøng döõ lieäu noäi Soá timer 8051 8031 8751 8052 8032 8732 4K ROM 0K 4K EPROM 8K ROM 0K 4K EPROM 128 bytes 128 bytes 128 bytes 256 bytes 256 bytes 256 bytes 2 2 2 3 3 3 Baûng 4.1 So saùnh caùc IC cuûa hoï Msc-51TM I – CAÁU TRUÙC CUÛA 8051: Trung taâm cuûa 8051 vaãn laø vi xöû lyù trung taâm (CPU). Ñeå kích thích cho toaøn boä heä thoáng hoaït ñoäng, 8051 coù boä taïo dao ñoäng noäi vôùi thaïch anh ñöôïc gheùp beân ngoaøi vôùi taàn soá khoaûng töø vaøi Mhz ñeán 12 Mhz. Lieân keát caùc phaàn töû vôùi nhau laø heä thoáng BUS noäi, goàm coù BUS döõ lieäu, BUS ñòa chæ vaø BUS ñieàu khieån. 8051 coù 4K ROM, 128 bytes RAM vaø moät soá thanh ghi boä nhôù … Noù giao tieáp vôùi beân ngoaøi qua 3 coång song song vaø moät coång noái tieáp coù theå thu, phaùt döõ lieäu noái tieáp vôùi toác ñoä laäp trình ñöôïc. Hai boä ñònh thôøi 16 bit cuûa 8051 coøn coù 2 ngaét ngoaøi cho pheùp noù ñaùp öùng vaø xöû lyù ñieàu kieän beân ngoaøi theo caùch ngaét quaõng, raát hieäu quaû trong caùc öùng duïng ñieàu khieån. Thoâng qua caùc chaân ñieàu khieån vaø caùc coång song song 8051 coù theå môû roäng boä nhôù ngoaøi leân ñeán 64Kbs döõ lieäu. II – SÔ LÖÔÏC VEÀ CAÙC CHAÂN CUÛA 8051 Muïc naøy giôùi thieäu caáu truùc phaàn cöùng cuûa 8051 töø nhöõng chaân ñöôïc nhìn thaáy beân ngoaøi. Döôùi ñaây chæ moâ taû ngaén goïn chöùc naêng cuûa töøng chaân. Trong 40 chaân coù ñeán 32 chaân coù chöùc naêng nhö coång xuaát nhaäp, 24 trong soá chuùng ñöôïc duøng cho hai muïc ñích khaùc nhau. Moãi chaân coù theå laø ñöôøng xuaát nhaäp, ñöôøng ñieàu khieån hoaëc laø moät phaàn cuûa ñòa chæ hay döõ lieäu. Thieát keá thöôøng coù boä nhôù ngoaøi hay caùc thieát bò ngoaïi vi söû duïng nhöõng port ñeå xuaát nhaäp döõ lieäu. Taùm ñöôøng trong moãi port ñöôïc duøng nhö moät ñôn vò giao tieáp song song nhö maùy in, boä bieán ñoåi töông töï soá, v.v… Hoaëc moãi ñöôøng cuõng coù theå hoaït ñoäng moät caùch ñoäc laäp trong giao tieáp vôùi caùc thieát bò ñôn bit nhö: transitor, LED, switch, solenoids … Port 0 Port 0 laø coång song song duøng cho hai muïc ñích, noù laø caùc chaân töø 32 ñeán 39. Trong nhöõng thieát keá nhoû noù ñöôïc duøng trong coång xuaát nhaäp bình thöôøng. ÔÛ nhöõng thieát keá coù söû duïng boä nhôù ngoaøi, noù vöøa laø bus döõ lieäu vöøa laø byte thaáp cuûa bus ñòc chæ. Noù coøn duøng chöùa bytes maõ khi naïp ROM noäi. Port 1 Port 1 daønh cho coång xuaát nhaäp vaø chæ daønh cho muïc ñích naøy maø thoâi. Noù duøng ñeå giao tieáp vôùi caùc thieát bò ngoaïi vi theo töøng bit hoaëc byte. Port 1 chieám caùc chaân töø 1 ñeán 8. Port 2 Port 2 (chaân 21 ¸ 28) laø port coù hai chöùc naêng. Ngoaøi muïc ñích daønh cho xuaát nhaäp thoâng thöôøng noù coøn duøng laøm byte cao cho bus ñòa chæ boä nhôù ngoaøi. Port 3 Port 3 (chaân 10 ¸ 17) laø port hai chöùc naêng. Beân caïnh chöùc naêng xuaát nhaäp, caùc bit cuûa port 3 coøn coù chöùc naêng ñieàu khieån. Chöùc naêng caùc bit cuûa port 3 vaø port 1 ñöôïc moâ taû trong baûng 4.2 PSEN (cho pheùp naïp chöông trình) 8051 coù 4 chaân tín hieäu ñieàu khieån. PSEN laø tín hieäu ñieàu khieån ñöôïc xuaát ra ôû chaân 29. Tín hieäu ñieàu khieån naøy cho pheùp laäp trình ôû boä nhôù ngoaøi vaø thöôøng ñöôïc noái vôùi caùc chaân OE cuûa EPROM ñeå ñoïc maõ leänh töø boä nhôù ngoaøi vaøo thanh ghi leänh cuûa 8051. Noù xuoáng möùc thaáp trong khi ñoïc leänh. Maõ leänh ñoïc töø EPROM, qua bus döõ lieäu, ñöôïc choát vaøo thanh ghi cuûa 8051. Khi thi haønh chöông trình töø ROM noäi PSEN ñöôïc giöõ ôû möùc cao (traïng thaùi khoâng taùc ñoäng). EA (truy xuaát vuøng nhôù ngoaøi) EA laø moät tín hieäu vaøo coù theå ôû möùc cao hay thaáp. Neáu ôû möùc cao 8051 thi haønh chöông trình ôû ROM noäi, 4K/8K chöông trình. Neáu ôû möùc thaáp, chöông trình chæ ñöôïc thi haønh töø boä nhôù ngoaøi. Ñoái vôùi 8031/8231 EA phaûi ñöôïc giöõ ôû möùc thaáp vì chuùng khoâng coù ROM noäi. EA cuõng chính laø chaân nhaän ñieän aùp möùc cao ñeå naïp EPROM noäi. ALE (cho pheùp choát ñòa chæ) ALE laø tín hieäu ñöôïc xuaát ra ôû chaân 20, raát quen thuoäc vôùi nhöõng ai ñaõ töøng laøm vieäc vôùi vi xöû lyù 8085, 8086 cuûa Intel. 8051 duøng ALE ñeå phaân keânh cho bus ñòa chæ vaø bus döõ lieäu. Khi port 0 ñöôïc duøng laøm bus döõ lieäu vaø byte thaáp cuûa bus ñòa chæ – ALE laø tín hieäu duøng ñeå choát ñòa chæ vaøo thanh ghi choát beân ngoaøi trong nöõa ñaàu cuûa moät chu kyø maùy. Sau ñoù Port 0 saün saøng ñeå truy xuaát döõ lieäu trong nöõa chu kyø coøn laïi. Xung ALE coù taàn soá baèng 1/6 laàn taàn soá boä dao ñoäng noäi vaø coù theå duøng nhö moät xung clock cho muïc ñích naøo ñoù khi heä thoáng khoâng laøm vieäc. Neáu toác ñoä 8051 laø 12 MHz thì taàn soá xung ALE laø 2 MHz. Moät xung ALE bò maát khi coù moät leänh MOVX ñöôïc thi haønh. Ngoõ vaøo dao ñoäng noäi Bit Teân Chöùc naêng P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 P1.0 P1.1 RXD TXD INT0 INT1 T0 T1 WR RD T2 T2EX Nhaän döõ lieäu Phaùt döõ lieäu Ngaét ngoaøi 0 Ngaét ngoaøi 1 Ngoõ vaøo cuûa Timer / couter 0 Ngoõ vaøo cuûa Timer / couter 1 Ñoïc döõ lieäu töø boä nhôù ngoaøi Ñoïc döõ lieäu vaøo boä nhôù ngoaøi Ngoõ vaøo cuûa Timer / couter 2 Baûng 4.2 Chöùc naêng cuûa caùc chaân ñieàu khieån Ngoõ vaøo dao ñoäng noäi ñöôïc moâ taû nhö hình döôùi ñaây, coù moät thaïch anh ñöôïc noái vôùi chaân 19 (XTAL1) vaø 18 (XTAL2). Coù theå maéc theâm tuï ñeå oån ñònh dao ñoäng. Thaïch anh 12 MHz thöôøng duøng cho hoï MCs-51, tröø IC 80C31BH coù theå duøng thaïch anh leân ñeán 16 MHz. Tuy nhieân, khoâng nhaát thieát phaûi duøng thaïch anh maø ta coù theå duøng maïch dao ñoäng TTL taïo xung Clock ñöa vaøo chaân XTAL1 vaø laáy ñaûo cuûa noù ñöa vaøo XTAL2. RST (Reset) Ngoõ vaøo RST (chaân 19) laø chaân master reset cuûa 8051. Khi noù ôû möùc cao (trong khoaûng ít nhaát 2 chu kyø maùy) caùc thanh ghi noäi ñöôïc naïp vôùi giaù trò töông öùng theo thöù töï khôûi ñoäng heä thoáng. Nguoàn cung caáp 8051 söû duïng nguoàn ñôn 5V. III – CAÁU TRUÙC COÅNG XUAÁT NHAÄP Maïch beân trong cuûa moät chaân port moâ taû ngaén goïn trong hình 4.3. Khi ghi leân moät chaân cuûa coång, döõ lieäu ñöôïc choát vaøo boä choát. Choát laùi moät transitor thöôøng noái vôùi chaân cuûa coång. Nhôø ñoù coù theå keùo ñöôïc 4 taûi LS ôû caùc coång Port 1, 2 , 3 vaø 8 taûi LS ôû Port. Löu yù Port 0 coù ñieän trôû keùo leân, ngoaïi tröø khi duøng noù vôùi chöùc naêng vöøa laø bus ñòa chæ, vöøa laø bus döõ lieäu ngoaïi. Tuøy theo ñaëc tính beân trong cuûa taûi maø ta coù theå theâm vaøo ñieän trôû keùo leân beân ngoaøi. D Choát Bus noäi cuûa 8051 Vcc Ñoïc Ñoïc choát chaân Chaân Port Ghi Choát Hình 4.3 Sô ñoà maïch port Vieäc ñoïc choát ñöôïc phaân bieät laøm hai, ñoù laø ñoïc töø choát vaø ñoïc töø chaân. Söï phaân bieät naøy nhaèm choáng tröôøng hôïp chaäp maïch do quaù taûi gaây neân. Leänh ñoïc moät bit coång (ví duï MOV C, P1.1) seõ ñoïc chaân cuûa coång. Trong tröôøng hôïp naøy, choát phaûi ñöôïc giöõ ôû möùc cao, neáu khoâng FET seõ daãn vaø ngoõ ra xuoáng möùc thaáp. Taát caû caùc choát cuûa port ñeàu ñöôïc set khi reset heä thoáng. Nhö vaäy caùc chaân choát ñeàu ñöôïc duøng nhö ngoõ vaøo maø khoâng caàn phaûi set choát. Tuy nhieân, neáu ñaõ xoùa choát (ví duï CLEAR P1.1) khoâng theå ñoïc döõ lieäu ñuùng töø chaân port tröø khi set choát trôû laïi. IV – TOÅ CHÖÙC BOÄ NHÔÙ Haàu heát caùc boä nhôù caùc vi xöû lyù ñeàu döïa theo caáu truùc Von Neuman veà phaân chia vuøng nhôù cho chöông trình vaø döõ lieäu. Ñieàu naøy cho pheùp chöông trình ñöôïc löu giöõ trong ñóa vaø chæ load vaøo boä nhôù moãi khi thi haønh. Do ñoù döõ lieäu vaø chöông trình ñeàu naèm trong RAM. Ñoái vôùi vi ñieàu khieån thì khaùc, CPU ñöôïc coi laø heä thoáng maùy tính. Noù laø trung taâm cuûa thieát bò ñieàu khieån. Noù bò giôùi haïn veà boä nhôù. Chöông trình ñieàu khieån naèm trong ROM. Vì lyù do naøy maø boä nhôù cuûa vi ñieàu khieån 8051 döïa theo caáu truùc Harvard ñeå phaân chia vuøng chöông trình (code maõ leänh) vaø döõ lieäu. Nhö ñaõ moâ taû ôû baûng 4.2 caû hai vuøng maõ leänh vaø döõ lieäu ñeàu naèm ôû boä nhôù noäi. Tuy nhieân caû hai cuõng coù theå môû roäng ra boä nhôù ngoaøi, coù theå leân ñeán 64Kb cho vuøng ñòa chæ. Boä nhôù noäi goàm coù ROM noäi (chæ ñoái vôùi 8051/8052) vaø RAM ngoaïi. RAM chia thaønh nhieàu vuøng: vuøng daønh cho muïc ñích naøo ñoù, vuøng coù theå truy xuaát bit, caùc khoái (bank) thanh ghi, vaø caùc thanh ghi ñaëc bieät. Coù hai ñieàu ñaùng löu yù ôû ñaây: (a) caùc thanh ghi vaø caùc coång xuaát nhaäp ñeàu ñöôïc phaân chia ñòa chæ vaø coù theå truy xuaát chuùng nhö nhöõng vuøng khaùc. (b) stack thöôøng ñöôïc phaân chia vaøo RAM noäi hôn laø vuøng nhôù ngoaøi. Ñaây laø moät ñaëc ñieåm cuûa vi ñieàu khieån. Hình 4.4 moâ taû boä nhôù cuûa 8031 (khoâng coù ROM noäi) Hình 4.5 moâ taû chi tieát veà vuøng nhôù döõ lieäu noäi. Caùc vuøng nhôù ñöôïc moâ taû döôùi ñaây. Vuøng toång quaùt Vuøng RAM naøy chieám 80 bytes töø ñòa chæ 30H ñeán ñòa chæ 7FH. Vuøng nhôù 32 bytes beân döôùi cuõng coù theå ñöôïc duøng nhö vuøng naøy maëc duø noù ñöôïc duøng cho muïc ñích khaùc. Baát kyø vò trí naøo trong vuøng naøy ñeàu coù theå truy xuaát töï do baèng ñòa chæ tröïc tieáp hoaëc giaùn tieáp. Ví duï ñeå ñoïc noäi dung byte nhôù noäi cuûa ñòa chæ 5FH vaøo thanh ghi ACC, ta duøng leänh sau: MOV A, 5FH ; Leänh naøy chuyeån moät byte döõ lieäu söû duïng ñòa chæ tröïc tieáp ñeå xaùc ñònh ñòa chæ nguoàn (5FH). RAM noäi cuõng coù theå ñöôïc truy xuaát baèng ñòa chæ giaùn tieáp thoâng qua R0 vaø R1 (chæ hai thanh ghi naøy maø thoâi). Ví duï leânh sau seõ thöïc hieän coâng vieäc gioáng nhö ví duï treân MOV R0, 5FH ; MOV A, @R0 ; Leänh ñaàu tieân naïp giaù trò 5FH cho thanh ghi R0. Leänh thöù hai duøng chuyeån döõ lieäu ñöôïc chæ ra bôûi R0 vaø thanh ghi tích luyõ (ACC). FFFF FFFF Vuøng Vuøng maõ leänh döõ lieäu FF Truy xuaát Truy xuaát thoâng qua RD vaø WR PSEN 0000 0000 Vuøng nhôù noäi Vuøng nhôù ngoaøi Hình : 4.4 Toùm taét vuøng nhôù 8031 Vuøng nhôù coù khaû naêng truy xuaát bit: 8051 coù taát caû 210 vò trí coù theå truy xuaát bit. Trong ñoù coù 128 bits (16 bytes) töø ñòa chæ 20H ñeán 2FH vaø caùc bit thuoäc caùc thanh ghi chöùc naêng. Khaû naêng truy xuaát bit baèng caùc phaàn meàm laø moät ñieåm maïnh cuûa vi ñieàu khieån. Bits coù theå ñöôïc set, clear, and, or, v.v… baèng moät leänh ñôn. Vuøng nhôù naøy coù theå truy xuaát nhö bytes hoaëc bit. Ví duï ñeå set bit 67H ta duøng leänh sau: SETB 67H ; So vôùi boä nhôù bit laø bit coù troïng soá lôùn nhaát cuûa bytes 2CH, do ñoù ta cuõng coù theå set noù baèng leänh sau: MOV A, 2CH ; ORL A, #10000000B ; MOV 2CH, A ; Hôn theá nöõa caùc I/O ports cuûa 8051 coù theå truy xuaát bit, laøm ñôn giaûn vieäc xuaát nhaäp töøng bit. Vuøng nhôù naøy coù theå xuaát nhaäp töøng byte tuøy theo leänh. Caùc ngaên thanh ghi (Register banks): 32 butyes naèm ôû cuoái vuøng RAM noäi laø caùc ngaên thanh ghi. Taäp leänh cuûa 8051 chæ truy xuaát 8 thanh ghi trong vuøng naøy, töø R0 ñeán R7. Taïi moät thôøi ñieåm chæ truy xuaát ñöôïc moät ngaên thanh ghi maø thoâi. Caùc thanh ghi naøy coù ñòa chæ maëc ñònh 00H ñeán 07H khi reset heä thoáng (bank 0). Leänh sau ñaây ñoïc noäi dung byte nhôù coù ñòa chæ 05H vaøo thanh ghi tích luyõ. MOV A, R5 ; Leänh treân chæ chieám moät bute söû duïng ñòa chæ thanh ghi. Dó nhieân coâng vieäc treân coù ñöôïc thöïc hieän baèng moät leänh hai bytes söû duïng ñòa chæ tröïc tieáp: MOV A, 05H ; Roõ raøng leänh söû duïng thanh ghi R0 ñeán R7 ngaén hôn vaø nhanh hôn so vôùi leänh töông ñöông söû duïng ñòa chæ tröïc tieáp. Caùc ngaên thanh ghi coù theå thay ñoåi baèng caùch set laïi thanh ghi traïng thaùi chöông trình (PSW.3 PSW.4) trong chöông trình. Giaû söû sau khi cho pheùp söû duïng bank 3 thanh ghi R5 luùc naøy coù ñòa chæ 20H. Leänh sau ghi noäi dung thanh ghi ACC vaøo vò trí 18H(R3) MOV R3, A; V – CAÙC THANH GHI COÙ CHÖÙC NAÊNG ÑAËC BIEÄT Haàu heát caùc thanh ghi noäi cuûa caùc vi ñieàu khieån ñeàu coù theå ñöôïc truy xuaát thoâng qua teân ñaõ ñöôïc ñònh nghóa. Ví duï INC A. Caùc thanh ghi noäi cuûa 8051 chieám moät phaàn cuûa vuøng nhôù noäi, vì vaäy moãi thanh ghi ñeàu coù moät ñòa chæ. Caùc thanh ghi chöùc naêng (FSRs) naèm trong vuøng nhôù cao töø 80H ñeán FFH. Löu yù coù moät soá bytes trong vuøng naøy khoâng ñöôïc ñònh nghóa. Chæ coù 21 ñòa chæ thanh ghi chöùc naêng ñöôïc ñònh nghóa (26 ñòa chæ ñoái vôùi 8052/8032). Maëc duø coù theå truy xuaát caùc thanh ghi chöùc naêng thoâng qua teân cuûa noù, haàu heát caùc thanh ghi naøy ñöôïc truy xuaát baèng ñòa chæ tröïc tieáp. Moät soá thanh ghi coù theå truy xuaát baèng byte hoaëc bit. Trong laäp trình phaûi caån thaän khi truy xuaát bit thoâng qua byte. Ví duï leänh sau: SETB 0E0H ; Set bit 0 trong thanh ghi ACC, caùc bit khaùc vaãn khoâng thay ñoåi. Löu yù ñòa chæ cuûa moät bit trong moät thanh ghi chöùc naêng luoân ñöôïc xaùc ñònh bôûi 5 bit cao cuûa ñòa chæ thanh ghi ñoù. Ví duï moät bit trong thanh ghi P1 (90H hay 10010000B) hay coù ñòa chæ 9xH hay 10010xxxB. Thanh ghi traïng thaùi chöông trình (PSW) seõ ñöôïc moâ taû chi tieát trong phaàn sau, caùc thanh ghi chöùc naêng coøn laïi ñöôïc moâ taû ngaén goïn vaø seõ ñöôïc moâ taû chi tieát trong nhöõng chöông sau. Thanh ghi traïng thaùi chöông trình: Thanh ghi traïng thaùi chöông trình coù ñòa chæ 0Dh, chöùa caùc bit traïng thaùi chöông trình. Caùc bit traïng thaùi ñöôïc moâ taû nhö sau: * Côø Carry: Côø carry coù hai chöùc naêng: + Ñöôïc duøng trong caùc pheùp toaùn soá hoïc thoâng thöôøng. Noù laø côø nhôù cuûa pheùp tính coäng vaø côø möôïn cuûa pheùp tính tröø. Ví duï caùc thanh ghi ACC coù noäi dugn FFH thì leänh “ADD A, #1” laøm cho ACC baèng 00H vaø côø nhôù ñöôïc set. + Côø carry coøn ñöôïc duøng nhö “thanh ghi tích luyõ 1 bit” cho caùc pheùp toaùn luaän lyù treân bit. Ví duï leänh sau AND bit 25H vôùi côø carry vaø ñaëc keát quaû vaøo côø carry: “ANL C,25H ;”. * Côø nhôù phuï (auxiliary carry – AC) : Khi coäng caùc giaù trò BCD, côø AC ñöôïc set neáu bit thöù ba traøn hay 4 bit thaáp coù giaù trò töø 0AH ñeán 0FH. Khi coäng soá BCD, sau pheùp coäng phaûi duøng leänh DA A (decimal adjust accumulator) ñeå chænh keát quaû coäng veà daïng BCD. * Côø 0: Côø naøy daønh cho ngöôøi söû duïng trong caùc öùng duïng laäp trình. * Bit choïn ngaên thanh ghi: Hai bit RS0 vaø RS1 duøng ñeå cho ngaên thanh ghi, chuùng ñöôïc xoùa khi reset heä thoáng vaø coù theå thay ñoåi baèng phaàn meàm. Ví duï caùc leänh sau seõ choïn nhaên thanh ghi thöù ba vaø ghi noäi dung R7 (ñòa chæ 1FH) vaøo ACC. SETB RS0 ; SETB RS1 ; MOV A, R7 ; * Côø traøn (Overflow – OV): Côø traøn ñöôïc set keát quaû bò traøn (soá hoïc) sau pheùp tính coäng hoaëc tröø. Ñoái vôùi pheùp toaùn coäng vaø tröø soá coù daáu, phaàn meàm coù theå xeùt bit naøy ñeå kieåm tra keát quaû coù vöôït quaù giôùi haïn hay khoâng. Khi coäng soá khoâng daáu ta khoâng quan taâm ñeán bit naøy. Nhö vaäy keát quaû cuûa pheùp tính coäng hay tröø lôùn hôn 127 hoaëc nhoû hôn –128 seõ set côø traøn. Ví duï OV seõ set sau pheùp tính coäng sau: Hex: 0F Decimal : 15 +7F +127 8E 142 8E töông ñöông vôùi –116. Roõ raøng keát quaû 142 khoâng chính xaùc. Vì vaäy bit OV ñöôïc set. Bit Kyù hieäu Ñòa chæ Chöùc naêng PSW .7 PSW .6 PSW .5 PSW .4 PSW .3 PSW .2 PSW .1 PSW .0 CY AC F0 RS1 RS0 OV P D7h D6h D5h D4h D3h D2h D1h D0h Côø nhôù Côø nhôù phuï Côø Zero Choïn thanh ghi döï tröõ 1 Choïn thanh ghi döï tröõ 2 00=bank0, ñòa chæ 00h-07h 01=bank1, ñòa chæ 08h-0Fh 10=bank2, ñòa chæ 10h-17h 11=bank3, ñòa chæ 18h-1Fh Côø traøn Döï tröõ Côø chaün leõ Baûng 4.3 Thanh ghi PSW * Bit parity: Bit Parity ñöôïc töï ñoäng set hoaëc xoùa trong moãi chu kyø maùy ñeå taïo neân parity chaün ñoái vôùi thanh ghi tích luyõ. Soá bit 1 trong thanh ghi ACC coäng vôùi P luoân luoân laø moät chaün. Ví duï neáu ACC chöùa 10101101B, P seõ laø 1. Bit Parity thöôøng ñöôïc lieân keát vôùi chöông trình truyeàn noái tieáp coù söû duïng parity. Thanh ghi B Thanh ghi B coù ñòa chæ F0h, chuû yeáu duøng vôùi thanh ghi ACC trong caùc pheùp toaùn nhaân vaø chia. Leänh MUL AB nhaân caùc soá 8 bit khoâng daáu trong thanh ghi A vaø B. Keát quaû laø moät soá 16 bit chöùa trong thanh ghi ACC (byte thaáp) vaø B (byte cao). Leänh DIV B chia thanh ghi ACC cho B. Keát quaû thöông soá ñöôïc löu trong thanh ghi ACC soá dö ñöôïc löu trong thanh ghi B. Thanh ghi B cuõng ñöôïc duøng nhö nhöõng thanh ghi khaùc vaø coù theå truy xuaát bit (ñòa chæ F0h ñeán F7h) Con troû ngaên choàng (stack pointer – SP) Stack – pointer laø moät thanh ghi 8 bit coù ñòa chæ 81H. Noù chöùa ñòa chæ hieän thôøi cuûa ñænh stack. Khi ñaåy döõ lieäu vaøo stack, SP taêng leân moät giaù trò, tieáp theo döõ lieäu ñöôïc ghi vaøo stack. Khi laáy döõ lieäu ra khoûi stack, döõ lieäu ñöôïc ñoïc ra tröôùc sau ñoù SP ñöôïc giaûm. Stack cuûa 8051 naèm trong vuøng RAM noäi vaø coù theå truy xuaát baèng ñòa chæ tröïc tieáp. 128 bytes ñaàu tieân ñoái vôùi 8051/8031 vaø 256 bytes ñoái vôùi 8052/8032 trong vuøng RAM noäi coù theå duøng laøm stack. Ñeå taïo ra stack baét ñaàu taïi 60H, ta khôûi ñoäng thanh ghi SP: MOV SP, #5FH ; Nhö vaäy stack ñöôïc giôùi haïn trong 32 bytes. Ta duøng giaù trò 5FH vì SP seõ taêng leân 60H tröôùc khi ñaåy döõ lieäu ñaàu tieân vaøo stack. Khi laäp trình ta khoâng caàn phaûi khôûi ñoäng laïi thanh ghi SP vì noù ñaõ ñöôïc khôûi ñoäng vôùi giaù trò khi reset. Thanh ghi SP chöùa giaù trò maëc ñònh laø 07H. Do ñoù stack maëc ñònh baét ñaàu taïi 08H. Neáu trình khoâng khôûi ñoäng laïi stack thì caùc thanh ghi 1, 2, 3 khoâng theå söû duïng vì noù ñöôïc duøng laøm stack. Stack ñöôïc truy xuaát moät caùch roõ raøng baèng caùc leänh PUSH, POP ñeå löu tröõ taïm thôøi hay truy xuaát döõ lieäu. Noù cuõng coù theå ñöôïc truy xuaát ngaàm khi coù caùc leänh goïi ñeán chöông trình con. Caùc leänh ACALL, LCALL hay ngaét seõ ñaåy thanh ghi ñeám chöông trình (PC) vaøo stack. Leänh RET, RETI traû giaù trò trong stack laïi cho PC. Con troû döõ lieäu (DPTR) Con troû döõ lieäu duøng ñeå truy xuaát maõ hay döõ lieäu töø boä nhôù ngoaøi vaø thanh ghi 16 bit. Thanh ghi naøy goàm hai thanh ghi DPL (byte thaáp, ñòa chæ 82H) vaø DPH (byte cao, ñòa chæ 83H). Ba leänh sau ñaây seõ ghi giaù trò 55H vaøo RAM ngoaøi taïi ñòa chæ 1000H. MOV A, #55H; MOV DPTR, #1000H; MOV @DPTR, A; Caùc thanh ghi Port: Caùc port cuûa 8051 goàm coù port 0 ñòa chæ 80H, port 1 ñòa chæ 90H, port 2 ñòa chæ A0H, port 3 ñòa chæ B0H. Caùc port 0, 2 vaø 3 khoâng ñöôïc duøng ñeå xuaát nhaäp neáu ñang söû duïng boä nhôù ngoaøi. Coøn laïi port 1 coù theå duøng ñeå xuaát nhaäp (I/O). Taát caû caùc port ñeàu coù theå duøng truy xuaát bit. Ñieàu naøy cung caáp cho vi ñieàu khieån khaû naêng giao tieáp raát maïnh. Ta coù theå duøng chaân P1.7 ñeå ñoùng môû ñoäng cô. Chaân P1.7 noái vôùi transitor ñeå laùi moät relay ñoùng môû ñoäng cô. Leänh SETB P1.7 môû ñoäng cô. Leänh CLR P1.7 taét ñoäng cô. Hai leänh treân duøng toaùn töû daáu chaám ñeå xaùc ñònh ñòa chæ bit trong moät byte. Caùc thanh ghi boä ñònh thôøi: 8051 coù hai boä ñònh thôøi 16 bit. Timer 0 coù ñòa chæ 8AH (TL0 byte thaáp) vaø 8DH (TH1 byte cao). Ngoaøi boä ñònh thôøi coøn coù hai thanh ghi: thanh ghi ñieàu khieån TCON ñòa chæ 88H vaø thanh ghi xaùc ñònh mode cho timer TMOD ñòa chæ 89H. Trong ñoù chæ coù thanh ghi TCON truy xuaát ñöôïc töøng bit. Caùc thanh ghi coång noái tieáp: 8051 chöùa coång noái tieáp beân trong MCU ñeå giao tieáp vôùi caùc thieát bò noái tieáp nhö thieát bò ñaàu cuoái, modem v.v… Coång noái tieáp goàm coù hai thanh ghi: moät thanh ghi ñeäm SBUF laø naïp döõ lieäu ñeå truyeàn ñi. Ñoïc SBUF laø nhaän döõ lieäu ñaõ thu ñöôïc vaøo. Caùc mode truyeàn coù theå ñöôïc laäp trình thoâng qua thanh ghi ñieàu khieån coång keá tieáp. Thanh ghi naøy coù theå truy xuaát bit vaø coù ñòa chæ 98H. Caùc thanh ghi ngaét: 8051 coù 5 nguoàn ngaét vaø hai möùc öu tieân. Caùc ngaét bò caám khi reset heä thoáng. Caùc ngaét ñöôïc cho pheùp thoâng qua thanh ghi IE coù ñòa chæ 0AH. Caùc möùc öu tieân cuõng ñöôïc set bôûi thanh ghi IP taïi ñòa chæ B8H. Caû hai thanh ghi naøy ñeàu coù theå truy xuaát bit. IE coù ñòa chæ A8H. Ngaét chæ ñöôïc chaáp nhaän khi thanh ghi naøy ñaõ ñöôïc laäp trình. Thanh ghi PCON (Power Control Register) Thanh ghi PCON coù ñòa chæ 87H, chöùa caùc bits ñieàu khieån linh tinh, ñöôïc toùm taét trong baûng 4.4. Bit SMOD nhaân ñoâi toác ñoä truyeàn noái tieáp ôû caùc mode 1, 2 vaø 3. Caùc bit 4, 5, 6 khoâng ñöôïc ñònh nghóa. Bit 3 vaø 2 laø hai côø ñöôïc tuøy yù trong laäp trình öùng duïng. Caùc bit PD (power down) vaø IDL (idle) ñeàu coù trong caùc hoï IC MCS-51 nhöng chæ vôùi IC duøng CMOS maø thoâi. Leänh set bit IDL laø leänh ñöôïc thi haønh cuoái cuøng tröôùc khi CPU vaøo cheá ñoä idle. ÔÛ tín hieäu naøy cheá ñoä xung clock ñöôïc ngaét ra khoûi CPU, nhöng khoâng ngaét ra khoûi ngaét quaõng, timer vaø coång noái tieáp. Traïng thaùi CPU vaø noäi dung caùc thanh ghi ñöôïc baûo toaøn. Caùc chaân cuûa coång song song ñöôïc giöõ ôû möùc traïng thaùi cuûa chuùng. ALE vaø PSEN ôû möùc cao. Caùc cheá ñoä idle keát thuùc khi coù baát kyø moät ngaét naøo hoaëc reset heä thoáng, ñoàng thôøi bit IDL bò xoùa. + Power down Mode Bit Kyù hieäu Moâ taû 7 6 5 4 3 2 1 0 SOMD GF1 GF0 PD IDL Toác ñoä keùp; khi ñöôïc set, toác ñoä truyeàn noái tieáp ñöôïc nhaân ñoâi caùc cheá ñoä 1,2,3. Khoâng ñöôïc ñònh nghóa “nt” “nt” Côø duøng cho muïc ñích toång quaùt 1 Côø duøng cho muïc ñích toång quaùt 2 Power down, set mode power down. Chæ thoaùt khi reset Idle mode, set mode idle. Thoaùt khi coù ngaét hoaëc reset Baûng 4.4 Toùm taét thanh ghi PCON Leänh set bit PD laø leänh cuoái cuøng tröôùc khi CPU chuyeån sang mode power down. ÔÛ cheá ñoä naøy: (1) boä dao ñoäng noäi ngöng hoaït ñoäng, (2) caùc chöùc naêng bò döøng, (3) noäi dung RAM noäi ñöôïc giöõ ôû möùc logic cuûa chuùn, (5) ALE vaø PSEN ôû möùc thaáp. Chæ coù theå thoaùt khoûi cheá ñoä naøy khi reset heä thoáng. Khi ôû cheá ñoä power down, Vcc coù theå giaûm ñeán 2V. Löu yù caàn phaûi traû laïi möùc aùp 5V cho Vcc khi thoaùt khoûi cheá ñoä power down. VI – BOÄ NHÔÙ NGOAØI Môû roäng boä nhôù laø moät khaû naêng quan troïng ñoái vôùi vi ñieàu khieån nhaèm traùnh gaëp beá taéc trong vaán ñeà thieát keá. Hoï MCs-51 coù theå môû roäng 64Kbs vaø boä nhôù maõ leänh 64Kbs döõ lieäu. Caùc IC giao tieáp ngoaïi vi cuõng coù theå theâm vaøo ñeå taêng naêng xuaát nhaäp. Noù trôû thaønh moät phaàn cuûa boä döõ lieäu ngoaïi vaø ñöôïc giaûi maõ I/O nhö boä nhôù. Khi boä nhôù ngoaøi ñöôïc söû duïng, port 0 khoâng ñöôïc duøng laøm coång xuaát nhaäp. Noù trôû thaønh bus duøng ñeå phaân keânh ñòa chæ vaø döõ lieäu, ALE choát noù nhö laø bytes thaáp cuûa bus ñòa chæ khi baét ñaàu moãi chu kyø truy xuaát boä nhôù ngoaøi. Port 2 thöôøng duøng laøm byte cao cuûa bus ñòa chæ. Chu kyø boä nhôù A0 ¸ A15 Ñòa chæ D0 ¸ D7 Döõ lieäu (a) Khoâng phaân keânh (24 chaân) Chu kyø boä nhôù AD8 ¸ AD15 Ñòa chæ AD0 ¸ AD7 Ñòa chæ Döõ lieäu (b) Phaân keânh (16 chaân) Hình 4.5 Phaân keânh bus ñòa chæ vaø bus döõ lieäu Hình treân moâ taû vieäc phaân keânh vaø khoâng phaân keânh bus ñòa chæ vaø bus döõ lieäu. Neáu khoâng phaân keânh, vôùi 16 chaân ñòa chæ vaø 8 chaân döõ lieäu ta coù 24 chaân cho bus ñòa chæ vaø bus döõ lieäu. Trong khi ñoù neáu phaân keânh, 8 chaân döõ lieäu ñöôïc duøng chung vôùi 8 chaân thuoäc byte thaáp cuûa bus ñòa chæ neân chæ coù 16 chaân cho bus ñòa chæ vaø bus döõ lieäu. Ñieàu naøy coù yù nghóa lôùn trong vieäc cheá taïo IC. Thöù töï phaân keânh nhö sau : ôû nöõa chu kyø ñaàu, byte thaáp cuûa ñòa chæ xuaát ra port 0 vaø ñöôïc choát baèng ALE. Byte naøy ñöôïc choát ôû boä choát trong suoát chu kyø boä nhôù. Trong nöõa chu kyø tieáp theo port 0 laø bus döõ lieäu, coù theå xuaát nhaäp tuøy yù. Truy xuaát boä nhôù maõ leänh ngoaøi (External Code memory): Boä nhôù maõ ngoaøi ñöôïc ñoïc baèng tín hieäu PSEN (hình 4.6). Trong moät chu kyø maùy ALE taùc ñoäng 2 laàn vaø 2 bytes ñöôïc ñoïc töø boä nhôù chöông trình. Giaûn ñoà thôøi gian cuûa hoaït ñoäng naøy ñöôïc goïi laø chu kyø laáy leänh (hình 4.7). Truy xuaát boä nhôù döõ lieäu ngoaøi (External Code memory): Ñaây laø boä nhôù chöùa döõ lieäu, thöôøng laø RAM vaø ñöôïc truy xuaát bôûi tín hieäu RD vaø WR. Döõ lieäu naøy chæ ñöôïc truy xuaát baèng leänh MOVX thoâng qua thanh ghi con troû döõ lieäu DPTR, hoaëc R0, R1. RAM giao tieáp vôùi 8051 gioáng nhö EPROM. Ngoaïi tröø chaân RD ñöôïc noái vôùi chaân OE vaø chaân WR ñöôïc noái vôùi chaân W. Coøn laïi caùc bus döõ lieäu vaø ñòa chæ noái nhö EPROM. Vôùi 16 ñöôøng ñòa chæ ta coù theå coù ñeán 64Kbs cho vuøng nhôù döõ lieäu. Giaûn ñoà thôøi gian cuûa vieâc ñoïc vuøng nhoù döõ lieäu ngoaøi khi thi haønh leänh “MOV A,@DPRT” ñöôïc cho ôû hình 4.8. Löu yù chæ coù chaân RD ñöôïc duøng cho pheùp RAM. Giaûn ñoà thôøi gian cuûa vieäc ghi cuõng töông töï töø ñöôøng WR xuoáng möùc thaáp vaø döõ lieäu xuaát ra port 0. Port 2 coù theå khoâng duøng laøm byte cao cuûa bus ñòa chæ trong heä thoáng khoâng söû duïng vuøng nhôù maõ ngoaøi maø söû duïng vuøng nhôù döõ lieäu ngoaøi nhoû. Taùm bit ñòa chæ coù theå truy xuaát ñöôïc moät vuøng nhôù 256 bytes, ñöôïc goïi laø moät trang boä nhôù. Neáu vuøng nhôù naøy lôùn hôn 256 bytes ta coù theå duøng theâm moät vaøi chaân cuûa port 2 ñeå choïn trang. Khi truy xuaát moät trang (256 bytes) cuûa vuøng döõ lieäu ngoaøi ta coù theå duøng R0 hoaëc R1 ñeå laøm con troû ñòa chæ troû ñeán byte döõ lieäu caàn truy xuaát. Ví duï nhöõng leänh ñoïc noäi dung cuûa RAM ngoaøi coù ñòa chæ 0050H vaøo thanh tích luõy. MOV R0, #50H ; MOV A, @R0 ; Giaûi maõ ñòa chæ: Neáu 8051 söû duïng caû EPROM vaø RAM ngoaøi ñoøi hoûi phaûi giaûi maõ ñòa chæ. Vieäc giaûi maõ ñòa chæ raát quen thuoäc ñoái vôùi haàu heát vi xöû lyù. Ví duï neáu duøng EPROM 8K vaø RAM 8K, bus ñòa chæ giaûi maõ ñeå choïn IC giôùi haïn trong 8Kbytes: 0000H ñeán 1FFFH, vaø 2000H ñeán 3FFFH, v.v… Thoâng thöôøng ta duøng IC giaûi maõ 74138 vôùi ngoõ vaøo laø 3 bits cao nhaát cuûa bus ñòa chæ. Do ñoù moãi ngoõ töông öùng vôùi 8Kbs. Caùc ngoõ ra naøy ñöa vaøo caùc chaân CS cuûa caùc IC nhôù. Löu yù söï phaân chia tín hieäu cho pheùp xuaát cuûa EPROM vaø RAM khaùc nhau (RD cho RAM vaø PSEN cho EPROM). 8051 coù theå coù ñeán 64Kbytes cho moãi vuøng ROM vaø RAM. Hình 4.8: Giaûn ñoà thôøi gian khi ñoïc döõ lieäu töø boä nhôù ngoaøi Söï choàng laép cuûa vuøng maõ leänh vaø döõ lieäu ngoaøi: Vì boä nhôù maõ leänh chæ ñöôïc ñoïc neân seõ baát tieän trong vieäc phaùt trieån phaàn meàm. Laøm theá naøo ñeå söûa loãi cuûa chöông trình naèm trong kit khi boä nhôù maõ leänh chæ coù theå ñoïc. Bieän phaùp thöôøng ñöôïc söû duïng ôû ñaây laø choàng laép hai vuøng maõ leänh vaø döõ lieäu leân nhau. Tín hieäu PSEN duøng ñeå ñoïc maõ leänh vaø tín hieäu RD duøng ñeå ñoïc döõ lieäu trong cuøng moät boä nhôù. RAM chöùa caû chöông trình vaø döõ lieäu. Hai tín hieäu RD vaø PSEN ñöôïc ñöa vaøo coång AND. Ngoõ ra cuûa coång AND noái vôùi chaân OE cuûa RAM. Maïch ôû hình 4.9 cho pheùp ghi döõ lieäu vaøo RAM. Vì vaäy chöông trình coù theå ñöôïc load vaøo RAM (baèng caùch ghi döõ lieäu vaøo RAM) vaø thi haønh (baèng caùch truy xuaát nhö boä nhôù maõ leänh). RAM W OE WR RD PSEN Hình 4.9 Maïch taïo neân söï choàng laép hai vuøng nhôù VII – HOAÏT ÑOÄNG RESET 8051 ñöôïc reset khi giöõ chaân RST ôû möùc cao ít nhaát trong hai chu kyø maùy vaø sau ñoù traû veà möùc thaáp. RST coù theå ñöôïc noái vôùi switch hoaëc maïng tuï, trôû ñeå taïo tính reset. Traïng thaùi cuûa taát caû thanh ghi sau khi reset heä thoáng toùm taét trong baûng 4.5. Thanh ghi ñeám chöông trình ñöôïc naïp giaù trò 0000H sau khi reset. Khi RST xuoáng möùc thaáp chöông trình luoân baét ñaàu taïi ñieåm 0000H. Noäi dung caùc thanh ghi trong RAM noäi khoâng bò aûnh höôûng bôûi hoaït ñoäng reset. Thanh ghi Noäi dung PC ACC B PSW SP DPTR PORT 0..3 IP IE Timer registers SCON SBUF PCON (HMOS) PCON (CMOS) 0000H 00H 00H 00H 07H 0000H FFH XXX00000B 0XX00000B 00H 00H 00H 0XXXXXXXB 0XXX0000B Baûng 4.5 Giaù trò caùc thanh sau khi reset heä thoáng Chöông IV TOÙM TAÉT TAÄP LEÄNH I – GIÔÙI THIEÄU: Chöông trình ñöôïc xaây döïng neân töø taäp leänh, tuaân theo cuù phaùp vaø caáu truùc logic. Moät hoï vi xöû lyù luoân ñi keøm theo taäp leänh cuûa noù. Chöông naøy gôùi thieäu taäp leänh cuûa hoï MCs-51, vieäc ñònh vò vaø moät vaøi ví duï veà caùc tình huoáng gaëp phaûi khi laäp trình. Chöông naøy khoâng baøn veà kyõ thuaät laäp trình cuõng nhö veà trình bieân dòch. Taäp leänh hoï vi ñieàu khieån MCx-51 toái öu cho caùc ñieàu khieån öùng duïng 8 bit. Noù cung caáp caùc caùch ñònh vò nhanh, goïn thuaän tieän cho vieäc truy xuaát döõ lieäu 8 bit trong vuøng RAM noäi. Taäp leänh cuõng ñöa ra moät soá leänh thao taùc treân bit thuaän tieän cho vieäc ñieàu khieån vaø caùc heä thoáng logic coù yeâu caàu xöû lyù luaän lyù. Laø moät xöû lyù 8 bit, caùc leänh cuûa 8051 laø maõ 8 bit. Do ñoù taäp leänh coù toái ña 256 leänh. Trong ñoù 255 leänh ñöôïc ñònh nghóa. Trong moät leänh, ngoaøi maõ leänh (1 byte) ra coøn coù theå coù döõ lieäu vaø ñòa chæ. Trong taäp leänh 8051 coù 139 leänh 1 byte, 92 leänh 2 byte vaø 24 leänh 3 byte. Phaàn phuï luïc seõ moâ taû ñaày ñuû veà moãi maõ, veà maõ gôïi nhôù, soá byte leänh, soá chu kyø haønh leänh. II – CAÙC MODE ÑÒNH VÒ (ADDRESSING MODE) Khi leänh thao taùc treân döõ lieäu, moät caâu hoûi ñöôïc ñaët ra laø “döõ lieäu ôû ñaâu?”. Ñeå traû lôøi caâu hoûi naøy ta xem xeùt qua caùc mode ñònh vò cuûa 8051. Ñònh vò döõ lieäu laø moät phaàn quan troïng trong taäp leänh. Chuùng xaùc ñònh döõ lieäu nguoàn vaø ñích theo nhöõng caùch khaùc nhau tuøy theo caùch laäp trình. Trong phaàn naøy ta seõ lhaûo saùt kyõ töøng mode ñònh vò vaø cho moãi loaïi moät ví duï. Coù 8 mode ñònh vò: Thanh ghi Tröïc tieáp Giaùn tieáp Töùc thôøi (Immediate) Töông ñoái Xa Chæ soá Ñònh vò baèng thanh ghi: Ngöôøi laâp trình truy xuaát döõ lieäu chöùa trong caùc thanh ghi töø R0 ñeán R7 thoâng qua teân goïi cuûa chuùng. Ñòa chæ cuûa 8 thanh ghi naøy ñöôïc giaûi maõ thoâng qua bit thaáp nhaát cuûa chuùng. Do ñoù maõ leänh vaø toaùn haïng ñòa chæ ñöôïc gom chung vaøo 1 byte. Opcode 5-bit n n n Ví duï leänh sau coäng noäi dung R7 vaøo thanh ghi tích luyõ: ADD A, R7; Maõ leänh laø 001011111B. Trong ñoù 5 bit cao 00101 chæ maõ leänh 3 bit thaáp 111 chæ thanh ghi R7. Moät vaøi leänh xaùc ñònh tröïc tieáp treân thanh ghi nhö thanh ghi tích luyõ, con troû döõ lieäu …do ñoù khoâng caàn ñeán caùc bit ñòa chæ. Baûn thaân maõ leänh ñaõ moâ taû thanh ghi. Ñònh vò tröïc tieáp : Ñònh vò tröïc tieáp coù theå truy xuaát baát kyø byte naøo trong vuøng nhôù noäi hoaëc caùc thanh ghi chöùc naêng. Moät byte ñöôïc theâm vaøo maõ leänh ñeå xaùc ñònh vò trí thanh ghi ñöôïc duøng. Opcode 8-bit Direct Adress 8-bit Tuøy thuoäc vaøo bit cao nhaát cuûa byte ñòa chæ tröïc tieáp, moät trong hai vuøng nhôù seõ ñöôïc choïn. Khi bit 7 cuûa ñòa chæ tröïc tieáp baèng 0: ñòa chæ tröïc tieáp coù giaù trò töø 0 ñeán 127 (00H – 0FH) vaø 128 bytes thaáp cuûa on chip RAM ñöôïc tham khaûo ñeán, Taát caû caùc I/O port, thanh ghi chöùc naêng. Thanh ghi ñieàu khieån, thanh ghi traïng thaùi coù ñòa chæ töø 128 ñeán 255 (80H-FFh). Khi bit 7=1 byte ñòa chæ tröïc tieáp naèm trong giôùi haïn naøy, töông öùng vôùi thanh ghi chöùc naêng seõ ñöôïc truy xuaát. Ví duï port 0 vaø port 1 coù ñòa chæ töông öùng laø 80H vaø 90H. Ta khoâng caàn phaûi bieát ñòa chæ cuûa nhöõng thanh ghi naøy, trình bieân dòch luoân hieåu caùc maõ gôïi nhôù ngaén goïn cuûa noù nhö P0, P1, TMOD… Ñònh vò giaùn tieáp: Laøm theá naøo ñeå nhaän daïng moät bieán, neáu ñòa chæ cuûa noù ñöôïc xaùc ñònh, tính toaùn, thay ñoåi khi chöông trình ñang chaïy. Vaán ñeà naøy ñöôïc ñaët ra khi thao taùc caùc vò trí nhôù lieân tuïc, chuoãi soá, hay xaâu kyù töï. Thanh ghi vaø ñòa chæ tröïc tieáp khoâng theå duøng vì toaùn haïng ñòa chæ phaûi ñöôïc nhaân bieát trong thôøi gian bieân dòch. Ñeå giaûi quyeát vaán ñeà treân 8051 söû duïng ñòa chæ giaùn tieáp. R1 vaø R0 ñöôïc coi nhö nhöõng con troû. Noäi dung cuûa chuùng chæ ñeán moät ñòa chæ naøo ñoù trong RAM khi ñoïc hoaëc ghi döõ lieäu. Bit thaáp nhaát trong byte maõ leänh xaùc ñònh thanh ghi naøo (R0 hay R1) ñöôïc duøng laøm con troû. Ngoân ngöõ assembly cuûa 8051 duøng kyù hieäu @ ñaët tröôùc R0 hay R1 ñeå moâ taû ñònh vò giaùn tieáp. Ví duï, neáu R1 chöùa 40H vaø taïi vò trí 40H trong boä nhôù noäi chöùa giaù trò 55H, leänh: MOV A, @R1; Chuyeån giaù trò 55H vaøo thanh ghi tích luyõ. Opcode 7-bit i Ñònh vò giaùn tieáp trôû neân quan troïng khi phaûi thao taùc töøng byte boä nhôù noäi moät caùch lieân tuïc. Ví duï nhöõng leänh sau seõ xoùa vuøng RAM töø ñòa chæ 60H ñeán 70H: MOV R0, #60H; MOV @R0, #0; LOOP: INC R0; CJNE R0, #80H, LOOP; Leänh ñaàu tieân khôûi ñoäng thanh ghi vôùi ñòa chæ ñaàu tieân cuûa khoái boä nhôù. Leänh thöù hai duøng leänh giaùn tieáp ñeå chuyeån giaù trò 00H vaøo vò trí ñöôïc troû bôûi R0. Leänh thöù 3 taêng giaù trò con troû ñeán ñòa chæ tieáp theo. Vaø leänh cuoái kieåm tra xem con troû ñeán cuoái khoái chöa. Leänh kieåm tra duøng giaù trò 80H chöù khoâng phaûi giaù trò 7FH vì vieäc xaûy ra sau vieäc dòch chuyeån giaùn tieáp. Nhö vaäy chaéc chaén cuoái cuøng seõ ñöôïc ghi tröôùc khi keát thuùc. Ñònh vò töùc thôøi : Khi moät toaùn haïng nguoàn laø moät haèng soá khoâng phaûi laø moät bieán. Haèng soá coù theå ñöôïc gom vaøo trong leänh nhö moät döõ lieäu töùc thôøi. Byte ñöôïc theâm vaøo seõ chöùa giaù trò. Immediate data Opcode Trong ngoân ngöõ assembly toaùn haïng töùc thôøi ñöôïc ñaët tröôùc baèng kyù hieäu soá (#). Toaùn haïng coù theå laø moät haèng soá, kyù hieäu hoaëc toaùn töû. Trình bieân dòch seõ tính toaùn giaù trò vaø gaùn döõ lieäu töùc thôøi vaøo leänh. Taát caû caùc leänh duøng ñònh vò töùc thôøi ñeàu söû duïng haèng döõ lieäu 8 bit. Ngoaïi tröø khi khôûi ñoäng thanh ghi con troû döõ lieäu (DPTR) MOV DPTR, #40000H; Laø moät leänh 3 bytes naïp soá 16 bit vaøo thanh ghi con troû. Ñònh vò töông ñoái: Ñònh vò töông ñoái chæ duøng trong caùc leänh jump. Ñòa chæ töông ñoái (offset) laø moät soá 8 bit coù daáu ñöôïc coäng vaøo thanh ghi ñeám chöông trình ñeå chæ ra ñòa chæ cuûa leänh tieáp theo phaûi thi haønh. Vì offset laø moät soá 8 bit coù daáu neân taàm nhaûy chæ giôùi haïn trong khoaûng caùch +127 vaø –128 vò trí. Tröôùc khi coäng, thanh ghi ñeám chöông trình taêng leân ñeán ñòa chæ sau leänh jump. Vì vaäy, ñòa chæ môùi laø töông ñoái so vôùi ñòa chæ leänh keá tieáp chöù khoâng phaûi ñòa chæ leänh jump. Thoâng thöôøng chi tieát naøy khoâng lieân quan ñeán ngöôøi laäp trình, khi maø ñích nhaûy ñeán ñöôïc moâ taû baèng moät nhaõn. Trình bieân dòch seõ ñònh giaù trò offset töông ñoái töông öùng. Relative offset Opcode Ví duï neáu nhaõn THERE ñöôïc ñaët taïi leänh coù ñòa chæ 1040H vaø leänh SJMP THERE ÔÛ taïi vò trí 1000H vaø 1001H. Trình bieân dòch seõ gaùn giaù trò offset töông ñoái laø 3EH taïi byte thöù hai cuûa leänh. Ñònh vò tuyeät ñoái: Ñònh vò tuyeät ñoái chæ duøng ñoái vôùi caùc leänh ACALL, AJMP. Leänh 2 byte naøy cho pheùp reõ nhaùnh trong phaïm vi 2Kbytes boä nhôù. 5bit cao cuûa ñòa chæ ñích laø 5 bit cao hieän thôøi trong thanh ghi ñeám chöông trìng. Vì vaäy leänh theo sau leänh reõ nhaùnh vaø leänh keát thuùc reõ nhaùnh keát thuaùc naèm trong phaïm vi 2Kbytes. Addr7 - Addr0 Addr 10 – Addr8 Opcode 5-bit Ñònh vò xa: Ñònh vò xa chæ söû duïng cho caùc leänh LCALL vaø LMP. Caùc leänh 3-byte naøy coù ñòa chæ ñích laø soá 16-bit ñaët trong byte 2 vaø byte 3. Ñieàu thuaän tieän laø toaøn boä vuøng maõ leänh ñeàu coù theå ñöôïc söû duïng. Nhöng moät ñieàu baát tieän laø leänh 3-byte quaù daøi vaø phuï thuoäc vò trí (position-dependent). Phuï thuoäc vò trí laø moät ñieäu baát tieän bôûi vì chöông trình khoâng theå thi haønh taïi moät ñòa chæ khaùc. Opcode Addr15 – Addr8 Addr7 – Addr0 Ñònh vò chæ soá : Ñònh vò chæ soá duøng moät thanh ghi cô sôû (PC hoaëc DPTR) vaø moät thanh ghi laøm offset (ACC) taïo ra moät ñòa chæ seõ bò taùc ñoäng bôûi caùc leänh JMP hoaëc MOVC. Thanh ghi neàn offset ñòa chæ taùc ñoäng PC or DPTR + ACC = Caùc ví duï ñöôïc cung caáp trong phuï luïc cho caùc leänh: MOVC A, @A+ JMP @A+DPTR III – PHAÂN LOAÏI LEÄNH: Caùc leänh 8051 ñöôïc chia thaønh 5 nhoùm nhö sau: Soá hoïc Logic Trao ñoåi döõ lieäu Luaän lyù Reõ nhaùnh chöông trình Caùc leänh soá hoïc Caùc leänh soá hoïc thöôøng söû duïng 4 mode ñònh vò. Leänh ADD A coù theå ñöôïc vieát baèng nhieàu caùch khaùc nhau: ADD A, 7FH (Ñònh vò tröïc tieáp) ADD A, @R0 (---------giaùn tieáp) ADD A, R7 (---------thanh ghi) ADD A, #35H (--------- töùc thôøi) Taát caû caùc leänh soá hoïc thi haønh trong moät chu kyø maùy, ngoaïi tröø leänh INC DPTR (2 chu kyø maùy), MUL AB vaø DIV AB (4 chu kyø maùy). 8051 cung caáp caùch ñònh vò raát maïnh cho vuøng RAM noäi cuûa noù. Baát kyø byte nhôù naøo cuõng ñeàu coù teå taêng, giaûm baèng ñònh vò tröïc tieáp maø khoâng caàn thoâng qua thanh ghi tích luyõ. Leänh INC coù theå thao taùc treân con troû döõ lieäu (16 bit). Nhöng leänh DEC khoâng ñöôïc ñònh nghóa treân con troû. Do ñoù ñeå thöïc hieän ñöôïc ñieàu naøy ta coù caùc leänh sau: DEC DPL ; giaûm byte thaáp DPTR MOV R7, DPL ; chuyeån vaøo DPL CJNE R7, #0FFH, SKIP ; neáu vöôït quaù FF DEC DPH ; giaûm luoân byte cao SKIP : (tieáp tuïc) Caùc leânh MUL AB vaø DIV AB chæ thao taùc treân caùc thanh ghi A vaø B. Leänh Logic : Caùc leänh logic bieåu dieãn caùc toaùn töû luaän lyù nhö AND, OR, EA-OR vaø NOT … Caùc leänh naøy treân töøng bit cuûa byte döõ lieäu. Ví duï thanh ghi ACC chöùa soá 10101101B thì leänh: ANL A, #10110010B Chöùa keát quaû 10100000 vaøo thanh ghi ACC. Caùc mode ñònh vò trong leänh logic cuõng gioáng nhö trong leänh soá hoïc. Taát caû caùc leänh logic duøng ñeán thanh ghi ACC nhö moät toaùn haïng ñeàu laø nhöõng leänh moät chu kyø. Caùc leänh khaùc ñeàu chieám 2 chu kyø maùy. Leänh logic coù theå thao taùc tröïc tieáp baát cöù byte naøo trong vuøng nhôù noäi. Leänh XRL , #data ñaûo nhanh vaø deã daøng caùc bit cuûa port. XRL P1, #0FFH; Leänh naøy moâ taû hoaït ñoäng read-modify-write. 8 bit cuûa port 1 ñöôïc ñoïc, sau ñoù moãi bit cuûa XOR vôùi bit töông öùng trong byte döõ lieäu töùc thôøi ñeàu laø 1, XOR seõ ñaûo moãi bit ñöôïc ñoïc. Keát quaû ñöôïc vieát trôû laïi port 1. Caùc leänh chuyeån dòch döõ lieäu: RAM noäi Caùc leänh chuyeån dòch döõ lieäu trong vuøng RAM noäi chæ chieám 1 hoaëc 2 chu kyø maùy. Leänh coù daïng: MOV , Moät neùt ñaëc tröng cuûa hoï MSC-51 laø stack naèm trong vuøng RAM noäi vaø lôùn daàn leân phía teân cuûa boä nhôù. Leänh PUSH tröôùc tieân taêng con troû stack, sau ñoù môùi sao cheùp byte vaøo stack. PUSH vaø POP chæ duøng ñònh vò tröïc tieáp. Theá nhöng baûn thaân stack laïi duøng ñònh vò tröïc tieáp thoâng qua con troû stack (SP). 8031/8051 khoâng duøng 128 byte cao trong vuøng nhôù noäi laøm stack. Neáu SP vöôït quaù 127 bytes ñöôïc push bò maát vaø byte ñöôïc pop khoâng xaùc ñònh. Leänh dòch chuyeån döõ lieäu 16-bit (MOV duøng ñeå khôûi ñoäng con troû döõ lieäu. Leänh XCV A, Chuyeån ñoåi döõ lieäu giöõa A vaø byte ñöôïc ñònh vò. Leänh XCHD A, @R1 chuyeån ñoåi 4 bit thaáp cuûa thanh ghi ACC vôùi byte ñöôïc R1 chæ ñeán. RAM ngoaøi Dòch chuyeån döõ lieäu giöõa boä nhôù trong vaø ngoaøi söû duïng mode ñònh vò giaùn tieáp. Ñòa chæ giaùn tieáp coù theå laø moät byte hay 2 byte (DPTR). Caùc leänh dòch chuyeån döõ lieäu thao taùc treân boä nhôù ngoaøi ñeàu chieám hai chu kyø maùy vaø duøng thanh ghi tích luyõ laøm toaùn haïng nguoàn hoaëc ñích. Look-Up Tables Hai leänh ñöôïc cho saün ñeå ñoïc moät baûng döõ lieäu trong boä nhôù chöông trình. Khi truy xuaát ñeán vuøng nhôù chöông trình thì noäi dung cuûa baûng chæ ñöôïc ñoïc maø khoâng ñöôïc ghi. Töø gôïi nhôù MOVC töùc laø “move constant”. MOVC duøng thanh ghi ñeám chöông trình cuõng nhö con troû döõ lieäu kaøm thanh ghi neàn vaø thanh ghi tích luyõ laøm offset. MOVC A,@A+DPTR ; Coù theå ñoïc ñöôïc moät soá trong baûng 256 phaàn töû vaøo thanh ghi tích luyõ. Trong ñoù thanh ghi tích luyõ chæ ñeán moät vò trí trong coøn con troû DPTR chæ ñeán vò trí ñaàu baûng. MOVC A,@A+PC ; Cuõng töông töï nhö treân, chæ khaùc laø thanh ghi PC ñöôïc duøng laøm thanh ghi neàn vaø baûng ñöôïc truy xuaát thoâng qua chöông trình con. Tröôùc tieân chæ soá yeâu caàu ñöôïc naïp cho thanh ghi tích luyõ sau ñoù chöông trình con ñöôïc goïi. Vieäc khôûi ñoäng vaø goïi cuï theå nhö sau: MOV A,ENTRY_NUMBER CALL LOOK_UP . . . LOOK_UP : INC A MOVC A, @A+PC Ret TAB: DB data, data, data … Baûng ñöôïc ñaët ngay sau leänh RET cuûa chöông trình con. Leänh INC caàn thieát vì PC seõ chæ ñeán leänh RET sau khi thi haønh MOVC. Vieäc taêng thanh ghi A cho pheùp nhaûy qua khoûi leänh RET. Caùc leänh luaän lyù Caùc leänh luaän lyù cuûa 8051 thao taùc treân bit ñôn. RAM noäi cung caáp 128 bit vaø caùc thanh ghi chöùc naêng cung caáp 128 bit khaùc. Leänh truy xuaát ñeán caùc bit thoâng thöôøng nhö set, xoùa, ñaûo, AND, OR … Taát caû caùc bit ñeàu truy xuaát baèng ñònh vò tröïc tieáp vôùi caùc bit coù ñòa chæ töø 00H – 7Fh trong 128 ñòa chæ thaáp vaø 80H-FFH trong SFRs. Caùc bit trong vuøng ñòa chæ thaáp ñaït taïi 20F ñeán 2FH, ñöôïc ñaùnh soá laàn löôït töø bit 0 cuûa ñòa chæ 200H (bit 00H) ñeán bit 7 cuûa ñòa chæ 2FH (bit 7Fh). Ví duï SETB P.1.7 set bit 7 port 1 Bit carry trong PSW ñöôïc söû duïng nhö single-bit accumulator. Ví duï CLR C CLR CY ; xoùa carry Test bit Caùc leänh test bit thöôøng laø caùc leänh reõ nhaùnh chöông trình. Chuùng kieåm tra traïng thaùi caùc bit ñeå nhaûy ñeán chöông trình töông öùng neáu thoûa ñieàu kieän. Leänh reõ nhaùnh chöông trình Coù moät soá leänh ñieàu khieån doøng chöông trình, chuùng goàm caùc leänh goïi chöông trình con vaø traû veà töø moät chöông trình con hoaëc reõ nhaùnh coù ñieàu kieän vaø khoâng coù ñieàu kieän. Nhöõng khaû naêng naøy coù theå ñöôïc caûi tieán hôn nöõa khi söû duïng 3 mode ñònh vò trong caùc leänh reõ nhaùnh chöông trình. Coù 3 keänh JMP khaùc nhau:SJMP, LJMP vaø AJMP (töông öùng laø ñònh vò töông ñoái, ñònh vò xa vaø ñònh vò tuyeät ñoái). Trình bieân dòch Intel chaáp nhaän leänh chung chung JMP neáu ngöôøi laäp trình khoâng quan taâm ñeán söï thay ñoåi bieân dòch. Trong khi trình bieân dòch cuûa nhöõng haõng khaùc khoâng coù ñaëc tính naøy. JMP ñöôïc bieân dòch thaønh AJMP neáu ñích naèm ôû tröôùc vaø khoaûng nhaûy naèm trong phaïm vi 2Kbytes. Trong caùc tröôøng hôïp khaùc coù theå dòch thaønh LJMP. Leänh CALL cuõng töông töï nhö vaäy. Leänh SJMP ñònh ñòa chæ ñích nhö moät offset töông ñoái. Vì vaäy leänh naøy daøi 2 bytes. Khoaûng caùch nhaûy bò giôùi haïn töø –128 ñeán +127 bytes töông ñoái so leänh sau leänh SJMP. Leänh LJMP xaùc ñònh moät ñòa chæ ñích laø moät soá 16 bit. Vì vaäy leänh naøy daøi 3 bytes. Ñòa chæ ñích coù theå ôû baát kyø trong vuøng nhôù chöông trình 63KB. Leänh AJMP xaùc ñònh ñòa chæ ñích laø moät soá 11 bit. Gioáng nhö SJMP, leänh naøy daøi 2 bytes, nhöng ñöôïc bieân dòch khaùc. Maõ leänh chöùa 3 bit trong voøng 11 bit ñòa chuû vaø byte thöù hai chöùa 8 bit coøn laïi cuûa ñòa chæ ñích. Khi leänh ñöôïc thi haønh 11 bit naøy ñöôïc ñaët vaøo 11 bit thaáp trong thanh ghi PC vaø 5 bit cao trong thanh ghi PC khoâng ñoåi. Vì vaäy ñích phaûi naèm trong phaïm vi 2 Kbytes. Trong taát caû caùc tröôøng hôïp, ngöôøi laäp trình xaùc ñònh ñòa chæ bit baèng moät nhaõn hoaëc nhö moät soá 16 bit. Trình bieân dòch seõ ñaët ñòa chæ ñích vaøo vò trí ñuùng trong leänh ñöôïc bieân dòch. Jump Tables Leänh “JMP @ A+DPTR” cung caáp leänh nhaûy phuï thuoäc ñieàu kieän theo moät baûng nhaûy (jump tables). Ñòa chæ ñích seõ ñöôïc tính trong khi thi haønh chöông trình nhö toång cuûa DPTR vaø thanh ghi tích luyõ. Ñaàu tieân DPTR ñöôïc naïp ñòa chæ cuûa baûng vaø thanh ghi tích luyõ ñöôïc duøng laøm chæ soá. Ví duï neáu coù 5 tröôøng hôïp nhaûy, giaù trò töø 0 ñeán 4 ñöôïc naïp cho thanh ghi tích luyõ vaø leänh nhaûy töông öùng vôùi töøng tröôøng hôïp ñöôïc moâ taû nhö sau: MOV DPTR, #JUMP_TABLE ; MOV A, INDEX_NUMBER ; RL A JMP @A+DPTR Leänh RL ôû treân ñoåi chæ soá (töø 0 ñeán 4) thaønh caùc soá chaün töø 0 ñeán 8, vì moãi ñieåm xaâm nhaäp trong baûng laø moät ñòa chæ 2-byte. JNP_TABLE : AJMP CASE0 AJMP CASE1 AJMP CASE2 AJMP CASE3 Chöông trình vaø con ngaét Coù hai leänh CALL khaùc nhau: ACALL vaø LCALL duøng ñònh vò tuyeät ñoái vaø xa. Gioáng nhö leänh JMP, leänh CALL ñöoâc trình bieân dòch cuûa Intel duøng khi ngöôøi laäp trình khoâng quan taâm ñeán ñòa chæ ñöôïc bieân dòch. Leänh naøy ñaåy thanh ghi PC vaøo stack vaø naïp PC vôùi giaù trò ñöôïc chæ ra trong leänh. Löu yù PC seõ ñöôïc traû laïi giaù trò ñòa chæ sau leänh CALL khi noù chaám döùt chöông trình con. Caùc leänh LJMP vaø ACALL ñeàu coù nhöõng haïn cheá gioáng nhö LJMP vaø AJMP ñöôïc moâ taû ôû treân. Chöông trình con keát thuùc baèng leänh RET, noù seõ traû ñieàu khieån laïi cho chöông trình chính. Khoâng coù gì bí aån khi RET traû ñieàu khieån laïi cho chöông trình chính, noù chæ ñôn giaûn laáy 2 bytes cuoái cuøng cuûa stack vaø ñaët chuùng vaøo thanh ghi PC. Leänh RETI duøng ñeå quay trôû veà chöông trình chính töø trong chöông trình phuïc vuï ngaét. Söï khaùc nhau giöõa RET vaø RETI chæ laø RETI kyù hieäu cho ngaét ñieàu khieån heä thoáng. Leänh nhaûy coù ñieàu kieän 8051 cung caáp moät soá leänh nhaûy coù ñieàu kieän. Taát caû nhöõng leänh naøy ñeàu xaùc ñònh ñòa chæ ñích baèng ñònh vò töông ñoái. Giôùi haïn khoaûng caùch nhaûy töø –128 ñeán +127 bytes keå töø sau leänh nhaûy coù ñieàu kieän. Tuy nhieân ngöôøi laäp trình cuõng coù theå ñònh moät ñòa chæ baèng nhhaõn hoaëc moät soá 16 bit. Khoâng coù bit zero trong thanh ghi PSW. JZ vaø JNZ test noäi dung thanh ghi ACC cho ñieàu khieån nhaûy. Leänh DJNZ (nhaûy neáu khaùc 0) ñöôïc duøng ñeå ñieàu khieån voøng laëp. Ñeå voøng laäp thi haønh N laàn, naïp bieán ñeám vôùi N vaø ñaët DJNZ ôû cuoái voøng laëp ñeå baét ñaàu voøng laëp. Ví duï voøng laëp sau thi haønh 10 laàn: MOV R0,#10 ; LOOPP: (baét ñaàu voøng laëp) . . . (keát thuùc voøng laëp) DJNZ R7, LOOP ; (tieáp tuïc) Leänh CJNZ (so saùnh vaø nhaûy neáu khoâng baèng) cuõng duøng ñeå ñieàu khieån voøng laëp. Hai bytes ñöôïc xaùc ñònh trong vuøng toaùn haïng cuûa leänh vaø leänh nhaûy seõ thi haønh neáu hai bytes naøy khaùc nhau. Ví duï, neáu moät kyù töï ñöôïc ñoïc vaøo thanh ghi ACC töø coång noái tieáp vaø nhaûy ñeán nhaõn TERMINAL neáu kyù töï ñoïc vaøo laø CONTROL-C (03H) . CJNE A, #03, SKIP ; SJMP TERMINAL ; SKIP: (tieáp tuïc) Leänh jump chæ xaûy ra khi A=03H. Moät öùng duïng khaùc cuûa leänh naøy laø so saùnh lôùn hôn vaø beù hôn. Hai byte trong mieàn toaùn haïng laø nhöõng soá khoâng daáu. Neáu toaùn haïng ñaàu nhoû hôn toaùn haïng thöù hai thì côø carry ñöôïc set. Neáu toaùn haïng ñaàu lôùn hôn hoaëc baèng toaùn haïng thöù hai thì côø carry ñöôïc xoùa. Ví duï neáu muoán nhaûy ñeán BIG neáu ACC lôùn hôn hoaëc baèng 20H, ta coù caùc leänh sau: CJNE A,#20H,$+3 JNC BIG Kyù hieäu dollars “$” laø moät kyù hieäu ñaët bieät cuûa trình bieân dòch thay theá cho ñòa chæ cuûa leänh hieän thôøi. Vì CJNE laø moät leänh 3-bytes, “$+3” laø ñòa chæ cuûa leänh tieáp theo. Chöông V GIÔÙI THIEÄU VEÀ KIT VI ÑIEÀU KHIEÅN 8051 I –CHÖÙC NAÊNG CAÙC PHÍM: 1 – Baøn phím: Kít vi ñieàu khieån coù taát caû laø 26 phím nhaán nhö hình 1 ñöôïc chia thaønh caùc nhoùm nhö sau: 16 phím nhaäp döõ lieäu cuûa chöông trình daïng soá thaäp luïc phaân töø 0 ñeán F. Caùc phím chöùc naêng Hình 1 Q G T P K I C D E F R 8 9 A B S 4 5 6 7 0 1 2 3 Q 2 – Chöùc naêng cuûa phím: Khi môùi caáp ñieän cho maùy 4 Led beân traùi seõ hieån thò 4 soá 0000, boán led beân phaûi taét Neáu khoâng hieån thò ñuùng haõy nhaán phím “Q”. Phím “Q” coù chöùc naêng Reset maïch khi khôûi ñoäng hoaëc khi muoán thoaùt khoûi chöông trình vi ñieàu khieån ñang thöïc hieän (chöùc naêng nhö phím RESET cuûa maùy vi tính) ­ S 3 – Chöùc naêng cuûa phím: Muoán nhaäp döõ lieäu môùi vaøo oâ nhôù coù ñòa chæ ví duï 4000, haõy duøng caùc phím nhaäp döõ lieäu ñaùnh soá 4000, ñòa chæ naøy seõ xuaát hieän ôû 4 led beân phaûi. Nhaán phím “S” thì ñòa chæ 4000 seõ thay theá cho ñòa chæ tröôùc ñoù ôû 4 led beân traùi. 4 led coøn laïi chæ coù 2 led saùng ñoù chính laø noäi dung cuûa oâ nhôù töông öùng vôùi ñòa chæ 4 led beân traùi 4 – Chöùc naêng cuûa phím: Duøng ñeå löu tröõ döõ lieäu vaøo oâ nhôù coù ñòa chæ ôû 4 led beân traùi, ví duï muoán löu tröõ döõ lieäu laø “3F” vaøo oâ nhôù coù ñòa chæ laø 4000, haõy ñaùnh “3F” töø caùc phím döõ lieäu, döõ lieäu môùi “3F” seõ thay theá döõ lieäu cuõ tröôùc ñoù. Sau ñoù nhaán phím “­” ñeå löu tröõ döõ lieäu naøy vaøo oâ nhôù 4000. Ñòa chæ seõ taêng leân 1 laø 4001 ñeå saün saøng nhaän döõ lieäu tieáp theo vaø 2 led beân traùi hieån thò noäi dung cuûa oâ nhôù 4001. ¯ Chöùc naêng cuûa phím naøy löu tröõ döõ lieäu ñoàng thôøi taêng ñòa chæ cuûa oâ nhôù. 5 – Chöùc naêng cuûa phím: Coù chöùc naêng giaûm ñòa chæ cuûa oâ nhôù xuoáng 1 ñôn vò töông öùng vôùi moãi laàn nhaán. Ví duï muoán kieåm tra laïi oâ nhôù vöøa nhaäp laø 4000 xem coù ñuùng laø döõ lieäu “3F” khoâng, haõy nhaán phím “¯”. Neáu sai thì nhaäp laïi, neáu ñuùng thì nhaán phím taêng ñòa chæ ñeå naïp caùc döõ lieäu tieáp theo. P 6 – Chöùc naêng cuûa phím: Sau khi nhaäp döõ lieäu cuûa moät chöông trình taïi ñòa chæ 4000, ñeå vi ñieàu khieån thöïc hieän chöông trình naøy haõy nhaán ohím “P”. Khi ñoù treân maøn hình 8 Led seõ xuaát hieän “PC 4000”. Neáu muoán thöïc hieän chöông trình taïi ñòa chæ 4000 haõy nhaán phím taêng ñòa chæ, khi ñoù treân maøn hình seõ xuaát hieän theâm daáu “=” nhö sau: “PC =4000”. Sau ñoù nhaán phím “G”. Chöông trình seõ ñöôïc thi haønh. Neáu chöông trình löu taïi ñòa chæ khaùc vôùi ñòa chæ 4000 thì tröôùc khi nhaán phím taêng ñòa chæ haõy ñaùnh ñòa chæ cuûa chöông trình ñoù vaøo baèng caùc phím nhaäp döõ lieäu. Sau ñoù nhaán phím taêng ñòa chæ, ví duï muoán thöïc hieän chöông trình taïi ñòa chæ 5000 thì treân maøn hình 8 led seõ hieån thò “PC =5000”. Nhaán tieáp phím “G” chöông trình seõ ñöôïc thi haøn htaïi ñòa chæ 5000. 7 - Chöùc naêng cuûa phím: Duøng ñeå xem noäi dung caùc thanh ghi, tröôùc tieân nhaán phím “R” vaø sau ñoù nhaán phím thaäp phaân töông öùng töø “6” cho ñeán “F” Nhaán phím thaäp phaân “A”: xem noäi dung thanh ghi A Nhaán phím thaäp phaân “B”: xem noäi dung thanh ghi B Nhaán phím thaäp phaân “C”: xem noäi dung thanh ghi C R Nhaán phím thaäp phaân “D”: xem noäi dung thanh ghi D Nhaán phím thaäp phaân “E”: xem noäi dung thanh ghi E Nhaán phím thaäp phaân “F”: xem noäi dung thanh ghi F Nhaán phím thaäp phaân “8”: xem noäi dung thanh ghi H Nhaán phím thaäp phaân “9”: xem noäi dung thanh ghi L Nhaán phím thaäp phaân “7”: xem noäi dung caëp thanh ghi SP Nhaán phím thaäp phaân “6”: xem noäi dung caëp thanh ghi PC I 8 – Chöùc naêng cuûa phím: Phím naøy taùc ñoäng ñeán ngaét cöùng cuûa heä thoáng vi xöû lyù. Chöông trình seõ bò ngöøng sau khi nhaán phím “I”, neáu nhaán “I” theâm laàn nöõa heä thoáng seõ ñöôïc ñaët laïi traïng thaùi maëc ñònh ban ñaàu töông ñöông vôùi reset maùy baèng phím “Q” T 9 – Chöùc naêng cuûa phím: Chöùc naêng cuûa phím naøy laø thöïc hieän chöông trình töøng böôùc. Trình töï nhaán phím gioáng nhö phím “G”. Neáu nhaán phím “G” ñeå thöïc hieän caû chöông trình taïi ñòa chæ chöùa trong caëp thanh ghi PC, ta nhaán phím “T” chöông trình seõ ñöôïc thöïc hieän töøng leänh taïi ñòa chæ chöùa trong PC. * Chuù yù: neáu nhaán phím “G” khoâng thoâng qua phím “P” vaø caùc phím khaùc thì chöông trình maëc nhieân seõ thöïc hieän taïi ñòa chæ 4000. Coù 1 soá chöông trình chöùc naêng chöa naïp vaøo EPROM II – GIÔÙI THIEÄU CAÁU TRUÙC PHAÀN CÖÙNG KIT VI XÖÛ LYÙ: 1 – Taàn soá laøm vieäc: Kit vi ñieàu khieån söû duïng vi ñieàu khieån 8051 hoaëc 8951 cuûa Intel vôùi taàn soá hoaït ñoäng 12MHz. Caùc chöông trình veà thôøi gian ñöôïc vieát töông öùng vôùi ñòa chæ naøy. 2 – Toå chöùc boä nhôù: a . Boä nhôù EPROM: Coù dung löôïng 16KB söû duïng 2 EPROM 2764, chöông trình heä thoáng chöùa ôû EPROM thöù nhaát, EPROM thöù 2 chöa söû duïng ñöôïc thieát keá ôû daïng socket. EPROM 1 coù ñòa chæ töø 0000H – 1FFFH EPROM 2 coù ñòa chæ töø 2000H – 3FFFH b . Boä nhôù RAM: Boä nhôù RAM coù dung löôïng 16KB söû duïng 2 IC 6264: RAM 1 coù ñòa chæ töø 4000H – 5FFFH RAM 2 coù ñòa chæ töø 6000H – 7FFFH Chöông trình coù theå söû duïng toaøn boä caùc vuøng nhôù RAM 3 – Caùc IC ngoaïi vi: trong heä thoáng coù söû duïng 2 IC 8255A duøng ñeå giao tieáp vôùi thieát bò ngoaïi vi. Ñòa chæ cuûa caùc port 8255-1 8255-2 Port A 8000H A000H Port B 8001H A001H Port C 8002H A002H Thanh ghi ñieàu khieån 8003H A003H Baûng ñoà nhôù cuûa 2 IC 8255 Caùc ngoõ ra cuûa IC 8255A –1, 8255 – 2, ñöa ra beân ngoaøi baèng connector 64 chaân coù sô ñoà chaân ôû baûng tra. Moãi IC 8255A coù 3 port, moãi port coù 8 chaân ñieàu khieån neân soá chaân ñöa ra beân ngoaøi ñeå ñieàu khieån laø 48. 4 – Khoái giaûi maõ hieån thò – queùt phím söû duïng IC 8279: Vuøng ñòa chæ söû duïng cuûa IC 8279 laø C000H – C001H , trong ñoù: Ñòa chæ C000H laø ñòa chæ duøng ñeå gôûi döõ lieäu caàn hieån thò vaø ñoïc maõ phím. Ñòa chæ C001H laø ñòa chæ duøng ñeå gôûi töø ñieàu khieån ra 8279 – ñoïc thanh ghi traïng thaùi. a . Phaàn giaûi maõ hieån thò: Goàm coù 8 led vôùi thöù töï Led1 ñeán Led8 theo höôùng töø phaûi sang traùi nhö hình 2. LED4 LED5 LED6 LED 7 LED 1 LED 2 LED 3 LED8 a b c d e f g p Caáu truùc byte döõ lieäu cuûa led p g f e d c b A Heä thoáng söû duïng Led loaïi Anode chung neân muoán ñoaïn naøo saùng thì bit döõ lieäu töông öùng vôùi ñoaïn ñoù baèng 1. Ñoaïn naøo taét thì bit töông öùng vôùi ñoaïn ñoù baèng 0. Ví duï muoán saùng soá “9” thì byte döõ lieäu seõ gôûi ra led laø: 0 1 1 0 1 1 1 1 Töông öùng vôùi soá hex laø 6FH. Sau ñaây laø maõ 7 ñoaïn cuûa 1 chöõ soá vaø chöõ caùi: p G f e d c b a Hex Soá 0 0 0 1 1 1 1 1 1 3F Soá 1 0 0 0 0 0 1 1 0 06 Soá 2 0 1 0 1 1 0 1 1 5B Soá 3 0 1 0 0 1 1 1 1 4F Soá 4 0 1 1 0 0 1 1 0 66 Soá 5 0 1 1 0 1 1 0 1 6D Soá 6 0 1 1 1 1 1 0 1 7D Soá 7 0 0 0 0 0 1 1 1 07 Soá 8 0 1 1 1 1 1 1 1 7F Soá 9 0 1 1 0 1 1 1 1 6F Chöõ A 0 1 1 1 0 1 1 1 77 Chöõ b 0 1 1 1 1 1 0 0 7C Chöõ C 0 0 1 1 1 0 0 1 39 Chöõ d 0 1 0 1 1 1 1 0 5E Chöõ E 0 1 1 1 1 0 0 1 79 Chöõ F 0 1 1 1 0 0 0 1 71 Chöõ P 0 1 1 1 0 0 1 1 73 Chöõ H 0 1 1 1 0 1 1 0 76 Chöõ U 0 0 1 1 1 1 1 0 3E Coù theå tìm caùc maõ töông öùng coøn laïi Coù 2 caùch hieån thò döõ lieäu treân caùc Led: Caùch 1: khi gôûi caùc döõ lieäu môùi ra ñòa chæ C000H thì döõ lieäu naøy seõ hieån thò ôû Led 1, döõ lieäu tröôùc ñoù cuûa caùc led seõ dòch sang traùi theo chieàu muõi teân trong hình 3. Rieâng byte döõ lieäu tröôùc ñoù cuûa led 8 seõ dòch vaø maát ñi. LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 Muõi teân naèm ngang chæ chieàu nhaän döõ lieäu töø vi ñieàu khieån ñöa ñeán led 1. Caùc muõi teân voøng cung chæ chieàu dòch chuyeån döõ lieäu. * Chuù yù: neáu muoán xoùa heát maøn hình 8 led thì gôûi 8 byte 00h lieân tieáp ra A000h. Caùch 2: kieåu gôûi döõ lieäu ôû caùch 1 coøn ñöôïc goïi laø kieåu dòch chuyeån döõ lieäu tuaàn töï. Beân caïnh ñoù 8279 coøn cho pheùp gôûi döõ lieäu tröïc tieáp ñeán baát kyø led naøo trong 8 led – toå chöùc cuûa led khoâng coù gì thay ñoåi ñòa chæ gôûi döõ lieäu vaãn laø C000H nhöng moãi led coøn coù theâm 1 ñòa chæ ñieàu khieån nhö trong hình 4. Ñòa chæ ñieàu khieån cuûa led phaûi gôûi ra ñòa chæ C001H tröôùc khi gôûi döõ lieäu ra ñòa chæ C000H. LED 1 LED 2 LED 3 LED4 LED5 LED6 LED 7 LED8 80H 81H 82H 83H 84H 85H 86H 87H b. Phaàn giaûi maõ baøn phím: Chöông trình con giaûi maõ baøn phím ñöôïc vieát taïi ñòa chæ 0223H söû duïng caùc thanh ghi R2, A, DPTR, R6, R7, oâ nhôù 41h. Khi goïi chöông trình con 0223H: Neáu khoâng aán phím thì sau khi thöïc hieän xong chöông trình seõ trôû veà chöông trình chính vôùi noäi dung thanh ghi A =FFH Neáu coù aán phím thì maõ cuûa phím aán chöùa trong A. Chöông trình naøy neáu coù aán phím hoaëc khoâng aán phím ñeàu trôû veà chöông trình sau khi thöïc hieän xong vaø phaûi chuù yù caát döõ lieäu trong caùc thanh ghi khi goïi chöông trình con naøy Baûng maõ caùc phím soá: Phím Maõ Phím Maõ Phím Maõ Phím Maõ 0 00 4 04 8 08 C 0C 1 01 5 05 9 09 D 0D 2 02 6 06 A 0A E 0E 3 03 7 07 B 0B F 0F Baûng maõ caùc phím chöùc naêng: Phím Maõ Phím Maõ T 10 S 14 G 11 15 R 12 P 16 13 K 17 PHAÀN II THIEÁT KEÁ Chöông I THIEÁT KEÁ PHAÀN CÖÙNG I – MAÏCH CHUYEÅN ÑOÅI AD: 1 – Giôùi thieäu ADC 0809 ADC 0809 laø thieát bò bieán ñoåi töông töï soá duøng kyõ thuaät CMOS. Toång coäng ngöôøi söû duïng coù 8 keânh laøm vieäc hoaøn toaøn ñoäc laäp vôùi nhau ñeå löïa choïn. ÔÛ ñaây coøn chuù yù laø caùc ñieän aùp ñöôïc ño so vôùi ñieän theá 0V. Coøn moät ñaëc ñieåm ñaùng quan taâm hôn laø söï tieâu thuï doøng ñieän cuûa vi maïch haàu nhö khoâng ñaùng keå (chæ côõ 300uA). Thôøi gian bieán ñoåi khoaûng 100 us. Caùc thoâng soá kyõ thuaät cuûa boä bieán ñoåi ADC 0809 ñöôïc keå ra nhö sau: Khoâng caàn ñoøi hoûi ñieàu chænh ñieåm 0. Queùt ñoäng 8 keânh baèng caùc logic ñòa chæ. Giaûi tín hieäu loái vaøo Analog khi ñieän aùp nguoàn laø +5V. Taát caû caùc tín hieäu töông thích TTL. Ñoä phaân giaûi 8 bit. Thôøi gian bieán ñoåi 100us. Doøng tieâu thuï (bình thöôøng): 0.3 mA. Taàn soá cung caáp cho chaân clock: 10KHz ÷ 1280KHz. Thoâng thöôøng vaøo khoaûng 640KHz. Tín hieäu giöõ nhòp duøng cho boä bieán ñoåi AD caàn phaûi taïo ñöôïc ôû beân ngoaøi vaø ñöôïc daãn ñeán chaân clock. Ñieän aùp so saùnh ñöôïc ñöa qua taàng laëp laïi ñieän aùp ñeå laøm chaân REF+. Chaân naøy coù ñieäntrôû loái vaøo côõ 2.5K. Maãu bit ôû caùc loái vaøo ñòa chæ A, B, C seõ xaùc ñònh xem keânh naøo phaûi ñöôïc löïa choïn. 2 – Nguyeân taéc hoaït ñoäng Nguyeân taéc laøm vieäc cuûa boä bieán ñoåi ADC 0809 cuõng khoâng coù gì phöùc taïp. Moät xung döông ôû chaân start kích hoaït söï bieán ñoåi. Qua ñoù maãu bit ôû loái vaøo ñòa chæ A, B, C cuõng ñoàng thôøi ñöôïc choát vaø xaùc ñònh keânh caán bieán ñoåi. Trong quaù trình bieán ñoåi, chaân ra EOC (End of Conversion) ñöùng ôû möùc Low. Sau caû 100us möùc naøy seõ chuyeån sang high vaø baùo hieäu keát thuùc quaù trình chuyeån ñoåi. Sau ñoù keát quaû cuûa quaù trình chuyeån ñoåi seõ xeáp haøng ôû ñöôøng daãn döõ lieäu D0 ÷ D7. Khi OE (Output Enable) = 1, caùc ñöôøng daãn coù theå ñoïc tieáp. 3 – Maïch taïo dao ñoäng cho ADC 0809: 0,7 V0 (f= ) RC Do taàn soá laøm vieäc töông ñoái cao, ta söû duïng boä ña haøi taïo soùng xuoáng duøng Trigger Schmitt theo coâng ngheä TTL. Vôùi maïch ñieän nhö treân ta coù taàn soá dao ñoäng: F » 0,7 » 700 KHz RC 4 – Maïch so saùnh laëp laïi ñieän aùp: Ta söû duïng OP-AMP LM 358 ñeå laäp laïi ñieän aùp nhaèm phoái hôïp toång trôû vôùi ngoõ vaøo REF+ cuûa ADC 0809: ñoàng thôøi cung caáp möùc aùp chuaån ñeå ñöa vaøo REF+ ñeå taïo caùc möùc logic ôû ngoõ ra töông öùng. Caùc ñieän trôû 1K, 2K. 10K vaø VR 10K nhaèm taïo caàu phaân aùp vaø choïn möùc aùp chuaån ñöa vaøo REF+ VZ = 5,6V oån aùp, giöõ ñieän aùp coá ñònh Ngoõ ra boä so saùnh laø 5V. Vôùi giaù trò naøy ta coù söï thay ñoåi AV ôû ngoõ vaøo ñeå thay ñoåi 1 möùc logic ôû ngoõ ra laø: AV = 5/256 » 20mV 5 – Maïch taïo giao tieáp vôùi KIT 8051: 8 bit ra cuûa 0809 ñöôïc noái vôùi PortA cuûa 8255 –1 3 chaân choïn keânh A0, A1, A2 cuûa 0809 ñöôïc noái PB0 ¸ PB2. Vì vaäy khi ghi moät döõ lieäu vaøo vuøng nhôù cuûa 0809 töùc choïn keânh cuûa noù. Chaân Start noái PC4, ALE noái PC5 Chaân OE ñöôïc noái leân Vcc. Luoân ôû traïng thaùi cho pheùp ñoïc döõ lieäu. Chaân EOC ñöôïc noái vôùi PCC. Trong quaù trình thöïc hieän chuyeån ñoåi vi ñieàu khieån seõ ñoïc giaù trò EOC taïi PCO. Neáu EOC = 1: hoaøn thaønh quaù trình chuyeån ñoåi, vi ñieàu khieån seõ ñoïc döõ lieäu löu tröõ vaøo RAM ñeå xöû lyù. PC1 ñöôïc noái qua R1KW ñöa leân +5V (PC1 = 1). Khi coù aán phím PC1 = 0, ñöôïc ñöa vaøo vi ñieàu khieån ñeå baùo choïn keânh. II – MAÏCH CHUYEÅN ÑOÅI DA 0808 DAC 0808 coù nhieäm vuï bieán ñoåi maõ nhò phaân thaønh doøng (tín hieäu analog). Doøng naøy coù chieàu chaïy vaøo Iout cuûa DAC 0808 vaø coù cöôøng ñoä thay ñoåi theo tæ leä vôùi data ôû ngaõ vaøo. Khi data thay ñoåi töø 0 ¸ 255 Iref, ôû maïch doøng maõ nhò phaân ñöôïc ñöa töø KIT 8051 qua Port A cuûa 8255-2 ñeå ñöa vaøo DAC 0808. Tín hieäu DAC 0808 taïo ra doøng neân coøn phaûi coù maïch chuyeån doøng thaønh aùp duøng LM324. Ta caàn ñieän aùp thay ñoåi töø 0-5V maø doøng thay ñoåi töø 0 ¸ 2mA neân ta caàn ñieàu chænh VR 5K cho phuø hôïp. Sô ñoà nguyeân lyù card chuyeån ñoåi A/D – D/A SÔ ÑOÀ BOÁ TRÍ LINH KIEÄN SÔ ÑOÀ MAÏCH IN MAËT TREÂN Chöông II THIEÁT KEÁ PHAÀN MEÀM I – LÖU ÑOÀ GIAÛI THUAÄT 1 – Löu ñoà chöông trình chính: START Khôûi ñoäng 8255-1 MODE0 Naïp ñòa chæ cho keânh ñaàu tieân vaøo r7 Chöông trình xoùa 8LED Chöông trình hieån thò thöù töï keânh choïn taïi LED 8 Chöông trình chuyeån ñoåi data Chöông trình xuaát data ra D/A Chöông trình ñoåi HEX-BCD Chöông trình giaûi maõ LED 7 ñoaïn Chöông trình hieån thò Chöông trình delay Khôûi ñoäng Port C Kieåm tra nhaán phím N PC4 = 0 Y Taêng R7 ñeå doø keânh keá N R7= 08 Y 2 – Löu ñoà chöông trình con chuyeån ñoåi: Khôûi ñoäng Port B 8255 -1 Ghi A vaøo 0809 Choïn keânh Khôûi ñoäng 0809 ALE = 1, ST = 1 Löu keát quaû START Nhaäp keânh caàn queùt r7 ® a Chuyeån ñoåi N keát thuùc Y END II- CHÖÔNG TRÌNH: Chöông trình chính chuyeån ñoåi A/D – D/A: ORG 4000H MOV A, #91H ; Khôûi taïo 8255-1 port A MOV DPTR, #8003H MOV @DPTR, A X1 : MOV R7, #00H ; Naïp ñòa chæ ñeå choïn keânh queùt X2: LCALL CLEAR ; Goïi chöông trình xoùa LCALL DISPLAY – 1 ; Hieån thò soá keânh choïn ôû LED LCALL CHUYENDOI ; Goïi chöông trình chuyeån ñoåi LCALL OUT ; Goïi chöông trình xuaát ra D/A LCALL HEX – BCD ; Goïi chöông trình chuyeån soá hex sang BCD LCALL DECODE ; Goïi chöông trình giaûi maõ 7 ñoaïn LCALL DISPLAY – 2 ; Goïi chöông trình hieån thò döõ lieäu vöøa chuyeån ñoåi LCALL DELAY ; Goïi chöông trình delay MOV DPTR, #8002 ; Kieåm tra nhaán phím MOV A, @DPTR ANL A, 02H JNZ X2 INC R7 ; Taêng leân ñeå doø keânh keá CJMP 08, X2 ; Kieåm tra ñaõ doø heát keânh chöa LJMP X1 ; quay trôû laïi *********************************************************** Caùc chöông trình con phuïc vuï cho chöông trình chính *********************************************************** Chöông trình con xoùa vuøng data hieån thò cho 8 keânh töø 5000h – 507Fh ORG 4880H MOV DPTR, #5000H ; Duøng ram ngoaøi ñeå löu tröõ MOV A, #00H MOV R0, #80H ; Xoùa töø 5000h ñeán 507Fh CLE1: MOVX @DPTR, A INC DPTR DJNZ R0, CLE1 RET *********************************************************** Chöông trình con thöïc hieän quaù trình chuyeån ñoåi keânh thöù n trong R7 *********************************************************** ORG 4500H MOV A, R7 ;Choïn keânh thöù n, ALE =0 MOV DPTR, A ; Ñieàu khieån quaù trình chuyeån ñoåi cho keânh thöù n ORL A, #10H ; Cho ALE =1 MOVX @DPTR, A ORL A, #20H ; Cho ALE =1, ST =1 MOVX @DPTR, A NOP NOP NOP CLR A ; Cho ALE =0, ST =0 MOVX @DPTR, A ; Kieåm tra quaù trình chuyeån ñoåi keát thuùc hay chöa CTC1: MOV DPTR, #PORTC MOVX A, @DPTR ANL A, #01H JZ CTC1 ; Neáu chöa xong thì quay laïi ; Xong quaù trình bieán ñoåi baét ñaàu nhaän döõ lieäu MOV DPTR, #PORTA MOVX A,@DPTR RET *********************************************************** Chöông trình hieån thò thöù töï soá keânh choïn *********************************************************** ORG 4100H MOV A, #80H ; Choïn vò trí led ñeå hieån thò MOV DPTR, C001 MOVX @DPTR, A MOV A, R7 MOV 83, 43 ; Naïp byte cao ñòa chæ chöùa maõ hieån thò MOV 82, A ; Naïp byte thaáp ñòa chæ chöùa maõ hieån thò MOV A, @DPTR ; Hieån thò ra Led MOV DPTR, C000 MOVX @DPTR, A LCALL DELAY RET *********************************************************** Chöông trình xuaát ra D/A *********************************************************** ORG 4200H MOV R0, A ; Caát döõ lieäu vaøo thanh ghi R0 MOV A, #80 ; Khôûi taïo 8255 – 2 Mode 0 MOV DPTR, A003 MOV @DPTR, A MOV A, R0 ; Naïp trôû laïi döõ lieäu vaøo thanh ghi A M

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

  • docUng dung KIT 8051 dung de chuyen doi AD - DA.DOC