📄 vdr2(0823).asm
字号:
SWITCHTIME EQU 4BH
ADRECDATA EQU 70H
ADSHOWDATA EQU 60H
SWITCHDATA EQU 4CH
NEWDATA EQU 4DH
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME0
ORG 0023H
LJMP RECEIVE
ORG 0100H
;************************************************************************************
;*************************************6***********************************************
MAIN:
MOV P0,#0FFH
LCALL DOG
LCALL CHECK
LCALL INITIAL
MOV R6,#00H
MOV SWITCHDATA,#00H ;判断接受到的数据是否正确,00H正确,FFH,错误
MOV SWITCHTIME,#00H ;判断时间是否超过4秒而没有接受到数据,50H
MOV NEWDATA,#00H ;判断是否已经接受到数据 00H,没有新数据
MA0: NOP
LCALL ALARM
LCALL SHOW
LJMP MA0
RET
;*************************************************************************************
;*************************************************************************************
CHECK: MOV R7,#03H
MOV A,#55H ;1010 1010
NOP
UNITLAMP: MOV R5,#18H
MOVEMENT: MOV C,ACC.7
RL A
MOV P1.0,C ;数据位
CLR P1.1
SETB P1.1 ;一次脉冲
DJNZ R5,MOVEMENT
LCALL DELAY
MOV R5,#18H
SETB P1.0 ;数据位
MMENT: CLR P1.1
SETB P1.1 ;一次脉冲
DJNZ R5,MMENT
LCALL DELAY
DJNZ R7,UNITLAMP
MOV R7,#03H
MOV A,#0AAH ;0101 0101
NOP
ULAMP: MOV R5,#18H
MOVERED: MOV C,ACC.7
RL A
MOV P1.0,C ;数据位
CLR P1.1
SETB P1.1 ;一次脉冲
DJNZ R5,MOVERED
MOV P0,#00H
MOV P2,#0FFH
LCALL DELAY
MOV R5,#18H
SETB P1.0 ;数据位
MMENTRED: CLR P1.1
SETB P1.1 ;一次脉冲
DJNZ R5,MMENTRED
MOV P0,#0FFH
MOV P2,#0FFH
LCALL DELAY
DJNZ R7,ULAMP
RET
;**************************************************************************************
;***************************************************************************************
INITIAL:
LCALL DOG
MOV TH0,#03CH ;时间中断每次0。05秒,每4秒钟没收到数据就显示小数点循环
MOV TL0,#0AFH
MOV TMOD,#21H ;设置波特率9600B/S
MOV SCON,#50H
MOV PCON,#00H
MOV TH1,#0FDH
MOV TL1,#0FDH
CLR ES
SETB ET0
SETB ES ;开放串口中断
SETB EA ;开放中断
SETB TR1 ;打开定时器T1
SETB TR0
NOP
RET
;****************************************************************************************
;***************************************************************************************
SHOW: NOP
LCALL SHOWLED
LCALL SHOWLAMP
RET
;****************************************************************************************
;****************************************************************************************
SHOWLED:
MOV P2,#00H
MOV A,64H
CLR C
ANL A,#0FH
MOV DPTR,#TABNUM
MOVC A,@A+DPTR
CPL A
MOV P0,A
SETB P2.4
CLR P2.4
MOV A,65H
CLR C
ANL A,#0FH
MOV DPTR,#TABNUM
MOVC A,@A+DPTR
CPL A
MOV P0,A
SETB P2.3
CLR P2.3
MOV A,66H
ANL A,#0FH
MOV DPTR,#TABNUM
MOVC A,@A+DPTR
CPL A
MOV P0,A
SETB P2.2
CLR P2.2
MOV A,67H
ANL A,#0FH
MOV DPTR,#TABNUM
MOVC A,@A+DPTR
CPL A
MOV P0,A
SETB P2.1
CLR P2.1
MOV A,68H
ANL A,#0FH
MOV DPTR,#TABNUM
MOVC A,@A+DPTR
CPL A
MOV P0,A
SETB P2.0
CLR P2.0
LCALL DOG
RET
;********************************************************************************************
;****************************************************************************************
SHOWLAMP:
MOV R4,#08H
MOV A,6BH
CIRC1:NOP
MOV C,ACC.7
MOV P1.0,C
CLR P1.1
SETB P1.1
RL A
DJNZ R4,CIRC1
MOV R4,#08H
MOV A,6AH
CIRC2:NOP
MOV C,ACC.7
MOV P1.0,C
CLR P1.1
SETB P1.1
RL A
DJNZ R4,CIRC2
MOV R4,#08H
MOV A,69H
CIRC3:NOP
MOV C,ACC.7
MOV P1.0,C
CLR P1.1
SETB P1.1
RL A
DJNZ R4,CIRC3
LCALL DELAY
LCALL DOG
RET
;**************************************************************************************
;*************************************************************************************
ALARM:
NOP
MOV A,NEWDATA
CJNE A,#00H,CHTIME
LCALL SHOWPOINT
LJMP ALARM
CHTIME: MOV A,SWITCHTIME
CLR C
SUBB A,#050H
JC NOTALARM
LCALL SHOWPOINT ;显示小数点循环
LJMP ALARM
NOTALARM: LCALL DOG
NOP
RET
;*****************************************************************************************
;***************************************************************************************
SHOWPOINT: NOP
MOV P0,#0FFH ;CLEAR LED
MOV P2,#0FFH
MOV P2,#00H
MOV R4,#18H
BLACK: NOP
SETB P1.0
CLR P1.1
SETB P1.1
DJNZ R4,BLACK
MOV P2,#00H
MOV P0,#7FH
CLR P1.0
CLR P1.1
SETB P1.1
SETB P1.0
CLR P1.1
SETB P1.1
SETB P2.0
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.0
MOV P0,#7FH
SETB P2.1
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.1
MOV P0,#7FH
SETB P2.2
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.2
MOV P0,#7FH
SETB P2.3
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.3
MOV P0,#7FH
SETB P2.4
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
LCALL DELAYSHORT
MOV P0,#0FFH
CLR P2.4
MOV P0,#7FH
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#7FH
SETB P2.0
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.0
MOV P0,#7FH
SETB P2.1
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.1
MOV P0,#7FH
SETB P2.2
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.2
MOV P0,#7FH
SETB P2.3
LCALL DELAYSHORT
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
MOV P0,#0FFH
CLR P2.3
MOV P0,#7FH
SETB P2.4
LCALL DELAYSHORT
NOP
MOV P0,#0FFH
CLR P2.4
CLR P1.1
SETB P1.1
CLR P1.1
SETB P1.1
LCALL DELAYSHORT
LCALL DOG
RET
;*****************************************************************************************
;******************************************************************************************
TIME0: NOP
PUSH A
MOV TH0,#03CH
MOV TL0,#0AFH
INC SWITCHTIME ;每次0。05秒,4秒报警,即SWITCHTIME大于80
MOV A,SWITCHTIME
CJNE A,#0FFH,RE1
MOV A,#051H
MOV SWITCHTIME,A
RE1: POP A
RETI
;*****************************************************************************************
;**********LANC RECEIVE INI SERVE PROGRAM*************************************************
RECEIVE: NOP
PUSH PSW
PUSH A
RETN: JNB RI,RETN
CLR RI
MOV A, SBUF
RECE1: CJNE A,#24H,RECE2
MOV R6,#00H
MOV SWITCHDATA,#00H
MOV R1,#ADRECDATA ;FIRST CHAR $?
MOV @R1,A
LJMP RETURN
RECE2: CJNE R6,#01H,RECE3
CJNE A,#4CH,RETN1
MOV @R1,#4CH ;SECORD CHAR L?
LJMP RETURN
RECE3: CJNE R6,#02H,RECE4
CJNE A,#45H,RETN1
MOV @R1,#45H ;THRID CHAR E?
LJMP RETURN
RECE4: CJNE R6,#03H,RECE13
CJNE A,#44H,RETN1
MOV @R1,#44H ;FOUR CHAR D?
LJMP RETURN
RECE13: CJNE R6,#0CH,RECE14
CJNE A,#0DH,RETN1
MOV @R1,#0DH ;13 CHAR <CR> ?
LJMP RETURN
RECE14: CJNE R6,#0DH,OTHER
CJNE A,#0AH,RETN1
MOV @R1,#0AH ; CHAR <LF>?
LCALL SAVEDATA ;如果接受正常,将数据存入显示RAM,否则不管
LJMP RETURN
OTHER: MOV @R1,A
LJMP RETURN
RETN1: MOV SWITCHDATA,#0FFH
RETURN: NOP
INC R6
INC R1
CJNE R6,#0EH,RELOOP
MOV R6,#00H
MOV R1,#ADRECDATA
RELOOP:
POP A
POP PSW
RETI
;****************************************************************************************
;****************************************************************************************
SAVEDATA:
MOV R0,SWITCHDATA
CJNE R0,#00H,NOTSAVE
MOV 60H,70H
MOV 61H,71H
MOV 62H,72H
MOV 63H,73H
MOV 64H,74H
MOV 65H,75H
MOV 66H,76H
MOV 67H,77H
MOV 68H,78H
MOV 69H,79H
MOV 6AH,7AH
MOV 6BH,7BH
MOV 6CH,7CH
MOV 6DH,7DH ;接受到正确数据SWITCHTIME归0
MOV SWITCHTIME,#00H ;没有收到数据和收到无效的数据看作一种情况。
MOV NEWDATA,#0FFH ;>于4秒均报警
NOTSAVE:NOP
MOV SWITCHDATA,#00H
RET
;*****************************************************************************************
;*****************************************************************************************
DELAYSHORT:
NOP
NOP
MOV R4,#01H
DELY0: MOV R3,#0FFH
DELY1: MOV R2,#0FFH
DELY2: NOP
DJNZ R2,DELY2
DJNZ R3,DELY1
LCALL DOG
DJNZ R4,DELY0
RET
;****************************************************************************************
;*****************************************************************************************
DELAY:
NOP
NOP
MOV R4,#03H
DEL0: MOV R3,#0FFH
DEL1: MOV R2,#0FFH
DEL2: NOP
DJNZ R2,DEL2
DJNZ R3,DEL1
LCALL DOG
DJNZ R4,DEL0
RET
;***********WATCHDOG****************
DOG: CPL P1.7
NOP
CPL P1.7
RET
TABNUM: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -