slowhand 发表于 2009-8-6 12:04:29

【求助】用循环延时在仿真里遇到问题

问题是这样的:
延时函数里面有2个for循环。
在一个for循环里调用延时函数,控制灯亮灭几次。
仿真结果,亮灭的次数超过设定的次数,停不下来。

======================================

//简单的输出定义:
#define LED (1<<PB0)
#define LED_ON        (PORTB &= ~LED)
#define LED_OFF        (PORTB |= LED)

//延时函数:
void delay_ms( unsigned int delay_ms ){
        unsigned int tmp_ms;
        unsigned char tmp_us;
        for( tmp_ms=0; tmp_ms<delay_ms; ++tmp_ms ){
                for( tmp_us=0; tmp_us<255; ++tmp_us){
                        asm("nop");
                }
        }
}

//=====================================

一、如果用:
for(i=0; i<5; ++i){
LED_ON;
delay_ms(500);
LED_OFF;
delay_ms(500);
}
昨天类似这样的,只闪一次;今天又不停的闪,N多次。

二、如果用:
LED_ON;//
delay_ms(500);
LED_OFF;
delay_ms(500);
LED_ON;
delay_ms(500);
LED_OFF;
delay_ms(500);
可以闪2次。

三、换个方式,循环里不调用延时函数:
for(delay_rate=0; delay_rate<5; ++delay_rate){
LED_ON;
for(i=0; i<50000; ++i);
LED_OFF;
for(i=0; i<50000; ++i);
}
正常闪5次。

==================================

难道套了for循环再调用带2个for循环函数出问题?
(我实际烧还得用上reset脚,只能先在仿真里试试了。)

俺的仿真文件:
点击此处下载 ourdev_467967.rar(文件大小:44K) (原文件名:tiny12.rar)
帮忙只看下main里面的test部分怎么回事就行。多谢~

slowhand 发表于 2009-8-6 14:11:48

继续求助~~~

有遇到过着种问题的吗?
还是俺哪里漏了什么东西,或犯了某些常识性的错误?

slowhand 发表于 2009-8-7 09:32:13

继续求助~~~

又遇到一个新问题,程序里定义全局变量貌似仿真就没反应了。
不知道怎么回事,又重画了一个只引出一个LED的图,最简单的程序试了下。
还是定义全局变量就出错(LED不亮)。
#include "iot13v.h"

//unsigned char tmp_var;
main(){
        DDRB= 0x08;//1->output
        PORTB = 0x08;
       
        while(1){
                PORTB &= ~(1<<PB3);
        }
}

仿真里用的tiny12(没找到13的),程序里用的13的头文件(ICC里也没找到12的)
不知道跟这个有关系吗?

请高手帮忙,谢谢~
页: [1]
查看完整版本: 【求助】用循环延时在仿真里遇到问题