logo

Chương 6: Khảo sát truyền dữ liệu

Truyền dữ liệu nối tiếp của MSC51 có thể hoạt động ở nhiều kiểu riêng biệt trong phạm vi cho phép tần số.
Chöông 6 KHAÛO SAÙT TRUYEÀN DÖÕ LIEÄU CUÛA VI ÑIEÀU KHIEÅN I. Giôùi thieäu. II. Thanh ghi ñieàu khieån truyeàn döõ lieäu noái tieáp. III. Caùc kieåu truyeàn döõ lieäu noái tieáp. IV. Khôûi ñoäng vaø truy xuaát caùc thanh ghi truyeàn döõ lieäu. V. Truyeàn döõ lieäu trong heä thoáng nhieàu vi xöû lyù. VI. Toác ñoä truyeàn döõ lieäu noái tieáp. Chöông 6: Truyeàn döõ lieäu. I. GIÔÙI THIEÄU: Truyeàn döõ lieäu noái tieáp cuûa MCS51 coù theå hoaït ñoäng ôû nhieàu kieåu rieâng bieät trong phaïm vi cho pheùp cuûa taàn soá. Döõ lieäu daïng song song ñöôïc chuyeån thaønh noái tieáp ñeå truyeàn ñi vaø döõ lieäu nhaän veà daïng noái noái tieáp ñöôïc chuyeån thaønh song song. Chaân TxD (P3.1) laø ngoõ xuaát döõ lieäu ñi vaø chaân RxD (P3.0) laø ngoõ nhaän döõ lieäu veà. Ñaëc tröng cuûa truyeàn döõ lieäu noái tieáp laø hoaït ñoäng song coâng coù nghóa laø coù theå thöïc hieän truyeàn vaø nhaän döõ lieäu cuøng moät luùc. Hai thanh ghi chöùc naêng ñaëc bieät phuïc vuï cho truyeàn döõ lieäu laø thanh ghi ñeäm SBUF vaø thanh ghi ñieàu khieån SCON. Thanh ghi ñeäm sbuf naèm ôû ñòa chæ 99H coù 2 chöùc naêng: neáu vi ñieàu khieån ghi döõ lieäu leân thanh ghi sbuf thì döõ lieäu ñoù seõ ñöôïc truyeàn ñi, neáu heä thoáng khaùc gôûi döõ lieäu ñeán thì seõ ñöôïc löu vaøo thanh ghi ñeäm sbuf. Sô ñoà khoái cuûa heä thoáng truyeàn döõ lieäu nhö hình 6-1 Hình 6-1.Sô ñoà khoái cuûa truyeàn döõ lieäu noái tieáp. Thanh ghi ñieàu khieån truyeàn döõ lieäu SCON naèm ôû ñòa chæ 98H laø thanh ghi cho pheùp truy suaát bit bao goàm caùc bit traïng thaùi vaø caùc bit ñieàu khieån. Caùc bit ñieàu khieån duøng ñeå thieát laäp nhieàu kieåu hoaït ñoäng truyeàn döõ lieäu khaùc nhau, coøn caùc bit traïng thaùi cho bieát thôøi ñieåm keát thuùc khi truyeàn xong moät kí töï hoaëc nhaän xong moät kí töï. Caùc bit traïng thaùi coù theå ñöôïc kieåm tra trong chöông trình hoaëc coù theå laäp trình ñeå sinh ra ngaét. Taàn soá hoaït ñoäng cuûa truyeàn döõ lieäu noái tieáp coøn goïi toác ñoä BAUD (soá löôïng bit döõ lieäu ñöôïc truyeàn ñi trong moät giaây) coù theå hoaït ñoäng coá ñònh (söû duïng dao ñoäng treân chip) hoaëc coù theå thay ñoåi. Khi caàn toác ñoä Baud thay ñoåi thì phaûi söû duïng Timer 1 ñeå taïo toác ñoä baud. II. THANH GHI ÑIEÀU KHIEÅN TRUYEÀN NOÁI TIEÁP: Thanh ghi scon seõ thieát laäp caùc kieåu hoaït ñoäng truyeàn döõ lieäu khaùc nhau cho MCS51. Baûng 6-1 toùm taét thanh ghi ñieàu khieån Port noái tieáp scon nhö sau : 102 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Bit Kyù hieäu Ñòa chæ Moâ taû hoaït ñoäng 7 SM0 9FH Bit choïn kieåu truyeàn noái tieáp: bit thöù 0. 6 SM1 9EH Bit choïn kieåu truyeàn noái tieáp: bit thöù 1. 5 SM2 9DH Bit cho pheùp truyeàn keát noái nhieàu vi xöû lyù ôû mode 2 vaø 3; RI seõ khoâng tích cöïc neáu bit thöù 9 ñaõ thu vaøo laø 0. 4 REN 9CH Bit cho pheùp nhaän kí töï. REN = 1 seõ cho pheùp nhaän kí töï. 3 TB8 9BH Duøng ñeå löu bit 9 ñeå tryeàn ñi khi hoaït ñoäng ôû mode 2 vaø 3. TB8 baèng 0 hay 1 laø do ngöôøi laäp trình thieát laäp. 2 RB8 9AH Duøng ñeå löu bit 9 nhaän veà khi hoaït ñoäng ôû mode 2 vaø 3. 1 TI 99H Côø baùo hieäu naøy leân möùc 1 khi truyeàn xong 1 kí töï vaø xoùa bôûi ngöôøi laäp trình ñeå saún saøng truyeàn kí töï tieáp theo. 0 RI 98H Côø baùo hieäu naøy leân möùc 1 khi nhaän xong 1 kí töï vaø xoùa bôûi ngöôøi laäp trình ñeå saún saøng nhaän kí töï döõ lieäu tieáp theo. Baûng 6-1. Caùc bit trong thanh ghi ñieàu khieån truyeàn döõ lieäu. III. CAÙC KIEÅU TRUYEÀN DÖÕ LIEÄU NOÁI TIEÁP (MODE OF OPERATION): Tröôùc khi truyeàn döõ lieäu thì thanh ghi SCON phaûi ñöôïc khôûi taïo ñuùng kieåu. Ví duï ñeå khôûi taïo truyeàn döõ lieäu kieåu 1 thì 2 bit: SM0 SM1 = 01, bit cho pheùp thu: REN =1, vaø côø ngaét truyeàn TI = 1 ñeå saún saøng truyeàn, ta duøng leänh sau : MOV SCON, # 01010010b. Truyeàn döõ lieäu noái tieáp cuûa MCS51 coù 4 kieåu hoaït ñoäng tuøy thuoäc theo 4 traïng thaùi cuûa 2 bit SM0 SM1 ñöôïc lieät keâ ôû baûng 6-2. Ba trong boán kieåu cho pheùp truyeàn ñoàng boä vôùi moãi kí töï thu hoaëc phaùt seõ ñöôïc keát hôïp vôùi bit Start hoaëc bit Stop. SM0 SM1 Kieåu Moâ taû Toác ñoä baud 0 0 0 Thanh ghi dòch Coá ñònh (taàn soá dao ñoäng f/12). 0 1 1 UART 8 bit Thay ñoåi (ñöôïc ñaët bôûiTimer). 1 0 2 UART 9 bit Coá ñònh (taàn soá dao ñoäng f/12 or f/64) 1 1 3 UART 9 bit Thay ñoåi (ñöôïc ñaët bôûi Timer). Baûng 6-2. Caùc kieåu truyeàn döõ lieäu. 1. Truyeàn döõ lieäu kieåu 0 – kieåu thanh ghi dòch 8 bit : Ñeå ñònh caáu hình cho truyeàn döõ lieäu noái tieáp ôû kieåu 0 thì 2 bit SM1 SM0 = 00. Döõ lieäu noái tieáp nhaän vaøo vaø döõ lieäu truyeàn ñi ñeàu thoâng qua chaân RxD, coøn chaân TxD thì duøng ñeå dòch chuyeån xung clock. 8 bit döõ lieäu ñeå truyeàn ñi hoaëc nhaän veà thì luoân baét ñaàu vôùi bit coù troïng soá nhoû nhaát LSB. Toác ñoä Baud ñöôïc thieát laäp coá ñònh ôû taàn soá baèng 112 taàn soá dao ñoäng thaïch anh treân Chip. Khi thöïc hieäân leänh ghi döõ lieäu leân thanh ghi sbuf thì quaù trình truyeàn döõ lieäu baét ñaàu. Döõ lieäu ñöôïc dòch ra ngoaøi thoâng qua chaân RxD cuøng vôùi caùc xung nhòp cuõng ñöôïc gôûi ra ngoaøi thoâng qua chaân TxD. Moãi bit truyeàn ñi chæ coù xuaát hieän treân chaân RxD trong khoaûng thôøi gian moät chu kyø 103 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. maùy. Trong khoaûng thôøi gian cuûa moãi chu kyø maùy, tín hieäu xung clock xuoáng möùc thaáp taïi thôøi ñieåm S3P1 vaø leân möùc cao taïi thôøi ñieåm S6P1 trong giaûn ñoà thôøi gian hình 6-2. Quaù trình nhaän ñöôïc khôûi ñoäng khi bit cho pheùp nhaän REN = 1 vaø côø nhaän RI = 0. Nguyeân taéc chung laø khôûi taïo bit REN = 1 ôû ñaàu chöông trình ñeå khôûi ñoäng truyeàn döõ lieäu, vaø xoùa bit RI ñeå saún saøng nhaän döõ lieäu vaøo. Khi bit RI bò xoùa, caùc xung clock seõ xuaát ra beân ngoaøi thoâng qua chaân TxD, baét ñaàu chu kyø maùy keá tieáp thì döõ lieäu töø beân ngoaøi seõ ñöôïc dòch vaøo beân trong thoâng qua chaân RxD. Hình 6-2.Giaûn ñoà thôøi gian. Bieåu ñoà thôøi gian cuûa döõ lieäu noái tieáp truyeàn vaøo vi ñieàu khieån ôû kieåu 0 nhö sau : Hình 6-3. Giaûn ñoà thôøi gian ôû kieåu 0 . 104 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Moät öùng duïng cuï theå söû duïng mode 0 laø duøng ñeå môû roäng theâm soá löôïng ngoõ ra cho MCS51 vôùi caùch thöùc thöïc hieän nhö sau: moät thanh ghi dòch töø noái tieáp thaønh song song ñöôïc noái ñeán caùc ñöôøng TxD vaø RxD cuûa MCS51 ñeå môû roäng theâm 8 ñöôøng ra nhö hình 6-4. Neáu duøng theâm nhieàu thanh ghi dòch maéc noái tieáp vaøo thanh ghi dòch ñaàu tieân seõ môû roäng ñöôïc nhieàu ngoõ ra. 8 Extra Output 8951 TXD (P3.1) Clock Shift Register RXD (P3.0) Data Hình 6-4. Moät öùng duïng kieåu 0 ñeå taêng theâm ngoõ ra baèng thanh ghi dòch. 2. Truyeàn döõ lieäu kieåu 1 – Thu phaùt baát ñoàng boä 8 bit vôùi toác ñoä Baud thay ñoåi : Trong mode naøy, truyeàn döõ lieäu noái tieáp hoaït ñoäng baát ñoàng boä UART 8 bit coù toác ñoä Baud thay ñoåi ñöôïc. UART laø boä thu vaø phaùt döõ lieäu noái tieáp vôùi moãi kyù töï döõ lieäu luoân baét ñaàu baèng 1 bit Start (ôû möùc 0) vaø keát thuùc baèng 1 bit Stop (ôû möùc 1), bit parity ñoâi khi ñöôïc gheùp vaøo giöõa bit döõ lieäu sau cuøng vaø bit Stop. Trong kieåu naøy, 10 bit döõ lieäu seõ phaùt ñi ôû chaân TxD vaø neáu nhaän thì seõ nhaän ôû chaân RxD. 10 bit ñoù bao goàm: 1 bit start, 8 bit data (LSB laø bit ñaàu tieân), vaø 1 bit stop. Ñoái vôùi hoaït ñoäng nhaän döõ lieäu thì bit Stop ñöôïc ñöa vaøo bit RB8 trong thanh ghi SCON. Trong MCS51, toác ñoä Baud ñöôïc thieát laäp bôûi toác ñoä traøn cuûa Timer T1. Ñoái vôùi hoï 52 coù 3 timer thì toác ñoä baud coù theå thieát laäp bôûi toác ñoä traøn cuûa timer T1 hoaëc timer T2 hoaëc caû 2 timer T1 vaø T2: moät timer cho maùy phaùt vaø 1 timer cho maùy thu. Nguoàn cung caáp xung clock ñeå ñoàng boä caùc thanh ghi truyeàn döõ lieäu noái tieáp hoaït ñoäng ôû kieåu 1, 2, 3 ñöôïc thieát laäp bôûi boä ñeám 16 nhö hình 6-5, ngoõ ra cuûa boä ñeám laø xung clock taïo toác ñoä baud. Xung ngoõ vaøo cuûa boä ñeám coù theå laäp trình baèng phaàn meàm. Hình 6-5.Cung caáp xung cho truyeàn döõ lieäu noái tieáp. Khi coù moät leänh ghi döõ lieäu leân thanh ghi sbuf thì quaù trình truyeàn döõ lieäu baét ñaàu nhöng noù chöa truyeàn maø chôø cho ñeán khi boä chia 16 (cung caáp toác ñoä Baud cho truyeàn döõ lieäu noái tieáp) bò traøn. Döõ lieäu ñöôïc xuaát ra treân chaân TxD baét ñaàu vôùi bit start theo sau laø 8 bit data vaø sau cuøng laø 105 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. bit stop. Caùc côø phaùt TI ñöôïc naâng leân möùc 1 cuøng luùc vôùi thôøi ñieåm xuaát hieän bit Stop treân chaân TxD nhö hình 6-6. Quùa trình nhaän döõ lieäu ñöôïc khôûi ñoäng khi coù söï chuyeån ñoåi töø möùc 1 sang möùc 0 ôû ngoõ vaøo RxD. Boä ñeám 4 bit ñöôïc reset ngay laäp töùc ñeå saép xeáp bit döõ lieäu ñang ñeán töø ngoõ vaøo RxD. Moãi bit döõ lieäu ñeán ñöôïc laáy maãu ôû traïng thaùi ñeám thöù 8 trong moät chu kyø 16 traïng thaùi cuûa boä ñeám 4 bit. Khi coù söï chuyeån traïng thaùi töø 1 xuoáng 0 ôû ngoõ vaøo RxD cuûa boä thu thì traïng thaùi 0 naøy phaûi toàn taïi trong 8 traïng thaùi lieân tuïc cuûa boä ñeám 4 bit. Neáu tröôøng hôïp naøy khoâng ñuùng thì boä thu xem nhö bò taùc ñoäng bôûi tín hieäu nhieãu. Boä thu seõ reset vaø trôû veà traïng thaùi nghæ vaø chôø söï chuyeån traïng thaùi tieáp theo. Hình 6-6. Côø baùo phaùt xong döõ lieäu TI. Giaû söû vieäc kieåm tra bit Start laø hôïp leää thì bit Start seõ ñöôïc boû qua vaø 8 bit data ñöôïc nhaän vaøo thanh ghi dòch noái tieáp. Khi taát caû 8 bit ñöôïc ghi vaøo thanh ghi dòch thì 3 coâng vieäc sau seõ ñöôïc thöïc hieän tieáp theo: - Bit thöù 9 (bit Stop) ñöôïc dòch vaøo bit RB8 trong SCON. - 8 bit data ñöôïc naïp vaøo thanh ghi SBUF. - Côø ngaét nhaän RI =1. Tuy nhieân, 3 coâng vieäc treân chæ xaûy ra neáu hai ñieàu kieän sau toàn taïi : • RI = 0 vaø • SM2 = 1 vaø bit Stop nhaän ñöôïc = 1 hoaëc SM2 = 0. 3. Truyeàn döõ lieäu kieåu 2 – Thu phaùt baát ñoàng boä 9 bit coù toác ñoä Baud coá ñònh : Khi SM1 SM0 = 10 thì truyeàn döõ lieäu hoaït ñoäng ôû kieåu 2 coù toác ñoä Baud coá ñònh. Coù 11 bit ñöôïc phaùt hoaëc thu : 1 bit Start, 8 bit data, 1 bit data thöù 9 ñöôïc laäp trình vaø 1 bit Stop. Khi phaùt thì bit thöù 9 ñöôïc ñaët vaøo TB8 cuûa SCON (coù theå bit parity). Khi thu thì bit thöù 9 ñöôïc ñaët vaøo bit RB8 cuûa thanh ghi SCON. Toác ñoä Baud trong mode 2 baèng 1/12 hoaëc 1/64 taàn soá dao ñoäng treân Chip. 4. Truyeàn döõ lieäu kieåu 3 – Thu phaùt baát ñoàng boä 9 bit coù toác ñoä Baud thay ñoåi: Khi SM1 SM0 = 11 thì truyeàn döõ lieäu hoaït ñoäng ôû kieåu 3 laø kieåu UART 9 bit coù toác ñoä Baud thay ñoåi. Kieåu 3 töông töï kieåu 2 ngoaïi tröø toác ñoä Baud ñöôïc laäp trình vaø ñöôïc cung caáp bôûi Timer. Caùc kieåu 1, kieåu 2 vaø kieåu 3 raát gioáng nhau, nhöõng ñieåm khaùc nhau laø ôû toác ñoä Baud (kieåu 2 coá ñònh, kieåu 1 vaø kieåu 3 thay ñoåi) vaø soá bit döõ lieäu (kieåu 1 coù 8 bit, kieåu 2 vaø kieåu 3 coù 9 bit data). IV. KHÔÛI TAÏO VAØ TRUY XUAÁT CAÙC THANH GHI TRUYEÀN DÖÕ LIEÄU: 106 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. 1. Bit cho pheùp thu (Receive Enable) : Ñeå cho pheùp thu döõ lieäu thì chöông trình phaûi laøm cho bit REN = 1 vaø ñieàu naøy ñöôïc thöïc hieän ôû ñaàu chöông trình. Ta coù theå khôûi taïo cho pheùp truyeàn döõ lieäu baèng leänh : Setb ren hoaëc mov scon, # xxx1xxxxb Bit döõ lieäu thöù 9 (the9th data bit) : 2. Bit döõ lieäu thöù 9 ñöôïc phaùt trong kieåu 2 vaø kieåu 3 phaûi ñöôïc naïp vaøo bit TB8 baèng phaàn meàm coù nghóa laø ngöôøi laäp trình phaûi thöïc hieän coâng vieäc naøy tröôùc khi truyeàn döõ lieäu ñi, coøn bit döõ lieäu thöù 9 cuûa döõ lieäu thu ñöôïc thì töï ñoäng ñaët vaøo trong bit RB8. Phaàn meàm coù theå hoaëc khoâng ñoøi hoûi bit döõ lieäu thöù 9 tham gia vaøo quaù trình truyeàn döõ lieäu tuøy thuoäc vaøo ñaëc tính cuûa caùc thieát bò noái tieáp keát noái vôùi nhau thieát laäp ra qui ñònh. Bit döõ lieäu thöù 9 ñoùng 1 vai troø quan troïng trong truyeàn thoâng nhieàu vi xöû lyù. 3. Bit kieåm tra chaün leû Parity : Bit thöù 9 thöôøng ñöôïc duøng laø bit kieåm tra chaün leû. ÔÛ moãi chu kyø maùy, bit P trong thanh ghi traïng thaùi PSW baèng 1 hay baèng 0 tuøy thuoäc vaøo quaù trình kieåm tra chaün 8 bit döõ lieäu chöùa trong thang ghi A. Ví duï neáu heä thoáng truyeàn döõ lieäu yeâu caàu 8 bit data coäng theâm 1 bit kieåm tra chaün, thì caùc leänh sau ñaây seõ phaùt 8 bit trong thanh ghi A coäng vôùi bit kieåm tra chaün ñöôïc coäng vaøo bit thöù 9. Mov C,P ;chuyeån côø chaün leû P sang côø C Mov TB8,C ;chuyeån côø C sang bit TB8 ñeå chuaån bò truyeàn ñi Mov sbuf,A ;truyeàn döõ lieäu 8 bit trong A vaø bit thöù 9 trong TB8 ñi. Neáu kieåm tra leû ñöôïc yeâu caàu thì caùc leänh treân ñöôïc söûa laïi laø : Mov C,P ;chuyeån côø chaün leû P sang côø C Cpl C ;nghòch ñaûo chaün thaønh leû Mov TB8,C ;chuyeån côø C sang bit TB8 ñeå chuaån bò truyeàn ñi Mov sbuf,A ;truyeàn döõ lieäu 8 bit trong A vaø bit thöù 9 trong TB8 ñi. Trong kieåu 1 ta vaãn coù theå söû duïng bit kieåm tra chaün leû nhö sau: 8 bit data ñöôïc phaùt trong kieåu 1 coù theå bao goàm 7 bit döõ lieäu, vaø 1 bit kieåm tra chaün leû. Ñeå phaùt moät maõ ASCII 7 bit vôùi 1 bit kieåm tra chaún vaøo 8 bit, caùc leänh sau ñaây ñöôïc duøng: MOV C, P ; Ñöa Parity chaún vaøo C MOV ACC.7, C ; Ñöa Parity chaún vaøo bit MSB cuûa A MOV SBUF, A ; Gôûi bit data cuøng bit Parity chaún 4. Côø ngaét : Côø ngaét nhaän RI vaø phaùt TI trong thanh ghi SCON ñoùng moät vai troø quan troïng trong truyeàn döõ lieäu cuûa MCS51. Caû hai bit ñeàu ñöôïc set bôûi phaàn cöùng nhöng phaûi xoùa bôûi phaàn meàm. 107 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Ñieån hình laø côø RI ñöôïc set ôû möùc 1 khi keát thuùc quaù trình nhaän ñaày ñuû 1 kí töï vaø cho bieát thanh ghi ñeäm thu ñaõ ñaày. Traïng thaùi cuûa côø RI coù theå kieåm tra baèng phaàn meàm hoaëc coù theå laäp trình ñeå sinh ra ngaét. Neáu muoán nhaän moät kyù töï töø moät thieát bò ñaõ ñöôïc keát noái ñeán Port noái tieáp, thì chöông trình phaûi chôø cho ñeán khi côø RI = 1, sau ñoù xoùa côø RI vaø ñoïc kyù töï töø thanh ghi SBUF. Quaù trình naøy ñöôïc laäp trình nhö sau : WAIT : JNB RI, WAIT : Kieåm tra RI xem coù baèng 1 hay khoâng. Chôø neáu = 0 CLR RI : khi côø RI = 1 thì ñaõ nhaän xong döõ lieäu vaø xoùa côø RI MOV A, SBUF : ñoïc kyù töï nhaän ñöôïc töø thanh ghi Sbuf Côø TI leân möùc 1 cho bieát ñaõ phaùt xong kyù töï vaø cho bieát thanh ghi ñeäm sbuf ñaõ roãng. Neáu muoán gôûi 1 kyù töï ñeán moät thieát bò ñaõ ñöôïc keát noái ñeán Port noái tieáp thì tröôùc tieân phaûi kieåm tra xem Port noái tieáp ñaõ saün saøng chöa. Neáu kyù töï tröôùc ñang ñöôïc gôûi ñi, thì phaûi chôø cho ñeán khi keát thuùc quaù trình gôûi. Caùc leänh sau ñaây duøng ñeå phaùt moät kyù töï trong thanh ghi A ra : WAIT : JNB TI, WAIT : Kieåm tra TI coù baèng 1 hay khoâng vaø chôø neáu baèng 0. CLR TI : Xoùa côø ngaét thu TI MOV SBUF,A : gôûi noäi dung trong thanh ghi A ñi V. TRUYEÀN DÖÕ LIEÄU TRONG HEÄ THOÁNG NHIEÀU BOÄ XÖÛ LYÙ: Kieåu 2 vaø kieåu 3 coù moät chöùc naêng ñaëc bieät cho vieäc truyeàn thoâng ña xöû lyù. ÔÛ caùc mode 2 vaø 3, 9 bit döõ lieäu ñöôïc thu vaø bit thöù 9 ñöôïc löu vaøo bit RB8. Truyeàn döõ lieäu coù theå laäp trình sao cho khi thu ñöôïc bit Stop thì ngaét cuûa truyeàn döõ lieäu noái tieáp taùc ñoäng chæ khi bit RB8 =1. Caáu truùc naøy ñöôïc pheùp bôûi baèng caùch set bit SM2 = 1 trong thanh ghi SCON. Kieåu naøy ñöôïc öùng duïng trong maïng söû duïng nhieàu MCS51 ñöôïc toå chöùc theo caáu hình maùy chuû vaø maùy tôù nhö hình 6-7. 32 I/O lines 32 I/O lines P0 P1 P2 P3 P0 P1 P2 P3 MASTER 8951 8951 Slave # 1 8951 Slave # 2 TXD RXD RXD Hình 6-7. Keát noái nhieàu vi xöû lyù. Trong caáu hình keát noái ôû treân thì moãi moät vi xöû lyù tôù seõ coù moät ñòa chæ duy nhaát do chuùng ta qui ñònh. Khi boä xöû lyù chuû muoán phaùt moät khoái döõ lieäu ñeán moät trong caùc boä xöû lyù tôù thì tröôùc tieân vi xöû lyù chuû phaûi gôûi ra 1 byte ñòa chæ ñeå nhaän dieän boä xöû lyù tôù muoán keát noái. 108 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Byte ñòa chæ ñöôïc phaân bieät vôùi byte döõ lieäu bôûi bit thöù 9: trong byte ñòa chæ thì bit thöù 9 baèng 1 vaø trong byte döõ lieäu thì bit thöù 9 baèng 0. Caùc vi xöû lyù tôù sau khi nhaän ñöôïc byte ñòa chæ seõ bieát ñöôïc vi xöû lyù chuû muoán giao tieáp tôù naøo. Khi coù vi xöû lyù tôù ñöôïc pheùp thì noù seõ xoùa bit SM2 ñeå baét ñaàu nhaän caùc byte döõ lieäu tieáp theo. Coøn caùc vi xöû lyù khoâng ñöôïc pheùp thì vaãn giöõ nguyeân bit SM2=1 ñeå khoâng nhaän caùc byte döõ lieäu truyeàn giöõa vi xöû lyù chuû vaø vi xöû lyù tôù ñang ñöôïc pheùp. Vi xöû lyù tôù sau khi keát noái vôùi vi xöû lyù chuû xong thì phaûi laøm cho bit SM2=1 ñeå saún saøng keát noái cho nhöõng laàn tieáp theo. Sau khi thöïc hieän xong vieäc trao ñoåi döõ lieäu thì vi xöû lyù muoán truy xuaát moät vi xöû lyù khaùc thì phaûi taïo ra moät ñòa chæ môùi vaø vi xöû lyù tôù töông öùng vôùi ñòa chæ ñoù ñöôïc pheùp vaø hoaït ñoäng gioáng nhö vöøa trình baøy. VI. TOÁC ÑOÄ TRUYEÀN DÖÕ LIEÄU NOÁI TIEÁP: Truyeàn döõ lieäu noái tieáp neáu hoaït ñoäng ôû kieåu 0 vaø kieåu 2 thì coù toác ñoä truyeàn coá ñònh. Trong kieåu 0 thì toác ñoä truyeàn baèng 112 taàn soá dao ñoäng treân Chip. Neáu söû duïng thaïch anh 12 MHz thì toác ñoä truyeàn cuûa kieåu 0 laø 1MHz nhö hình 6-8a. Trong thanh ghi PCON coù moät bit SMOD coù chöùc naêng laøm taêng gaáp ñoâi toác ñoä baud, maëc nhieân sau khi reset heä thoáng thì bit SMOD = 0 thì caùc kieåu truyeàn döõ lieäu hoaït ñoäng vôùi toác ñoä qui ñònh, khi bit SMOD = 1 thì toác ñoä taêng gaáp ñoâi. Ví duï trong kieåu 2, toác ñoä truyeàn coù theå taêng gaáp ñoâi töø giaù trò maëc ñònh 1/64 taàn soá dao ñoäng treân Chip (SMOD = 0) leân ñeán 1/32 taàn soá dao ñoäng treân Chip (öùng vôùi SMOD =1) nhö hình 6-8b. Do thanh ghi PCON khoâng cho pheùp truy suaát bit neân ñeå set bit SMOD maø khoâng thay ñoåi caùc bit khaùc cuûa thanh ghi PCON thì phaûi thöïc hieän leänh sau. Leänh sau ñaây set bit SMOD ñeå taêng gaáp ñoâi toác ñoä truyeàn: PCON, #1000 0000b ;bit Smod ôû vò trí thöù 7 OR Caùc toác ñoä Baud trong kieåu 1 vaø kieåu 3 cuûa MCS51 ñöôïc xaùc ñònh bôûi toác ñoä traøn cuûa Timer 1. Bôûi vì Timer hoaït ñoäng ôû taàn soá töông ñoái cao neân phaûi chia cho 32 khi bit smod = 0 vaø chia cho 16 neáu SMOD = 1 tröôùc khi cung caáp xung clock ñeå thieát laäp toác ñoä Baud cho Port noái tieáp. Toác ñoä Baud ôû kieåu 1 vaø 3 cuûa MCS51 ñöôïc xaùc ñònh bôûi toác ñoä traøn cuûa Timer 1 hoaëc Timer 2, hoaëc caû 2 nhö hình 6-8c. 109 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Hình 6-8. Thieát laäp toác ñoä Baud. Thieát laäp toác ñoä Baud duøng timer 1: Muoán coù toác ñoä Baud thì ta khôûi taïo thanh ghi TMOD ôû kieåu töï ñoäng naïp 8 bit (kieåu 2) vaø ñaët giaù trò naïp laïi vaøo thanh ghi TH1 cuûa Timer 1 ñeå taïo ra toác ñoä traøn chính xaùc ñeå thieát laäp toác ñoä Baud. Thanh ghi tmod ñöôïc khôûi taïo ñeå thieát laäp toác ñoä baud nhö sau: ;chæ quan taâm ñeán timer 1 Mov tmod,#0010xxxxB Moät caùch khaùc ñeå taïo toác ñoä baud laø nhaän tín hieäu xung clock töø beân ngoaøi ñöa ñeán ngoõ vaøo T1. Coâng thöùc chung ñeå xaùc ñònh toác ñoä Baud trong mode 1 vaø mode 3 laø : BAUD RATE = TIMER 1 OVERFLOW RATE ÷ 32 Ví duï1: truyeàn döõ lieäu caàn toác ñoä baud laø 1200 thì ta tính toaùn nhö sau: Toác ñoä traøn cuûa timer 1 baèng 1200 x 32 = 38,4KHz. Neáu heä thoáng söû duïng thaïch anh 12 MHz thì xung cung caáp cho Timer 1 ñeám coù taàn soá laø 1 MHz hay 1000KHz. Vaäy ñeå ñaït toác ñoä traøn 38,4 KHz thì ta tính ñöôïc soá löôïng xung ñeám cho moãi chu kyø traøn laø 1000 KHZ/38,4 KHz = 26,4 xung (laøm troøn baèng 26). Do caùc Timer ñeám leân vaø thôøi ñieåm traøn xaûy ra khi chuyeån traïng thaùi ñeám töø töø FFH → 00H neân ta phaûi naïp giaù trò baét ñaàu töø (256 – 26 = 230) ñeå töø giaù trò naøy timer 1 ñeám leân 26 xung nöõa thì sinh ra traøn. Giaù trò 230 ñöôïc naïp vaøo thanh ghi TH1 ñeå töï ñoäng naïp laïi cho thanh ghi TL1 khi traøn baèng leänh: “mov th1,#230”. Baïn coù theå khoâng caàn phaûi tính toaùn ra giaù trò 230 maø coù theå thay baèng leänh : “mov th1,#-26” thì trình bieân dòch seõ tính cho baïn. Baûng toùm taét toác ñoä Baud öùng vôùi 2 loaïi thaïch anh 12 MHz vaø 11, 059 MHz : 110 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Toác ñoä Taàn soá SMOD Giaù trò naïp cho TH1 Toác ñoä thöïc Sai soá baud thaïch anh 9600 12MHz 1 - 7 (F9H) 8923 7% 2400 12MHz 0 -13 (F3H) 2404 0,16% 1200 12MHz 0 -26 (E6H) 1202 ~0% 19200 11,059MHz 1 -3 (FDH) 19200 0% 9600 11,059MHz 0 -3 (FDH) 9600 0% 2400 11,059MHz 0 -12 (F4H) 2400 0% 1200 11,059MHz 0 -24 (E8H) 1200 0% Baûng 6-3. Toùm taét toác ñoä baud. Ví duï 2: haõy khôûi taïo truyeàn döõ lieäu noái tieáp hoaït ñoäng nhö UART 8 bit ôû toác ñoä Baud 2400, duøng Timer 1 ñeå taïo toác ñoä Baud. Chöông trình sau seõ thieát laäp ñuùng theo yeâu caàu ñeà ra: : Port noái tieáp mode 1. MOV SCON, # 01010010B : Timer 1 mode 2 MOV TMOD, # 20H : Naïp vaøo boä ñeám toác ñoä 2400 Baud. MOV TH1, # -13 : Start Timer 1. SETB TR1 Trong thanh ghi SCON coù: hai bit SM0 SM1 = 01 thieát laäp mode UART 8 bit, bit REN = 1 cho pheùp saún saøng nhaän döõ lieäu, bit TI = 1 baùo cho bieát thanh ghi ñeám roãng saún saøng cho pheùp phaùt döõ lieäu. Thanh ghi TMOD coù: hai bit M1M0 = 10 ñeå thieát laäp Timer 1 ôû mode 2 töï ñoäng naïp 8 bit. Leänh setb TR1 cho pheùp Timer laøm vieäc taïo toác ñoä baud. Töø toác ñoä Baud 2400 ta tính ñöôïc toác ñoä traøn cho Timer 1 laø 2400 x 32 = 76,8 KHz vaø giaû söû Timer 1 ñeám xung noäi ôû taàn soá 1000 KHz (öùng vôùi thaïch anh 12 MHz). Vaäy ñeå ñaït toác ñoä traøn 76,8 KHz thì ta tính ñöôïc soá löôïng xung ñeám cho moãi chu kyø traøn laø 1000KHZ/76,8KHz = 13,02 xung (laøm troøn baèng 13). Neân leänh thöù 3 seõ naïp giaù trò -13 vaøo thanh ghi TH1 ñeå taïo toác ñoä baud laø 2400. Thuû tuïc chôø nhaän moät kí töï: Mainr: jnb ri,$ ;chôø cho ñeán khi côø baùo nhaän leân 1 Clr ri ;xoùa côø ñeå nhaän kí töï tieáp theo Mov @r0,sbuf ;caát döõ lieäu vaøo oâ nhôù. Neáu chæ nhaän moät kí töï thì sau khi nhaän xong CPU seõ thöïc hieän coâng vieäc xöû lyù khaùc, coøn neáu muoán nhaän nöõa thì quay laïi. Thuû tuïc chôø gôûi moät kí töï: Mains: jnb ti,$ ;kieåm tra maùy phaùt saún saøng hay chöa Clr ti ;xoùa côø ñeå chuaån bò phaùt döõ lieäu 111 Lyù thuyeát & thöïc haønh. Chöông 6: Truyeàn döõ lieäu. Mov sbuf,@r0 ;laáy döõ lieäu töø oâ nhôù truyeàn ñi. Vieäc söû duïng truyeàn döõ lieäu ôû toác ñoä baud naøo tuøy thuoäc vaøo yeâu caàu thöïc teá. Toác ñoä caøng cao thì döõ lieäu truyeàn caøng nhanh. Khi truyeàn nhieàu döõ lieäu thì ngoaøi toác ñoä qui ñònh thoáng nhaát giöõa 2 heä thoáng keát noái vôùi nhau coøn phaûi quan taâm ñeán toác ñoä xöû lyù döõ lieäu nhaän veà vaø laáy döõ lieäu ñeå gôûi ñi ñeå khoâng bò maát döõ lieäu trong quaù trình truyeàn vaø nhaän. Moät trong nhöõng giaûi phaùp ñeå kieåm tra xem döõ lieäu coù bò maát hay khoâng thì phaûi söû duïng thuû tuïc baét tay. 112 Lyù thuyeát & thöïc haønh.
DMCA.com Protection Status Copyright by webtailieu.net