【求助】用循环延时在仿真里遇到问题
问题是这样的:延时函数里面有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部分怎么回事就行。多谢~ 继续求助~~~
有遇到过着种问题的吗?
还是俺哪里漏了什么东西,或犯了某些常识性的错误? 继续求助~~~
又遇到一个新问题,程序里定义全局变量貌似仿真就没反应了。
不知道怎么回事,又重画了一个只引出一个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]