You are on page 1of 14

Ngô Dương Anh Kiệt

1913873

LAB 3: GIAO TIẾP LCD VÀ ADC


TN3:
LCD_E BIT P3.4
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 2000H
MAIN:
MOV DPTR, #LCDADDR
ACALL CLEAR
MAIN1:
ACALL INIT_LCD
ACALL READADC
ACALL DISPLAYADC
MOV A,R2
ADD A,#30H
ACALL WRITETEXT
MOV A,R1
ADD A,#30H
ACALL WRITETEXT
MOV A,R0
ADD A,#30H
ACALL WRITETEXT
SJMP MAIN1
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0CH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
MOV A,#80H
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
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
READADC:
MOV DPTR, #4000h
MOVX @DPTR, A
ACALL DELAY_ADC
MOVX A, @DPTR
MOV R0,A
RET
DELAY_ADC:
MOV R4, #100
DJNZ R4, $
RET
DISPLAYADC:
MOV A,R0
MOV B,#10
DIV AB
MOV R0, B
MOV B,#10
DIV AB
MOV R1, B
MOV B,#10
DIV AB
MOV R2, B
RET
END
TN4:
LCD_E BIT P3.4
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 2000H
MAIN:
MOV DPTR, #LCDADDR
ACALL CLEAR
MAIN1:
ACALL INIT_LCD
ACALL DISPLAYSTRING
ACALL READADC
ACALL DISPLAYVOLT
MOV A,R0
ADD A,#30H
ACALL WRITETEXT
MOV A,#2EH
ACALL WRITETEXT
MOV A,R1
ADD A,#30H
ACALL WRITETEXT
MOV A,R2
ADD A,#30H
ACALL WRITETEXT
MOV A,#20H
ACALL WRITETEXT
MOV A,#56h
ACALL WRITETEXT
SJMP MAIN1
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0CH
ACALL WRITECOM
MOV A, #06H
ACALL WRITECOM
MOV A,#80H
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
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 B,#0
MOV R5,#0
LOOP:MOV DPTR,#MESSAGE
MOV A,R5
MOVC A,@A+DPTR
JZ EXIT
ACALL WRITETEXT
INC R5
DJNZ B, LOOP
EXIT:RET
MESSAGE: DB "Voltage: ",0
READADC:
MOV DPTR, #4000h
MOVX @DPTR, A
ACALL DELAY_ADC
MOVX A, @DPTR
MOV R0,A
RET
DELAY_ADC:
MOV R4, #100
DJNZ R4, $
RET
DISPLAYVOLT:
MOV A,R0
MOV B,#51
DIV AB
PUSH ACC
MOV R1,B
MOV R0,#0
LAP:MOV A,R1
MOV B, #100
MUL AB
MOV R2,A
MOV R3,B
MOV A,R0
MOV B,#51
MUL AB
MOV R4,A
MOV R5,B
INC R0
CLR C
MOV A,R2
SUBB A,R4
MOV R6,A
MOV A,R3
SUBB A,R5
MOV R7,A
CJNE R7,#1,$+3
JNC LAP
CJNE R6,#51,$+3
JNC LAP
CLR C
MOV A,R0
SUBB A,#1
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
POP 00H
CJNE R6,#26,$+3
JC SKIP
MOV A,R2
ADD A,#1
MOV R2,A
CJNE R2,#10,SKIP
MOV A,R1
ADD A,#1
MOV R1,A
CJNE R1,#10,SKIP
MOV A,R0
ADD A,#1
MOV R0,A
SKIP:RET
END

LAB 4: LẬP TRÌNH GIAO TIẾP TIMER VÀ SERIAL PORT


TN1:
CÓ SAI SỐ:
ORG 2000H
MOV TMOD, #01H
MAIN:CPL P1.0
MOV R7, #10
LOOP: MOV TH0, #HIGH(-50000)
MOV TL0, #LOW(-50000)
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
DJNZ R7, LOOP
SJMP MAIN
END
GIẢM SAI SỐ:
ORG 2000H
MOV TMOD, #01H
MAIN:CPL P1.0
MOV R7, #10
LOOP: MOV TH0, #HIGH(-46067)
MOV TL0, #LOW(-46067)
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
DJNZ R7, LOOP
SJMP MAIN
END
TN2:
ORG 2000H
MOV TMOD, #02H
MOV TH0, #-244
MOV TL0, #-244
SETB TR0
MAIN:CPL P1.0
MOV R7, #8
LOOP2: MOV R6, #230
LOOP1: JNB TF0, $
CLR TF0
DJNZ R6, LOOP1
DJNZ R7, LOOP2
SJMP MAIN
END
TN3:
ORG 2000H
MOV A,PCON
SETB ACC.7
MOV PCON,A
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
MOV SCON,#40H
MAIN:
ACALL DISPLAY
SJMP MAIN

DISPLAY:
MOV R0,#0
CLR A
CHECK: JB P1.0, $
ACALL DELAY100MS
JNB P1.0, NEXT
SJMP CHECK
NEXT:MOV DPTR,#TABLE
LOOP: MOVC A,@A+DPTR
JZ EXIT
ACALL OUTCHR
INC R0
MOV A,R0
SJMP LOOP
EXIT: RET
DELAY100MS:
MOV R7,#200
LP: MOV R6,#250
DJNZ R6, $
DJNZ R7, LP
RET
OUTCHR: JNB TI,$
CLR TI
MOV SBUF,A
RET
TABLE: DB "Hello World!",0
END
TN4
LCD_E BIT P3.4
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 2000H
ACALL INIT_LCD
MOV A, PCON
SETB ACC.7
MOV PCON, A
MOV TMOD, #20H
MOV TH1, #-3
SETB TR1
MOV SCON, #50H
MAIN:
ACALL INCHAR
CJNE A, #0DH, NEXT1
ACALL XUONGHANG
SJMP MAIN
NEXT1: CJNE A, #1B, NEXT2
ACALL CLEAR
SJMP MAIN
NEXT2: CJNE A, #08H, NEXT3
ACALL XOA
SJMP MAIN
NEXT3: CJNE A, #41H,$+3
JC MAIN
CJNE A, #5BH,$+3
JNC NEXT4
ACALL WRITETEXT
SJMP MAIN
NEXT4: CJNE A, #61H, $+3
JC MAIN
CJNE A, #7BH, $+3
JNC MAIN
ACALL WRITETEXT
SJMP MAIN
INIT_LCD:
MOV A, #38H
ACALL WRITECOM
MOV A, #0CH
ACALL WRITECOM
MOV A, #06H
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
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
CLEAR:
MOV A, #01H
ACALL WRITECOM
RET
XUONGHANG:
MOV A, #0C0H
ACALL WRITECOM
RET
XOA:
MOV A, #10H
ACALL WRITECOM
MOV A, #20H
ACALL WRITETEXT
MOV A, #10H
ACALL WRITECOM
RET
INCHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
END

You might also like