#include <reg52.h>
sbit TX=P0^0; //输出位
unsigned int y=0;//要输出的二进制数0,1标志位
unsigned int a=0;//38K输出标志位
unsigned char data_shuju;//要发送的数据
unsigned int counter=0; //中断计数标志
unsigned int counter_end; //计数结束标志位
void init_timer0()
{
TMOD&=0XFD; //T0工作在方式一
TMOD|=0x01;
TH0=0xFF; //13us一个周期
TL0=0xF2;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void timer0_38K() interrupt 1 //38K调频信号
{
TH0=0xFF;
TL0=0xF2;
a=~a; //一个周期反转一次
counter++;
}
void send_byte(y,counter_end) //发送0,1位
{
counter=0;
while(counter<counter_end)
{
TX=y&a ;
}
}
void send_data(data_shuju) //发送字节
{
if((data_shuju&0x01)==0x01) // 判断二进制数个位为1还是0
{
send_byte(1,43); //560us/13us=43
send_byte(0,43);
}
else
{
send_byte(1,43);
send_byte(0,130); //(2250-560)/13=130
}
data_shuju>>=1;
}
void main()
{
while(1){
init_timer0();
send_byte(1,700); //引导码 9000/13=692
send_byte(0,350); //引导码 4500/13=346
send_data(0x0F); // 地址码 随便写的
send_data(0xF0); // 地址反码
send_data(0xFF); // 数据码
send_data(0xFE); // 数据反码
}
}
这是我红外发射的程序,大家帮忙看下,哪里有问题。本人菜鸟用的是STC89C52RC,晶振12M。不知道这样可以发射出来么。手边有一个红外避障的小模块,上面的接受头接收到红外信号小灯会闪烁,用遥控器发射小灯会变化,可用我的程序和发射模块就不好用了!
|