|

一體化的紅外接收頭信號腳接到單片機的RXD,紅外發(fā)射管信號是從單片機串口TXD輸出的,其中單片機的P3.4腳是輸出38KHZ的載波信號,是用定時器0工作在方式2,自動重載的,在中斷里進行端口取反,產(chǎn)生38.4KHZ的方波,晶振用的是11.0592M,通信的波特率是9600
#include <reg51.h>
#define uchar unsigned char
sbit led=P3^3;
uchar a;
sfr AUXR = 0x8E; //STC單片機1T的芯片時需要用的
void InitUART(void) //這個初始化是用的STC的1T單片機時用的
{
TMOD = 0x22;
SCON = 0x40;
TH1 = 0xDC;
TL1 = TH1;
PCON = 0x00;
TH0 = 0x70;
TL0 = TH0;
ET0 = 1;
TR0 = 1;
EA = 1;
ES=1;
TR1 = 1;
}
////////////////////////////////////////////////////下面的初始化是用的12T的單片機時,
/*void InitUART(void)
{
TMOD = 0x22;
SCON = 0x40;
TH1 = 0xDC;
TL1 = TH1;
PCON = 0x00;
TH0 = 0xf4;
TL0 = TH0;
ET0 = 1;
TR0 = 1;
EA = 1;
ES=1;
TR1 = 1;
} */
///////////////////////////////////////////////////////////////////////
void Timer0Interrupt(void) interrupt 1 //定時器0工作在方式2自動重載的,產(chǎn)生38.4KHZ方波作為載波用的
{
led=!led;
}
////////////////////////////////////////////
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
AUXR = AUXR|0xB0; // T1, 1T Mode
InitUART();
while(1)
{
SendOneByte(a); //發(fā)射數(shù)據(jù)
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
a=SBUF ; //把收到的數(shù)據(jù)存入變量a中
}
else
TI = 0;
}
|
|