当前位置: 首页 > 技术资料 > 智能实用的可编程光控器源程序设计

智能实用的可编程光控器源程序设计

QooIC.com 新闻出处:电子市场 | 发布时间:2011/5/19 14:32:05

  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