找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1000|回复: 10
收起左侧

请问这个毫秒级单片机延时程序有问题嘛?

[复制链接]
ID:1001220 发表于 2022-1-15 18:04 来自手机 | 显示全部楼层 |阅读模式
这个毫秒级延时程序:
void ms(ut x){
ur i;
while(x--)
for(i=0;i<123;i++);
}
有什么问题吗?
回复

使用道具 举报

ID:624769 发表于 2022-1-15 22:44 来自手机 | 显示全部楼层
无单片机型号,无晶振频率,不置评否。
回复

使用道具 举报

ID:336670 发表于 2022-1-15 23:51 | 显示全部楼层
while(x--)后面不是应该加上分号吗??
while(x--);
回复

使用道具 举报

ID:213173 发表于 2022-1-16 06:39 | 显示全部楼层
从表面看这个延时程序没有什么问题,但实际上有3个问题。其中有1个花括号2个分号是汉字字符,编译器不认。
回复

使用道具 举报

ID:1001220 发表于 2022-1-16 10:18 来自手机 | 显示全部楼层
188610329 发表于 2022-1-15 22:44
无单片机型号,无晶振频率,不置评否。

芯片是AT89C52,晶振频率12HZ
回复

使用道具 举报

ID:1001220 发表于 2022-1-16 10:26 来自手机 | 显示全部楼层
老二不怕黑 发表于 2022-1-15 23:51
while(x--)后面不是应该加上分号吗??
while(x--);

程序是我师兄教我的,我的理解是unsigned int 长度0~65535
while (x--)
的意思是执行最多65535遍for语句差不多延时1秒的
有分号就是停止了,所以我不加分号
回复

使用道具 举报

ID:1001220 发表于 2022-1-16 10:31 来自手机 | 显示全部楼层
wulin 发表于 2022-1-16 06:39
从表面看这个延时程序没有什么问题,但实际上有3个问题。其中有1个花括号2个分号是汉字字符,编译器不认。

这个不好意思啊手机的发的帖子所以符号是汉化的
回复

使用道具 举报

ID:824490 发表于 2022-1-16 10:58 | 显示全部楼层
老二不怕黑 发表于 2022-1-15 23:51
while(x--)后面不是应该加上分号吗??
while(x--);

逻辑上没问题,while(x--)是个循环,当后面带上“;”后,循环体就是“X--”,当x=0时,这个循环线路束,不带“;”时,是下一行的代码做为循环体。
所以这是一个2级的嵌套循环,加了“;”就成了2个独立的一级循环,延时上就差多了去了。
回复

使用道具 举报

ID:624769 发表于 2022-1-16 19:57 | 显示全部楼层
2755395523 发表于 2022-1-16 10:18
芯片是AT89C52,晶振频率12HZ

STC89C52   12M晶振, ms级的延时,一般差不多是:

void   delayms(u8 ms)
{
     u8   i,j;
     while(ms--)
     {
         j = 4;
         while(j--)
         {
              i=248;
              while(i--);
         }
     }
}
回复

使用道具 举报

ID:207421 发表于 2022-1-16 22:40 | 显示全部楼层
普通的延时函数,不会很精准
回复

使用道具 举报

ID:53621 发表于 2022-1-17 09:04 | 显示全部楼层
看汇编或者看示波器可能会准点,这个时间要微调。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表