找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1035|回复: 2
打印 上一主题 下一主题
收起左侧

烦请详解一下单片机汇编延时程序的计算方法?

[复制链接]
跳转到指定楼层
楼主
ID:791420 发表于 2020-6-28 02:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG   0000H           ;
LJMP  MAIN            ;转主程序
ORG   0003H           ;INT0中断服务入口地址
LJMP  L1              ;转INT0高优先级中断服务程序
ORG   0013H           ;INT1中断服务入口地址
LJMP  L2              ;转INT1高优先级中断服务程序
ORG   0100H           ;设置主程序起始地址
MAIN: SETB EA         ;CPU开放中断
          SETB EX0        ;允许外部中断0中断
          SETB EX1        ;允许外部中断1中断
          SETB PX0        ;外部中断0设置为高优先级
          SETB IT0        ;设置外部中断0为跳沿触发方式
          SETB IT1        ;设置外部中断1为跳沿触发方式
          MOV SP,#70H     ;设置堆栈为70H
          MOV A,#0FFH     ;将0FFH赋值给累加器
  FR: MOV P1,A        ;将累加器的值给P1
          ACALL DELAY1S   ;调用1秒延时子程序
          CPL A           ;对累加器值取反
          SJMP FR         ;循环
  L1: PUSH ACC        ;将累加器的值暂时存于堆栈
      MOV A,#80H      ;将80H赋值给A
      MOV P1,A        ;将累加器的值给P1
          ACALL DELAY1S   ;调用1秒延时子程序
LOOP1:RR A            ;累加器循环右移
          MOV P1,A        ;将累加器的值给P1
          ACALL DELAY1S   ;调用1秒延时子程序
          JB P1.0,N2      ;P1.0判断为1则跳转N2
          AJMP LOOP1      ;循环
  L2: PUSH ACC        ;将累加器的值暂时存于堆栈
      MOV A,#7FH      ;将7FH赋值给A
          MOV P1,A        ;将累加器的值给P1
          ACALL DELAY1S   ;调用1秒延时子程序
LOOP2:RR A            ;累加器循环右移
          MOV P1,A        ;将累加器的值给P1
          ACALL DELAY1S   ;调用1秒延时子程序
          JNB P1.0,N2     ;P1.0判断不为1则跳转N2
          AJMP LOOP2      ;循环
   N2:POP ACC         ;从堆栈取出累加器的值
      RETI            ;中断返回
DELAY1S:MOV R5,#10    ;1秒延时子程序
DELAY0 :MOV R6,#200   
DELAY1 :MOV R7,#123                           
DELAY2:DJNZ R7,DELAY2
       DJNZ R6,DELAY1
           DJNZ R5,DELAY0
           RET                          
          END





以上程序全文,想知道最后的一秒延时子程序是怎么实现的,那个延时一秒的计算是怎么算出来的

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:767423 发表于 2020-6-28 08:18 | 只看该作者
这个是精确补偿的吧。以前我都是算个大概:(DJNZ R7,DELAY2)2个机器周期 x 123 x 200 x 10 =1000000us这里应该是6MHz的晶振,一个机器周期是2us。精确计算,要把每条指令所用的时间也要算进去。
回复

使用道具 举报

板凳
ID:791420 发表于 2020-6-28 11:45 | 只看该作者
hsl32 发表于 2020-6-28 08:18
这个是精确补偿的吧。以前我都是算个大概:(DJNZ R7,DELAY2)2个机器周期 x 123 x 200 x 10 =1000000us这 ...

谢谢,我明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表