找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6883|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

[求助][討論]1秒內(nèi)LED閃10次

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:25279 發(fā)表于 2010-10-12 09:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

編了一個(gè)1秒內(nèi)LED1閃10次的程序(12MHZ,STC89C52),編譯OK,但在實(shí)驗(yàn)板上運(yùn)行失敗,網(wǎng)友也幫忙寫(xiě)了個(gè)程序,結(jié)果也是失敗,F(xiàn)在將此程序貼上來(lái),請(qǐng)大家來(lái)一起來(lái)幫幫忙,指教指教,探討探討

 

題目要求:1秒內(nèi)LED1閃10次后停止(或是說(shuō)燈在1秒之內(nèi)只閃10次)

 

 

我寫(xiě)的:

程序分析:閃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;

              }

}

 

當(dāng)以上程序運(yùn)行失敗之后,我在if(a==1)之前加了個(gè)while(1)將兩個(gè)if都放在了{(lán) }中,但結(jié)果仍然達(dá)不到題目要求:1秒鐘之內(nèi)LED1閃爍10次后停止。

 

網(wǎng)友的程序:

#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;

                }

}

以上是網(wǎng)友的程序,大概是這樣吧,因?yàn)樗o我的資料沒(méi)帶在身邊編譯OK,實(shí)驗(yàn)板上得不到題目要求的結(jié)果。

[此貼子已經(jīng)被作者于2010-10-12 18:56:49編輯過(guò)]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:25279 發(fā)表于 2010-10-12 23:32 | 只看該作者

我做出來(lái)了:程序如下,有愿意一起學(xué)習(xí)共同進(jìn)步的朋友可以加我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;
  }
}

 

 

回復(fù)

使用道具 舉報(bào)

板凳
ID:22246 發(fā)表于 2010-10-13 02:52 | 只看該作者
好樣的,
回復(fù)

使用道具 舉報(bào)

地板
ID:25279 發(fā)表于 2010-10-13 08:15 | 只看該作者

謝謝你的夸獎(jiǎng)呢!但是還是做得不好:

用了兩個(gè)定時(shí)器,A:占用資源;B:感覺(jué)很怪(其實(shí)也是編好了之后才想到的可以一個(gè)用來(lái)定時(shí),另一個(gè)用來(lái)計(jì)數(shù))

 

我現(xiàn)在想用一個(gè)定時(shí)器也完成它,那個(gè)朋友可以幫幫我呢,我上面采用的是用一個(gè)定時(shí)器,但是失敗了,我現(xiàn)在又想到了

兩個(gè)方案:

1,用延時(shí)+定時(shí)器(這個(gè)我要晚上實(shí)驗(yàn)才能有結(jié)果)

2,不加延時(shí)程序,只用一個(gè)定時(shí)器(這個(gè)希望能夠得到大家的學(xué)友們的幫助,因?yàn)榧由蠈W(xué)友的程序,我都實(shí)驗(yàn)了6個(gè)之多了,可是都失敗了。。。

 

 

回復(fù)

使用道具 舉報(bào)

5#
ID:25782 發(fā)表于 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;

              }

}

回復(fù)

使用道具 舉報(bào)

6#
ID:25279 發(fā)表于 2010-10-18 09:06 | 只看該作者

謝謝你噢。。

我今天晚上回去試一下。

 

 

我試了一下,不行噢,

[此貼子已經(jīng)被作者于2010-10-18 19:31:52編輯過(guò)]
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表