- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
摇控接收原理
一、遥控原理:(NEC)
电视遥控器使用的是专用集成发射芯片来实现遥控码的发射,如东芝飞利浦等相互之间采用的遥控编码格式互不兼容,所以各机型的遥控器通常只能针对各自的遥控对象而无法通用???????NEC标准:遥控载波的频率为38KHz(占空比为1:3);当某个按键按下时,系统首先发射一个完整的全码,然后经延时再发射一系列简码,直到按键松开即停止发射。简码重复延时108ms,每两个引导脉冲上升沿之间的间隔都是108ms。 其中,引导码高电平ms,低电平4.5ms;系统码位,数据码位,共32位;数据0用“高电平0.56ms+低电平0.56ms”表示,数据1用“高电平0.56ms+低电平1.6875ms”表示,一个简码=引导码+系统码位0的反码+结束位(0.5625ms)高电平。????各部分码的作用:引导码用来通知接收器其后为遥控数据。系统码用来区分是哪一机型的数据,接收端依此来判断后续的数据是否为须执行的指令。数据码用来区分是哪一个键被按下,接收端根据数据码做出应该执行什么动作的判断。简码是在持续按键时发送的码。它告知接收端,某键是在被连续地按着。遥控数据传输系统的关键是数据传输的可靠性。为了提高编码的可靠性,NEC标准规定系统码、数据码后分别接着传送一个同样的码或者反码,供误码校验用。 调制频率(晶体使用455KHZ时)
F=1\T=Fosc\12=38KHZ (Fosc是晶振频率)
2、数据格式:
数据格式包括引导码、用户码、数据码和数据反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二个用户码也可以在遥控应用电路中被设置成第一个用户码的反码。
使用455KHZ晶体时各代码所占用的时间。
3、位定义:
用户码和数据码中的每一个位可以是位“1”,也可以是位“0”。区分0、1是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式(ppm)#include Common.h
#include system.h
#include KEYPAD.H
#include OSDDraw.h
#include TwoWire.h
#include Remote.h
#define __GLOBAL_H__
#include Global.h
_Bool Filter13(_Bool le)
{
_Bool r;
r=INT0;
if(le==1)
{
asm(NOP\nNOP\nNOP\nNOP);
r=INT0;
asm(NOP\nNOP\nNOP\nNOP);
r=INT0;
}
else
{
asm(NOP\nNOP\nNOP\nNOP);
r|=INT0;
asm(NOP\nNOP\nNOP\nNOP);
r|=INT0;
}
if(r==le)
return 1;
else
return 0;
}
/*遥控接收在此中断程序内完成 数据放在ir_data内*/
/************************************/
/* Interrupt for IR subroutine */
/* external interrupt source INT0 */
/************************************/
#pragma interrupt INT0Remote();
void INT0Remote(void)
{
register BYTE i;
unsigned int count; /*计时变量*/
unsigned int temp0,temp1,temp2,ir_code=0;
ir_enable=TRUE;
msttrc=1;
tstart_trcmr=0;
trcic = 0x00;
tck0_trccr1=0;
tck1_trccr1=0;
tck2_trccr1=1;
trc=0;
tstart_trcmr=1;
/************************************/
/* Detect IR Head */
/************************************/
do /*Detect IR head 9mS*/
{
count=trc; /*count :us unit */
if(Filter13(1)==1) break;
}while(count=(IR_HEAD+DELTA));
tstart_tr
文档评论(0)