标题: 烦请详解一下单片机汇编延时程序的计算方法? [打印本页]

作者: bokubo    时间: 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





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


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

谢谢,我明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1