Freescale MC9S08AW60汇编学习笔记(六)

发布者:chi32最新更新时间:2021-08-13 来源: eefocus关键字:Freescale  MC9S08AW60  汇编 手机看文章 扫描二维码
随时随地手机看文章

延时,汇编中经常要用到的功能,也就是MCU什么也不做,仅仅是拖延一段时间而已。MCU本身就有定时器、计数器,用来实现延时当然不在话下,但是一个编程的人自然更希望要实现的功能更加易于掌控,我们就用代码、用程序来实现延时,也就是采用软件进行延时。具体做法是:通过A、H:X增减指令、空操作指令nop和brn以及相应的转移指令,再利用循环结构就可以实现延时功能。既然是延时,能知道延时多长时间最好了,我们知道的是:MCU总线时钟频率为4MHz,所以一个总线周期占用的时间为0.25us,这样,只要知道每条指令所占用的总线周期就可以计算我们的程序运行了多久。实现延时自然也是这样,这些当然要用到数学知识了,放心的是还不至于用到微积分,只要耐心一点精确地计算出延时的时间并不是难事。


例子:设计一个延时10ms的延时子程序,已知MCU总线时钟频率为4MHz。

分析:由于总线时钟频率为4MHz,故一个总线周期占用的时间为0.25us,10ms延时需要执行相当于40000个总线周期的指令。我们可以先设计一个实现较小延时的子程序Re_cycle,然后多次循环调用该子程序来实现较长的时延。代码如下:


 org $0070
num ds.b 1
count1 ds.b 1

 org $1860
re_cycle:                              ;4+7*70+6=500T=125us
  mov #70T,num              ;4T
  dbnz num,*                    ;7T
  rts                                  ;6T
delay_10ms:                        ;[4+78*(5+7+500)]+4+7*7+6=39999T
  mov #78T,count1          ;4T
re_call:
  bsr re_cycle                    ;5T
  dbnz count1,re_call         ;7T
  mov #07T,count1           ;4T
  dbnz count1,*                 ;7T
  rts                                   ;6T

main:
  bsr delay_10ms               ;5~6T
again:
  nop
  jmp again


 org $fffe
 dc.w main


每一条指令所占用的时间皆已标出,需要的就是精巧的设计和精准的计算,比如Re_cycle子程序的设计三条指令刚好500T,这里要解释一下DBNZ这个指令,它所实现的功能就是前面变量中的数自减1与0比较,不等就转移到后面的地址并执行,相等就结束该指令(也就是减1不为0转移指令)。这里肯定要问*代表什么,它代表的就是它本身所在指令的地址,dbnz num,*   指令就可以解释为num自减1不等于0就回来再执行该语句,知道num自减1等于0后结束。由注释看出,delay_10ms子程序执行完所占用的总时间为39999T,再加上在main主程序中对delay_10ms子程序的调用占用5~6T,这样没调用delay_10ms一次,便可以实现40004~40005个总线周期约10ms的延时。当然,如果设计足够好,还可以更精确,越靠近40000个T越好。


上面实现了延时10ms,那如果要实现100ms,500ms,1ms,0.1ms呢,同样的办法,全靠精巧的设计和精准的计算。下面给出延时1ms和500ms的子程序:


 org $0070
num ds.b 1
count1 ds.b 1
count2 ds.b 1

 org $1860
re_cycle:                          ;4+7*70+6=500T=125us
  mov #70T,num
  dbnz num,*
  rts

delay_1ms:                      ;[4+(5+7+500)*8+6]=4106T
  mov #08t,count
  re_call:
  bsr re_cycle                
  dbnz count,re_call
  rts

delay_10ms:                    ;39999T
  mov #78T,count1
re_call:
  bsr re_cycle
  dbnz count1,re_call
  mov #07T,count1
  dbnz count1,*
  rts

delay_500ms:                      ;想法是将delay_10ms重复执行50次,这样肯定有不精确的地方,还请见谅。
  mov #50T,count2
re:
  bsr delay_10ms
  dbnz count2,re
  rts


main:

  bsr delay_1ms
  bsr delay_10ms

  bsr delay_500ms
again:
  nop
  jmp again


 org $fffe
 dc.w main


关键字:Freescale  MC9S08AW60  汇编 引用地址:Freescale MC9S08AW60汇编学习笔记(六)

上一篇:Freescale MC9S08AW60汇编学习笔记(五)
下一篇:Freescale MC9S08AW60汇编学习笔记(八)

推荐阅读最新更新时间:2024-11-10 11:05

