这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 一个关于延时的问题

共9条 1/1 1 跳转至

一个关于延时的问题

高工
2013-09-21 22:50:56     打赏

今天利用仿真搞个LED闪烁:

LED灯亮;

DelayMs(500);

LED灯灭;

DelayMs(500);

上面提到的延时函数如下:

第一种:

void DelayMs(unsigned int xms)
{
    unsigned int  y;
    for(; xms ; xms--)
          for(y = 120; y ; y--);
}

第二种:

void DelayMs(unsigned int xms)
{
    unsigned char  y;
    for(; xms ; xms--)
          for(y = 120; y ; y--);
}

 

 

结果是:

利用这两个延时的时候效果是不同的。用第一种时闪烁的慢一些,第二种闪烁比较快

有谁能帮我解释一下!!!

 

 




关键词: 延时     问题    

高工
2013-09-21 22:54:03     打赏
2楼

protues还是NI?

protues仿真时间,总是很奇怪,其实和c关系不大,貌似和外围器件和负载,以及宿主机器CPU有关。

除非c里面有差异比较大的延时程序。


高工
2013-09-21 23:10:20     打赏
3楼

是proteus的51单片机仿真,刚把两种代码生成的汇编代码给看了看,应该是这里的区别:

第一种的汇编:
_Delay_Ms:
USING 0

 C0001:
MOV   A,R7
ORL   A,R6
JZ   C0007

MOV   R5,#078H
MOV   R4,#00H
C0004:
MOV   A,R5
DEC   R5
JNZ   C0011
DEC   R4
C0011:
MOV   A,R5
ORL   A,R4
JNZ   C0004
C0003:
MOV   A,R7
DEC   R7
JNZ   C0001
DEC   R6
C0012:
SJMP C0001
C0007:
RET

 

第二种的汇编:
_Delay_Ms:
USING 0

 C0001:
MOV   A,R7
ORL   A,R6
JZ   C0007

MOV   R5,#078H
 C0004:
DJNZ R5, C0004
 C0003:
MOV   A,R7
DEC   R7
JNZ   C0001
DEC   R6
 C0011:
SJMP C0001

 C0007:
RET

 

 


高工
2013-09-22 09:19:49     打赏
4楼
你仿真用的是不是8位单片机51,定义成char和int在不同编译器里转换的汇编和机器码不一样,如果是32位平台,用int反而比char快

专家
2013-09-22 09:35:04     打赏
5楼
正如楼上说的,在单片机中,8位和16位的int和char范围有区别。是不是这里的问题。

高工
2013-09-22 13:16:18     打赏
6楼
恩,,明白了,多谢指导

院士
2013-09-22 19:49:22     打赏
7楼

这个东西会有这么大的区别啊~

很久没有什么51一类的单片机了。


高工
2013-09-22 20:01:50     打赏
8楼

玩了一下51的仿真,发现8位的单片机处理char型和int型时间相差比较大


院士
2013-09-22 21:21:20     打赏
9楼
8位机是一个很神话的东东……

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]