51单片机 用c语言 调用-nop- 编一个 延时一秒 程序

 我来答
只为精彩人生
推荐于2016-04-21 · 超过29用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:79万
展开全部
这么给你说吧,不同的编译器同样的C语言语句编译出来的时间不完全一致,举个简单例子;
for(i=0,i<=100;i++)
for(j=0;j<=10;j++);

for(i=0,i<=10;i++)
for(j=0;j<=100;j++);
其实理论上来讲,这个时间都是一个指令周期*10*100,对吧,但是实际效果而讲,这两个时间不一样,都知道可以实现跳转的指令机器周期有几种,到底编译器是如何实现的,我们可以通过编译之后看它对应的汇编语句(编译器中一般都可以看到),然后通过计算汇编的时间,才基本能确定你用C编译之后这个延时程序到底延时多少,如果你换个编译器,比如从keil转到wave,又不能确定时间是否一致;其实你到网上看看,对于时间要求很严格的地方,延时程序基本都是汇编写的,大不了是C和汇编嵌套,或者用定时器;如果你说的是大概一秒的话,那么你百度一下就是一大堆;我做个一个表,即使用定时器,藐视很准确,其实走上一天可能就差几秒甚至几分钟,因为C语言中的中断程序,以及每次进入中断退出中断的指令周期,这些你都要考虑在内,这样你才能做的很准;有点说偏题了。我的意思就是你要真的要把一秒作准,请用汇编或参考汇编,还要把每个语句的执行时间考虑在内,这样你才能做的很准确
追问
C语言中 怎样嵌入 汇编的   求教
追答
具体的做法太多了,刚给你搜索了一下,百度中答案相当多,顺便给你找了一个,我感觉写的挺详细的,希望对你有帮助,http://wenku.baidu.com/view/30d7a98a6529647d272852d9.html
比如#include "reg52.h"

void main()
{
P2=1;
#pragma asm
mov P3,#55h
#pragma endasm
P2=0;
while(1);
}

这是我刚刚弄的一个示例;
51初学者wcy
2011-12-03 · 超过28用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:66.3万
展开全部
你的意思是完全用_nop()_延时1s?
这太坑爹了吧
用定时器吧
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
中断里面来个++count>=20就是1s啊
比延时函数精确多了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式