📄 main.c
字号:
#include "STC89C51RC.H"
sbit DQ = P4^3;
sbit SPK = P1^0;
unsigned char irm_code[6];
void delay(unsigned int t)
{
while(t--);
}
void Sound(void)
{
SPK = 0;
delay(10000);
SPK = 1;
}
void rs232_port_init(void)
{
SCON=0x50; //串口工作在方式1,异步模式
PCON=0x80; //波特率翻倍
TMOD=0x20; //定时器1工作在方式2
TH1=0xff; //波特率115200,晶振为22.1184MHz
TL1=0xff;
TR1 = 1;
RI = 0;
TI = 0;
}
void uart_putc(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
//STC单片机特有的外部中断INT2实现红外解码
//解码结果由数据缓冲区返回
void IRMint(void) interrupt 6
{
unsigned int temp;
unsigned char i,j;
EA = 0;/*解码过程禁止其它中断发生*/
temp = 0;
while(!DQ) if(temp++>0x1000) goto return_main;//防止意外死机
if (temp < 0x0200) goto return_main;//Max=0x0222
/*以上完成引导码9ms的低电平检测*/
temp = 0;
while(DQ) if(temp++>0x1000)goto return_main;
if (temp < 0x0150) goto return_main;//Max=0x0216
/*以上完成引导码4.5ms的高电平检测*/
for(j=0;j<6;j++)
{
for(i=0;i<8;i++)
{
irm_code[j]<<=1;
temp = 0;
while(!DQ)if(temp++>0x1000) goto return_main;//通过编码低电平
temp = 0;
while(DQ) if(temp++>0x1000) goto return_main;
if(temp > 0x0060) irm_code[j] |= 0x01;
}
}
/*将结果6字节从串口发出*/
for(j=0;j<6;j++)
{
uart_putc(irm_code[j]);
}
Sound();
return_main:EA = 1;
}
void main()
{
rs232_port_init();
EA = 1;
IT2 = 1;//下降沿中断
EX2 = 1;
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -