资源描述
;;; 无线遥控电动窗帘计数程序
STL0 EQU 251
STH0 EQU 253
RXD BIT P3.0
TXD BIT P3.1
Y00 BIT P3.2
Y01 BIT P3.3
Y02 BIT P3.4
Y03 BIT P3.5
Y04 BIT P3.7
SJ_A EQU 30H
SJ_B EQU 31H
SJ_C EQU 32H
SJ_D EQU 33H
SJ_E EQU 34H
BCDA EQU 35H
BCDB EQU 36H
SMZZ EQU 37H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
JMP CSH
ORG 000BH
JMP DISP
ORG 0023H
LJMP CJ_RX ; 跳至从机数据通讯串口中断子程序
CSH: ;;; 计时中断初始化程序
MOV SP, #50H
MOV TMOD, #21H
MOV TL0, #STL0
MOV TH0, #STH0
MOV TH1, #0D6H ; 波特率=9600 FDH 1200 D6H
MOV TL1, #0D6H
MOV SCON, #50H
MOV PCON, #00H ; 波特率增倍, SMOD = 1
MOV TCON, #00H
MOV BCDA, #0
MOV BCDB, #0
MOV IE, #12H
LCALL KJQL ; 调用开机清零子程序
SETB EA ; 开中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:
LCALL DELAY
JMP START
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: ;;; 显示子程序
CLR TR0
MOV TL0, #STL0
MOV TH0, #STH0
SETB RS0
CLR RS1
PUSH ACC
PUSH PSW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETB Y00
SETB Y01
SETB Y02
SETB Y03
SETB Y04
LCALL SM_JMP ; 调用扫描子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP60: POP PSW
POP ACC
CLR RS0
CLR RS1
SETB TR0
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM_JMP: ;;; 扫描子程序
MOV A, SMZZ ; 键盘指针
RL A
MOV DPTR, #SMTBL
JMP @A+DPTR
SMTBL: AJMP SM00
AJMP SM01
AJMP SM02
AJMP SM03
AJMP SM04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM00: MOV A, SJ_A
ORL A, #0F0H
SWAP A
MOV P1, A
CLR Y00
MOV SMZZ, #1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM01: MOV A, SJ_B
ORL A, #0F0H
SWAP A
MOV P1, A
CLR Y01
MOV SMZZ, #2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM02: MOV A, SJ_C
ORL A, #0F0H
SWAP A
MOV P1, A
CLR Y02
MOV SMZZ, #3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM03: MOV A, SJ_D
ORL A, #0F0H
SWAP A
MOV P1, A
CLR Y03
MOV SMZZ, #4
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SM04: MOV A, SJ_E
ORL A, #0F0H
SWAP A
MOV P1, A
CLR Y04
MOV SMZZ, #0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CJ_RX: ;;; 从机数据通讯子程序
CLR RI
CLR ES
SETB RS0
SETB RS1
PUSH ACC
PUSH PSW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR C
MOV A, BCDA
ADD A, #1
MOV BCDA, A
MOV A, BCDB
ADDC A, #0
MOV BCDB, A
LCALL BCD_S
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
POP PSW
POP ACC
CLR RS0
CLR RS1
SETB ES
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KJQL: ;;; 开机清零子程序
MOV P1, #0FFH
MOV P3, #0FFH
MOV SMZZ, #0
MOV BCDA, #0
MOV BCDB, #0
SETB TR0
SETB TR1
CLR C
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY: MOV R7, #5
D01: MOV R6, #200
D02: MOV R5, #248
DJNZ R5, $
DJNZ R6, D02
DJNZ R7, D01
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCD_S: ;;; 双字节转换子程序
MOV SJ_A, #00H
MOV SJ_B, #00H
MOV SJ_C, #00H
MOV SJ_D, #00H
MOV SJ_E, #00H
MOV A, BCDA
MOV B, #100
DIV AB
MOV SJ_C, A
MOV A,#10
XCH A, B
DIV AB
MOV SJ_B, A
MOV SJ_A, B
;;;
MOV A, BCDB
ANL A, #0FH
MOV B, #2
MUL AB
ADD A, SJ_C
MOV SJ_C, A
MOV A, BCDB
ANL A, #0FH
MOV B, #5
MUL AB
ADD A, SJ_B
MOV SJ_B, A
MOV A, BCDB
ANL A, #0FH
MOV B, #6
MUL AB
ADD A, SJ_A
MOV SJ_A, A
;;;
MOV A, BCDB
ANL A, #0F0H
SWAP A
MOV B, #4
MUL AB
MOV SJ_D, A
MOV A, BCDB
ANL A, #0F0H
SWAP A
MOV B, #9
MUL AB
ADD A, SJ_B
MOV SJ_B, A
MOV A, BCDB
ANL A, #0F0H
SWAP A
MOV B, #6
MUL AB
ADD A, SJ_A
MOV SJ_A, A
;;;
MOV A, SJ_A
MOV B, #10
DIV AB
ADD A, SJ_B
MOV SJ_B, A
MOV SJ_A, B
MOV A, SJ_B
MOV B, #10
DIV AB
ADD A, SJ_C
MOV SJ_C, A
MOV SJ_B, B
MOV A, SJ_C
MOV B, #10
DIV AB
ADD A, SJ_D
MOV SJ_D, A
MOV SJ_C, B
MOV A, SJ_D
MOV B, #10
DIV AB
ADD A, SJ_E
MOV SJ_E, A
MOV SJ_D, B
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
展开阅读全文