You are on page 1of 20

ĐẠI HỌC BÁCH KHOA

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH




BÁO CÁO THÍ NGHIỆM VI XỬ LÍ LAB2.2, LAB3

Sinh viên: Hồ Xuân Tuấn


MSSV: 1915760
GV hướng dẫn: Nguyễn Phan Hải Phú

Thành phố Hồ Chí Minh - 2021


BÀI THÍ NGHIỆM 2
LẬP TRÌNH HIỂN THỊ LED 7 ĐOẠN VÀ GIAO TIẾP LED MA TRẬN

THÍ NGHIỆM 4
Mục tiêu: Nắm được phương pháp quét LED 7 đoạn.
Yêu cầu:
 Đầu tiên, viết chương trình hiển thị số 1 lên LED 7 đoạn 0, sau đó 1s hiển thị
số 2 lên LED 7 đoạn 1, sau đó 1s hiển thị số 3 lên LED 7 đoạn 2, sau đó 1s hiển
thị số 4 lên LED 7 đoạn 3. Quá trình này lặp đi lặp lại. Việc hiển thị này sử
dụng chương trình con DisplayLED đã viết ở trên.
 Giảm thời gian trễ xuống còn 100 ms. Quan sát hiện tượng.
 Tính toán thời gian trễ sao cho không còn thấy LED nhấp nháy và áp dụng
vào chương trình
 Giảm thời gian trễ xuống bằng 0 (không sử dụng hàm delay). Quan sát hiện
tượng.

Code chương trình:

ORG 0000H
LAP1:
MOV R0, #00000001B // gán giá trị R0 bằng 01h
MOV A,#11101000B // gán giá trị thanh ghi A bằng E8h
LAP2:
ADD A, #00001000B // cộng thanh ghi A với 08h
RL A // dịch thanh ghi A sang trái ( mục đích để chọn led)
ANL A, #11110000B // xóa 4 bit thấp của thanh ghi A
ACALL DisplayLED
ACALL Delay1sIns
INC R0 // tăng R0 lên 1 đơn vị (hiển thị số 1 đến 4)
CJNE R0, #5, LAP2 //nếu R0 nhỏ hơn 5 thì nhảy về lap 2, còn bằng 5 thì
SJMP LAP1 //thực hiện lệnh kế tiếp (nhảy về lap1)
DisplayLED:
ADD A,R0 // cộng thanh ghi A với R0
MOV DPTR, #0011H // nạp vào thanh ghi DPTR vùng địa chỉ 0011h (nằm
trong
vùng hoạt động của led 7 đoạn )
MOVX @DPTR, A // xuất data từ thanh ghi A ra ngoại vi
RET
Delay1sIns: // chương trình con tạo trễ 1s
MOV R4,#10
L1: MOV R5,#200
L2: MOV R6,#250
DJNZ R6, $
DJNZ R5, L2
DJNZ R4,L1
RET
END

Kiểm tra:
 Biên dịch, thực thi và kiểm tra chương trình
 Thời gian trễ để không còn thấy LED nhấp nháy là bao nhiêu theo lý thuyết?
Giải thích cách tính.
+ Tần số để không còn thấy LED nhấp nháy là 50HZ
+ Thời gian trễ t=1/50/4=0.005 s =5000 MC=2*100*25*1 ( vì có 4 led )

 Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra là gì? Giải thích.
+ Khi giảm thời gian trễ xuống rất nhỏ, thì mắt chúng ta thấy dường như không
có sự thay đổi giữa các led.
+ Vì tần số rất lớn và nằm trong khoảng quang ánh sáng (mắt thường cảm giác
giác liên tục khi tốc độ thay đổi ảnh lớn hơn 25 ảnh trong 1s ) mà làm cho mắt
ta không nhận ra sự thay đổi, vì các led chuyển động với tốc độ rất nhanh.
THÍ NGHIỆM 5
Mục tiêu: Nắm được phương pháp giao tiếp LED ma trận.
Yêu cầu: Viết chương trình làm sáng các LED ở vị trí bất kỳ của hàng y trên
LED ma trận. Giá trị y được chứa trong thanh ghi.
Code chương trình:
ORG 0000H
MOV R4, #0F7H
LAP:
MOV DPTR,#89ABH
MOV A, #10H
MOVX @DPTR,A
MOV DPTR,#0ABCDH
MOV A, R4
MOVX @DPTR,A
END

