《遥控接收程序设计指引(8页).doc》由会员分享,可在线阅读,更多相关《遥控接收程序设计指引(8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-遥控接收程序设计指引-第 8 页遥控接收设计指引一、 美的遥控编码波形规范(东芝编码)美的遥控编码以帧为基本单位,数据长度从1帧到4帧,每帧数据的编码格式为:L,A,A,B,B,C,C,L为引导码,A、B、C为8位数据码,A 、B、C分别是A、B、C的反码,因此共计48位数据。两帧数据之间有分隔符S。具体波形示意如下:1、引导码L 8.8ms 4.4ms2、两帧之间分隔符S 5.76ms 0.54ms 5.22ms3、数据0 1.08ms 0.54ms 0.54ms4、数据1 2.16ms 0.54ms 1.62ms5、一次发码的终止符: 0.54ms 6、 发射波形5.22ms二、 硬件电
2、路遥控接收电路主要由一个遥控接收头、电源滤波电路、信号滤波电路、限流电路组成,电路图如下:三、 芯片资源说明1、外部中断(可以检测上升沿和下降沿)2、定时器以9177芯片为例,可以使用16位定时器TM90和外部中断INTP0来完成遥控接收程序。四、 算法说明遥控接收中断子程序中,缓冲区共7个单元56位,接收数据时从最后一个单元向前压栈;对于只有一帧的数据,可以直接读出数据比较;但对于普通的两帧数据,每当第二帧数据接收到8位后,就可以与第一帧里面的最前一个数据比较,通过不断地循环移位,就可以比较出前后两帧码是否完全一样,这样只需要7个RAM单元就可以完成12个数据的比较,是一种比较节省RAM空间
3、的做法。五、 程序关键控制点说明l 波形检测说明:遥控接收的头码,高电平和低电平都要检测和判断;对于数据“0”和数据“1”,由于美的遥控器编码本身就很严谨,所以可以检测一个周期的长度,而不必分开检测低电平和高电平。l 脉宽误差:对于美的遥控器编码,头码、数据码和分隔码的允许误差范围推荐在20%左右比较合适;如果所使用的芯片定时器精度较低,数据码的允许误差范围可以适当扩大到25%。l 抗干扰设计:一般来讲,为防止中断误触发,在进入遥控接收中断后先判断接收口的电平状态,如果电平状态不对,则可能是误触发,应直接退出中断程序。l 无效码处理:在处理无效码时(例如单冷机型接收到制热开机信号),建议程序不
4、进行任何处理,蜂鸣器不应有动作。l 解码处理:所有遥控码都必须进行正反码的判断,且普通码前后两帧码要进行比较。另外,编码中无效的内容也是固定值,为保证解码程序的严谨性,最好也进行判断。l 故障时解码处理:本范例程序中,当出现故障时,直接在遥控接收程序中将接收到的内容舍弃;其实也可以放到解码程序中去处理,效果相同。六、 程序框图1、遥控接收中断程序框图2、解码程序框图七、 应用程序范例l 常量说明lleadcode equ 275 ;允许偏差20%lleadcodel equ 220 ;头码电平脉宽最小值lleadcodeh equ 330 ;头码电平脉宽最大值onecode equ 135 ;
5、允许偏差20%onecodel equ 108 ;数据1脉宽最小值onecodeh equ 162 ;数据1脉宽最大值zerocode equ 67 ;允许偏差20%zerocodel equ 53 ;数据0脉宽最小值zerocodeh equ 81 ;数据0脉宽最大值sepcode equ 360 ;允许偏差20%sepcodel equ 288 ;间隔符脉宽最大值sepcodeh equ 432 ;间隔符脉宽最大值l 变量说明rembuf0 :ds 7 ;遥控码存放区remlimit :ds 1 ;用来记数,当连续16ms无中断产生时,就直接初始化遥控接收程序l I/O口定义remotep
6、i equ p3.0l 标志变量说明remoteflag :ds 1headf equ remoteflag.0 ;为1表示已经接收到头码separatef equ remoteflag.1 ;为1表示已经接收到间隔码initiatef equ remoteflag.2 ;遥控接收初始化标志,为1表示需要初始化remotef1 equ remoteflag.3 ;接收到经济运行码,该标志置1remotef0 equ remoteflag.4 ;头码接收辅助标志,低电平判断OK后置1remotef3 equ remoteflag.5 ;为1表示已经接收到普通码,可以接收快检码remotef4 e
7、qu remoteflag.6 ;1表示中断为上升沿触发;0为下降沿触发remotef2 equ remoteflag.7 ;与remotef1标志配合使用,表示接收到了经济运行信息l 程序范例说明1、在主程序初始化部分,需要对遥控接收进行初始化 set1 initiatef clr1 remotef4 mov intm0,#01000000b ;intp0:falling mov mk0,#11110001b ;enable intp0-2 interrupt2、以下为遥控接收中断子程序,所有码的接收工作均在该程序中完成int_p0: push ax push hl ;保存现场;remlim
8、it接收记数单元,当连续16ms没有接收到遥控信号时,遥控接收程序初始化 bt remotef4,$ilab200 bt remotepi,$ilab201 br $ilab202ilab200: bt remotepi,$ilab202ilab201: br ilab342ilab202: movw ax,tcp90 ;读出tcp90最新捕获的数据到ax寄存器 mov remlimit,#4 ;一旦有遥控中断,就初始化remlimit bf initiatef,$ilab300 ;判断遥控接收是否许要初始化;不需要就跳转;以下程序是进行遥控接收初始化工作 movw precount0,ax
9、;保存当前定时器记数值 and remoteflag,#10000000b ;初始化遥控接收辅助标志 mov intm0,#01000100b ;设置intp0为上升沿中断 set1 remotef4 ; br ilab342 ;中断返回ilab300: mov intm0,#01000000b ;设置intp0为下降沿中断 clr1 remotef4 movw hl,ax xch a,x sub a,precount0 xch a,x subc a,precount0+1 xchw ax,hl ;计算测出的脉冲宽度 movw precount0,ax ;将当前的记数值存入precount0单
10、元 xchw ax,hl ;将脉冲宽度保存到ax寄存器 bt headf,$ilab320 ; cmpw ax,#hleadcodel ;判断脉冲宽度是否在头码允许误差范围内 bc $ilab324 ;遥控接收初始化 cmpw ax,#hleadcodeh ; bnc $ilab324 ;遥控接收初始化 bt remotef0,$ilab310 ;头码低电平是否已经检测到;如果是,跳转 set1 remotef0 ;头码低电平已经检查OK br ilab342 ;中断返回ilab310: set1 headf ;头码OK clr1 remotef0 ;清除头码辅助标志 mov ivariab0
11、,#48 ;遥控接收48位记数 br ilab342 ;中断返回ilab320: cmp ivariab0,#0 ;是否已经接收到第49位数据?即分隔符 bnz $ilab330 ;没有则跳转到ilab330 cmpw ax,#sepcodel ;判断是否为分隔符,如不是就初始化遥控接收 bc $ilab324 ; cmpw ax,#sepcodeh bc $ilab323 ;跳转表示一帧数据接收完毕,并且该帧后面带有分隔符ilab324: nop br ilab343 ;初始化遥控接收ilab323: mov a,rembuf0+1 ;以下程序判断接收到的一帧码是否为经济运行码 xch a,
12、x mov a,rembuf0+2 cmpw ax,#4db2h ;识别码A及其反码 bnz $ilab321 mov a,rembuf0+3 xch a,x mov a,rembuf0+4 cmpw ax,#1fe0h ;编码J和其反码 bnz $ilab321 mov a,rembuf0+5 xch a,x mov a,rembuf0+6 cmpw ax,#0fc03h ;编码K和其反码 bnz $ilab321 set1 remotef1 ;收到经济运行码 clr1 separatef ;清除间隔码标志 br ilab322ilab321: set1 separatef ;置间隔码标志,
13、表示已经接收到一帧普通码ilab322: clr1 headf ;初始化相关标志接收下一帧数据 mov intm0,#01000100b ;设置intp0中断为上升沿 set1 remotef4 br ilab342 ;中断返回ilab330: cmpw ax,#onecodel ;以下比较是判断接收到的数据是0或1 bc $ilab331 cmpw ax,#onecodeh bc $ilab332ilab331: cmpw ax,#zerocodeh bnc $ilab324 ;脉宽不正确,初始化接收程序 cmpw ax,#zerocodel bc $ilab324 ;脉宽不正确,初始化接收
14、程序ilab332: mov a,rembuf0+6 rolc a,1 mov rembuf0+6,a mov a,rembuf0+5 rolc a,1 mov rembuf0+5,a mov a,rembuf0+4 rolc a,1 mov rembuf0+4,a mov a,rembuf0+3 rolc a,1 mov rembuf0+3,a mov a,rembuf0+2 rolc a,1 mov rembuf0+2,a mov a,rembuf0+1 rolc a,1 mov rembuf0+1,a mov a,rembuf0 rolc a,1 mov rembuf0,a ;朝存储区内
15、移数据,存储区长度为56位 dec ivariab0 bt separatef,$ilab344 ;前面是否有分隔符,如果没有,就判断是否是风向;有,就判断是否快检 bnz $ilab342 ;如果没有接收到第48位,则中断返回 cmp rembuf0+1,#0b2h ;以下程序判断是否是风向码 bnz $ilab342 ; movw ax,rembuf0+2 ; cmpw ax,#0f4dh ;比较B和A是否符合规范 bnz $ilab342 ; movw ax,rembuf0+4 ; cmpw ax,#0e0f0h ;比较C和B是否符合规范 bnz $ilab342 ;不是则退出 cmp
16、rembuf0+6,#1fh ;判断C的反码是否正确 bnz $ilab342 ;不是则退出 br ilab345 ;表示接收到风向码ilab344: bf remotef3,$ilab344a ;判断前面有无接收到两帧遥控信息,没有则不需要判断是否是快检码 bnz $ilab342 ;如果没有接收到第48位,则中断返回 cmp rembuf0+1,#0b2h ;以下程序判断是否是快检码 bnz $ilab343 ;reset receiving movw ax,rembuf0+2 cmpw ax,#0b4dh bnz $ilab343 ;reset receiving movw ax,rem
17、buf0+4 cmpw ax,#0e0f4h bnz $ilab343 ;reset receiving cmp rembuf0+6,#1fh bnz $ilab343 ;reset receiving clr1 delay3minf br $ilab343 ;reset receivingilab344a: mov a,ivariab0 and a,#00000111b ;判断是否接收到新的8位信息 bnz $ilab342 ;没有则退出 mov a,rembuf0 cmp a,rembuf0+6 bnz $ilab343 ;如果前后两帧码不同,则初始化遥控接收程序 cmp ivariab0
18、,#0 ;判断第二帧数据有没有接收完毕 bnz $ilab342 ;如果第二帧没有接收完,退出ilab345: cmp error,#0 ;是否有故障,有则初始化遥控接收程序 bnz $ilab343 ;如果有故障则屏蔽中断 clr1 remotef2 ; bf remotef1,$ilab340a ; set1 remotef2 ;ilab340a: set1 processf ; set1 remotef3 ;一帧码接收完毕,此标志为1表示可以接收快检码 br ilab342 ;中断返回ilab343: set1 initiatef ;设置遥控接收初始化标志 mov intm0,#01000000b ;设置intp0为下降沿触发 clr1 remotef4 ;ilab342: pop hl ;恢复现场 pop ax reti八、 遥控接收出现问题说明 T型分体机在老化室里出现定时灯点亮问题(GR8芯片)。主要原因:由于解码程序没有比较前后两帧码是否相同,而直接对后一帧码进行解码;当使用快检遥控器时,如果前面一帧码被干扰导致不能正常接收,程序就把快检码当作正常码来解码,导致程序误处理为定时信息。九、 版本更新说明(1) 2003/06/05 V1.0版本