Professional Documents
Culture Documents
MỤC TIÊU
Nắm được cách sử dụng kit thí nghiệm, phần mềm lập trình.
CHUẨN BỊ
Đọc bài chuẩn bị thí nghiệm 2 tại nhà.
Chuẩn bị cho thí nghiệm 2: Viết chương trình và mô phỏng trên Proteus tất cả các bài
trong thí nghiệm 2 dựa trên bài chuẩn bị 2 và thí nghiệm 0.
Nộp tất cả các kết quả (bài chuẩn bị thí nghiệm 2) cho GVHD trước khi vào lớp.
Sinh viên không thực hiện hoặc nộp thiếu nếu không có lí do chính đáng sẽ không được
tham gia thí nghiệm và bị đánh vắng buổi đó.
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 trong folder
thí nghiệm của sinh viên.
Sửa chương trình để hiển thị tên sinh viên lên hàng đầu.
Kiểm tra:
Câu hỏi:
Giải thích ý nghĩa của các chương trình con trên project mẫu.
THÍ NGHIỆM 2
Mục tiêu: Nắm được giao tiếp cơ bản của LCD.
Yêu cầu:
Viết thêm chương trình con CLRSCREEN để xóa màn hình LCD. X
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. X
Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2. X
Kiểm tra:
Câu hỏi:
Cho biết mã lệnh dùng để xóa màn hình, dịch con trỏ đến vị trí thứ 1 của hàng 1 và vị trí
thứ 1 của hàng 2 của LCD?
Thực hiện canh giữa hàng 2 của LCD. Cho biết cách làm?
GOTOXY:
;DONG X: R0
; COT Y: R1
DEC R0
MOV P1,R0
ANL A,#00000001B
MOV P1,A
JB P1.0, DONG1COTY
DONG1COTY:
DEC R1
MOV A,R1
ADD A,#80H
JMP DONE
DONG2COTY:
DEC R1
MOV A,R1
ADD A,#0C0H
DONE:
CALL WRITECOM
RET
MAIN:
ACALL DISPLAYSTRING0
ACALL DISPLAYSTRING1 ;
SJMP $
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0EH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
RET
MOV A, #01H
ACALL WRITECOM
WRITECOM: ; Chi dung cho cau hinh LCD, Chinh con tro
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
DISPLAYSTRING0:
MOV R2,#0
MOV A,#0
LOOPP0:
MOV DPTR,#TEN
MOVC A,@A+DPTR
JZ EXITTT0
INC R2
SJMP LOOPP0
EXITTT0:
MOV A,#16
SUBB A,R2
RR A
ADD A,#80H
ACALL WRITECOM
LOOP0:
MOV A,R0
MOV DPTR,#TEN
MOVC A,@A+DPTR
JZ EXIT0
ACALL WRITETEXT
INC R0
SJMP LOOP0
EXIT0:
RET
DISPLAYSTRING1:
MOV R3,#0
MOV A,#0
LOOPP1:
MOV A,R3
MOV DPTR,#NHOM
MOVC A,@A+DPTR
JZ EXITTT1
INC R3
SJMP LOOPP1
EXITTT1:
MOV A,#16
SUBB A,R3
RR A
ADD A,#0C0H
ACALL WRITECOM
LOOP1:
MOV A,R4
MOV DPTR,#NHOM
MOVC A,@A+DPTR
JZ EXIT1
INC R4
SJMP LOOP1
EXIT1:
RET
TEN:
NHOM:
DB "NHOM 1",0
MOV R6,#10
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
END
THÍ NGHIỆM 3
Mục tiêu: Nắm được cách thức giao tiếp 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.
Kiểm tra:
Câu hỏi:
Giá trị này có phải giá trị thực của điện áp đặt vào kênh 0 hay không?
Để hiển thị giá trị thực tế của mức điện áp đặt vào kênh 0 ta phải làm như thế nào?
LCD_E BIT P3.3
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ADCADDR EQU 4000H
ORG 0
MAIN:
CALL READADC
print_adc:
mov b,#10
div ab
mov r2,b
mov b,#10
div ab
mov r3,b
mov b,#10
div ab
mov r4,b
; hang tram: r4 , chuc: r3, don vi r2
mov a,r4
add a,#48
call writetext
mov a,r3
add a,#48
call writetext
mov a,r2
add a,#48
call writetext
ret
READADC:
MOV DPTR,#ADCADDR ;Start ADC
MOV A,#0
MOVX @DPTR,A
CALL WAIT_LCD ;EOC
MOVX A,@DPTR ;OE
MOV R0,A
MOV P1,A ;Hi?n th? A lên các LED t?i port 1 d? quan sát
RET
INIT_LCD: ;………
MOV A, #38H
ACALL WRITECOM
MOV A, #0EH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
RET
CLEAR: ;………
MOV A, #01H
ACALL WRITECOM
RET
WRITECOM: ;………
MOV DPTR, #LCDADDR
SETB LCD_E
WRITETEXT: ;………
MOV DPTR, #LCDADDR
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
WAIT_LCD:
MOV R6,#10
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6,DL1
RET
;………
DISPLAYSTRING:
MOV A,#0
LOOP:
MOV DPTR, #MESSAGE
THÍ NGHIỆM 4
Mục tiêu: Nắm được cách thức giao tiếp ADC và chuyển giá trị đọc được sang điện áp.
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 có giá trị 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. (X)
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
ORG 0
MAIN:
CALL READADC
mov a,r1
add a,#48
mov r1,a
mov a,r2
add a,#48
mov r2,a
mov a,r1
call writetext
mov a,#"."
call writetext
mov a,r2
call writetext
mov a,r3
call writetext
mov a,#"V"
call writetext
sjmp main
READADC:
MOV DPTR,#ADCADDR ;Start ADC
MOV A,#0
MOVX @DPTR,A
CALL WAIT_LCD ;EOC
MOVX A,@DPTR ;OE
MOV R0,A
MOV P1,A ;Hi?n th? A lên các LED t?i port 1 d? quan sát
RET
INIT_LCD: ;………
MOV A, #38H
ACALL WRITECOM
MOV A, #0EH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
RET
CLEAR: ;………
MOV A, #01H
ACALL WRITECOM
RET
WRITECOM: ;………
MOV DPTR, #LCDADDR
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
WRITETEXT: ;………
MOV DPTR, #LCDADDR
SETB LCD_E
SETB LCD_RS
WAIT_LCD:
MOV R6,#10
DL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6,DL1
RET
;………
DISPLAYSTRING:
MOV A,#0
LOOP:
MOV DPTR, #MESSAGE
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
SJMP LOOP
EXIT:
RET
THÍ NGHIỆM 5
Mục tiêu: Nắm được cách thức sử dụng Timer mode 1.
Yêu cầu:
Viết chương trình tạo sóng vuông 1 Hz trên chân P1.0 sử dụng Timer 0 ở mode 1.
Kiểm tra:
Câu hỏi:
Để tạo sóng 1 Hz, ta có thể sử dụng timer ở mode 2 được không? Nếu được, trình bày
đoạn chương trình tạo sóng 1 Hz sử dụng timer ở mode 2.
Trong chương trình của sinh viên, khi sử dụng mode 1, sóng vuông 1 Hz có bị sai số
không? Để hạn chế sai số ta phải nạp các giá trị vào timer như thế nào?
ORG 00
MOV TMOD,#00000001B
start:
setb p1.0
mov r0,#10
up:
call delay
djnz r0, up
mov r1,#10
down:
call delay
djnz r1,down
sjmp start
delay:
mov tl0,#low(-50000)
mov th0,#high(-50000)
setb tr0
jnb tf0,$
clr tr0
clr tf0
ret
end
ORG 00
MOV TMOD,#00000010B
mov tl0,#-250
start:
setb p1.0
mov r0,#8
up:
call delay
djnz r0, up
clr p1.0
mov r1,#8
down:
call delay
djnz r1,down
sjmp start
delay:
mov r3,#250
loop:
setb tr0
clr tr0
clr tf0
djnz r3,loop
ret
end
THÍ NGHIỆM 6
Mục tiêu: Nắm được cách thức sử dụng Timer mode 2.
Yêu cầu:
Viết chương trình tạo sóng vuông 1 Hz trên chân P1.0 sử dụng timer 0 ở chế độ 2.
Kiểm tra:
Câu hỏi:
Ở chế độ 2, độ trễ gây ra do các câu lệnh đảo giá trị bit có gây sai số cho dạng sóng ngõ
ra không? Vì sao?
start:
setb p1.0
mov r0,#8
up:
call delay
djnz r0, up
clr p1.0
sjmp start
delay:
mov r3,#250
loop:
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r3,loop
ret
end