Kiểm tra:
 Biên dịch, thực thi và kiểm tra chương trình

 Để chốt hàng và chốt cột của LED ma trận, ta lần lượt phải ghi ra ngoại vi ở
vùng nhớ (giá trị nạp vào thanh ghi DPTR) bao nhiêu?
+ Để chốt hàng ta ghi ra ngoại vị địa chỉ A000h đến BFFFh
+ Để chốt cột ta ghi ra ngoại vị địa chỉ 8000h đến 9FFFh
 Để làm sáng LED ở vị trí bất kỳ thì dữ liệu xuất trên cột và hàng phải là mức
cao hay thấp ?
+ Dữ liệu xuất trên cột là mức cao, còn dữ liệu xuất trên hàng là mức thấp.
THÍ NGHIỆM 6
Mục tiêu: Nắm được phương pháp quét LED ma trận.
Yêu cầu: Viết chương trình làm hiển thị chữ T lên LED ma trận.
HD:
- Viết các mã xuất theo 8 hàng của từng cột của chữ T cần hiển thị.
- Viết chương trình tạo delay 1ms có tên Delay1ms.
- Quy trình quét LED ma trận, đầu tiên hiển thị 8 hàng của cột 1, sau đó delay
1ms rồi hiển thị 8 hàng của cột 2, sau đó delay 1ms rồi hiển thị 8 hàng của cột 3,
… tương tự như vậy đến khi hiển thị xong 8 hàng của cột 8 thì quay lại hiển thị
cột 1.
Code chương trình:
ORG 0000H
MOV R2, #1
ACALL RESET // gán giá trị R0=0
LAP:
MOV DPTR,#0A200H //truy xuất ram ngoại theo hàng
MOV A, #0FFH // gán thanh ghi A =FFH
MOVX @DPTR,A // đưa data từ A ra led ma trận ( tắt tất cả các
Led theo hàng nhằm không xảy ra lưu ảnh khi chuyển từ cột này sang cột khác)
MOV A,R2 // gán nội dung R2 vào A
MOV DPTR,#89ABH // truy xuất ram ngoại theo cột
MOVX @DPTR,A // đưa data ra ram led ma trận
RL A // dịch A sang trái, nhằm tạo dịch cột từ cột n sang cột
n+1
MOV R2,A // gán A lại R2, để thanh ghi A làm công việc khác
MOV A,R1 // gán R1 vào A
MOV DPTR, #CharT //truy xuất thanh ghi DPTR dạng bảng
MOVC A, @A+DPTR // lấy nội dung của A +với nội dung DPTR gán vào A
MOV DPTR,#0ABCDH // truy xuất ram ngoại theo hàng
MOVX @DPTR,A // đưa data từ A ra led ma trận
ACALL DELAY // gọi hàm tạo trễ
INC R1 // tăng R1 một đơn vị
CJNE R1,#8,LAP // R1 nhỏ hơn 8 nhảy về LAP, ngược lại thực hiện lệnh kế
ACALL RESET // gọi hàm RESET
SJMP LAP // nhảy về LAP
RESET:
MOV R1,#0
RET
DELAY:
MOV R4,#2
LAP1: MOV R5,#250
DJNZ R5,$
DJNZ R4,LAP1
RET
CharT: DB 0FCH,0FCH,0FCH, 00H, 00H, 0FCH, 0FCH, 0FCH // các giá trị
theo hàng để tạo thành chữ T trên led ma trận.
END

Kiểm tra:
 Biên dịch, thực thi và kiểm tra chương trình

 Khi tăng hoặc giảm thời gian delay, hiển thị trên LED ma trận sẽ thay đổi
