STC8H8接收红外TSMP58138例程
时间: 2023-09-15 19:15:23 浏览: 144
STC8的各种实验例程
以下是STC8H8单片机使用TSMP58138红外接收模块的例程,供你参考。
```
#include <stc8.h>
#define IR_IN P33 //红外接收器接口
unsigned char ir_state = 0; //红外接收状态
unsigned int ir_code = 0; //红外接收代码
void ir_init() //红外接收初始化
{
IR_IN = 1; //设置为输入模式
EX1 = 1; //开外部中断1
IT1 = 1; //下降沿触发
EA = 1; //开总中断
}
void ir_interrupt() interrupt 2 //外部中断1
{
unsigned int ir_data = 0;
unsigned char ir_time = 0;
if (IR_IN == 0) //判断是否为下降沿
{
while (IR_IN == 0) //等待引脚变为高电平
{
ir_time++;
if (ir_time >= 200) //超时退出
{
return;
}
Delay10us(); //延时10us
}
ir_time = 0;
while (IR_IN == 1) //等待引脚变为低电平
{
ir_time++;
if (ir_time >= 200) //超时退出
{
return;
}
Delay10us(); //延时10us
}
for (unsigned char i = 0; i < 16; i++) //获取16位数据
{
ir_time = 0;
while (IR_IN == 0) //等待引脚变为高电平
{
ir_time++;
if (ir_time >= 200) //超时退出
{
return;
}
Delay10us(); //延时10us
}
ir_data <<= 1;
ir_time = 0;
while (IR_IN == 1) //等待引脚变为低电平
{
ir_time++;
if (ir_time >= 200) //超时退出
{
return;
}
Delay10us(); //延时10us
}
if (ir_time > 8) //判断是否为1
{
ir_data |= 0x01;
}
}
ir_code = ir_data;
ir_state = 1;
}
}
void main()
{
ir_init(); //红外接收初始化
while (1)
{
if (ir_state == 1) //判断是否接收到红外信号
{
//对接收到的红外信号进行处理
ir_code = 0;
ir_state = 0;
}
}
}
```
该例程中使用了外部中断1来接收红外信号,并使用了TSMP58138红外接收模块。当接收到下降沿时,开始接收16位的红外信号数据,并在获取完整个数据后进行处理。
需要注意的是,该例程中的红外信号数据处理部分还未完成,需要根据具体应用进行相应的处理。同时,也需要注意红外接收模块的引脚连接和电源供应。
阅读全文