Thí Nghiệm 1: Bài Tn3
Thí Nghiệm 1: Bài Tn3
THÍ NGHIỆM 1
- Chạy chương trình mẫu LCD.A51, trên màn hình LCD hiển thị " HELLO WORLD! "
- Sửa chương trình hiển thị tên sinh viên lên hàng đầu
ORG 2000H
MAIN:
ACALL CLEAR
ACALL INIT_LCD
ACALL DISPLAYSTRING
SJMP $
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALL WAIT_LCD
RET
DISPLAYSTRING:
MOV A,#0
LOOP:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
DJNZ B, LOOP
EXIT:
RET
WAIT_LCD:
MOV R6,#10
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
MESSAGE:
DB "NGUYENVANNHATDUY",0
END
THÍ NGHIỆM 2:
2.1
GOTOXY:
MOV A,R0
CJNE A,#01H,HANG2
MOV A,R1
ADD A,#80H
LCALL WRITECOM
SJMP KT
HANG2:
MOV A,#R1
ADD A,#0C0H
CALL WRITECOM
KT:
RET
2.2
ORG 2001H
MAIN:
MOV @R0,30H
ACALL CLEAR
ACALL INIT_LCD
MOV R0,#2D
MOV R1,#5D
ACALL GOTOXY
ACALL DISPLAYSTRING2
MOV R0,#1D
MOV R1,#4D
ACALL GOTOXY
ACALL DISPLAYSTRING1
SJMP $
GOTOXY:
MOV A,R0
CJNE A,#01H,HANG2
MOV A,R1
ADD A,#80H
LCALL WRITECOM
SJMP KT
HANG2:
MOV A,#R1
ADD A,#0C0H
CALL WRITECOM
KT:
RET
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
DISPLAYSTRING1:
MOV A,#0
LOOP:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
DJNZ B, LOOP
EXIT:
RET
DISPLAYSTRING2:
MOV A,#0
LOOP2:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
MOV A,R0
INC A
DJNZ B, LOOP2
EXIT:
RET
WAIT_LCD:
MOV R6,#250
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
MESSAGE1:
DB "HELLO WORLD!",0
MESSAGE1:
DB "HELLO WORLD!",0
END
THÍ NGHIỆM 3:
READADC:
MOV DPTR,#4000H
MOVX @DPTR,A
LCALL WAIT
MOVX A,@DPTR
MOV P1,A
RET
WAIT:
MOV TMOD,#01H
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
YUUUUUU
ORG 2000H
MAIN:
MOV R2,#8H
MOV @R0,30H
ACALLCLEAR
ACALLINIT_LCD
LCALL READADC
LOOP:
ANL A,#01H
ADD A,#30H
LCALL WRITETEXT
MOV A,R1
RR A
MOV R1,A
DJNZ R2,LOOP
ACALL CLEAR
SJMP 2000H
READADC:
MOV DPTR,#4000H
MOVX @DPTR,A
LCALL WAIT
MOVX A,@DPTR
MOV P1,A
RET
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WAIT_LCD:
MOV R6,#250
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
MESSAGE:
DB "HELLO WORLD!",0
END
THÍ NGHIỆM 4
CALADC:
MOV B,#51H
DIV AB
MOV R0,A
MOV A,B
MOV B,#2D
MUL AB
MOV R1,A
RET
ORG 2000H
MAIN:
MOV @R0,30H
ACALLCLEAR
ACALLINIT_LCD
LCALL CALADC
MOV A,R0
ADD A,#30
LCALL WRITETEXT
MOV A,#02EH
LCALL WRITETEXT
MOV A,R1
MOV B,#10D
DIV AB
ADD A,#30H
LCALL WRITETEXT
MOV A,B
ADD A,#30H
LCALL WRITETEXT
MOV A,#56H
LCALL WRITETEXT
SJMP MAIN
READADC:
MOV DPTR,#4000H
MOVX @DPTR,A
LCALL WAIT
MOVX A,@DPTR
MOV P1,A
RET
DELAY100US:
MOV TMOD,#01H
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
CALADC:
MOV B,#51H
DIV AB
MOV R0,A
MOV A,B
MOV B,#2D
MUL AB
MOV R1,A
RET
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
DISPLAYSTRING:
MOV B,#8
MOV A,#0
LOOP:
MOV R0,A
MOVC A,@A+DPTR
JZ EXIT
ACALLWRITETEXT
MOV A,R0
INC A
DJNZ B, LOOP
EXIT:
RET
WAIT_LCD:
MOV R6,#250
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
MESSAGE:
DB "Voltage: ",0
END
THÍ NGHIỆM 1:
ORG 2000H
MOV TMOD,#01H
MAIN:
CPL P1.0
LCALL DELAY500US
SJMP MAIN
DELAY500US:
MOV TH0,#HIGH(-461)
MOV TL0,#LOW(-461)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
THÍ NGHIỆM 2:
ORG 2000H
MOV TMOD,#02H
MOV TH0,#-250
SETB TR0
MAIN:
MOV R7,#20
L1:
MOV R6,#100
L2:
JNB TF0,$
CLR TF0
DJNZ R6,L2
DJNZ R7,L1
CPL P1.0
SJMP MAIN
END
THÍ NGHIỆM 3:
CODE:
ORG 2000H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV PCON,#80H
MOV SCON,#42H
SETB TR1
MOV R1,#00H
MOV DPTR,#TABLE
LOOP:
JB P1.0,LOOP
LCALL XULY
SJMP LOOP
XULY:
MOV A,R1
MOVC A,@A+DPTR
CJNE A,#00H,TT
MOV R1,#00H
SJMP KT
TT:
INC R1
SJMP PHAT
KT: RET
PHAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
TABLE: DB "HELLO,WORLD",0
END
THÍ NGHIỆM 4:
ORG 2000H
MAIN:
MOV @R0,30H
MOV DPTR,#LCDADDR
LCALL CLEAR
LCALL INIT_LCD
MOV TMOD,#20H
MOV TH1,#0FDH
MOV SCON,#52H
SETB TR1
LAP:
LCALL THU
LCALL WRITETEXT
LCALL PHAT
SJMP LAP
THU:
JNB RI,$
CLR RI
MOV A,SBUF
RET
PHAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WAIT_LCD:
MOV R6,#250
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
END
THÍ NGHIỆM 5:
THÍ NGHIỆM 4:
ORG 2000H
MAIN:
MOV @R0,30H
MOV DPTR,#LCDADDR
LCALL CLEAR
LCALL INIT_LCD
MOV TMOD,#20H
MOV TH1,#0FDH
MOV SCON,#52H
MOV TH1,#HIGH(-12)
SETB TR1
CLR P1.1
LAP:
LCALL THU
CJNE A,#0DH,KT1
JB P1.1,NHAYLEN
MOV A,#0C0H
LCALL WRITETEXT
SETB P1.1
SJMP KT1
NHAYLEN:
LCALL CLEAR
CLR P1.1
KT1:
CJNE A,#1BH,KT2
MOV A,#01H
LCALL WRITECOM
KT2:
MOV A,#10H
LCALL WRITECOM
MOV A,20H
LCALL WRITETEXT
MOV A,#10H
LCALL WRITECOM
KTCHU:
CJNE A,#64D,TEST1
TEST1: JC STOP
CJNE A,#91D,TEST2
TEST2: JC RUN
SJMP TEST3
TEST3:
CJNE A,#96D,TEST4
TEST4: JC STOP
CJNE A,#123D,TEST5
RUN:
LCALL WRITETEXT
LCALL PHAT
STOP:
SJMP LAP
THU:
JNB RI,$
CLR RI
MOV A,SBUF
RET
PHAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
INIT_LCD:
MOV A, #38H
ACALLWRITECOM
MOV A, #0EH
ACALLWRITECOM
MOV A, #06H
ACALLWRITECOM
RET
CLEAR:
MOV A, #01H
ACALLWRITECOM
RET
WRITECOM:
SETB LCD_E
CLR LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WRITETEXT:
SETB LCD_E
SETB LCD_RS
MOVX @DPTR, A
CLR LCD_E
ACALLWAIT_LCD
RET
WAIT_LCD:
MOV R6,#250
DL1:
DJNZ R7, $
DJNZ R6,DL1
RET
END
THÍ NGHIỆM 1:
ORG 2000H
LJMP MAIN
ORG 2023H
LJMP NGATPORT
ORG 2030H
MAIN:
MOV TMOD,#20H
MOV TH1,#0F4H
SETB TR1
MOV SCON,#52H
MOV IE,#90H
LAP:
JNB P1.0,MOLED
SETB P1.1
SJMP LAP
MOLED:
CLR P1.1
SJMP LAP
NGATPORT:
MOV A.SBUF
JB RI,LAP
CLR TI
MOV SBUF,A
RETI
END
THÍ NGHIỆM 2:
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP NGATTIMER0
ORG 2030H
MAIN:
MOV R1,#20H
MOV R0,#00H
MOV TMOD,#01H
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
MOV IE,#82H
SETB TR0
SJMP $
NGATTIMER0:
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
SWAP A
ADD A,@R1
MOV DPTR,#0000H
MOVX @DPTR,A
INC R1
INC R0
CJNE R1,#24H,KT1
MOV R1,#20H
KT2:
CLR TR0
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
RETI
TABLE:
DB 0111B,1011B,1101B,1110B
END
THÍ NGHIỆM 3:
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP NGATTIMER0
ORG 2030H
MAIN:
MOV 20H,#0D
MOV 21H,#0D
MOV 22H,#0D
MOV 23H,#0D
MOV R1,#20H
MOV R0,#00H
MOV TMOD,#01H
CLR TR0
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
MOV IE,#82H
SETB TR0
LOOP:
JNB P1.0,XULY
SJMP LOOP
XULY:
MOV R2,23H
CJNE R2,#0AH,TEST1
INC 22H
MOV 23H,#00H
TEST1:
MOV R2,22H
CJNE R2,#0AH,TEST2
INC 21H
MOV 22H,#00H
TEST2:
MOV R2,21H
CJNE R2,#0AH,TEST3
INC 20H
MOV 21H,#00H
TEST3:
MOV R2,20H
CJNE R2,#0AH,TEST4
SJMP MAIN
TEST 4:
INC 23H
TT:
JB P1.0,LOOP
SJMP TT
NGATTIMER0:
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
SWAP A
ADD A,@R1
MOV DPTR,#0000H
MOVX @DPTR,A
INC R0
INC R1
CJNE R1,#24H,KT1
MOV R1,#20H
KT1:
CJNE R0,#4D,KT2
MOV R0,#00H
KT2:
CLR TR0
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
RETI
TABLE:
DB 0111B,1011B,1101B,1110B
END
THÍ NGHIỆM 5:
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP NGAT_TO
ORG 2030H
MAIN:
MOV R0,#20H
MOV R1,#0
MOV IE,#82H
MOV TMOD,#11H
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
JB P1.1,$
JNB P1.1,$
SETB TR0
LOOP:
JNB P1.0,RESETT
SJMP LOOP
RESETT:
JNB P1.0,$
MOV 20H,#0
MOV 21H,#0
MOV 22H,#0
MOV 23H,#0
SJMP LOOP
DUNGLAI:
MOV IE,#0
CLR TR0
SJMP $
NGAT_TO:
CLR TR0
MOV A,R1
INC R0
MOV R0,#20H
TTUC:
//NEU P1.2 DA DUOC NHAN THI BO DEM NGUNG. KHI DO NEU NHAN P1.1
THI BO DEM CHAY TIEP.
//NEU P1.2 CHUA DUOC NHAN MA NHAN P1.1 THI SE BI BO QUA 1 VONG
DEM
MOV C,P1.2
INC 23H
MOV A,23H
CJNE A,#10,THOAT
MOV 23H,#0
INC 22H
MOV A,22H
CJNE A,#10,THOAT
MOV 22H,#0
INC 21H
MOV A,21H
CJNE A,#10,THOAT
MOV 21H,#0
INC 20H
MOV A,20H
CJNE A,#10,THOAT
MOV 20H,#0
SJMP THOAT
NGUNG:
SJMP THOAT
CHAYTIEP:
THOAT:
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
RETI
DELAY_20MS:
MOV TH1,#HIGH(-20000)
MOV TL1,#LOW(-20000)
SETB TR1
JB TF1,$
CLR TR1
CLR TF1
RET
TABLE:
DB 70H,0B0H,0D0H,0E0H
END
BÀI TN 2
THÍ NGHIỆM 1
CODE:
ORG 2000H
MOV DPTR,#0000H
MOV R0,#9
LCALL DISPLAYLED0
SJMP EXIT
DISPLAYLED0:
MOV A,#0E0H
ADD A,R0
MOVX @DPTR,A
RET
EXIT:
NOP
END
THÍ NGHIỆM 2
CODE:
ORG 2000H
MOV DPTR,#0000H
MAIN1:
MOV R0,#0
MAIN:
LCALL DISPLAYLED0
LCALL DELAY
INC R0
CJNE R0,#10,MAIN
SJMP MAIN1
DISPLAYLED0:
MOV A,#0E0H
ADD A,R0
MOVX @DPTR,A
RET
DELAY:
MOV R5,#25
L1:
MOV R6,#100
L2:
MOV R7,#200
DJNZ R7,$
DJNZ R6,L2
DJNZ R5,L1
RET
END
THÍ NGHIỆM 3
CODE:
ORG 2000H
MOV R1,#1
MOV R0,#5
LCALL LED
LCALL DISPLAYLED0
SJMP $
LED:
MOV DPTR,#TABLE
MOV A,R1
MOVC A,@A+DPTR
RET
DISPLAYLED0:
MOV DPTR,#0000H
ADD A,R0
MOVX @DPTR,A
RET
TABLE:
DB 0E0H,0D0H,0B0H,070H
END
THÍ NGHIỆM 4
CODE:
ORG 2000H
MOV R1,#0
MAIN1:
MOV R0,#1
MAIN:
LCALL LED
LCALL DISPLAYLED0
LCALL DELAY
INC R0
INC R1
CJNE R1,#4,NHAY
MOV R1,#0
NHAY:
CJNE R0,#5,MAIN
SJMP MAIN1
LED:
MOV DPTR,#TABLE
MOV A,R1
MOVC A,@A+DPTR
RET
DISPLAYLED0:
MOV DPTR,#0000H
ADD A,R0
MOVX @DPTR,A
RET
DELAY:
MOV R5,#25
L1:
MOV R6,#100
L2:
MOV R7,#200
DJNZ R7,$
DJNZ R6,L2
DJNZ R5,L1
RET
TABLE:
DB 0E0H,0D0H,0B0H,070H
END
- Giảm thời gian trễ xuống còn 100ms. Quá trình thực hiện nhanh hơn
- Thời gian trễ sao cho không còn thấy Led nhấp nháy là 1ms
CODE:
ORG 2000H
MOV R1,#0
MAIN1:
MOV R0,#1
MAIN:
LCALL LED
LCALL DISPLAYLED0
LCALL DELAY
INC R0
INC R1
CJNE R1,#4,NHAY
MOV R1,#0
NHAY:
CJNE R0,#5,MAIN
SJMP MAIN1
LED:
MOV DPTR,#TABLE
MOV A,R1
MOVC A,@A+DPTR
RET
DISPLAYLED0:
MOV DPTR,#0000H
ADD A,R0
MOVX @DPTR,A
RET
DELAY:
MOV R5,#2
DJNZ R6,$
DJNZ R5,L1
RET
TABLE:
DB 0E0H,0D0H,0B0H,070H
END
- Giảm thời gian trễ xuống bằng 0 thì 4 Led hiển thị 4-3-2-1 cùng lúc