标题: 2个单片机10ms延迟方法区别? [打印本页]

作者: sz15207554653    时间: 2016-10-22 21:16
标题: 2个单片机10ms延迟方法区别?
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--);
                }
        }
}



作者: 刘海龙    时间: 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的空间是2个字节。第一个最多只能延时255*10ms,e而第二个最多可以延时65535*10ms,回答完毕。
作者: npn    时间: 2016-10-22 22:52
本帖最后由 npn 于 2016-10-22 22:54 编辑

区别大了,c51单片机中一条指令的时间只能运算一次8位二进制数据,而16位或32位数据计算处理过程中需要分成多条指令和更长的时间来处理的。
作者: npn    时间: 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还差不多,在加上循环跳转比较等指令还会需要更长的时间。
作者: 1534545848    时间: 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--);
                 }
         }
}
最长延时时间不同
作者: sz15207554653    时间: 2016-10-24 11:59
刘海龙 发表于 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的 ...

谢谢!学习了!
作者: sz15207554653    时间: 2016-10-24 12:00
npn 发表于 2016-10-22 22:52
区别大了,c51单片机中一条指令的时间只能运算一次8位二进制数据,而16位或32位数据计算处理过程中需要分成 ...

谢谢!学习了!
作者: liushuiduanya    时间: 2016-10-24 15:09
Delay延时时间不一样,效果就不一样了
作者: obsession2016    时间: 2016-10-24 22:42
变量分配的内存不一样大  其他不影响
作者: baijing1994    时间: 2016-10-25 10:44
延时不一样的,第一个最多只能延时255*10ms,e而第二个最多可以延时65535*10ms
作者: ddl65    时间: 2016-10-25 11:06
延时不一样的
作者: 386115360    时间: 2016-10-30 19:59
可供延长时间的长短不一样,第一个延迟的时间用的是unsigned char类型,字节比较小,而第二个用的是unsigned int ,是四个字节,相对来说更加灵活,上限更加的大,需要延长特别长时间可以考虑用第二个程序的。
作者: 陈新宇    时间: 2016-11-2 11:21
只是延时长短有区别
作者: 橘子酱    时间: 2016-11-3 17:54
只是延时长短有区别
作者: zl2168    时间: 2016-11-3 18:35
刘海龙 发表于 2016-10-22 22:49
第一个延迟里的a、b、ms变量在单片机里分配的空间是一个字节,第2个延迟里的a、b、ms变量在单片机里分配的 ...

补充一点,即使ms实参数值相同,实际延时时间也不同。
作者: 刘海龙    时间: 2016-11-3 19:39
zl2168 发表于 2016-11-3 18:35
补充一点,即使ms实参数值相同,实际延时时间也不同。

的确如此




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1