編了一個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,實驗板上得不到題目要求的結果。
我做出來了:程序如下,有愿意一起學習共同進步的朋友可以加我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;
}
}

謝謝你的夸獎呢!但是還是做得不好:
用了兩個定時器,A:占用資源;B:感覺很怪(其實也是編好了之后才想到的可以一個用來定時,另一個用來計數)
我現在想用一個定時器也完成它,那個朋友可以幫幫我呢,我上面采用的是用一個定時器,但是失敗了,我現在又想到了
兩個方案:
1,用延時+定時器(這個我要晚上實驗才能有結果)
2,不加延時程序,只用一個定時器(這個希望能夠得到大家的學友們的幫助,因為加上學友的程序,我都實驗了6個之多了,可是都失敗了!!!)
#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;
}
}
謝謝你噢!!!
我今天晚上回去試一下。
我試了一下,不行噢,
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |