求助:小弟用ATmega16
单片机在软件上
仿真,令一个LED灯闪烁,以下有两个程序,在
proteus中仿真时,运行程序一的时候,灯是一直亮着的;运行程序二的时候,灯会闪。我不知道为什么程序一把延时程序做成子函数调用就行不通,执行到延时子函数之前程序就停止不前了。求高手指点。晶振是8M的
程序一:#include <iom16v.h>#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint ms)//延时子程序
{
uint a,b;
for(a=0;a<ms;a++)
for(b=0;b<1141;b++);
}
void main()
{
DDRD|=BIT(5);
PORTD|=BIT(5);
delay(50);
PORTD&=~BIT(5);
delay(50);
}
程序二:#include <iom16v.h>#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{ uint a,b;
DDRD|=BIT(5);
PORTD|=BIT(5);
for(a=0;a<50;a++)
for(b=0;b<1141;b++);
PORTD&=~BIT(5);
for(a=0;a<50;a++)
for(b=0;b<1141;b++);
}
电路图:
一般来说,程序都有一个固定的模式:
main()
{
初始化;
while(1)
{
循环体; //这是程序的主体
}
}
一周热门 更多>