广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

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

    来源:网络收集  点击:  时间:2024-02-19
    【导读】:

    duanEQUP0;

    weiEQUP2;

    keyBITP3.7;

    ORG0000H

    AJMPMAIN;绝对转移指令,2kb范围(11位)内跳转LJMP16位64kb范围内跳转

    ;短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令

    ORG0030H;指明后面的程序从程序存储器的0030H单元开始存放

    DELAY200US:;@11.0592MHz

    NOP

    NOP

    NOP

    PUSH30H

    PUSH31H

    MOV30H,#2

    MOV31H,#179

    NEXT:

    DJNZ31H,NEXT

    DJNZ30H,NEXT

    POP31H

    POP30H

    RET

    ORG0060H

    ;DISPLAY子程序

    DISPLAY:

    PUSHACC;不能写A,此处ACC代表地址,push后跟地址,代表把地址内的内容压入栈中

    PUSH00H;R0

    PUSH06H;R6

    PUSH07H;R7

    PUSH83H;DPH

    PUSH82H;DPL

    MOVR6,#01H;位选数据,01指的是缓冲区最低位数据

    MOVR7,#08H;循环次数

    FLAG:

    MOVduan,#0x00;消影

    MOVA,R6

    CPLA;取反

    MOVwei,A;位选

    MOVA,#disBufDat

    ADDA,R7

    SUBBA,#0X08

    MOVR0,A

    MOVA,@R0;读出要显示的数据到A

    MOVDPTR,#disTab

    MOVCA,@A+DPTR;从rom取数据,取出要显示的数据对应的段码

    MOVduan,A;段选

    MOVA,R6

    RLA

    MOVR6,A;更新下一次位选

    LCALLDELAY200US

    DJNZR7,FLAG

    POP82H;DPL

    POP83H;DPH

    POP07H

    POP06H

    POP00H

    POPACC

    RET

    ORG0100H

    ;定时器中断0初始化

    T0_INIT:

    MOVTMOD,#0X01

    MOVTH0,#0X3C

    MOVTL0,#0XB0

    SETBEA

    SETBTR0

    SETBET0

    RET

    ORG0130H

    ;T0中断处理程序

    INT_TIMERE0:

    PUSHACC

    SETBRS0

    MOVTH0,#0X3C

    MOVTL0,#0XB0

    INCR0

    MOVA,R0

    SUBBA,#0X14

    JBCY,SECFLAG

    MOVR0,#0x00

    INCsec

    SECFLAG:

    CLRRS0

    POPACC

    RETI

    ORG000BH;定时器/计数器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

    ;主程序

    ORG0180H

    MAIN:

    MOVSP,#0X60;将0x60到0x7f设为堆栈区

    LCALLT0_INIT

    MOVdisBufDatHead,#0X00

    MOVdisBufDatHead+1,#0X00

    MOVdisBufDatHead+2,#0X11

    MOVdisBufDatHead+3,#0X11

    MOVdisBufDatHead+4,#0X11

    MOVdisBufDatHead+5,#0X11

    MOVdisBufDatHead+6,#0X11

    MOVdisBufDatHead+7,#0X11

    MOVsec,#0X3A

    WHILE:

    JBkey,KEYSCAN

    MOVsec,0x00

    KEYSCAN:

    MOVA,sec

    SUBBA,#3CH;超过60s归零

    JBCY,CLEAR

    MOVsec,#0X00;clr加ram地址无效

    CLEAR:

    MOVA,sec

    MOVB,#0AH

    DIVAB;A/B,商存到A中,余数存B中

    MOVdisBufDatHead,A

    MOVdisBufDatHead+1,B

    LCALLDISPLAY

    LJMPWHILE;循环

    END;

    扩展资料

    51机器周期和指令周期

    1、机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51单片机的一个机器周期包括12个时钟振荡周期,也就是说如果51单片机采用12MHz晶振,那么执行一个机器周期就只需要1μs;如果采用的是6MHz的晶振,那么执行一个机器周期就需要2μs。

    2、指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。在51单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个机器周期),四周期指令(执行这条指令需要四个机器周期)。

    除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。也就是说,如果51单片机采用的是12MHz晶振,那么它执行一条指令一般只需1~2微秒的时间;如果采用的是6MH晶振,执行一条指令一般就需2~4微秒的时间。

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_73088.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 15:17:51  耗时:0.025
    0.0248s