您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机电子时钟汇编语言程序
51单片机架构下时钟控制程序;KEYAA键功能程序开启/关闭定时器;KEYBB键功能程序时值加1;KEYCC键功能程序分值加1;KEYDD键功能程序秒值加1;KEYEE键功能程序12/24时值转换;BEEP_BL整点报时;P0显示接口;系统初始化程序****************************************************KEYAEQUP3.0;单片机控制设置KEYBEQUP3.1;单片机控制设置KEYCEQUP3.2;单片机控制设置KEYDEQUP3.3;单片机控制设置KEYEEQUP3.4;单片机控制设置BEEPEQUP3.7;单片机控制设置ORG0000HAJMPMAIN;转到系统初始化程序ORG000BHAJMPPITO;转到定时器0中断服务程序ORG0100HMAIN:MOVSP,#60H;确立堆栈区MOVTMOD,#01H;设定定时器0为工作方式1MOVTL0,#0DCH;装计数器初值MOVTH0,#0BHCLR21H.0CLRTR0;TR0置0,定时关闭SETBEA;EA置1,中断总允许SETBET0;ET0置1,定时器0中断;允许MOV30H,#10H;循环次数MOV7EH,#0AH;P.点显示初始化MOVR0,#79HMOVR1,#05HPP:MOV@R0,#0BHINCR0DJNZR1,PPMOVR0,#31H;时、分、秒值存储单元清零MOVR1,#06HQ00:MOV@R0,#00HINCR0DJNZR1,Q00;监控程序**********************************************************LOOP:LCALLDIR;调显示子程序LCALLKEY;调键扫描子程序LOOP1:JB20H.0,KEYA;A键是否按下,是跳转到A键功能程序开启/关闭定时器JB20H.1,KEYB;B键是否按下,是跳转到B键功能程序时值加1JB20H.2,KEYC;C键是否按下,是跳转到C键功能程序分值加1JB20H.3,KEYD;D键是否按下,是跳转到D键功能程序秒值加1JB20H.4,KEYE;E键是否按下,是跳转到E键功能程序12/24时值转换LCALLDIRLJMPLOOP;跳转到监控程序;A键功能子程序****************************************************KEYA:CPLTR0;开启/关闭定时器SETB21H.0AJMPLOOP;返回;B键功能子程序****************************************************KEYB:JBTR0,KEYB1;定时器是否运行,是跳转JNB21H.0,KEYB2MOVR0,#36H;时值存储单元地址送R0LCALLDAAD1;调加1子程序MOVA,R3;时值加1后的值送累加器ALCALLBEEP_BL;整点报时XRLA,#12H;时值是否到12时JNZKEYB0;BACK:XRLA,#24H;判是否到24时JNZKEYB1;时值是否到24时,否返回LCALLCLR0;时值存储单元清零KEYB0:JB20H.4,KEYB1;是否启用12时值,否返回LCALLCLR0;时值存储单元清零KEYB1:MOV7DH,35HMOV7EH,36HKEYB2:LJMPLOOP;返回监控程序;C键功能子程序****************************************************KEYC:JB8CH,KEYC1;定时器是否运行,否跳转JNB21H.0,KEYC2MOVR0,#34H;分值存储单元地址送R0LCALLDAAD1;调加1子程序MOVA,R3;分值加1后的值送累加器AXRLA,#60H;JNZKEYC1;分值是否到60分,否返回LCALLCLR0;分值存储单元清零KEYC1:MOV7CH,34HMOV7BH,33HKEYC2:LJMPLOOP;返回监控程序;D键功能子程序****************************************************KEYD:JB8CH,KEYD1;定时器是否运行,否跳转JNB21H.0,KEYD2MOVR0,#32H;秒值存储单元地址送R0LCALLDAAD1;调加1子程序MOVA,R3;秒值加1后的值送R0XRLA,#60HJNZKEYD1;秒值是否到60秒,否返回LCALLCLR0;秒值存储单元清0KEYD1:MOV79H,31HMOV7AH,32HKEYD2:LJMPLOOP;返回监控程序;中断服务程序******************************************************PITO:PUSHPSW;中断服务程序,现场保护PUSHASETBRS0;选第三组通用寄存器SETBRS1MOVTL0,#0DCH;计数器重新加载MOVTH0,#0BHMOVA,30H;循环次数减1DECAMOV30H,AJNZRETO;不满16次,转RET0返回MOV30H,#10H;满16次开始计时操作MOVR0,#32H;秒显示单元地址ACALLDAAD1;秒加1MOVA,R3;加1后秒值在R3中XRLA,#60H;判是否到60秒JNZRETO;不到转RET0返回ACALLCLR0;到60秒显示单元清0MOVR0,#34H;分显示单元地址ACALLDAAD1;分加1MOVA,R3;加1后分值在R3中XRLA,#60H;判是否到60分JNZRETO;不到转RET0返回ACALLCLR0;到60分显示单元清0MOVR0,#36H;时显示单元地址ACALLDAAD1;时加1MOVA,R3;加1后时值在R3中LCALLBEEP_BL;整点报时XRLA,#12H;时值是否到12时JNZKEYB3;XRLA,#24H;判是否到24时JNZRETO;不到转RET0返回ACALLCLR0;到24时显示单元清0KEYB3:JB20H.4,RETO;是否启用12时值,否返回ACALLCLR0;时值存储单元清零RETO:CLRRS0;返回第0组通用寄存器CLRRS1POPA;现场恢复POPPSWMOV79H,31H;时、分、秒值放缓冲区MOV7AH,32HMOV7BH,33HMOV7CH,34HMOV7DH,35HMOV7EH,36HRETI;中断返回;加1子程序*******************************************************DAAD1:MOVA,@R0;加1子程序,十位送ADECR0SWAPA;十位数占高4位ORLA,@R0;个位数占低4位ADDA,#01H;加1DAA;十进制调整MOVR3,A;全值暂存R3中ANLA,#0FH;屏蔽十位数,取出个位数MOV@R0,A;个位值送显示缓冲单元MOVA,R3INCR0ANLA,#0F0H;屏蔽个位数取出十位数SWAPA;使十位数占低四位MOV@R0,A;十位数送缓冲单元RET;返回CLR0:CLRA;清缓冲单元子程序MOV@R0,A;十位缓冲单元清0DECR0MOV@R0,A;个位数缓冲单元清0RET;返回;键盘扫描子程序***************************************************KEY:LCALLKEYCHULI;调键值处理子程序JZEXIT;没有键按下转到返回LCALLDIRLCALLDIR;调显示去抖动LCALLKEYCHULI;调键值处理子程序JZEXIT;没有键按下转到返回MOVB,20H;保存键值KEYSF:LCALLKEYCHULI;调键值处理子程序JZKEY1;键释放,转到恢复键值LCALLDIR;调显示子程序延时AJMPKEYSF;等到键释放KEY1:MOV20H,B;键值送20H单元保存EXIT:RET;返回KEYCHULI:PUSHPSW;保护现场CLRRS1;改变寄存器组号SETBRS0MOVP1,#0FFH;先向P1口写1MOVA,P1;P1口值送累加器ACPLA;A值取反ANLA,#0FH;保存P1口的低4位MOV20H,A;A值送20H保存CLRRS1;改变寄存器组号CLRRS0;POPPSW;恢复现场RET;显示子程序********************************************************DIR:PUSHPSW;恢复现场SETBRS1;改变寄存器组号CLRRS0MOVR0,#79H;建立显示缓冲区首地址MOVR3,#0FBH;设置位控码LD0:MOVP2,R3;送位控码MOVA,@R0;缓冲区值送累加器ADISP1:ADDA,#1BHMOVCA,@A+PC;取段控码并送A中DISP2:MOVP0,A;送段控码MOVR2,#09H;设置延时循环次数ACALLDEY;延时点亮INCR0;缓冲区地址加1MOVA,R3;位控码送AJNBACC.1,HERE;是否到最高位,是转到返回JBACC.5,LD2RLARLA;不到向显示器高位移位LD2:RLAMOVR3,A;位控值保存到R4中AJMPLD0;继续扫描HERE:CLRRS0;改变寄存器组号CLRRS1POPPSW;恢复现场RET;返回DBB:DB0C0HDB0F9HDB0A4HDB0B0HDB99HDB92HDB82HDB0F8HDB80HDB90HDB0CHDB0FFH;整点报时**********************************************************BEEP_BL:MOVR6,#100BL1:CALLBL2CPLBEEPDJNZR6,BL1MOVR5,#25CALLDEYRET;返回计时BL2:MOVR7,#180BL3:NOPDJNZR7,BL3RET;延时子程序********************************************************DEY:PUSH12HDEY0:PUSH12HDEY1:PUSH12HDEY2:DJNZR2,DEY2POP12HDJNZR2,DEY1POP12HDJNZR2,DEY0POP12HDJNZR2,DEYRETEND
本文标题:单片机电子时钟汇编语言程序
链接地址:https://www.777doc.com/doc-6842534 .html