完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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个字节的标志位,以便下次使用 } } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1193浏览 3评论
613浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 17:29 , Processed in 1.160176 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号