新闻  |   论坛  |   博客  |   在线研讨会
AVR软件延时(ICCAVR)
0750long | 2009-07-25 10:20:21    阅读:5180   发布文章

 

 

zipAVR软件延时(ICCAVR)

压缩包 包含所有调试程序以及 AVR studio仿真文件

ICCAVR环境编译,还有AVR软件延时计算工具(C-Free写的,支持中文)

呵呵,在网上找了一下AVR单片机的软件延时程序,

觉得不怎么方便,于是就自己做了一个软件

很方便的,只要输入你所需要的延迟时间

得到所需延时的代码函数,直接调用就可以了

希望对有需要的朋友有用^_^

 

 

 

,'''╭⌒╮⌒╮.',''',,',.'',,','',. 
 ╱◥██◣''o',''',,',.''.'',,',. 
|田|田田│ '',,',.',''',,',.'' 
╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬


二重循环do_while(不可传递参数)
调试记录:
/*--------------------------------------------------------------*/
//ICC-AVR application builder : 2009-7-21 10:46:10
// Target : M8
// Crystal: 1.000Mhz
/*--------------------------------------------------------------*/


1、C语言程序:
/*--------------------------------------------------------------*/
//二重循环(不传递参数)
void delay(void)
{
 unsigned char i, j;
 
 j = 6; do{i = 5; do{i--;}while(i); j--;}while(j);
}


2、编译后的汇编程序:
_delay:
  j                    --> R16
  i                    --> R18             机器周期
    0033 E006      LDI R16,6            1
    0034 E025      LDI R18,5            1
    0035 952A      DEC R18             1 
    0036 2322      TST R18               1
    0037 F7E9      BNE 0x0035       2/1
    0038 950A      DEC R16             1
    0039 2300      TST R16               1
    003A F7C9      BNE 0x0034     2/1
    003B 9508      RET                     4

    0040 EF8F      LDI R24,0xFF      1
    0041 BB85      OUT 0x15,R24    1 
    0042 DFF0      RCALL _delay     3

    0043 2422      CLR R2                1
    0044 BA25      OUT 0x15,R2     1
    0045 DFED      RCALL _delay   3

◆赋值:i = 5; j = 6;
WINAVR 调试记录
40  us
193 us
193-40 = 153
     LDI OUT RCALL _delay
153 = 1 + 1 + 3  +  148
 DEC TST BNE   i  BNE  LDI DEC TST BNE   j  LDI BNE RET
148 = {[(1 + 1 + 2) * 5 - 1] + 1 + 1 + 1 + 2} * 6 + 1 - 1 + 4

◆推出公式:
T = 4*[(i+1)*j+1]

◆验证:
4*[(5+1)*6+1] = 148  ok!

◆结论:
所以加上RCALL,总共延迟时间:T = 4*[(i+1)*j+1] + 3


◆赋值:i = 8; j = 9;
40  us
373 us
373-40 = 333
333 = 2 + 331
◆验证:
4*[(8+1)*9+1] + 3 = 331  ok! \(0^◇^0)/

 

/*--------------------------------------------------------------*/
★最终结论(机器周期为1us/振荡时钟为1MHz):
延迟时间T: T = 4*[(i+1)*j+1] + 3 us
最小延迟时间:T_min =  15  us
最大延迟时间:T_max = 261127  us
最小步进时间:T_step= 4  us
/*--------------------------------------------------------------*/

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客