单片机汇编中为什么要用NOP
在单片机C语言中加入NOP指令是因为标准的C语言中没有空语句。
但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在AVR-GCC中,如下方法嵌入汇编指令:
asm ("nop; nop; nop; nop;" ::);
在keil C51中,直接调用库函数:
#include// 声明了void _nop_(void);
_nop_();// 产生一条NOP指令
扩展资料
执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W 。
读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
作用:对于延时很短的,要求在us级的,采用“_nop_ ”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
在选择C51中循环语句时,要注意以下几个问题:
第一、定义的C51中循环变量,尽量采用无符号字符型变量。
第二、在FOR循环语句中,尽量采用变量减减来做循环。
第三、在do,, while, while 语句中,循环体内变量也采用减减方法。
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。
准确的说是:nop是一个机器周期的延时空指令,一个机器周期跟你的单片机外围电路的晶振电路的晶振有关!如果晶振是12mhz的那么一个机器周期就是1微妙!嘿嘿···望采纳!存手打的····我不是用汇编的···不过懂一点···c了解多一点···如果是c我可以帮你一些小程序问题···
在单片机C语言中加入NOP指令是因为标准的C语言中没有空语句。
但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在AVR-GCC中,如下方法嵌入汇编指令:
asm ("nop; nop; nop; nop;" ::);
在keil C51中,直接调用库函数:
#include// 声明了void _nop_(void);
_nop_();// 产生一条NOP指令
扩展资料
执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W 。
读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
作用:对于延时很短的,要求在us级的,采用“_nop_ ”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
在选择C51中循环语句时,要注意以下几个问题:
第一、定义的C51中循环变量,尽量采用无符号字符型变量。
第二、在FOR循环语句中,尽量采用变量减减来做循环。
第三、在do,, while, while 语句中,循环体内变量也采用减减方法。
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。
汇编语言的111条指令的完整英文是什么?
8051系列单片机汇编语言指令速查表编号 指令名称 指令助记符 指令说明数据传送类指令1 一般传送 MOV A, #data 将立即数#data送累加器A2 MOV direct, #data 将立即数#data送片内RAM direct地址单元内3 Mov Rn, #data 将立即数#data送寄存器Rn4 Mov @Ri, #data 寄存器Ri内为RAM地址,将立即数#data送该地...
arm 中b 与bne的区别?
一、意思不同 b:数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处。bne: 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处。二、作用不同 BNE指令,是个条件跳转,即:是“不相等(或不为0)跳转指令”。如果不为0就跳转到后面指定的地址,继续执行。B 是最简单...
单片机的基础知识
地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据...
C语言与单片机C语言的区别 急求
3、单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL\/M51语言目标代码混合使用。C51本质就是C,是为在单片机上使用C而出来的,如果C不...
pic单片机怎么用户汇编语言实现位取反?
COMF F,d ;这条语句中“F”是寄存器的名称,当“d=1”时,结果存入“F”,当“d=0”时,结果存入“W”。这个“W”书面解释是工作寄存器。可理解为过渡寄存器或临时寄存器,做中转数据用。2、在汇编语言中要实现位取反,可通过位状态检测判断来对位进行“置1”或“清零”,详见以下程序。...
求PIC 8位单片机 汇编指令比较全的,详细点的
求PIC8位单片机汇编指令详解.越详细越好.看了网上大把C的教程,感觉代码挺长的.估计汇编会简短一点.我用的是MPLABIDEV8.66要是能围绕这个软件,选择PIC某个系列芯片为主题的最好.还有没... 求PIC 8位单片机 汇编指令详解.越详细越好. 看了网上大把C的教程,感觉代码挺长的.估计汇编会简短一点.我用的是MPLAB ...
虚拟内存是什么意思虚拟内存原理与工作方式
尽管基址寄存器和变址寄存器用来创建地址空间的抽象,但是这有一个其他的问题需要解决:管理软件的膨胀(managing bloatware)。虽然内存的大小增长迅速,但是软件的大小增长的要比内存还要快。在 1980 年的时候,许多大学用一台 4 MB 的 VAX 计算机运行分时操作系统,供十几个用户同时运行。现在微软公司推荐的 64 位 ...
...那套系统的常用出现的故障代码呀。 就比如说什么时候要清盘_百度知 ...
14 测试存储器更新触发电路。 电路片初始化/存储器处自动检测结束;8254计时器测试即将开始。 第一个64DK RAM第4位故障。15 测试开头64K的系统存储器。 第2通道计时器测试了一半;8254第2通道计时器即将完成测试。 第一个64DK RAM第5位故障。16 建立8259所用的中断矢量表。 第2通道计时器测试结束...
主板诊断故障代码是什么.是内存发生问题还是显卡~等等.我要具体的回...
测试8254通道1.查键盘中的控制电路. 键盘控制器引脚23,24已屏蔽\/解锁;已发出NOP命令.试换键盘. 第一个64K RAM的地址线故障.同上. 0D 1,检查CPU速度是否与系统时钟匹配.查CPU跳级及CMOS中关于CPU参数的设置.2,检查控制芯片已编程值是否符合初设置.3,视频通道测试,如果失败,则鸣喇叭. 已处理NOP命令;接着测试...
试从C54X-DSP硬件结构方面总结:为什么说DSP是一种特别适用于数字信号...
2、流水线操作(pipeline),取指、译码、寻址、取数、运算、存储流水操作,等效单周期完成指令,而通用CPU通常一条指令需要几个时钟周期才可以完成。当然,流水线操作引入了一些新问题,比如需要在适当位置加NOP空操作指令或者调整指令位置以确保流水操作能顺利完成。3、独立的硬件乘法器。卷积、数字滤波、FFT...