飞思卡尔视觉处理技术助力实现无碰撞汽车
汽车业芯片领域开拓者飞思卡尔推出具有传感器融合功能的S32V视觉处理器,建立起新的安全模式 2015年3月2日,西班牙巴塞罗那(世界移动通信大会)讯-飞思卡尔半导体(NYSE:FSL)日前推出全球首个汽车视觉片上系统 (SoC) S32V视觉微处理器,该微处理器具有必要的可靠性、安全和安防措施,可实现自我感知汽车的自动化和辅助驾驶功能。 S32V采用多种汽车级技术,使汽车业超越了现有的以便捷性为中心的 辅助 模式,推动汽车业进入一个新时代。到那时,汽车将能够捕捉数据、处理数据并在危急情况下与驾驶员联合控制,这种能力是从当前的 辅助 时代迈向未来完全无人驾驶汽车时代的基本桥梁。 作为飞思卡尔SafeAssure功能安全计划的组成
[汽车电子]
ARM汇编示例—按键LED(循环)
汇编程序是学习硬件非常好的切入点,虽然程序用C来写回比较方便,但是要想真正了解一款硬件,还是得从体系结构和汇编指令上下点功夫。 一下是一个最基础的ARM 汇编程序,程序的功能是按键,然后在LED上显示出来是哪个键按了下去。 ;引脚连线 ;GPF0~GPF3 K1~K4 ;GPF4~GPF7 LED1~LED4 ;GPG3 K5 ;GPG11 K6 ;GPxCON的配置寄存器每个引脚都占两位,00表示表示输入,01表示输出 ;GPxDAT寄存器表示引脚的高低电平状态,读写数据在这个寄存器里进行 ;程序结果:按Kx,则LED就根据x的二进制表示出来 GPFCON EQU 0x56000050 G
[单片机]
ARM汇编----IMPORT
IMPORT伪操作告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号,而且不论本源文件是否实际引用该符号,该符号都将被加入到本源文件的符号表中。 语法格式: IMPORT symbol{ } 其中,symbol为声明的符号的名称。它是区分大小写的。 指定这个选项后,如果symbol在所有的源文件中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该符号。 使用说明: 使用IMPORT伪操作声明一个符号是在其他源文件中的定义。如果连接器在连接处理时不能解析该符号,而IMPORT伪操作中没有指定 选项,则连接器将会报告错误。如果连
[单片机]
ARM汇编之MOV PC,LR
BL NEXT ;跳转到子程序 ......... ;NEXT处执行 NEXT .......... MOV PC,LR ;从子程序返回 这里的BL是跳转的意思,LR(R14)保存了返回地址,PC(R15)是当前地址,把LR给PC就是从子程序返回。 1.SP(R13)、 LR(R14)、PC(R15) 2.LR(R14)的作用问题,这个LR一般来说有两个作用: (1)当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。 (2)异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要
[单片机]
PIC产生伪随机数汇编语言程序
PSW EQU 03 R0 EQU 08 R1 EQU 09 R2 EQU 0AH R3 EQU 0BH R4 EQU 0CH R5 EQU 0DH R6 EQU 0EH R7 EQU 0FH TEMP EQU 13H CNT1 EQU 11H CNTH EQU 12H BUF0 EQU 17H BUF1 EQU 18H ESUM1 EQU 13H ESUM2 EQU 14H ESUM3 EQU 15H ESUM4 EQU 16H DSUM1 EQU 19H DSUM2 EQU 1AH DSUM3 EQU 1BH DSUM4 EQU 1CH D
[单片机]
飞思卡尔MC9S12(X)系列的内存资源分配和.prm文件的结构
一、内存分配 1.资源分布 如上图所示,单片机型号最后的数字也就代表了单片机中Flash的大小,S12G128 表示Flash有128K Byte,S12G192 表示Flash有192K Byte。但是S12(X)所使用的内核CPU12(X)的地址总线为16位,寻址范围最大为2^16 =64K Byte,而这64K Byte的寻址空间还包括寄存器、EEPROM(利用Data Flash模拟)、RAM等,因此不是所有的64K Byte都是用来寻址FLASH。所以在S12(X)系列单片机中,很多资源是以分页的形式出现的,其中包括EEPROM、RAM、FLASH。EEPROM的每页大小为1K Byte,RAM的每页大小为4K Byt
[单片机]
<font color='red'>飞思卡尔</font>MC9S12(X)系列的内存资源分配和.prm文件的结构
飞思卡尔单片机DZ60---输入捕捉
#include hidef.h /* for EnableInterrupts macro */ #include derivative.h /* include peripheral declarations */ //TPM1通道0(与PTD2连接第三个LED灯? 产生周期为0.5s占空比为50%的PWM波 //利用TPM2通道0(与PTD0连接第一个LED灯)对这个PWM波的上升沿进行捕捉 /*************************************************************/ /* 初始化总线时钟PEE模式 */ /* 外部晶振
[单片机]
e络盟提供飞思卡尔新平台FRDM- KE02Z
一款针对噪音环境应用的高性能低成本开发板 e络盟日前宣布提供新型飞思卡尔Freedom开发平台FRDM-KE02Z,这是一款基于Kinetis E系列微控制器的低成本开发平台, 专门针对恶劣电磁干扰环境应用而设计。 FRDM-KE02Z Freedom 开发平台采用业内首款基于ARM® Cortex®-M0+内核的Kinetis E系列微控制器KE02Z64VQH2, 为设计工程师提供强大的可耐受5V电压的电磁兼容性(EMC)和静电放电(ESD)保护功能,是恶劣噪音环境的理想开发平台。亚太区用户现可通过e络盟购买,售价为12.95美元。 FRDM-KE02Z开发平台是工业应用的完美选择,其输入电源电压范围为5.5V,坚固耐
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved