EEPROMEQU0A2H;0A0H为8563地址BITCNTDATA30H;数据位计数器BYTECNTDATA31H;发送或接收的字节个数SLVADRDATA32H;=0A0H为8563地址SUBADRDATA33H;被控器单元地址RCVDATDATA34H;接收数据缓冲器首址8563首址XMTDATDATA44H;发送数据缓冲器首址SDABITP2.6;数据线SCLBITP2.7;时钟线B0BITP0.5B1BITP0.6B2BITP0.7CLKBITP3.4DINBITP3.5ACKBIT73HORG00HAJMPMAINORG013HLJMPT0SUBORG30HMAIN:MOVIE,#84H;开外部中断1MOVIP,#04H;外部中断1优先MOVTCON,#00H;低电平方式LCALLSTIT;跳转到启动时钟设置和报警中断子程序START1:JNBB0DEBUG0;查询是否有调整时间按钮按下S0:LCALLDSUB0;读出并显示当前时间AJMPSTART1;----------------------------------------------;读子程序R:MOVSLVADR,#EEPROMMOVBYTECNT,55HMOVSUBADR,56HMA0:LCALLRCVDATAJBF0,MA0RET;----------------------------------------------;写子程序W:MOVSLVADR,#EEPROMMOVBYTECNT,57HMOVSUBADR,58HMA1:LCALLSENTBYTEJBF0,MA1RET;----------------------------------------------DSUB0:MOV55H,#02H;读两个时间信息MOV56H,#03H;取读时间的首字节地址LCALLR;调用读子程序MOVR7,34H;将分钟的信息放入R7MOVR6,35H;将小时的信息放入R6LCALLDISPLAY;调用显示时间子程序RET;----------------------------------------------DEBUG0:LCALLDELAY1;调用延时子程序,消抖作用JBB0,START1;判断是否为外界干扰JNBB0,$;判断按键是否弹起DEBUG1:JNBB1MINI;判断调节分钟的按钮是否按下,是则跳到分钟子程序M1:JNBB2HOUR;判断调节小时的按钮是否按下,是则跳到小时子程序JNBB0RETU;判断时间是否调整好,是则跳到返回子程序LCALLDSUB0AJMPDEBUG1RETU:LCALLDELAY1JBB0,M1JNBB0,$AJMPS0MINI:LCALLDELAY1;调用延时子程序,消抖作用JBB1,M1;判断是否为外界干扰JNBB1,$;判断按键是否弹起CJNER7,#59,MINI0;判断分钟是否到59,若没有则跳转到MINI0MOVR7,#00;59后,让分钟归零MIN:MOV44H,R7;将调整后的分钟放入R7MOV57H,#02H;调用写子程序MOV58H,#03HLCALLWRETMINI0:INCR7AJMPMINHOUR:LCALLDELAY1;调用延时子程序,消抖作用JBB2,M1;判断是否为外界干扰JNBB2,$;判断按键是否弹起CJNER6,#23,HOUR0;判断小时是否到23,若没有则跳转到HOUR0MOVR6,#00;23后,让小时归零HOU:MOV44H,R6;调用写子程序MOV57H,#02HMOV58H,#04HLCALLWRETHOUR0:INCR6AJMPHOU;----------------------------------------------;启动时钟;设置报警中断STIT:MOV55H,#02HMOV56H,#00HLCALLRMOVA,34HANLA,#00H;启动时钟MOV44H,AMOVA,35HORLA,#02H;设置报警中断MOV45H,AMOV57H,#02HMOV58H,#00HLCALLWMOV44H,#10H;让8563在每小时的10分钟时产生报警并在/INT端产生一个中断给8051MOV57H,#00HMOV58H,#09HLCALLWRET;----------------------------------------------;清除AF,并判断是否到时间T0SUB:MOV55H,#01HMOV56H,#01HLCALLR;中断配置MOVA,34HANLA,#17H;设置成AF=0,但保持其他位不变MOV44H,AMOV57H,#01H;写一个信息MOV58H,#01H;取控制字节地址LCALLW;调用写子程序MMOV55H,#02H;读两个时间信息MOV56H,#03H;取分钟字节地址LCALLR;调用读子程序MOVA,34H;取分钟信息ANLA,#7FH;屏蔽无效位MOV34H,AMOVA,35H;取小时信息ANLA,#3FH;屏蔽无效位MOV35H,ALCALLT1;调用子程序1,用以判断时间08:00是否到LCALLT2;调用子程序2,用以判断时间08:10是否到LCALLT3;调用子程序3,用以判断时间12:00是否到LCALLT4;调用子程序4,用以判断时间12:10是否到LCALLT5;调用子程序5,用以判断时间14:00是否到LCALLT6;调用子程序6,用以判断时间14:10是否到LCALLT7;调用子程序7,用以判断时间16:00是否到LCALLT8;调用子程序8,用以判断时间16:10是否到LCALLT9;调用子程序9,用以判断时间18:30是否到LCALLT10;调用子程序10,用以判断时间18:40是否到RETI;----------------------------------------------;子程序1,用以判断时间08:00是否到,是则跳转到子程序DISPLAY0;启动六个灯光和启动1K的电机T1:MOVA,34HXRLA,#00HJNZRE1MOVA,35HXRLA,#08HJNZRE1LCALLDISPLAY0RE1:RET;----------------------------------------------;子程序...