找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7131|回复: 15
收起左侧

2个单片机10ms延迟方法区别?

  [复制链接]
ID:138144 发表于 2016-10-22 21:16 | 显示全部楼层 |阅读模式
2个延迟区别在哪里?
void Delay10ms(unsigned char ms)
{
        unsigned char a,b;
        for(;ms > 0;ms--)
        {
                for(a = 38;a > 0;a--)
                {
                        for(b = 130;b > 0;b--);
                }
        }
}

void Delay10ms(unsigned int ms)
{
        unsigned int a,b;
        for(;ms > 0;ms--)
        {
                for(a = 38;a > 0;a--)
                {
                        for(b = 130;b > 0;b--);
                }
        }
}


回复

使用道具 举报

ID:123732 发表于 2016-10-22 22:49 | 显示全部楼层
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的空间是2个字节。第一个最多只能延时255*10ms,e而第二个最多可以延时65535*10ms,回答完毕。
回复

使用道具 举报

ID:57657 发表于 2016-10-22 22:52 | 显示全部楼层
本帖最后由 npn 于 2016-10-22 22:54 编辑

区别大了,c51单片机中一条指令的时间只能运算一次8位二进制数据,而16位或32位数据计算处理过程中需要分成多条指令和更长的时间来处理的。
回复

使用道具 举报

ID:57657 发表于 2016-10-22 23:04 | 显示全部楼层
本帖最后由 npn 于 2016-10-22 23:14 编辑
刘海龙 发表于 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的 ...

首先这样的方法是错误的,c51是8位的单片机所以1条指令只能完成处理8位二进制的运算,而且执行不同的指令所需要的时间也不同,char变量有8位二进制宽度所以只用1条指令就能完成一次计算,而int有16位宽度,是经过了2次char运算指令而得到结果的,我觉得是131072x20ms还差不多,在加上循环跳转比较等指令还会需要更长的时间。
回复

使用道具 举报

ID:140275 发表于 2016-10-23 12:24 | 显示全部楼层
2个延迟区别在哪里?
void Delay10ms(unsigned char ms)
{
         unsigned char a,b;
         for(;ms > 0;ms--)
         {
                 for(a = 38;a > 0;a--)
                 {
                         for(b = 130;b > 0;b--);
                 }
         }
}

void Delay10ms(unsigned int ms)
{
         unsigned int a,b;
         for(;ms > 0;ms--)
         {
                 for(a = 38;a > 0;a--)
                 {
                         for(b = 130;b > 0;b--);
                 }
         }
}
最长延时时间不同
回复

使用道具 举报

ID:138144 发表于 2016-10-24 11:59 | 显示全部楼层
刘海龙 发表于 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的 ...

谢谢!学习了!
回复

使用道具 举报

ID:138144 发表于 2016-10-24 12:00 | 显示全部楼层
npn 发表于 2016-10-22 22:52
区别大了,c51单片机中一条指令的时间只能运算一次8位二进制数据,而16位或32位数据计算处理过程中需要分成 ...

谢谢!学习了!
回复

使用道具 举报

ID:144228 发表于 2016-10-24 15:09 | 显示全部楼层
Delay延时时间不一样,效果就不一样了
回复

使用道具 举报

ID:144301 发表于 2016-10-24 22:42 | 显示全部楼层
变量分配的内存不一样大  其他不影响
回复

使用道具 举报

ID:144339 发表于 2016-10-25 10:44 | 显示全部楼层
延时不一样的,第一个最多只能延时255*10ms,e而第二个最多可以延时65535*10ms
回复

使用道具 举报

ID:144338 发表于 2016-10-25 11:06 | 显示全部楼层
延时不一样的
回复

使用道具 举报

ID:144138 发表于 2016-10-30 19:59 | 显示全部楼层
可供延长时间的长短不一样,第一个延迟的时间用的是unsigned char类型,字节比较小,而第二个用的是unsigned int ,是四个字节,相对来说更加灵活,上限更加的大,需要延长特别长时间可以考虑用第二个程序的。
回复

使用道具 举报

ID:145644 发表于 2016-11-2 11:21 | 显示全部楼层
只是延时长短有区别
回复

使用道具 举报

ID:145955 发表于 2016-11-3 17:54 | 显示全部楼层
只是延时长短有区别
回复

使用道具 举报

ID:111634 发表于 2016-11-3 18:35 | 显示全部楼层
刘海龙 发表于 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的 ...

补充一点,即使ms实参数值相同,实际延时时间也不同。
回复

使用道具 举报

ID:123732 发表于 2016-11-3 19:39 | 显示全部楼层
zl2168 发表于 2016-11-3 18:35
补充一点,即使ms实参数值相同,实际延时时间也不同。

的确如此
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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