资源描述:
《智能时控开关设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、;系统晶振是11.0592MHzZ8279EQU0FF82H;8279状态/命令口地址D8279EQU0FF80H;8279数据口地址LEDMODEQU00H;左边输入八位字符显示;外部译码键扫描方式,双键互锁LEDFEQEQU2FH;扫描速率LEDCLSEQU0C1H;清除显示RAMLEDWR0EQU80H;设定的将要写入的显示RAM地址READKBEQU40H;读FIFORAM地址0的命令字ORG0000HAJMPSTARTORG001BH;INTT1入口地址AJMPINT_T1ORG0040
2、HSTART:MOVSP,#60HLCALLINIT8279;初始化8279MOVR3,#0H;时MOVR2,#0H;分MOVR7,#0H;秒MOVR0,#0H;10毫秒MOVR6,#0FFH;标志MOVTMOD,#10HMOVTL1,#00H;10毫秒的时间常数MOVTH1,#0DCHLCALLDIS_mSSETBET1SETBEA;允许中断zSETB4BH;三个定时端子禁止SETB4CHSETB4DHMOV09H,#23HMOV0CH,#23HMOV0FH,#23HMOVR1,#09H;定时时
3、刻的存储起始地址WAIT:LCALLGETKEY;读键盘CJNEA,#0FFH,CONT;判断是否有键输入MOVA,BCJNEA,#3CH,KEY_A;输入键是'C',转CLEAR_TLCALLCLEAR_TKEY_A:CJNEA,#3AH,KEY_D;输入键是'A',转START_TLCALLSTART_TKEY_D:CJNEA,#3DH,KEY_B;输入键是'D',转STOP_TLCALLSTOP_TKEY_B:CJNEA,#3BH,KEY_F;输入键是'B',转SET_TLCALLSET_T
4、KEY_F:CJNEA,#3FH,KEY_E;输入键是'F',转SET_FLCALLSET_FKEY_E:CJNEA,#3EH,CONT;输入键是'E',转MONITORAJMPSTOP_LIGHTCONT:CJNER6,#0FFH,WAIT;若无秒标志则循环LCALLDISPLAY;显示时间MOVR6,#0;清标志TIMEON:MOVA,R7;判断定时1是否来到(秒,分,时)CJNEA,0BH,T2MOVA,R2CJNEA,0AH,T2MOVA,R3CJNEA,09H,T2LCALLTIMEON
5、REPLAY1;转定时响应程序1T2:MOVA,R7;判断定时2是否来到(秒,分,时)CJNEA,0EH,T3MOVA,R2CJNEA,0DH,T3MOVA,R3CJNEA,0CH,T3LCALLTIMEONREPLAY2;转定时响应程序2T3:MOVA,R7;判断定时3是否来到(秒,分,时)CJNEA,11H,WAITMOVA,R2CJNEA,10H,WAITMOVA,R3CJNEA,0FH,WAITLCALLTIMEONREPLAY3;转定时响应程序3SJMPWAIT;循环STOP_LIGHT
6、:SETB4BHSETB4CHSETB4DHMOVR1,#09HSJMPWAIT;停止灯闪烁CLEAR_TIMER:;定时时间清零子程序MOV0BH,#0H;小时清零MOV0AH,#0H;分钟清零MOV09H,#0H;秒清零MOVR6,#0FFH;置秒标志LCALLDIS_mS;显示毫秒RETCLEAR_T:;时间清零子程序CLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR7,#0H;秒清零MOVR0,#0H;10毫秒清零MOVR6,#0FFH;置秒标志LCAL
7、LDIS_mS;显示毫秒RETSTART_T:;电子钟计时子程序SETBTR1RETSTOP_T:;电子钟停止计时子程序CLRTR1RETSET_F:CLRTR1;设置定时值子程序MOVR4,#7LCALLGETWORD;读小时数CJNEA,#0FFH,INVALID_TIEMR;判断输入合法性MOVA,BADDA,#232JCINVALID_TIEMR;判断输入小时值<24MOVA,BMOVB,#10DIVABSWAPAADDA,BMOV@R1,A;保存输入的值INCR1MOVR4,#5LCAL
8、LGETWORD;读分钟数CJNEA,#0FFH,INVALID_TIEMR;判断输入合法性MOVA,BADDA,#196JCINVALID_TIEMR;判断输入分钟数<60MOVA,BMOVB,#10DIVABSWAPAADDA,BMOV@R1,A;保存输入的值INCR1MOVR4,#3LCALLGETWORD;读分钟数CJNEA,#0FFH,INVALID_TIEMR;判断输入合法性MOVA,BADDA,#196JCINVALID_TIEMR;判断输入分钟值<60MOVA,BM