智能实用可编程光控器源程序
智能实用可编程光控器源程序
SCK BIT P1.5 ;时钟控制
SI BIT P1.4 ;数据输入
SO BIT P1.6 ;数据输出
CS BIT P1.7 ;片选
RcvD DATA 6FH ;接收数据缓冲器
XmtD DATA 6EH ;发送数据缓冲器
ORG 0000H
AJMP INIT_0
ORG 000BH
AJMP T0ZD
ORG 001BH
AJMP T1ZD
ORG 0050H
INIT_0: CLR 59H
MOV 55H,#35
MOV 56H,#35
MOV P1,#0C3H
MOV P3,#0FFH
MOV TCON,#10H
MOV TMOD,#11H
MOV TL0,#0AFH
MOV TH0,#3CH
MOV IE,#8AH
ACALL WD_SET ;看门狗定时时间设置
LOOP0: LCALL WD_RST ;喂狗
MOV 50H,#85H
LOOP1: MOV 51H,#35H
LOOP2: DJNZ 51H, LOOP2
DJNZ 50H, LOOP1
JNB 59H, LOOP0 ;光控开灯标志
;若光控启动,则进入延时处理
MOV A,P3 ;读取数字拨盘开关编程设定值
CPL A
ANL A,#0FH ;处理读取数字拨盘开关的设定值
JZ LOOP0 ;编程设定值是否为"0",若不为"0"
;则作关灯延时处理
CJNE A,48H, LOOP0 ;取时钟计时,与编程设定值比较是否相等
CLR P1.3 ;若相等,清"0"P1.3,关掉相应的路灯
AJMP LOOP0
T0ZD: PUSH Acc ;时钟程序
MOV TL0,#0AFH
MOV TH0,#3CH
INC 45H
MOV A,45H
CJNE A,#0AH, FW0
INC 46H ;秒计数
MOV 45H,#00H
JNB P3.6, SZ1 ;单片机内部比较器输出的判断
MOV 56H,#35 ;抗干扰延时设置处理
DJNZ 55H, SZ2
CLR 59H ;关灯处理
CLR P1.2
CLR P1.3
AJMP SZ2
SZ1: MOV 55H,#35 ;抗干扰延时设置处理
DJNZ 56H, SZ2
JB 59H, SZ2
SETB 59H ;开灯处理
SETB P1.2
SETB P1.3
MOV 45H,#00H
MOV 46H,#00H
MOV 47H,#00H
MOV 48H,#00H
SZ2: MOV A,46H
CJNE A,#3CH, FW0
INC 47H ;分计数
MOV 46H,#00H
MOV A,47H
CJNE A,#3CH, FW0
INC 48H ;时计数
MOV 47H,#00H
MOV A,48H
CJNE A,#02H FW0
FW0: POP ACC
RETI
RDX5045: NOP ;看门狗程序
WD_RST: CLR CS
SETB CS
RET
WD_SET: MOV R4,#10H
LCALL WR_SR
RET
RD_SR: MOV A,#05H
CLR CS
LCALL WR0
LCALL RD0
SETB CS
RET
WR0: MOV R4,#08H
WR1: RLC A
MOV SI,C
CLR SCK
SETB SCK
DJNZ R4, WR1
RET
RD0: MOV R4,#08H
RD1: SETB SCK
CLR SCK
MOV C,SO
RLC A
DJNZ R4, RD1
RET
WR_SR: LCALL RD_SR
CLR F0
JNB 0E0H, WR_SR1
SETB F0
RET
WR_SR1: CLR CS
MOV A,#06H
LCALL WR0
SETB CS
CLR CS
MOV A,#01H
LCALL WR0
MOV A,#10H ;;;;
LCALL WR0
CLR CS
SETB CS
RET
RD_B: LCALL RD_SR
JB 0E0H, RD_B
CLR CS
MOV A,#03H
LCALL WR0
MOV A,XmtD
LCALL WR0
LCALL RD0
MOV RcvD,A
SETB CS
RET
WR_B: LCALL RD_SR
JB 0E0H, WR_B
CLR CS
MOV A,#06H
LCALL WR0
SETB CS
CLR CS
MOV A,#02H
LCALL WR0
MOV A,XmtD
LCALL WR0
MOV A,RcvD
LCALL WR0
CLR CS
SETB CS
RET
END