BÀI TN 3 GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM 1: Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử.. Biên dịch và chạy thử chương trình... MOV TH0,#HIGH-50000SETB TR0 JNB TF0,$
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ
- -Môn thí nghiệm VI XỬ LÝ BÁO CÁO BÀI TN3
TP HCM, ngày 08 tháng 04 năm 2020
Giảng viên : Võ Thị Thu Hồng
Sinh viên thực hiện:
Trang 2BÀI TN 3 GIAO TIẾP LCD VÀ ADC
THÍ NGHIỆM 1: Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử Biên dịch và chạy thử chương trình Sửa chương trình để hiển thị tên sinh viên lên hàng đầu
ORG 2000H
RS BIT P3.5
EN BIT P3.3
MAIN:
LCALL INIT
MOV A,#0
LAP1: PUSH ACC
MOV DPTR,#TABLE
MOVC A,@A + DPTR
JZ TIEP
LCALL OUT
POP ACC
INC A
SJMP LAP1
TIEP: MOV A,#0C0H
LCALL NHAPLENH
MOV A,#0
LAP2: PUSH ACC
MOV DPTR,#TABLE1
MOV A,@A+DPTR
JZ EXIT
LCALL OUT
POP ACC
INC A
SJMP LAP2
EXIT: SJMP $
; -NHAPLENH:
MOV DPTR,#8000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
Trang 3LCALL DELAY5MS
RET
; -OUT:
MOV DPTR,#8000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS
RET
; -DELAYL5MS:
MOV TMOD,#10H
MOV TL1,#LOW(-5000)
MOV TH1,#HIGH(-5000)
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
; -INIT:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
TABLE: DB "DO TUAN HAO",0 ; ky tu 0 de bao ket thuc chuoi ky tu TABLE1: DB "NGUYEN MY HANG",0
END
THÍ NGHIỆM 2: Viết thêm chương trình con CLRSCREEN để xóa màn hình LCD
CLEAR:
Trang 4MOV A, #01H ;đặt giá trị cho A ứng với lệnh xóa màn hình trong LCD LCALL NHAPLENH
RET
Viết thêm chương trình con GOTOXY để di chuyển con trỏ của LCD đến hàng x, cột y, với X chứa trong R0 và Y chứa trong R1
GOTOXY:
CLR A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
LCALL NHAPLENH
TABLE: DB 80H,0C0H
RET
Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2
ORG 2000H
RS BIT P3.5
EN BIT P3.3
MAIN:
LCALL INIT
MOV A,#0
LAP1: PUSH ACC
MOV DPTR,#TABLE
MOVC A,@A + DPTR
JZ TIEP
LCALL OUT
POP ACC
INC A
SJMP LAP1
TIEP: MOV A,#0C0H
LCALL NHAPLENH
MOV A,#0
LAP2: PUSH ACC
MOV DPTR,#TABLE1
MOV A,@A+DPTR
JZ EXIT
LCALL OUT
POP ACC
Trang 5INC A
SJMP LAP2
EXIT: SJMP $
; -NHAPLENH:
MOV DPTR,#8000H CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS RET
; -OUT:
MOV DPTR,#8000H CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS RET
; -DELAYL5MS:
MOV TMOD,#10H
MOV TL1,#LOW(-5000) MOV TH1,#HIGH(-5000) SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
; -INIT:
MOV A,#01H
LCALL NHAPLENH MOV A,#0EH
LCALL NHAPLENH MOV A,#02H
LCALL NHAPLENH MOV A,#06H
Trang 6LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
; -GOTOXY:
PUSH ACC
MOV A,R0
MOV DPTR,#TB
MOVC A,@A+DPTR
ORL A,R1
LCALL NHAPLENH
POP ACC
TB: DB 80H,0C0H
RET
TABLE: DB "DO TUAN HAO",0 ; ky tu 0 de bao ket thuc chuoi ky tu
TABLE1: DB "NGUYEN MY HANG",0
END
THÍ NGHIỆM 3 +4
Viết chương trình con READADC thực hiện đọc giá trị của kênh 0 và trả về giá trị trong R0 Viết chương trình hiển thị giá trị của kênh 0 của ADC lên LCD dùng chương trình con READADC đã viết
RS BIT P3.5
EN BIT P3.4
ORG 2000H
MAIN:
LCALL KHOIDONGLCD
LCALL HIENTHI
LAP:
MOV DPTR,#4000H
MOVX @DPTR,A
ACALL DELAY120US
MOVX A,@DPTR
MOV R5,A
ACALL CALADC
SJMP LAP
; -DELAY120US:
MOV R1,#60
DJNZ R1,$
Trang 7; -NHAPLENH:
MOV DPTR,#6000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
RET
; -DL5MS:
MOV TMOD,#01H
MOV TL0,#LOW(-5000)
MOV TH0,#HIGH(-5000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
; -KHOIDONGLCD:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
; -XUAT1KYTU:
MOV DPTR,#6000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
Trang 8CLR EN
LCALL DL5MS
RET
; -CALADC:
MOV A,#88H
LCALL NHAPLENH
MOV A,R5
MOV B,#51
DIV AB
ADD A,#48
ACALL XUAT1KYTU
MOV A,#10
MUL AB
MOV R4,B
MOV B,#51
CJNE R4,#1,TIEP1
DIV AB
ADD A,#5
MOV R4,A
SJMP TIEP2
TIEP1:
DIV AB
MOV R4,A
TIEP2:
MOV A,#8AH
ACALL NHAPLENH
MOV A,R4
ADD A,#48
ACALL XUAT1KYTU
RET
; -HIENTHI:
MOV A,#80H
ACALL NHAPLENH
MOV R3,#0
LOOP:
MOV A,R3
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ EXIT
ACALL XUAT1KYTU
Trang 9INC R3
SJMP LOOP
EXIT:
RET
TABLE: DB "VOLT: , V",0 END
Trang 10BÀI TN 4 GIAO TIẾP TIMER VÀ SERIAL PORT
THÍ NGHIỆM 1
Code:
TF EQU -991
ORG 2000H
MOV TH1,#HIGH (TF)
MOV TL1,#LOW (TF)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
CPL P1.0
SJMP LOOP
END
_Dạng sóng có thể bị sai số, để hạn chế sai số, ta nên tính toán giá trị nạp vào TH0 và TL0 bằng tần số xtal của mạch
THÍ NGHIỆM 2
ORG 2000H
MOV TMOD,#02H
MOV TL0,#-250
MOV TH0,#-250
SETB TR0
HAO: MOV R7,#16
LOOP: MOV R6,#250
LAP:
JNB TF0,$
CLR TF0
DJNZ R6,LAP
DJNZ R7,LOOP
Trang 11CPL P1.0
SJMP HAO
END
- Ở chế độ 2, độ trễ gây ra do các câu lệnh đảo giá trị bit gây sai số cho dạng sóng ngõ ra Tuy nhiên sai số là không lớn
THÍ NGHIỆM 3:
Viết chương trình phát chuỗi ký tự “Hello, world” lên máy tính thông qua HyperTerminal với tốc độ baud 19200 pbs mỗi khi SW 310 (gắn vào P1.0) được nhấn
ORG 2000H
MOV TMOD,#20H ;cài đặt port nối tiếp vào tốc độ baud
MOV TH1,#-3
SETB TR1
MOV SCON,#42H
MOV PCON,#80H
LAP:
MOV R7,#0
MOV DPTR,#TABLE
TTUC:
JB P1.0,$
LCALL DL100MS
JNB P1.0,$
MOV A,R7
INC R7
MOVC A,@A+DPTR
JZ LAP
LCALL XUAT
SJMP TTUC
; -XUAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
; -DL100MS:
MOV R4,#2
LAP1:
MOV TMOD,#01H
MOV TL0,#LOW(-50000)
Trang 12MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R4,LAP1
RET
; -TABLE: DB "HELLO,WORLD",0
END
THÍ NGHIỆM 4:
_Viết chương trình nhận các ký tự từ máy tính gửi đến EME-MC8 thông qua HyperTerminal (bằng cách gõ các ký tự trên bàn phím khi đang ở trong chương trình HyperTerminal) và hiển thị
lên LCD như sau: Nếu ký tự là chữ thì hiển thị lên LCD; Enter thì xuống hàng; ESC thì xóa màn
hình LCD; Backspace thì xóa ký tự bên trái dấu nháy.
ORG 2000H
RS BIT P3.5
EN BIT P3.4
MOV TMOD,#20H
MOV TH1,#-3
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
CLR F0 ;bien trang thai hang(enter)
LCALL KHOIDONGLCD
MAIN:
LCALL INCHAR LCALL KTRACHAR LCALL KTRAENTER LCALL KTRAESC LCALL KTRABACK SJMP MAIN
; -KTRABACK:
CJNE A,#08H,OUT1
LCALL XOAKYTU
OUT1:
Trang 13
; -XOAKYTU:
DEC R1 ; chuyển con trỏ vị trí về vị trí trước
JB F0,H1 ; kiểm tra hàng hiện tại của con trỏ
MOV R0,#00H
SJMP GOTO
H1: MOV R0,#01H
GOTO:
LCALL GOTOXY
MOV A,#0FEH ;thay ký tự hiện tại bằng ký tự trắng
LCALL XUAT1KYTU
DEC R1 ; vì con trỏ tự động tăng lên 1 nên phải giảm vị trí đi 1 LCALL GOTOXY
RET
; -KTRAENTER:
CJNE A,#13H,OUT2 ;kiểm tra mã ASCII của phím enter
LCALL CHUYENHANG
OUT2:
RET
; -CHUYENHANG:
CPL F0 ; đảo cờ vị trí hàng con trỏ
JB F0,HANG1 ;kiem tra vi tri con tro
LCALL KHOIDONGLCD
MOV R1,#0
SJMP OUT4
HANG1:
MOV R0,#01 ;cho con tro len hang tren
MOV R1,#00
LCALL GOTOXY
OUT4:
RET
Trang 14
CJNE A,#27H,OUT3 ; ktra mã ASCII của phím ESC
LCALL CLRLCD
OUT3:
RET
; -CLRLCD:
MOV A,#01H
LCALL NHAPLENH
MOV R1,#0 ; khoi dong lai bộ đếm vị trí cột của con trỏ tên LCD
RET
; -KTRACHAR:
CJNE A,#30H,$+3 ; chỉ nhận ký tự mã ASCII trong khoảng hiển thị được
JC THOAT
CJNE A,#7FH,$+3
JNC THOAT
CLR C
LCALL XUAT1KYTU
THOAT:
RET
; -INCHAR:
JNB RI,$ ; nhận ký tự từ port nối tiếp CLR RI
MOV A,SBUF RET
; -NHAPLENH:
MOV DPTR,#6000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
RET
Trang 15; -XUAT1KYTU:
MOV DPTR,#6000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
INC R1
RET
; -DL5MS:
MOV TMOD,#10H
MOV TL1,#LOW(-5000) MOV TH1,#HIGH(-5000) SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
; -KHOIDONGLCD:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
; -GOTOXY:
PUSH ACC
MOV A,R0
Trang 16MOV DPTR,#TABLE MOVC A,@A+DPTR ORL A,R1
LCALL NHAPLENH POP ACC
TABLE: DB 80H,0C0H
RET
END
Trang 17BÀI THÍ NGHIỆM 5 LẬP TRÌNH NGẮT
1 Thí nghiệm 1: Tạo xung cho chân P1.0 dùng ngắt timer.
Code:
ORG 2000H
LJMP MAIN
ORG 200BH
TO_ISR: CLR TR0
MOV TL0,#LOW(-65000)
MOV TH0,#HIGH(-65000)
SETB TR0
CPL P1.0
RETI
ORG 2030H
MAIN: MOV TMOD,#01H
SETB TF0
MOV IE,#82H
SJMP $
END
2 Thí nghiệm 2: Tạo hai xung đồng thời có cki khác nhau
Code:
ORG 0000H LJMP MAIN ORG 000BH LJMP T0_ISR ORG 001BH LJMP T1_ISR ORG 0030H MAIN: MOV TMOD,#11H
SETB TF0 SETB TF1 SETB EA SETB ET0 SJMP $ T0_ISR: SETB ET1
CLR TR0 JNB P1.0,SKIP CLR ET1 SKIP:
MOV TL0,#LOW(-65000) MOV TH0,#HIGH(-65000) SETB TR0
CPL P1.0 RETI T1_ISR: CLR TR1
Trang 18MOV TL1,#LOW(-250)
MOV TH1,#HIGH(-250)
SETB TR1
CPL P1.1
RETI
END
3 Thí nghiệm 3: Ngắt ngoài P3.2 (INT0\) (đếm số lần bấm nút)
Code:
ORG 2000H
LJMP MAIN
ORG 2003H
LJMP EX0_ISR
ORG 2030H
MAIN: MOV R0,#0
SETB EA
SETB EX0
SETB IT0
SJMP $
; -EX0_ISR: CLR EX0
INC R0
MOV P1,R0
LCALL DELAY
SETB EX0
RETI
; -DELAY:
MOV R5,#8
LAP1: MOV R7,#250
LAP: MOV R6,#250
DJNZ R6,$
DJNZ R7,LAP
DJNZ R5,LAP1
RET
END
4 Thí nghiệm 4:Truyền nối tiếp dùng ngắt serial port truyền 8 bit,9600 baud,
XTAL:11,0592Hz các số từ 0-> 9.
Code:
ORG 2000H
LJMP MAIN
ORG 2023H
LJMP SP_ISR
ORG 2030H
MAIN: MOV TMOD,#20H
MOV TH1,#-3
MOV TL1,#-3
SETB TR1
Trang 19MOV SCON,#42H MOV A,#30H MOV IE,#90H SJMP $
SP_ISR: CJNE A,#3AH,SKIP
SJMP KT
SKIP: MOV SBUF,A
INC A
CLR TI
RETI
KT:
END