như thế nào?
+ Khi tăng thời gian trể lên thì các led của cột 1 hiển thị trước, sau đó đến cột 2,
cột 3……cột 8, rồi tiếp tục tuần hoàn như vậy.
BÀI THÍ NGHIỆM 3
THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC

THÍ NGHIỆM 1
Mục tiêu: Nắm được cách thức xuất giá trị lên LCD.
Yêu cầu:
 Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử hoặc
trên elearning.
 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.

Code chương trình:

ORG 0000H
ACALL INITLCD
MOV R1, #0
LOOP:
MOV A,R1
MOV DPTR, #Message
MOVC A, @A+DPTR
JNZ NEXT
AJMP WAIT
NEXT:
ACALL WRITETEXT
INC R1
AJMP LOOP
WAITLCD:
MOV R6,#10
LL:
MOV R7,#250
DJNZ R7,$
DJNZ R6,LL
RET
WRITECOM:
MOV DPTR, #6789H
CLR P3.5
SETB P3.3
MOVX @DPTR, A
CLR P3.3
ACALL WAITLCD
RET
WRITETEXT:
MOV DPTR, #6789H
SETB P3.5
SETB P3.3
MOVX @DPTR, A
CLR P3.3
ACALL WAITLCD
RET
INITLCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
Message: DB 'HO XUAN TUAN',0
WAIT:
SJMP $
END

Kiểm tra:
 Kiểm tra kết quả thực hiện của chương trình.
 Giải thích ý nghĩa và cách sử dụng các chương trình con trên project mẫu.
+ Chương trình con INITLCD dùng để khởi động LCD
+ Chương trình con WRITECOM là chương trình con ghi lệnh.
+ Chương trình con WRITETEXT là chương trình con ghi kí tự.
 Các mã lệnh 38H, 0EH, 06H và 01H mang ý nghĩa như thế nào?
+ Lệnh 38H để chọn font ký tự là 5x8 .
+ Lệnh 0EH lệnh này dùng để bật LCD và bật con trỏ ký tự gạch chân.
+ Lệnh 06H để ra lệnh cho con trỏ tự động dịch phải mỗi khi ta gửi một ký tự
hiển thị cho nó.
+ Lệnh 01H dùng để xóa hiển thị.

THÍ NGHIỆM 2
Mục tiêu: Nắm được cách thức điều khiển con trỏ trong LCD.
Yêu cầu:
 Viết thêm chương trình con CLRSCREEN để xóa màn hình LCD.
 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
 Sửa chương trình ở thí nghiệm 1 để hiển thị căn chỉnh tên sinh viên ở chính
giữa hàng thứ 1 và thêm số nhóm ở hàng thứ 2 (cũng căn giữa).

Code chương trình:

+ Chương trình con CLRSCREEN để xóa màn hình LCD.


MOV A, #01H
ACALL WRITECOM
RET
WRITECOM:
MOV DPTR, #6789H
CLR P3.5
SETB P3.3
MOVX @DPTR, A
CLR P3.3
ACALL WAITLCD
RET
+ 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.

OK:
MOV R0 , # 05H
MOV R1, # 02H
CJNE R1, #01H, XUONGHANG
MOV A, #80H
ADD A, R0
ACALL WRITECOM
SJMP OK

+ Chương trình hiển thị căn chỉnh tên sinh viên ở chính giữa hàng thứ 1 và
thêm số nhóm ở hàng thứ 2 (cũng căn giữa).

