延时子程序执行不了

2019-07-18 13:30发布

求助:小弟用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++);
}
电路图 未命名.jpg

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
那低头一笑的温
2019-07-18 17:34
灯会闪烁并不能说明你的程序就正确了,事实上,你的两个程序都不能实现你编程的目的
一般来说,程序都有一个固定的模式:
main()
{
     初始化;
     while(1)
     {
          循环体;     //这是程序的主体
    }
}

一周热门 更多>