多语言展示
当前在线:1565今日阅读:60今日分享:41

用51单片机实现时钟功能程序

duanEQUP0;weiEQUP2;keyBITP3.7;ORG0000HAJMPMAIN;绝对转移指令,2kb范围(11位)内跳转LJMP16位64kb范围内跳转;短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令ORG0030H;指明后面的程序从程序存储器的0030H单元开始存放DELAY200US:;@11.0592MHzNOPNOPNOPPUSH30HPUSH31HMOV30H,#2MOV31H,#179NEXT:DJNZ31H,NEXTDJNZ30H,NEXTPOP31HPOP30HRETORG0060H;DISPLAY子程序DISPLAY:PUSHACC;不能写A,此处ACC代表地址,push后跟地址,代表把地址内的内容压入栈中PUSH00H;R0PUSH06H;R6PUSH07H;R7PUSH83H;DPHPUSH82H;DPLMOVR6,#01H;位选数据,01指的是缓冲区最低位数据MOVR7,#08H;循环次数FLAG:MOVduan,#0x00;消影MOVA,R6CPLA;取反MOVwei,A;位选MOVA,#disBufDatADDA,R7SUBBA,#0X08MOVR0,AMOVA,@R0;读出要显示的数据到AMOVDPTR,#disTabMOVCA,@A+DPTR;从rom取数据,取出要显示的数据对应的段码MOVduan,A;段选MOVA,R6RLAMOVR6,A;更新下一次位选LCALLDELAY200USDJNZR7,FLAGPOP82H;DPLPOP83H;DPHPOP07HPOP06HPOP00HPOPACCRETORG0100H;定时器中断0初始化T0_INIT:MOVTMOD,#0X01MOVTH0,#0X3CMOVTL0,#0XB0SETBEASETBTR0SETBET0RETORG0130H;T0中断处理程序INT_TIMERE0:PUSHACCSETBRS0MOVTH0,#0X3CMOVTL0,#0XB0INCR0MOVA,R0SUBBA,#0X14JBCY,SECFLAGMOVR0,#0x00INCsecSECFLAG:CLRRS0POPACCRETIORG000BH;定时器/计数器T0入口地址LJMPINT_TIMERE0;跳转到定时器/计数器中断服务程序中去disTab:DB0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;0-f,空白,横杠的段选数据disBufDatEQU47H;定义显示缓冲数据变量区,8个disBufDatHeadEQU40H//单片机上显示在最左边secEQU48H;主程序ORG0180HMAIN:MOVSP,#0X60;将0x60到0x7f设为堆栈区LCALLT0_INITMOVdisBufDatHead,#0X00MOVdisBufDatHead+1,#0X00MOVdisBufDatHead+2,#0X11MOVdisBufDatHead+3,#0X11MOVdisBufDatHead+4,#0X11MOVdisBufDatHead+5,#0X11MOVdisBufDatHead+6,#0X11MOVdisBufDatHead+7,#0X11MOVsec,#0X3AWHILE:JBkey,KEYSCANMOVsec,0x00KEYSCAN:MOVA,secSUBBA,#3CH;超过60s归零JBCY,CLEARMOVsec,#0X00;clr加ram地址无效CLEAR:MOVA,secMOVB,#0AHDIVAB;A/B,商存到A中,余数存B中MOVdisBufDatHead,AMOVdisBufDatHead+1,BLCALLDISPLAYLJMPWHILE;循环END;扩展资料51机器周期和指令周期1、机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51单片机的一个机器周期包括12个时钟振荡周期,也就是说如果51单片机采用12MHz晶振,那么执行一个机器周期就只需要1μs;如果采用的是6MHz的晶振,那么执行一个机器周期就需要2μs。2、指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。在51单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个机器周期),四周期指令(执行这条指令需要四个机器周期)。除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。也就是说,如果51单片机采用的是12MHz晶振,那么它执行一条指令一般只需1~2微秒的时间;如果采用的是6MH晶振,执行一条指令一般就需2~4微秒的时间。
推荐信息