ORG 0000H
ACALL INITLCD
MOV R1, #0H
ACALL HANG1
LOOP:
MOV A,R1
MOV DPTR, #Message
MOVC A, @A+DPTR
CJNE R1, #0CH , NEXT
MOV R0, #02H
MOV R1, #05H
ACALL HANG2
MOV R3, #0
LAP: MOV A, R3
MOV DPTR, #NHOM
MOVC A, @A+DPTR
JNZ NEXT2
AJMP WAIT
NEXT:
ACALL WRITETEXT
INC R1
AJMP LOOP
NEXT2:
ACALL WRITETEXT
INC R3
AJMP LAP
WAITLCD:
MOV R6,#10
LL:
MOV R7,#250
DJNZ R7,$
DJNZ R6,LL
RET
WRITECOM:
MOV DPTR, #6789H
CLR P3.5
SETB P3.3
MOVX @DPTR, A
CLR P3.3
ACALL WAITLCD
RET
WRITETEXT:
MOV DPTR, #6789H
SETB P3.5
SETB P3.3
MOVX @DPTR, A
CLR P3.3
ACALL WAITLCD
RET
INITLCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR: MOV A, #01H
ACALL WRITECOM
RET
HANG1:
MOV A, #82H
ACALL WRITECOM
RET
HANG2:
MOV A, #0C0H
ADD A, R1
ACALL WRITECOM
RET
MESSAGE: DB "HO XUAN TUAN",0
NHOM: DB "NHOM 1",0
WAIT:
SJMP $
END

Kiểm tra
 Kiểm tra kết quả thực hiện của chương trình.

 Địa chỉ để hiển thị trên hàng 1 và hàng 2 của LCD bắt đầu và kết thúc bằng
bao nhiêu? LCD có hiển thị được hết vùng địa chỉ đó không? Tại sao?
+ Địa chỉ trên hàng 1 bắt đầu từ địa chỉ 00H đến 0FH.
+ Địa chỉ trên hàng 2 bắt đầu từ địa chỉ 40H đến 4FH.
 Muốn bật hay tắt con trỏ trên LCD, ta phải nạp mã lệnh bao nhiêu?
+ Muốn bật con trở LCD ta nạp mã lệnh 0DH hoặc 0EH hoặc 0FH .
+ Muốn tắt con trở LCD ta nạp mã lệnh 0CH.
 Muốn hiển thị con trỏ kiểu blinky, ta phải nạp mã lệnh bao nhiêu?
+ Muốn hiển thị con trỏ kiểu blinky ta nhập mã lệnh 0DH.
THÍ NGHIỆM 3
Mục tiêu: Nắm được cách thức hiển thị LCD một cách thuần thục.
Yêu cầu:
Viết chương trình hiển thị lên dòng thứ 1 và canh giữa tên của thành viên thứ
nhất trong nhóm. Sau đó 1s, xóa dòng 1 và hiển thị lên dòng thứ 2 và canh giữa
tên thành viên thứ hai của nhóm. Tiếp tục sau đó 1s, xóa dòng 2 và hiển thị
đồng thời tên hai thành viên ở hai dòng.

Code chương trình:


ORG 0000H MOV R1, #05H
ACALL INITLCD ACALL HANG2
MOV R1, #0H MOV R3, #0
ACALL HANG1 LP: MOV A, R3
LOOP: MOV DPTR, #NHOM
MOV A,R1 MOVC A, @A+DPTR
MOV DPTR, #Message JNZ NEXT2B
MOVC A, @A+DPTR RET
CJNE R1, #0CH , NEXT XOA:
ACALL DOI1S MOV A, #01H
ACALL XOA ACALL WRITECOM
MOV R0, #02H RET
MOV R1, #05H DOI1S:
ACALL HANG2 MOV R4,#10
MOV R3, #0 L1:MOV R5,#200
LAP: MOV A, R3 L2:MOV R6,#250
MOV DPTR, #NHOM DJNZ R6,$
MOVC A, @A+DPTR DJNZ R5,L2
JNZ NEXT2 DJNZ R4,L1
ACALL DOI1S RET
ACALL XOA NEXT:
ACALL HIENCA2 ACALL WRITETEXT
ACALL WAIT INC R1
HIENCA2: AJMP LOOP
MOV R1, #0H NEXT2:
ACALL HANG1 ACALL WRITETEXT
LOP: INC R3
MOV A,R1 AJMP LAP
MOV DPTR, #Message NEXTA:
MOVC A, @A+DPTR ACALL WRITETEXT
CJNE R1, #0CH , NEXTA INC R1
MOV R0, #02H AJMP LOP
NEXT2B: RET
ACALL WRITETEXT
INC R3 INITLCD:
AJMP LP MOV A,#38H
WAITLCD: ACALL WRITECOM
MOV R6,#10 MOV A,#0EH
LL: ACALL WRITECOM
MOV R7,#250 MOV A,#06H
DJNZ R7,$ ACALL WRITECOM
DJNZ R6,LL RET
RET HANG1:
WRITECOM: MOV A, #82H
MOV DPTR, #6789H ACALL WRITECOM
CLR P3.5 RET
SETB P3.3 HANG2:
MOVX @DPTR, A MOV A, #0C0H
CLR P3.3 ADD A, R1
ACALL WAITLCD ACALL WRITECOM
RET RET
WRITETEXT: MESSAGE: DB "HO XUAN
MOV DPTR, #6789H TUAN",0
SETB P3.5 NHOM: DB "NHOM 1",0
SETB P3.3 WAIT:
MOVX @DPTR, A SJMP $
CLR P3.3 END
ACALL WAITLCD
Kiểm tra
 Kiểm tra kết quả thực hiện của chương trình.
