NOPS MACRO
REPT 5
NOP
ENDM
ENDM
T2CON EQU 0C8H
RCAP2L EQU 0CAH
RCAP2H EQU 0CBH
TL2 EQU 0CCH
TH2 EQU 0CDH
TR2 BIT 0CAH
LED_RED BIT P1.5
LED_GREEN BIT P1.6
LCD_BK BIT P1.7
LCD_CS1 BIT P3.4
LCD_CS2 BIT P3.5
LCD_RW BIT P3.6
LCD_A0 BIT P3.7
LCD_PORT EQU P2
STACK EQU 50H
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP TIME0
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
DELAY:
PUSH ACC
MOV A,#00H
DJNZ B,$
DJNZ ACC,$-3
POP ACC
RET
LCD_MI:
CLR LCD_A0
NOPS
SETB LCD_CS1
NOPS
MOV LCD_PORT,A
NOPS
CLR LCD_CS1
NOPS
NOPS
RET
LCD_MD:
SETB LCD_A0
NOPS
SETB LCD_CS1
NOPS
MOV LCD_PORT,A
NOPS
CLR LCD_CS1
NOPS
CLR LCD_A0
NOPS
RET
LCD_SI:
CLR LCD_A0
NOPS
SETB LCD_CS2
NOPS
MOV LCD_PORT,A
NOPS
CLR LCD_CS2
NOPS
NOPS
RET
LCD_SD:
SETB LCD_A0
NOPS
SETB LCD_CS2
NOPS
MOV LCD_PORT,A
NOPS
CLR LCD_CS2
NOPS
CLR LCD_A0
NOPS
RET
DISPLAY_MSG:
MOV A,#0C0H
LCALL LCD_MI
LCALL LCD_SI
MOV A,#00H
LCALL LCD_MI
LCALL LCD_SI
MOV R2,#0B8H
CLDOT1:
MOV A,R2
LCALL LCD_MI
LCALL LCD_SI
MOV A,#00H
LCALL LCD_MI
LCALL LCD_SI
MOV R1,#3DH
CLDOT2:
MOV A,R3
LCALL LCD_MD
LCALL LCD_SD
DJNZ R1,CLDOT2
INC R2
CJNE R2,#0BCH,CLDOT1
RET
;===============================================================================
TIME0:
MOV TH0,#0B1H ;intt0 interrupt per 20ms
MOV TL0,#0E0H
DJNZ R7,TIME0_END
CPL LED_RED
MOV R7,#25
DEC R6
TIME0_END:
RETI
;===============================================================================
START:
CLR EA
MOV PSW,#00H
MOV SP,#STACK+2 ;set stack
LCALL DELAY
MOV TMOD,#21H ;time1 8bit mode, time0 16bit mode
MOV TH0,#0B1H ;intt0 interrupt per 20ms
MOV TL0,#0E0H
MOV TH1,#98H ;time1 every 1/9600S generate a interrupt
MOV TL1,#98H ;
MOV TCON,#55H ;start time0 and time1 and make external
;interrupt0(1) trigger by negative
MOV T2CON,#30H ;time2 for serial baud generate
MOV RCAP2H,#0FFH ;baud=9600bps
MOV RCAP2L,#0D9H
MOV PCON,#00H
MOV SCON,#050H ;serial port 8bit mode
SETB TR2 ;start time2
MOV LCD_PORT,#0FFH
CLR LCD_CS1
CLR LCD_CS2
CLR LCD_RW
SETB LCD_A0
CLR RI
CLR TI
MOV IE,#93H ;open ES,ET0,EX0 interrupt
INITIALIZE:
MOV A,#0A4H
LCALL LCD_MI
LCALL LCD_SI
MOV A,#0A9H
LCALL LCD_MI
LCALL LCD_SI
MOV A,#0A0H
LCALL LCD_MI
LCALL LCD_SI
MOV A,#0AFH
LCALL LCD_MI
LCALL LCD_SI
MOV R6,#10H
CJNE R6,#00H,$
MAIN:
MOV R6,#10H
MOV R3,#55H ;display data
LCALL DISPLAY_MSG
CJNE R6,#00H,$
MOV R6,#10H
MOV A,#00H ;clear screen
MOV R3,A
LCALL DISPLAY_MSG
CJNE R6,#00H,$
SJMP MAIN
LJMP START
END