UART 8 bit baurate = 9600,cho phép thu, UART 9 bit baurate=19200,chỉ phát, c. UART 9 bit baurate=2400 sử dụng Timer2 MCU8052,cho phép thu, Câu 2: a. Viết một chương trình con tên OUT_CHR9 phát một ký tự 9 bit gồm 8 bit chứa trong (A) và bit thứ 9 là bit parity chẵn, Câu 4: Viết một chương trình thu chuỗi ký tự từ cổng nối tiếp kết thúc bằng mã NULL(thu luôn mã NULL),cất vào RAM nội địa chỉ đầu 50H,sử dụng chương trình con IN_CHR9 ở câu 2b.Chuỗi ký tự được phát từ MCU như bài 3.Sau khi thu xong chuỗi ký tự,xuất từng ký tự từ đầu đến cuối ra Port1 hiển thị barled 8 LED,thời gian xuất 2 ký tự cách nhau 1s, Câu 7: a.Vẽ sơ đồ giao tiếp MCU8051 với DIPSW8 ở Port1,SW nhấn với P2.0 và cổng nối tiếp với IC shift register 74LS164.Viết chương trình đọc data từ DIPSW khi có phím nhấn(tích cực mức 0chống rung phím),xuất data đọc được ra cổng nối tiếp để shift ra shift reg.18
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOAKHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ -*** -
VI XỬ LÝ BÀI TẬP CHƯƠNG 6 GIÁO VIÊN HƯỚNG DẪN: LƯU PHÚ
TP HCM, ngày 01 tháng 04 năm 2020
Trang 2Mục lục:
Câu 1: Viết một đoạn chương trình khởi động cổng nối tiếp làm việc như sau: 3
a UART 8 bit baurate = 9600,cho phép thu 3
b UART 9 bit baurate=19200,chỉ phát 3
c UART 9 bit baurate=2400 sử dụng Timer2 MCU8052,cho phép thu 3
Câu 2: a Viết một chương trình con tên OUT_CHR9 phát một ký tự 9 bit gồm 8 bit chứa trong (A) và bit thứ 9 là bit parity chẵn 4
b Viết một chương trình con tên IN_CHR9 thu một ký tự 9 bit gồm 8 bit cất vào (A)và kiểm tra bit thứ 9 là bit parity chẵn,nếu sai parity set cờ C 4
Câu 3: Viết một chương trình phát chuỗi ký tự cất trong RAM nội địa chỉ đầu 30H ra cổng nối tiếp,sử dụng chương trình con OUT_CHR9 ở câu 2a,chuỗi ký tự kết thúc bằng mã NULL(00H),phát luôn mã NULL.Cho baurate=9600 4
Câu 4: Viết một chương trình thu chuỗi ký tự từ cổng nối tiếp kết thúc bằng mã NULL(thu luôn mã NULL),cất vào RAM nội địa chỉ đầu 50H,sử dụng chương trình con IN_CHR9 ở câu 2b.Chuỗi ký tự được phát từ MCU như bài 3.Sau khi thu xong chuỗi ký tự,xuất từng ký tự từ đầu đến cuối ra Port1 hiển thị barled 8 LED,thời gian xuất 2 ký tự cách nhau 1s 7
Câu 5: Vẽ sơ đồ MCU8051 kết nối trực tiếp với đèn LCD 16 ký tự và hai SW nhấn ký hiệu là RE(thu) và SE(phát).Viết một chương trình thực hiện các công việc sau: 8
Câu 6: Vẽ sơ đồ kết nối MCU8051 trực tiếp với đèn LCD 16 ký tự.Viết một chương trình thực hiện các công việc sau: 14
Câu 7: a.Vẽ sơ đồ giao tiếp MCU8051 với DIP-SW8 ở Port1,SW nhấn với P2.0 và cổng nối tiếp với IC shift register 74LS164.Viết chương trình đọc data từ DIP-SW khi có phím nhấn(tích cực mức 0-chống rung phím),xuất data đọc được ra cổng nối tiếp để shift ra shift reg 18
b Vẽ sơ đồ giao tiếp MCU8051 với barled 8 led ở Port1,SW nhấn với P2.0,cổng nối tiếp với IC shift reg 74LS165.Viết một chương trình khi có SW nhấn(tích cực mức 0-chống rung phím) nạp data từ 8 input của shift reg và shift data vào cổng nối tiếp,sau đó xuất data thu được ra Port1 18
Trang 3Các bài tập sau cho Fck=11.059Mhz,trừ trường hợp có ghi chú cụ thể
Mô phỏng trên Proteus từ bài 3 đến 7
Câu 1: Viết một đoạn chương trình khởi động cổng nối tiếp làm việc như sau:
a UART 8 bit baurate = 9600,cho phép thu
b UART 9 bit baurate=19200,chỉ phát
c UART 9 bit baurate=2400 sử dụng Timer2 MCU8052,cho phép thu
Bài làma)
Trang 5Bài làm
- Mạch mô phỏng:
- Code thực hiện:
ORG 00HTAOCHUOI:
MOV R1,#30HMOV A,#41HLOOP: MOV @R1,A
INC R1INC ACJNE A,#4AH,LOOPMOV A,#0
MOV @R1,AINIT:
MOV SCON,#0C2H
MOV TMOD,#20H
MOV TH1,#-3
MOV TL1,#-3
Trang 6SETB TR1
MOV R0,#30HLAP:
MOV A,@R0
LCALL OUT_CHR9INC R0
JNZ LAP
XUAT:
MOV R0,#30HLP: MOV A,@R0
Trang 7END
Câu 4: Viết một chương trình thu chuỗi ký tự từ cổng nối tiếp kết thúc bằng mã NULL(thu luôn mã NULL),cất vào RAM nội địa chỉ đầu 50H,sử dụng chương trình con IN_CHR9 ở câu 2b.Chuỗi ký tự được phát từ MCU như bài 3.Sau khi thu xong chuỗi ký tự,xuất từng ký tự từ đầu đến cuối ra Port1 hiển thị barled 8 LED,thời gian xuất 2 ký tự cách nhau 1s
Mô phỏng bài 3 và 4 kết hợp: viết chương trình phát khoảng 10 ký tự tạo sẵn trong RAM nội địa chỉ đầu 30H nạp vào MCU phát,viết chương trình thu chuỗi ký tự nạp vào MCU thu.
Trang 8MOV @R1,AINC R1
JNZ LAP
MOV @R1,AXUAT:
MOV R0,#50HLP: MOV A,@R0
MOV P1,A
CALL DELAY_1SINC R0
ANL C,/RB8MOV F0,C
MOV C,RB8ANL C,/P
DJNZ R5,$
DJNZ R6,LAP2DJNZ R7,LAP1
Trang 9được cất trong bộ nhớ code.Sau đó quay lại kiểm tra phím tiếp
+ Nếu nhấn SW SI(tích cực mức 0),MCU xuất ký tự SI(0FH) ra cổng nối tiếp và chờ thu chuỗi
ký tự ASCII kết thúc bằng mã NULL về cất trong RAM nội địa chỉ đầu 30H
+ Xuất chuỗi ký tự thu được ra LCD,sau đó quay lại kiểm tra phím tiếp
Trang 10DO TIMER1
MOV TMOD,#20H ;TIMER1 MODE 2 AUTO RELOADMOV TH1,#-3
MOV TL1,#-3SETB TR1 ;KHOI DONG TIMER1 BAUDRATE 9600
KT_RE: JB RE,KT_SE
CALL DELAY100MSJNB RE,NHAN_RESJMP KT_RE
NHAN_SE:CALL MODE1
JMP MAINNHAN_RE:CALL CLEAR
CALL MODE2JMP MAIN
; -MODE1: CPL P2.7
Trang 11MOV A,#0EHCALL SENDMOV DPTR,#TAB ;DPTR TRO TOI MESSAGE
MOVC A,@A+DPTRCALL SEND ;TRUYEN KI TUINC DPTR;TRO TOI KI TU TIEP THEO
JZ KT_PHAT ;KET THUC KHI GAP NULL (DA TRUYEN KI TU NULL)
JMP L1 ;LAP LAIKT_PHAT:RET
; -MODE2: CPL P2.6
MOV A,#0FHCALL SEND ;TRUYEN KI TU #0FHMOV R0,#30H
L2: CALL RECV ;NHAN KI TU
MOV @R0,A ;LUU VAO 30H++
JZ KT_THU ;NEU KI TU LA NULL THI KT THU (DA THU KI TU NULL)
INC R0JMP L2 ;LAP LAIKT_THU: MOV R0,#30H
L3: MOV A,@R0
JZ KTCALL WRITETEXTINC R0
JMP L3KT:
RET
Trang 12SEND: JNB TI,$
; -CLR TIMOV SBUF,ARET
RECV: JNB RI,$
; -CLR RIMOV A,SBUFRET
DELAY100MS:
; -MOV R7,#200LAP1: MOV R6,#250
DJNZ R6,$
DJNZ R7,LAP1RET
DELAY: MOV R7,#4
; -LAP: MOV R6,#250
DJNZ R6,$
DJNZ R7,LAPRET
INIT: MOV A,#38H
; -CALL WRITECOMMOV A,#01H
CALL WRITECOMMOV A,#0EH
CALL WRITECOM
Trang 13MOV A,#06HCALL WRITECOMRET
; -WRITECOM:
CLR RSMOV DBUS,ACLR RWSETB ECLR ELCALL DELAYRET
; -WRITETEXT:
SETB RSMOV DBUS,ACLR RWSETB ECLR E
; -TAB:
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,0
Trang 15
Câu 6: Vẽ sơ đồ kết nối MCU8051 trực tiếp với đèn LCD 16 ký tự.Viết một chương trình thực hiện các công việc sau:
+ MCU chờ thu mã lệnh(từ MCU phát mã lệnh như bài 5)từ cổng nối tiếp
+ Nếu nhận mã lệnh là SO(0EH),MCU sẽ chờ nhận tiếp chuỗi ký tự từ cổng nối
tiếp(chuỗi mã
ASCII ký tự từ 0 đến 9 và mã NULL)cất vào RAM nội địa chỉ đầu 30H,sau đó xuất chuỗi
ký tự
vừa thu được ra LCD.Sau đó quay lại chờ nhận mã lệnh tiếp
+ Nếu nhận mã lệnh là SI(0FH),MCU sẽ phát chuỗi 10 ký tự mã ASCII của chữ A,B,C,
DO TIMER1
MOV TMOD,#20H ;TIMER1 MODE 2 AUTO RELOADMOV TH1,#-3
MOV TL1,#-3SETB TR1 ;KHOI DONG TIMER1 BAUDRATE 9600
CALL INIT ;KHOI DONG LCDMAIN: CALL RECV
CJNE A,#0EH,SKIP
Trang 16CALL CLEARCALL MODE1JMP MAINSKIP: CJNE A,#0FH,MAIN
CALL MODE2JMP MAIN
; -MODE1: CPL P2.7
MOV R0,#30HL2: CALL RECV ;NHAN KI TU
MOV @R0,A ;LUU VAO 30H++
JZ KT_THU ;NEU KI TU LA NULL THI KT THU (DA THU KI TU NULL)
INC R0JMP L2 ;LAP LAIKT_THU: MOV R0,#30H
L3: MOV A,@R0
JZ KTCALL WRITETEXTINC R0
JMP L3KT:
Trang 17JZ KT_PHAT ;KET THUC KHI GAP NULL (DA TRUYEN KI TU NULL)
JMP L1 ;LAP LAIKT_PHAT:RET
; -SEND: JNB TI,$
CLR TIMOV SBUF,ARET
; -RECV: JNB RI,$
CLR RIMOV A,SBUFRET
; -INIT: MOV A,#38H
CALL WRITECOMMOV A,#01H
CALL WRITECOMMOV A,#0EH
CALL WRITECOMMOV A,#06H
CALL WRITECOMRET
Trang 18; -WRITECOM:
CLR RSMOV DBUS,ACLR RWSETB ECLR ELCALL DELAYRET
; -WRITETEXT:
SETB RSMOV DBUS,ACLR RWSETB ECLR E
Trang 19Câu 7: a.Vẽ sơ đồ giao tiếp MCU8051 với DIP-SW8 ở Port1,SW nhấn với P2.0 và cổng nối tiếp với IC shift register 74LS164.Viết chương trình đọc data từ DIP-SW khi có phím nhấn(tích cực mức 0-chống rung phím),xuất data đọc được ra cổng nối tiếp để shift ra shift reg
b Vẽ sơ đồ giao tiếp MCU8051 với barled 8 led ở Port1,SW nhấn với P2.0,cổng nối tiếp với IC shift reg 74LS165.Viết một chương trình khi có SW nhấn(tích cực mức 0- chống rung phím) nạp data từ 8 input của shift reg và shift data vào cổng nối tiếp,sau đó xuất data thu được ra Port1
Bài làma) ORG 00H
Trang 20CHECK: MOV R7,#50
LAP: JB SW,CHECK
DJNZ R7,LAPCLR STARTSETB STARTJNB RI,$
CLR RIMOV A,SBUFMOV BAR_LED,AJMP CHECK
Trang 21END