Thí nghiệm thực hành môn Vi xử lý
BÀI 3: THÍ NGHIỆM HIỂN THỊ DÙNG LCD
THÍ NGHIỆM 1: Viết chương trình hiển thị chuỗi “ Hello” lên LCD
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN: MOV DPTR, #8000H
ACALL LCD_INIT
MOV A,#'H'
ACALL WRITE_CHAR
MOV A,#'e'
ACALL WRITE_CHAR
MOV A,#'l'
ACALL WRITE_CHAR
MOV A,#'l'
ACALL WRITE_CHAR
MOV A,#'o'
ACALL WRITE_CHAR
SJMP $
LCD_INIT: MOV A,#38H
CALL WRITE_CMD
MOV A,#0EH
CALL WRITE_CMD
MOV A,#06H
CALL WRITE_CMD
RET
WAIT_LCD: MOV R7, #100
DL: MOV R6, #250
DJNZ R6, $
DJNZ R7, DL
RET
WRITE_CHAR: ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_CMD: ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END
ACALL LCD_INIT LAP: ACALL RECEIVE CJNE A,#13,TT ; kiểm tra phím nhấn Enter MOV A,#0C0H ACALL WRITE_CMD SJMP THOAT TT: CJNE A,#27,TT1 ; kiểm tra phím nhấn ESC MOV A,#01H ACALL WRITE_CMD SJMP THOAT TT1: CJNE A,#30H,SO ; bắt đầu kiểm tra phím nhấn là số SO: JC THOAT CJNE A,#3AH,CHU ; kết thúc kiểm tra phím nhấn là số CHU: JC LED CJNE A,#41H,KHAC ; bắt đầu kiểm tra phím nhấn là chữ hoa KHAC: JC THOAT CJNE A,#5BH,HOA ; kết thúc kiểm tra phím nhấn là chữ hoa HOA: JC NHO CJNE A,#61H,KHAC1 ; bắt đầu kiểm tra phím nhấn là chữ thường KHAC1: JC THOAT CJNE A,#7BH,THUONG ; kết thúc kiểm tra phím nhần là chữ thường THUONG: JC NHO SJMP THOAT NHO: MOV DPTR,#8000H INC R1 CJNE R1,#17,XUONG ; kiểm tra nếu hiển thị hết hàng đầu tiên thì xuông hàng trong màn hình LCD XUONG: JC XUATLCD PUSH ACC MOV A,#0C0H ACALL WRITE_CMD POP ACC MOV R1,#0 XUATLCD: ACALL WRITE_cHAR SJMP THOAT LED: MOV DPTR,#0000H ANL A,#0FH ORL A,#0E0H MOVX @DPTR,A THOAT: MOV DPTR,#8000H ACALL SEND SJMP LAP LCD_INIT: MOV A, #38H ACALL WRITE_CMD MOV A, #0EH ACALL WRITE_CMD MOV A, #06H ACALL WRITE_CMD MOV A, #01H ACALL WRITE_CMD RET WAIT_LCD: MOV R7,#100 LOOP: MOV R6, #250 DJNZ R6,$ DJNZ R7, LOOP RET WRITE_CHAR: ACALL WAIT_LCD SETB RS MOVX @DPTR,A SETB EN CLR EN RET WRITE_CMD: ACALL WAIT_LCD CLR RS MOVX @DPTR,A SETB EN CLR EN RET RECEIVE: JNB RI,RECEIVE MOV A, SBUF CLR RI RET SEND: JNB TI,SEND MOV SBUF,A CLR TI RET END BÀI 5: THÍ NGHIỆM ĐIỀU KHIỂN ADC THÍ NGHIỆM 1: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra led 7 đoạn ORG 2000H LAP: MOV R1,#255 MOV DPTR,#4000H MOV A,#0 MOVX @DPTR,A ACALL DELAY_100US MOVX A,@DPTR LAP1: PUSH ACC MOV DPTR,#0000H MOV B,#10 DIV AB MOV R7,B MOV B,#10 DIV AB ORL A,#0B0H MOVX @DPTR,A ACALL DELAY_1MS MOV A,B ORL A,#0D0H MOVX @DPTR,A ACALL DELAY_1MS MOV A,R7 ORL A,#0E0H MOVX @DPTR,A ACALL DELAY_1MS POP ACC DJNZ R1,LAP1 ; tạo thời gian delay SJMP LAP DELAY_100US: MOV R6,#200 DJNZ R6,$ RET DELAY_1MS: MOV R6,#5 LOOP: MOV R5,#100 DJNZ R5,$ DJNZ R6,LOOP RET END THÍ NGHIỆM 2: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra LCD ORG 2000H RS BIT P3.5 EN BIT P3.4 MOV DPTR,#8000H ACALL LCD_INIT LAP: MOV DPTR,#4000H MOV A,#0 MOVX @DPTR,A ACALL DELAY_100US MOVX A,@DPTR MOV DPTR,#8000H PUSH ACC MOV A, #80H ACALL WRITE_CMD POP ACC MOV B,#10 DIV AB MOV R0,B MOV B,#10 DIV AB ORL A,#30H ACALL WRITE_CHAR MOV A,B ORL A,#30H ACALL WRITE_CHAR MOV A,R0 ORL A,#30H ACALL WRITE_CHAR SJMP LAP LCD_INIT: MOV A, #38H ACALL WRITE_CMD MOV A, #0CH ACALL WRITE_CMD MOV A, #04H ACALL WRITE_CMD MOV A, #01H ACALL WRITE_CMD RET WAIT_LCD: MOV R7,#100 LOOP: MOV R6, #250 DJNZ R6,$ DJNZ R7, LOOP RET WRITE_CHAR: SETB RS MOVX @DPTR,A SETB EN CLR EN ACALL WAIT_LCD RET WRITE_CMD: CLR RS MOVX @DPTR,A SETB EN CLR EN ACALL WAIT_LCD RET DELAY_100US: MOV R6,#200 DJNZ R6,$ RET END BÀI TẬP THÊM : Viết chương trình đọc điện áp thực của kênh 0 và hiển thị lên LCD ORG 2000H RS BIT P3.5 EN BIT P3.4 MOV DPTR,#8000H ACALL LCD_INIT LAP: MOV DPTR,#4000H MOV A,#0 MOVX @DPTR,A ACALL DELAY_100US MOVX A,@DPTR MOV DPTR,#8000H ACALL CHIA MOV A, #80H ACALL WRITE_CMD SJMP LAP LCD_INIT: MOV A, #38H ACALL WRITE_CMD MOV A, #0CH ACALL WRITE_CMD MOV A, #04H ACALL WRITE_CMD MOV A, #01H ACALL WRITE_CMD RET WAIT_LCD: MOV R7,#100 LOOP: MOV R6, #250 DJNZ R6,$ DJNZ R7, LOOP RET WRITE_CHAR: SETB RS MOVX @DPTR,A SETB EN CLR EN ACALL WAIT_LCD RET WRITE_CMD: CLR RS MOVX @DPTR,A SETB EN CLR EN ACALL WAIT_LCD RET DELAY_100US: MOV R6,#200 DJNZ R6,$ RET CHIA: PUSH ACC PUSH B MOV B,#51 DIV AB ORL A,#30H ACALL WRITE_CHAR MOV A,#0A5H ACALL WRITE_CHAR MOV A,B MOV B,#5 DIV AB ORL A,#30H ACALL WRITE_CHAR POP B POP ACC RET END BÀI 6: THÍ NGHIỆM HIỂN THỊ DÙNG LED MA TRẬN THÍ NGHIỆM 1: Viết chương trình hiển thị ký tự chữ A lên led ma trận ORG 2000H LOOP: MOV R1,#8 MOV A,#00000001B MOV DPTR,#CHARA LAP: ACALL HT_COT PUSH ACC CLR A MOVC A,@A+DPTR ACALL HT_HANG INC DPTR POP ACC RL A DJNZ R1, LAP SJMP LOOP CHARA: DB 03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END THÍ NGHIỆM 2: Viết chương trình con hiển thị nội dung 8 ô nhớ từ 30H đến 37H. Dùng chương trình con để hiển thị chữ A, B HT_ONHO: MOV R1,#8 MOV A,#00000001B MOV R0,#30H LAP: ACALL HT_COT PUSH ACC CLR A MOV A,@R0 ACALL HT_HANG INC R0 POP ACC RL A DJNZ R1, LAP RET HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET Dùng chương trình con trên hiển thị chữ A ORG 2000H MOV 30H,#03H MOV 31H,#0EDH MOV 32H,#0EEH MOV 33H,#0EEH MOV 34H,#0EDH MOV 35H,#03H MOV 36H,#0FFH MOV 37H,#0FFH LOOP: ACALL HT_ONHO SJMP LOOP HT_ONHO: MOV R1,#8 MOV A,#00000001B MOV R0,#30H LAP: ACALL HT_COT PUSH ACC CLR A MOV A,@R0 ACALL HT_HANG INC R0 POP ACC RL A DJNZ R1, LAP RET HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END Dùng chương trình con trên hiển thị chữ B ORG 2000H MOV 30H,#00H MOV 31H,#76H MOV 32H,#76H MOV 33H,#76H MOV 34H,#89H MOV 35H,#0FFH MOV 36H,#0FFH MOV 37H,#0FFH LOOP: ACALL HT_ONHO SJMP LOOP HT_ONHO: MOV R1,#8 MOV A,#00000001B MOV R0,#30H LAP: ACALL HT_COT PUSH ACC CLR A MOV A,@R0 ACALL HT_HANG INC R0 POP ACC RL A DJNZ R1, LAP RET HT_COT: PUSH DPH PUSH DPL MOV DPTR,# 0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,# 0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END BÀI TẬP THÊM : Cho hiển thị và chạy chữ A B C trên led ma trận ORG 2000H TT: MOV R4,#10 MOV R0,#0 MOV DPTR,#CHAR MOV R5,#32 LOOP1: MOV R2,DPH MOV R3,DPL LOOP: MOV DPH,R2 MOV DPL,R3 MOV R1,#8 MOV A,#00000001B LAP: ACALL HT_COT PUSH ACC CLR A MOVC A,@A+DPTR ACALL HT_HANG INC DPTR POP ACC RL A DJNZ R1, LAP DJNZ R4,LOOP MOV R4,#10 INC R0 MOV A,R0 MOV DPTR,#CHAR ADD A,DPL MOV DPL,A DJNZ R5,LOOP1 SJMP TT CHAR: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH,0FFH,81H,7EH,7EH,7EH,0BDH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH HT_COT: PUSH DPH PUSH DPL MOV DPTR,#0C000H MOVX @DPTR,A POP DPL POP DPH RET HT_HANG: PUSH DPH PUSH DPL MOV DPTR,#0A000H MOVX @DPTR,A ACALL DELAY_1ms POP DPL POP DPH RET DELAY_1ms: MOV R7,#5 DL: MOV R6,#100 DJNZ R6,$ DJNZ R7,DL RET END BÀI 7: THÍ NGHIỆM VỚI ĐỘNG CƠ DC THÍ NGHIỆM 1: Viết chương trình cho phép động cơ chạy theo chiều thuận trong vòng 2s , nghỉ 2s,chạy theo chiều ngược 2s, nghỉ 2s và lặp lại ORG 2000H CLR A MOV TMOD,#10H MOV DPTR,#0E000H LAP: ACALL CHIEUTHUAN ACALL DELAY_2S ACALL NGHI ACALL DELAY_2S ACALL CHIEUNGHICH ACALL DELAY_2S ACALL NGHI ACALL DELAY_2S SJMP LAP CHIEUTHUAN: SETB ACC.0 CLR ACC.1 MOVX @DPTR,A RET NGHI: CLR ACC.0 CLR ACC.1 MOVX @DPTR,A RET CHIEUNGHICH: CLR ACC.0 SETB ACC.1 MOVX @DPTR,A RET DELAY_2S: MOV R7,#40 LOOP: MOV TL1,#LOW(-50000) MOV TH1,#HIGH(-50000) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 DJNZ R7, LOOP RET END THÍ NGHIỆM 2: Viết chương trình điều khiển động cơ với phương pháp PWM, trong đó thời gian bật của xung là 50% chu kỳ ORG 2000H LJMP MAIN ORG 200BH LJMP ISR_T0 ORG 201BH LJMP ISR_T1 MAIN: MOV TMOD,#11H CLR A SETB TF0 MOV IE,#82H MOV DPTR,#0E000H LAP: MOVX @DPTR,A SJMP LAP ISR_T0: SETB ACC.0 CLR TR0 MOV TL0,#LOW(-1000) MOV TH0,#HIGH(-1000) SETB TR0 CLR TR1 MOV TL1,#LOW(-500) MOV TH1,#HIGH(-500) SETB TR1 SETB ET1 RETI ISR_T1: CLR TR1 CLR ACC.0 CLR ET1 RETI END THÍ NGHIỆM 3: Viết chương trình điều khiển động cơ với phương pháp PWM, trong đó thời gian “bật” của xung lần lượt là 20%, 50%, và 80% chu kỳ. Mỗi độ rộng xung cách nhau 5s. Quy trình được lặp lại liên tục ORG 2000H LJMP MAIN ORG 200BH LJMP ISR_T0 ORG 201BH LJMP ISR_T1 MAIN: MOV TMOD,#11H MOV R7,#50 MOV R6,#100 MOV R5,#0 CLR A SETB TF0 MOV IE,#82H MOV DPTR,#0E000H LAP: MOVX @DPTR,A SJMP LAP ISR_T0: SETB ACC.0 CLR TR0 MOV TL0,#LOW(-1000) MOV TH0,#HIGH(-1000) SETB TR0 DJNZ R6,TT MOV R6,#100 DJNZ R7,TT MOV R7,#50 MOV R6,#100 INC R5 TT: CJNE R5,#0,KHAC20 CLR TR1 MOV TL1,#LOW(-200) MOV TH1,#HIGH(-200) SETB TR1 SJMP EXIT KHAC20: CJNE R5,#1,KHAC50 CLR TR1 MOV TL1,#LOW(-500) MOV TH1,#HIGH(-500) SETB TR1 SJMP EXIT KHAC50: CJNE R5,#2,KHAC80 CLR TR1 MOV TL1,#LOW(-800) MOV TH1,#HIGH(-800) SETB TR1 SJMP EXIT KHAC80: MOV R5,#0 SJMP TT EXIT: SETB ET1 RETI ISR_T1: CLR TR1 CLR ACC.0 CLR ET1 RETI END THÍ NGHIỆM 4: BÍ
File đính kèm:
- thi_nghiem_thuc_hanh_mon_vi_xu_ly.doc