单片机学习小组
登录
直播中
qjqb
8年用户
1302经验值
擅长:5762
私信
关注
红外接收电路信号的调制与解调是如何完成的
开启该帖子的消息推送
红外接收
电路信号
调制
怎样去设计一种红外接收
电路
呢?
红外接收电路的工作流程是怎样的?
红外接收电路信号的调制与解调是如何完成的?
回帖
(1)
蒋荣艳
2022-2-15 10:34:23
1.红外接收电路
注意:P32同为外部中断0。
2.工作流程
3.信号的调制与解调
(1)信号的调制
通常使信号更好的被转输,发送端把基带二进制转换成脉冲信号,然后发送/
(2)解调
将脉冲信号重新转换为2进制等信号。
4.NEC协议
发送端的方波图与接收端的方波图正好相反
数据从最低位开始
5.NEC下的编码表示
(1)引导码
用于开始,先拉高9000us左右后拉低4500us左右
(2)用户码
用于查找用户,共16位。
(3)数据码
发送数据,共16位。
其中数据0为先拉高560us后拉低560us,共1125us
其中数据1为先拉高560us后拉低1680us,共2250us
所以可以用时间长短来判断为数据0/1,这里用的是外部中断0
#include
unsigned char Irtime; //储存检测红外高低电平持续时间
unsigned char Ircord[4]; //储存解码后的四个大字节,用户码16位2字节与数据码16位2字节
unsigned char Irdate[33]; //包含起始码在内的33位,用于收集0与1的数据
bit Irok4=0; //解码后的4个字节数据接受完成标志位
bit Irok33=0; //33位数据接收完成标志位
//初始化定时器0.外部中断0,串口
void first1()
{
TMOD |= 0x02; //设置定时器0工作模式二。8位自动重装
TL0 = TH0 = 0; //定时器0溢出一次,加到255个机器周期
EA = 1; //开启总开关
ET0 = 1; //定时器0开关
TR0 = 1; //启动定时器0
IT0 = 1; //设置外部中断0跳边沿触发方式
EX0 = 1; //开外部中断0中断
TMOD |= 0x20; //设置定时器1工作模式二。8位zid重装
TL1 = TH1 = 0xfd; //9600HZ
SM1 = 1; //设置串口工作模式1,10位异步收发
TR1 = 1;
}
//定时器0中断,每中断1次要256个机器周期,即277.46us
void time0() interrupt 1 //277.76us
{
Irtime++; //每277.46us加一次
}
//外部中断0的,由下降沿引起,读取33次脉宽
void time1() interrupt 0
{
static unsigned char i; //用于33次数据计数
static bit startflag ;//开始脉冲位
if(startflag)
{
if(Irtime<53 && Irtime>30) //判断引导码,就从第0位开始存
{
i = 0;
}
Irdate
= Irtime;
Irtime = 0;
i++;
if(i==33)
{
Irok33 = 1;
i = 0;
}
}
else
{
Irtime = 0; //时间归0
startflag = 1; //开始标志位置1
}
}
void Ircordpro()
{
unsigned char i,j,k; //i控制4个字节,就控制8位,k控制33位脉宽
k = 1; //起始码不用,从1开始
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
if(Irdate[k]>5) //大于5就是大于2250us,大于2250us就是数据1,位1的时间比位0时间大
{
Ircord
|= 0x80;
}
if(j < 7)
{
Ircord
>>= 1; //只能位移7次,8次数据就多移动了
}
k++;
}
}
Irok4 = 1;
}
void main()
{
unsigned char i; //计数串口发送字节
first1();
while(1)
{
if(Irok33==1) //判断33次解码是否完成
{
Ircordpro();//解码函数,存4个字节到Ircord[4]内
Irok33 = 0;//清33次脉宽的标志位,以便下次使用
if(Irok4==1)
{
for(i=0;i<4;i++) //4个字节
{
SBUF = Ircord
; //发送数据
while(!TI); //等待发送
TI = 0; //归0
}
Irok4==0; //清4个字节的标志位,以便下次使用
}
}
}
}
1.红外接收电路
注意:P32同为外部中断0。
2.工作流程
3.信号的调制与解调
(1)信号的调制
通常使信号更好的被转输,发送端把基带二进制转换成脉冲信号,然后发送/
(2)解调
将脉冲信号重新转换为2进制等信号。
4.NEC协议
发送端的方波图与接收端的方波图正好相反
数据从最低位开始
5.NEC下的编码表示
(1)引导码
用于开始,先拉高9000us左右后拉低4500us左右
(2)用户码
用于查找用户,共16位。
(3)数据码
发送数据,共16位。
其中数据0为先拉高560us后拉低560us,共1125us
其中数据1为先拉高560us后拉低1680us,共2250us
所以可以用时间长短来判断为数据0/1,这里用的是外部中断0
#include
unsigned char Irtime; //储存检测红外高低电平持续时间
unsigned char Ircord[4]; //储存解码后的四个大字节,用户码16位2字节与数据码16位2字节
unsigned char Irdate[33]; //包含起始码在内的33位,用于收集0与1的数据
bit Irok4=0; //解码后的4个字节数据接受完成标志位
bit Irok33=0; //33位数据接收完成标志位
//初始化定时器0.外部中断0,串口
void first1()
{
TMOD |= 0x02; //设置定时器0工作模式二。8位自动重装
TL0 = TH0 = 0; //定时器0溢出一次,加到255个机器周期
EA = 1; //开启总开关
ET0 = 1; //定时器0开关
TR0 = 1; //启动定时器0
IT0 = 1; //设置外部中断0跳边沿触发方式
EX0 = 1; //开外部中断0中断
TMOD |= 0x20; //设置定时器1工作模式二。8位zid重装
TL1 = TH1 = 0xfd; //9600HZ
SM1 = 1; //设置串口工作模式1,10位异步收发
TR1 = 1;
}
//定时器0中断,每中断1次要256个机器周期,即277.46us
void time0() interrupt 1 //277.76us
{
Irtime++; //每277.46us加一次
}
//外部中断0的,由下降沿引起,读取33次脉宽
void time1() interrupt 0
{
static unsigned char i; //用于33次数据计数
static bit startflag ;//开始脉冲位
if(startflag)
{
if(Irtime<53 && Irtime>30) //判断引导码,就从第0位开始存
{
i = 0;
}
Irdate
= Irtime;
Irtime = 0;
i++;
if(i==33)
{
Irok33 = 1;
i = 0;
}
}
else
{
Irtime = 0; //时间归0
startflag = 1; //开始标志位置1
}
}
void Ircordpro()
{
unsigned char i,j,k; //i控制4个字节,就控制8位,k控制33位脉宽
k = 1; //起始码不用,从1开始
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
if(Irdate[k]>5) //大于5就是大于2250us,大于2250us就是数据1,位1的时间比位0时间大
{
Ircord
|= 0x80;
}
if(j < 7)
{
Ircord
>>= 1; //只能位移7次,8次数据就多移动了
}
k++;
}
}
Irok4 = 1;
}
void main()
{
unsigned char i; //计数串口发送字节
first1();
while(1)
{
if(Irok33==1) //判断33次解码是否完成
{
Ircordpro();//解码函数,存4个字节到Ircord[4]内
Irok33 = 0;//清33次脉宽的标志位,以便下次使用
if(Irok4==1)
{
for(i=0;i<4;i++) //4个字节
{
SBUF = Ircord
; //发送数据
while(!TI); //等待发送
TI = 0; //归0
}
Irok4==0; //清4个字节的标志位,以便下次使用
}
}
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
红外接收
电路信号
调制
谁有38k
红外接收
头的内部
信号
放大与
解调
的具体
电路
?
2017-12-11
7027
一体化
红外接收
头的问题
2017-09-25
2855
红外接收
电路
是由哪些部分组成的?
2021-05-25
2074
红外接收
头有什么功能?
2019-09-24
2449
怎样去设计一种发射端和
接收
端
调制解调
器?
2021-05-25
1665
如何利用
红外接收
模块
接收
遥控器发出的
信号
2021-11-09
2030
如何降低
红外接收
管的功率
2015-11-16
4983
红外接收
设计问题
2015-12-09
9983
单片机小白一个,我想用vs1838b
红外接收
头配合51单片机实现控制led亮灭,
接收
头部分的
电路
以及程序该怎么写
2021-01-09
4031
如何去编写并
完成
红外
遥控测试代码呢
2021-12-01
1303
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分