0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

汇编实现循环判断与延时

汽车电子技术 来源:滑小稽笔记 作者:滑小稽 2023-03-02 10:03 次阅读

7.1 循环结构的实现

循环语句可以使用以下架构实现C语言中的for语句。设存在一个代码段OBA0

OBA0:

;输入循环的代码

JMP OBA0

只不过这种方式是无限次循环,若想要有限次循环,则应该这么写。

START:

MOV CX,n ;n代表循环的次数

JMP OBA0

OBA0:

;输入循环的代码

SEC CX

JNZ START

JMP OBA0

对于while语句的实现则可以使用LOOP,设存在一个代码段OBA0。

OBA0:

MOV CX,n ;n代表循环的时间,即一个时钟周期

LOOP $

上述的结构可以作为简单的延时函数使用。

7.2 判断结构的实现

常用的结构是利用按位与异或运算实现的,因为异或指令相同出0,相反出1的特性,所以可以写成以下结构,设存在一个代码段OBA0。

OBA0:

MOV AL,n ;n代表要参加比较的数

NOR n,x ;x代表比较的数

JNZ OBA1 ;相同跳转到OBA1

JMP OBA0

OBA1:

;相当于if成立执行的指令

还有一种是利用减法,判断全零标志位,思想与上面的例子一样,区别就是将上面例子中的NOR改成减法指令SUB就可以了。

7.3 延时函数的实现

设存在一个代码段OBA0。

OBA0:

MOV CX,n ;n代表循环的时间,即一个时钟周期

LOOP $

注意:由于CX是一个16位寄存器,最大支持的数是65535,如果需要更长的时间,可以多写几遍,或者是采用以下结构的循环嵌套。

设存在一个代码段OBA0。

START:MOV AX,n ;n代表循环n次LOOP延时

JMP OBA0

OBA0:

MOV CX,n ;n代表循环时间,即一个时钟周期

LOOP $

DEC AX

JNZ START

JMP OBA0

这种结构最多支持计数2^32个脉冲。

注:为什么要使用延时函数?

在之前计算机的C语言编程中,由于不考虑通信协议以及视觉效果,所以没有提到延时函数,所谓的延时函数通俗的说法就是让CPU进行没有意义的运算,一般低端的处理器采用的是让CPU不停地做循环来达到延时的效果,后续的Cortex-M系列处理器由于增加了滴答时钟,所以也可以采用定时器的方式达到延时的效果,因为处理器的速度都是MHz甚至GHz程度,但是通信协议有的最高速度也就几百KHz,这就需要处理器来迁就通信协议的,因为有的芯片如果速度太快是根本无法工作的,所以加入适当的延时来适应这种低速芯片。现在的计算机中引入Cache缓存,目的也是为了匹配低速设备与高速CPU的通信。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7601

    浏览量

    136241
  • for
    for
    +关注

    关注

    0

    文章

    44

    浏览量

    15799
  • 循环语句
    +关注

    关注

    0

    文章

    9

    浏览量

    4858
收藏 人收藏

    评论

    相关推荐

    【原创分享】单片机延时的两种实现方法

    单片机延时大家程序中都会用到,那么怎么实现呢?通常我们有软件实现,就是语句循环;或者硬件实现,通过定时器/计数器。对于精准而言,从
    发表于 10-08 15:32

    通过循环次数的累加实现延时

    通过循环次数的累加实现延时是一种十分实用的延时技巧,在处理一些对时间精度没要求,又要不间断切换状态的任务时,就可以使用这种方法实现
    发表于 01-18 09:32

    怎样使用arm汇编指令实现for循环结构呢

    1,使用arm汇编指令 实现for循环结构2, while呢?3, do...while呢?4. switch 呢?麻烦高手指教下哈。最好给出具体的汇编指令!
    发表于 10-18 11:24

    单片机延时程序时间长度的记忆方法

    在利用MCS-51 汇编语言编写单片机应用程序的时候,经常会用延时子程序来配合主程序功能的实现。大部分的延时子程序采用由MOV、NOP、DJNZ 指令构成的多重
    发表于 04-16 14:20 47次下载

    快速反复循环延时继电器电路图

    快速反复循环延时继电器电路图
    发表于 07-03 14:27 6329次阅读
    快速反复<b class='flag-5'>循环</b>的<b class='flag-5'>延时</b>继电器电路图

    51单片机汇编语言教程_单片机延时程序分析

    51单片机汇编语言教程:5课单片机延时程序分析
    发表于 01-19 15:26 0次下载

    汇编编写采用定时器延时控制速度的Protuse仿真步进电机

    采用汇编语言编写的,通过定时器去实现延时的,步进电机Protuse 仿真的步进电机。 分享参考学习。
    发表于 12-04 13:37 2次下载

    关于单片机汇编延时程序的一些了解

    如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢?要想知其所以然,还得从汇编开始学起。
    发表于 08-04 09:19 2749次阅读

    51单片机的汇编延时程序免费下载

    本文档的主要内容详细介绍的是51单片机的汇编延时程序免费下载。用6MHz晶振,51单片机,一个机器周期为2us。延时10s子程序如下
    发表于 08-05 17:34 4次下载
    51单片机的<b class='flag-5'>汇编</b><b class='flag-5'>延时</b>程序免费下载

    单片机实现延时的方法

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法
    的头像 发表于 09-22 11:46 7449次阅读

    51汇编模拟延时交通灯PCB及仿真文件

    51汇编模拟延时交通灯PCB及仿真文件
    发表于 06-25 09:19 13次下载

    单片机延时是怎么实现

    单片机延时大家程序中都会用到,那么怎么实现呢?通常我们有软件实现,就是语句循环;或者硬件实现,通过定时器/计数器。 对于精准而言,从
    的头像 发表于 10-12 17:18 9663次阅读

    51汇编(五):延时函数

    ,这时我们就需要通过循环执行NOP,控制循环次数实现延时,并包装成函数,便于随时调用。;执行2×20×100次NOPDELAY:MOV R7, #2DELAYLOOP1:MOV R
    发表于 11-20 17:21 7次下载
    51<b class='flag-5'>汇编</b>(五):<b class='flag-5'>延时</b>函数

    EFR32上实现精确的软件延时

    > 0; n--) for(i = 0; i < loops; i++) ;}这意味着:最内层的for语句,执行一次循环需要12个CPU时钟周期。反汇编如下图:在编译器的优化选项设置为“-O2”时,上面的代码里的循环
    发表于 11-24 19:06 3次下载
    EFR32上<b class='flag-5'>实现</b>精确的软件<b class='flag-5'>延时</b>

    STM32关延时功能实现方式研究

    STM32常见延时实现方式研究一、阻塞延时函数1. 循环延时(V1.0.0)代码(while形式)测试数据特点总结2. SYSTICK非中断
    发表于 11-24 19:21 4次下载
    STM32关<b class='flag-5'>延时</b>功能<b class='flag-5'>实现</b>方式研究