THÍ NGHIỆM 4
Mục tiêu: Nắm được cách thức giao tiếp với ADC.
Yêu cầu:
 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.
Code chương trình:

+ 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.

READADC:
MOV DPTR, #4321H
MOVX @DPTR, A
ACALL DELAY_ADC
MOVX A, @DPTR
MOV R0,A
RET

Kiểm tra:

 Để giao tiếp với ADC, ta phải ghi ra ngoại vi ở vùng nhớ (giá trị nạp vào
thanh ghi DPTR) bao nhiêu?
+ Vùng nhớ 4000H đến 5FFFH giá trị nạp vào thanh ghi là 4321H

THÍ NGHIỆM 5
Mục tiêu: Nắm được cách thức giao tiếp với ADC.
Yêu cầu:
 Viết chương trình con CALADC tính toán giá trị điện áp thực tế đặt vào kênh
0 ADC từ giá trị đo được của ADC.
Chương trình nhận giá trị ngõ vào chứa trong R0 (là kết quả của chương trình
con
READADC). Giá trị trả về chứa trong R0 và R1, R0 chứa giá trị nguyên và R1
chứa giá trị
thập phân.
 Hiển thị giá trị đo được lên LCD theo cấu trúc: "Voltage: x.xx V" với x.xx là
giá trị điện áp đo được, với hai số sau dấu chấm.
Code chương trình:
ORG 0000H
ACALL INITLCD
LOOP:
ACALL CLEARLCD
ACALL READADC
ACALL CALADC
ACALL PRINTADC
LJMP LOOP
READADC:
MOV DPTR,#4444H
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A, @DPTR
MOV R0,A
RET
CALADC:
MOV B,#5
MUL AB
MOV 40H, B
MOV B,#10
MUL AB
MOV 41H, B
MOV B,#10
MUL AB
MOV 42H, B
RET
PRINTADC:
MOV A, 40H
ADD A, #30H
ACALL WRITETEXT
MOV A,#'.'
ACALL WRITETEXT
MOV A, 41H
ADD A, #30H
ACALL WRITETEXT
MOV A, 42H
ADD A, #30H
ACALL WRITETEXT
RET
DELAY_100US:
MOV R7,#50
DJNZ R7,$
RET
DELAY:
MOV R5,#10
LL: MOV R6,#250
DJNZ R6,$
DJNZ R5,LL
RET
CLEARLCD:
MOV A,#01H
ACALL WRITECOM
RET
INITLCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
WRITECOM:
MOV DPTR,#6000H
CLR P3.5
SETB P3.3
MOVX @DPTR,A
CLR P3.3
ACALL DELAY
RET
WRITETEXT:
MOV DPTR,#6000H
SETB P3.5
SETB P3.3
MOVX @DPTR,A
CLR P3.3
ACALL DELAY
RET
END
Kiểm tra:
 Biên dịch và kiểm tra hoạt động của chương trình, so sánh giá trị hiển thị với
giá trị đo được dùng VOM.

You might also like