标题: [求助][讨论]1秒内LED闪10次 [打印本页]

作者: a123    时间: 2010-10-12 09:11
标题: [求助][讨论]1秒内LED闪10次

编了一个1秒内LED1闪10次的程序(12MHZ,STC89C52),编译OK,但在实验板上运行失败,网友也帮忙写了个程序,结果也是失败。现在将此程序贴上来,请大家来一起来帮帮忙,指教指教,探讨探讨

 

题目要求:1秒内LED1闪10次后停止(或是说灯在1秒之内只闪10次)

 

 

我写的:

程序分析:闪10次即亮10次灭10次,共20次,1S/20=50MS每次。

#include<reg52.h>

#define uchar unsigned char

sbit P1_4=P1^4;

sbit LED1=P0^0;

uchar a;

 

void main()

{

  P1_4=0;

        a=0;

  TMOD=0X01;

   TH0=0X3C;

   TL0=0Xb0;

   EA=1;

   ET0=1;

   TR0=1;

while(1); 

}

 

void time0() interrupt 1

{

  TH0=0X3c;

   HL0=0Xb0;

a++;

   if(a==1)

      {

          a=0;

     LED1=~LED1;

       }

         if(a==20)

             {

               TR0=0;

              }

}

 

当以上程序运行失败之后,我在if(a==1)之前加了个while(1)将两个if都放在了{ }中,但结果仍然达不到题目要求:1秒钟之内LED1闪烁10次后停止。

 

网友的程序:

#include<reg52.h>

#define uchar unsigned char

sbit P1_4=P1^4;

sbit LED1=P0^0;

uchar a,b;

 

void main()

{

  P1_4=0;

        a=0;

         b=0;

  TMOD=0X01;

   TH0=0X3C;

   TL0=0Xb0;

   EA=1;

   ET0=1;

   TR0=1;

while(1); 

}

 

void time0() interrupt 1

 

 

{

  TH0=0X3c;

   HL0=0Xb0;

a++;

   if(a==1)

      {

          a=0;

     

       }

         for(b=0;b<=10;b++)

                {

               LED1=~LED1;

                }

}

以上是网友的程序,大概是这样吧,因为他给我的资料没带在身边编译OK,实验板上得不到题目要求的结果。

[此贴子已经被作者于2010-10-12 18:56:49编辑过]

作者: a123    时间: 2010-10-12 23:32

我做出来了:程序如下,有愿意一起学习共同进步的朋友可以加我Q:125991680

 

#include  <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a=0;
uchar b=0;
sbit LED=P0^0;
sbit P1_4=P1^4;
void main()
{
   P1_4=0;
 a=0;
 b=0;
 TMOD = 0x11;
 TH0 = (65536-50000)/256;//50ms
 TL0 = (65536-50000)%256;
 EA = 1;
 ET0 = 1;
   ET1=1;
 TR0 = 1;
 TR1=1;
 while(1);
}

void Timer_0() interrupt 1
{
 TH0 = (65536-50000)/256;
 TL0 = (65536-50000)%256;
   a++;

    if(a == 1)
   {
     a=0;
         LED = ~LED;
   }
}

void time1() interrupt 3
{
   TH0 = (65536-50000)/256;
 TL0 = (65536-50000)%256;
   b++;
 if(b==20)
  {
      a=0;
  b=0;
  TR0=0;
  TR1=0;
  }
}

 

 


作者: jjide    时间: 2010-10-13 02:52
好样的,
作者: a123    时间: 2010-10-13 08:15

谢谢你的夸奖呢!但是还是做得不好:

用了两个定时器,A:占用资源;B:感觉很怪(其实也是编好了之后才想到的可以一个用来定时,另一个用来计数)

 

我现在想用一个定时器也完成它,那个朋友可以帮帮我呢,我上面采用的是用一个定时器,但是失败了,我现在又想到了

两个方案:

1,用延时+定时器(这个我要晚上实验才能有结果)

2,不加延时程序,只用一个定时器(这个希望能够得到大家的学友们的帮助,因为加上学友的程序,我都实验了6个之多了,可是都失败了!!!)

 

 


作者: aphar    时间: 2010-10-14 09:19

#include<reg52.h>

#define uchar unsigned char

sbit P1_4=P1^4;

sbit LED1=P0^0;

uchar a;

 

void main()

{

  P1_4=0;

        a=0;

  TMOD=0X01;

   TH0=0X3C;

   TL0=0Xb0;

   EA=1;

   ET0=1;

   TR0=1;

while(1); 

}

 

void time0() interrupt 1

{

  TH0=0X3c;

   HL0=0Xb0;

a++;

   if(a==1)

      {

          //a=0;把这句去掉就行了吧。

     LED1=~LED1;

       }

         if(a==20)

             {

               TR0=0;

              }

}


作者: a123    时间: 2010-10-18 09:06

谢谢你噢!!!

我今天晚上回去试一下。

 

 

我试了一下,不行噢,

[此贴子已经被作者于2010-10-18 19:31:52编辑过]





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1