|
100黑幣
學(xué)習(xí)紅外線遙控好幾天,看了很多教程,感覺還是一頭霧水,最后自己估摸著寫了一個(gè)最小發(fā)射程序,不出意外,沒有任何動(dòng)靜,請(qǐng)大家?guī)兔匆幌拢@個(gè)程序錯(cuò)在哪兒,如果錯(cuò)的實(shí)在太多,能不能麻煩幫忙寫一個(gè)這樣的小程序,讓我學(xué)習(xí)一下,謝謝!(不要寫大的遙控器程序,我的智商,根本看不懂)
單片機(jī)源程序如下:
#include <stc52.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
sbit plflag=P1^0; //定義紅外發(fā)射口
sbit key=P1^1; //定義一個(gè)發(fā)射開關(guān)
void time_init(); //定時(shí)器初始化,
void s0(); //發(fā)射一位0,
void s1(); //發(fā)射一位1,
void main()
{
plflag=0; //P1.0口先置0,
time_init();
while(1)
{
if(key==0)
{
TL1 = 0x9A; //定時(shí)器1延時(shí)9毫秒設(shè)定,
TH1 = 0xDF; //
TR0 = 1; //打開定時(shí)器0,
TR1 = 1; //打開定時(shí)器1,
while(!TF1); //等待9毫秒
TR0 = 0; //關(guān)閉定時(shí)器0
TR1 = 0; //關(guān)閉定時(shí)器1,
plflag=0; //P1.0口歸0,
TL1 = 0xCD; //定時(shí)器一延時(shí)4.5毫秒,
TH1 = 0xEF; //
TF1 = 0; //清空定時(shí)器1標(biāo)志位,
TR1 = 1; //打開定時(shí)器1,
while(!TF1); //等待4.5毫秒,
TR1 = 0; //關(guān)閉定時(shí)器1,
s0();s0();s0();s0();s0();s0();s0();s0(); //測(cè)試寫三個(gè)字節(jié),0x00,0xff,0xff
s1();s1();s1();s1();s1();s1();s1();s1();
s1();s1();s1();s1();s1();s1();s1();s1();
}
}
}
void s0() //寫一位0的函數(shù),
{
TL1 = 0xFC; //定時(shí)560微秒設(shè)置,
TH1 = 0xFD;
TF1 = 0;
TR0 = 1;
TR1 = 1;
while(!TF1);
TR0 = 0;
TR1 = 0;
plflag=0;
TL1 = 0xFC;
TH1 = 0xFD;
TF1 = 0;
TR1 = 1;
while(!TF1);
TR1 = 0;
}
void s1() //寫一位1的函數(shù),
{
TL1 = 0xFC; //定時(shí)560微秒設(shè)置,
TH1 = 0xFD;
TF1 = 0;
TR0 = 1;
TR1 = 1;
while(!TF1);
TR0 = 0;
TR1 = 0;
plflag=0;
TL1 = 0xEF; //定時(shí)器1.685毫秒設(shè)置,
TH1 = 0xF9;
TF1 = 0;
TR1 = 1;
while(!TF1);
TR1 = 0;
}
void time_init() 定時(shí)器初始化函數(shù),定時(shí)器零產(chǎn)生38khz
{
TMOD = 0x11; //定時(shí)器0定時(shí)器1,設(shè)置為工作模式1,
TL0 = 0xF4; //
TH0 = 0xFF;
TF0 = 0;
TF1 = 0;
ET0 = 1;
EA = 1;
}
void Timer0() interrupt 1 //定時(shí)器0中斷服務(wù)函數(shù)
{
TL0 = 0xf4;
TH0 = 0xFF;
plflag=~plflag;
}
|
|