|

一体化的红外接收头信号脚接到单片机的RXD,红外发射管信号是从单片机串口TXD输出的,其中单片机的P3.4脚是输出38KHZ的载波信号,是用定时器0工作在方式2,自动重载的,在中断里进行端口取反,产生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自动重载的,产生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); //发射数据
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
a=SBUF ; //把收到的数据存入变量a中
}
else
TI = 0;
}
|
|