标题: PT2262遥控器的单片机软件解码(省去PT2272) [打印本页]
作者: 51黑黑黑 时间: 2016-2-24 21:18
标题: PT2262遥控器的单片机软件解码(省去PT2272)
本文中用到的PT2262/PT2272芯片是一对遥控收发的芯片,关于她的中文资料可以参考:http://www.51hei.com/bbs/dpj-44498-1.html
(一)、遥控器基本知识
遥控器种类很多,常见的有电视遥控器,汽车遥控器,卷帘门遥控器,空调遥控器,航模遥控器等等,按载波分类可以分为红外线遥控器,无线电遥控器,超声波遥控器等,红外线遥控的特点适用于室内,短距离的情况,功耗小,成本低,无线电遥控适用于远距离,室外情况下,成本高一些。其实我们每天都在和遥控器打交道,大部分人只知道使用这些遥控器,除非专业人员很少有人知道它的工作原理。
1、 遥控器的组成
下图是用PT2262编码的遥控器电路。
下图是红外线载波的电视机遥控器电路。
由上图可知遥控器一般是由按键电路,编码电路,发射电路及电源等组成。
无线发射电路是由三极管加上电阻,电容,三极管,声表面滤波器,天线组成。红外线发射电路比较简单,由电阻、三极管和红外线发射管组成。
编码电路主要由编码芯片完成,每个遥控器上面的编码都是通过集成电路芯片来完成的。只要我们按下按键,编码将通过发射电路以无线的形式发送出去。
2、编码芯片分类:
(1)按编码类别分
固定码:所谓的固定码,就是指每次发送出去的编码都不会改变,因此使用这类芯片的遥控器比较容易被复制。如PT2262,PT2260 PT2240 Ev1527 FP527 HT6014 SMC918等芯片。
滚动码:所谓滚动码,就是指每次发出去的码都不一样,通过一系列算法,完成滚动输出的功能。这类芯片的遥控器复制比较困难,可以通过移值,或者已破解过的遥控器来完成复制工作。如HCS301 HC300 HCS201 HCS200 HCS361等芯片。
(2)按编码方式分
可变型:就是编码可通过人工手动修改。如PT2262编码集成电路,它有18个脚。它的1--8脚属于地址编码端,可以进行三态编码,就是一只脚可以是三种状态,即:接低电平(0)、高电平(1)、或悬空(F)三种状态,编码数有3的8次方,也就是共有6561种状态。这是一般的用法。PT2262还有4支脚,就是10、11、12、13,一般它是用来做数据端。它也可以编码,但是编码就只有两种状态:低电平(0)、高电平(1),没有悬空这种状态了。下面1图中的编码区编码是A0—A7都悬空,也就是A0=F,A1=F,A2=F,A3=F,A4=F,A5=F,A6=F,A7=F,下面2图中的编码是A0=0,A1=F,A2=0,A3=0,A4=1,A5=0,A6=1,A7=F,所以通过改变编码器的焊点就改变了地址编码。

固定型:指芯片出厂时由厂家固化好编码在芯片里面。如PT2240 SMC918 EV1527等。
3、 遥控器的解码
我们通常使用的遥控器是指发射编码的一方,被遥控的物品应该是接收方,当接收方收到遥控信号后,需要解码才能达到遥控的目的。接收端的解码方式有硬件解码和软件解码,比如PT2262是编码芯片,PT2272是解码芯片,当PT2262和PT2272配对使用时,要求发送端编码芯片PT2262的地址编码与接收端解码芯片PT2272的地址编码必须一致,而且振荡频率相匹配,才能达到遥控目的。参见下表PT2262的震荡电阻如果采用1.2M,那么PT2272的震荡电阻就要采用200K才行。
如果采用软件解码,就可以省去PT2272这个芯片了。用软件编程的方法解码,必须知道该编码芯片的编码格式。比如PT2262发出的编码由地址码、数据码、同步码组成。地址码和数据码都用宽度不同的脉冲来表示,两个窄脉冲表示“0”;两个宽脉冲表示“1”;一个窄脉冲和一个宽脉冲表示“F”(“悬空”)。
(二)、PT2262 编码芯片的软件解码
1、单片机解码电路

单片机解码电路由128*64液晶显示屏,AT89C51单片机,AT24C512存储器,CD40106,315M收发模块和433M收发模块组成。液晶显示屏用于显示参数和解码后的结果,存储器用于保存解码数据,CD40106由六个施密特触发器电路组成。每个电路均为在两输入端具有施密特触发器功能的反相器,CD40106用于改善波形并对波形反相的作用,因为大部分无线遥控器都是采用315MHZ和433Mhz的无线电频率,所以采用了这2种频率的收发模块,用于接收待解码的无线电信号,实物如下图。
2、解码原理
上图是 PT2262编码芯片的编码格式,PT2262输出数据的顺序:A0A1A2A3A4A5A6A7D0D1D2D3同步码 A0A1A2A3A4A5A6A7D0D1D2D3同步码……,连续发四次。每组编码之间由同步码隔开,同步码低电平宽度是窄脉冲宽度(4T)的31倍(124T),用单片机软件解码时,程序只要判断出同步码,然后对后面的字码进行脉冲宽度识别即可。2262每次发射时至少发射4 组字码,我们只需连续两次检测到相同的地址码加数据码就可以了。
不同公司的2262,振荡电阻一样,PT2262的振荡频率会有区别,估算公式f=2*1000*16/Rosc(kΩ) kHz其中Rosc 为振荡电阻这里我们选用Rosc=4.7MΩ,频率f≈6.8kHz,。T=1/f≈147微秒,同步脉冲的宽度是124T=18228微秒,由上图可见数据“0”是2个(4T=588微秒)短脉冲,间隔(12T=1764微秒)低电平。数据“1”是2个12T的高电平宽脉冲,间隔一个4T的低电平窄脉冲,数据“F”是1个高电平窄脉冲间隔12T的低电平宽脉冲,再加一个12T的高电平宽脉冲。总结如下:
同步码占用124T=18228微秒,时间较长,数据“0”,“1”,“F”是由2个脉冲组成,一个数据占用32T=4704微秒时间。数据“0”,“1”,“F”特点见下表:
上表中我们用“窄、窄”表示数据“0”,“宽、宽”表示数据“1”,“窄、宽”表示数据“F”,实际应用时是经过CD40106反相后的波形,所以数据“0”就变成“宽、宽”,数据“1”变成“窄、窄”,数据“F”变成“窄、宽”了。我们用51单片机的定时器来测量这些脉冲的宽度来确定数据是“0”,“1”,还是“F”。这就是解码原理。
3、PT2262 软件解码的单片机程序
ORG0000H ;2011年9月1日通过,433Mhz无线发送模块,2262解码程序,单片机使用6兆晶体,震荡电阻是4.7兆欧电阻
AJMP L0
ORG 000BH
ORG 0013H;外部中断P3.3脚INT0入口地址
ORG 001BH
RETI
ORG 0025h
L0:
MOV TMOD, #11H
MOV 8CH, #3CH
MOV 8AH, #0B0H
CLR EA;打开CPU总中断请求
QL: MOV A,#00H
MOV R2,#66D ;清数据区;;
MOV R0,#18H
QRAM: MOV @R0, A
INC R0
CLR A
DJNZ R2, QRAM
SS: MOVR6,#24; 查找同步码,同步码高电平长度是359微秒的31倍11129微秒=15BCH,所以TH1=15和10之间
SS1: JB P3.2, SS1 ;躲过前1组数据,共发射4组数据
JNB P3.2,$ ;
DJNZ R6,SS1
SSS0: JB P3.2,$ ; 编码信号反相后送到单片机的P3.2口进行解码
MOV 8DH,#00H ;定时器1时间常数
MOV 8BH,#00H
JNB P3.2,$ ;测量高电平时间
SETB TR1 ;高电平启动定时器1
JB P3.2,$
CLR TR1
MOV A, TH1
MOV R2,A
CLR C
SUBBA,#15H ;同步码高电平时长,比15h长返回
JNC SSS0
MOV A,R2
CLR C
SUBBA,#10H ;同步码高电平时长,比10h短返回
JC SSS0
SS0: JB P3.2,$ ;找到同步码后,开始解码
MOV R0,#1AH
MOV R1,#18H
MOV R2,#2
S01: MOV R6,#49 ;判断高电平时间常数,识别数据?
S0: MOV 8DH,#00H ;定时器1时间常数
MOV 8BH, #00H
S1: JNB P3.2,S1
SETB TR1 ;高电平启动定时器1
S2: JB P3.2,S2 ;等待变低
CLR TR1
S3: MOV A,TH1 ;低电平停止定时,把数据放到@R0中
MOV@R0,A
INC R0
JS2: DJNZ R6,S0 ;校验1AH及33H起始的24个数据,如果校验成功说明解码成功
MOV R2,#24
MOV R0,#1AH
MOV R1,#33h
BJ1: MOVA,@R0
XRL A,@R1
JNZ QL
INC R0
INC R1
DJNZ R2,BJ1
SSS: CLRP1.2;蜂鸣器鸣响嘀嘀嘀的声音,表示解码成功
LCALL DELAY2
SETB P1.2;蜂鸣器停止
MOV R2,#12
MOV R1,#4CH
MOV R0,#1AH
CZ: MOV A,@R0
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
XRL A,#10H ;A0-A8悬浮时波形是一宽一窄两个高电平波形
JNZ CZ1
MOV A,#0FH
MOV @R1,A
AJMP CZ4
CZ1: MOVA,@R1
XRLA,#11H ;A0-A8=0时波形是2个宽高电平波形
JNZ CZ2
MOV A,#0
MOV @R1,A
AJMP CZ4
CZ2: MOVA,@R1
XRL A,#00H
JNZ CZ4
MOVA,#01H ;A0-A8=1时波形是2个窄高电平波形
MOV @R1,A
CZ4: INCR1
INC R0
DJNZ R2,CZ
J01: MOVR1,#4CH;数码管显示解码后的12个数据(略)
MOV R4,#12;49;10
;LCALL XS
AJMP QL
YS: MOV 7EH, #64H
YS1: MOV 7FH, #0FFH
YS22: DJNZ 7FH, YS22
RET
DELAY: MOV R5, #88H
DEL: NOP
DJNZ R5, DEL
RET
DELAY1: MOV R6, #10H
DELA: ACALL DELAY
DJNZ R6, DELA
RET
DELAY2: MOV R6, #0FFH
DE: ACALL DELAY
DJNZ R6,DE
RET
END
(三)、PT2262编码芯片的软件编码
上图是PT2262编码芯片的编码格式。根据PT2262编码芯片的编码格式可以看出同步码时长=4T高+124T低+4T高;数据“0”=4T高+12T低+4T高+12T低;数据“1”=12T高+4T低+12T高+4T低;数据“F”=4T高+12T低+12T高+4T低。我们可以用单片机通过软件来模拟PT2262的这个编码过程,用软件代替了硬件PT2262,由于通过软件可以模拟不同的震荡电阻,同时地址编码也可以随意更改,还可以选择不同的发射模块(315Mhz或433Mhz),所以更具有通用性。
我们把2262的地址码用4个字节表示,如FFFF0101表示A0、A1、A2、A3(2262的1、2、3、4脚)开路,A4接地,A5接正电压,A6接地,A7接正电压。我们再用2个字节表示4个数据码,如0001表示D3、D2、D1(2262的10、11、12脚)为低电平,D0为高电平。把这6个字节数据存到单片机38h单元起始的 RAM中,R6存发送次数,R4存发送字节数,主程序中调用VFSS0软件编码子程序如下:
LED EQU0B7H ;P3.7
SDA EQU0B6H ;P3.6
SCL EQU 0B5H ;P3.5
JS433 EQU0B4H ;P3.4
JS315 EQU0B3H ;P3.3
JPSM EQU0B2H ;P3.2
FS433 EQU0B1H ;P3.1
FS315 EQU0B0H ;P3.0
XPOS EQU 1AH ;列方向地址指针(用于LCDPOS子程序)
YPOS EQU 1BH ;行方向地址指针(用于LCDPOS子程序)
DPHH EQU 1CH ;存512高位地址
DPLL EQU 1DH ;存512低位地址
RSPIN EQU 80h ;P0.0
RWPIN EQU 81h
EPIN EQU 82h
CS1PIN EQU 83h
CS2PIN EQU 84h
FSZ1: CALLVFSS0 ;调用VFSS0子程序发送数据
AJMP DIS
VFSS0: MOVR6,#5 ;发5次
VFKS0: MOVR0,#38H
MOVR4,#6 ;发送6个字节数据,其中4个字节地址,2字节数据
CALLFS0 ; 先发送同步码:4T的高电平124T的低电平。
CALLFTB ;124低
VFSJ1: MOVR3,#2 ;发送一个字节,分2次发送,先发高4位,后发低4位
MOVA,@R0 ;取出要发送的编码数据
ANL A,#0F0H
SWAP A
MOV B,A
VFS03: XRLA,#0FH ;先发高4位,低4位保存到B寄存器
JNZ FS04
VFSF: ACALL FS0 ; 发送F,4T高;F=4T高+12T低+12T高+4T低
ACALL FSC ;12T低 F=4T高+12T低+12T高+4T低
ACALL FS1 ;12T高
ACALL FSD ;4T低
AJMP VFS06
VFS04: MOVA,B
XRLA,#01H ;1=12T高+4T低+12T高+4T低
JNZ VFS05
ACALL FS1 ; 发送1,先发12T高
ACALL FSD ;4T低
ACALL FS1 ;12T高
ACALL FSD ;4T低
AJMP VFS06
VFS05: MOVA,B ;发送0,0=4T高+12T低+4T高+12T低,
XRL A,#0H
JNZ VFS08
ACALL FS0 ;4T高
ACALL FSC ;12T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
AJMP VFS06
VFS08: ;MOVA,B ;0=4T高+12T低+4T高+12T低,
; XRL A,#04H
;JNZ VFS06
ACALL FS1 ;12T高
ACALL FSd ;4T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
VFS06: MOVA,@R0
ANL A,#0FH
MOV B,A
DJNZR3,VFS03 ;一个字节发送完了没有?没完继续
INC R0
DJNZR4,VFSJ1 ;6个字节全发送完了没有?没完继续,发送完发同步
ACALL FS0 ;4T高 ;0=4T高+12T低+4T高+12T低,
ACALL FSC ;12T低
ACALL FS0 ;4T高
ACALL FSC ;12T低
VFS07: DJNZ R6,VFKS0 ;一共发送5遍,发送完了没有?没完继续
RET
;发12T高电平
FS1: MOV A,35H;#01H
CPL A
MOV 8CH, A
MOV A,36H;#85H
CPL A
MOV 8AH,A
MOV A,R2
XRLA,#03H ;R2值选择发送模块是433MHZ还是315MHZ
JZ FS2
CLRFS433 ;经40106反相后变成高电平
AJMP FS3
FS2: CLR FS315
FS3: SETB TR0
FSF01: JBC TF0, FSF03
AJMP FSF01
FSF03: CLR TR0
SETB FS433
SETB FS315
RET
;发送4T高电平
FS0: MOV A,#00H
CPL A
MOV 8CH, A ; 给定时器0赋值,TH0=8CH,TL0=8AH,定时长度不同,模拟的震荡电阻值就不同,脉宽就不一样
MOV A,37H;#85H
CPL A
MOV 8AH, A
MOV A,R2
XRL A,#03H
JZ FS22
CLRFS433 ;经40106反相后变成高电平
AJMP FS33
FS22: CLR FS315
FS33: SETB TR0
FSF02: JBC TF0, FSF04
AJMP FSF02
FSF04: CLR TR0
SETB FS433
SETB FS315
RET
;发送12T低电平
FSC: MOV A,35H;#01H ;一位数据=32T,位0=4T,位1=12T合起来等于16T还得加16T低电平
CPL A
MOV 8CH, A
MOV A,36H;#85H
CPL A
MOV 8AH,A
SETBFS433 ;经40106反相后变成高电平
SETB FS315
SETB TR0
FSF01C: JBC TF0,FSF03C
AJMP FSF01C
FSF03C: CLR TR0
RET
;发送4T低
FSD: MOVA,#00H ;
CPL A
MOV 8CH, A
MOV A,37H;#85H
CPLA
MOV 8AH, A
SETBFS433 ;经40106反相后变成高电平
SETB FS315
SETB TR0
FSF02D: JBC TF0,FSF0D
AJMP FSF02D
FSF0D: CLR TR0
RET
;发同步
FTB: MOVA,34H;#0FH ;同步码时长
CPL A
MOV TH0,A ;发同步信号
MOV A,37H;#85H
CPL A
MOV TL0,A
FS01: SETB TR0 ;发送124T低
SETB FS433
SETB FS315
FS02: JBC TF0, FSJ
AJMP FS02
FSJ: CLR TR0
RET
(四)、固定码其它编码芯片的软件解码
1、PT2260芯片
SC2260和PT2260是同一芯片,只不过生产厂家不一样,参数略有区别。SC2260是CMOS工艺制造的低功耗通用编码器,与SC2272配对使用。编码器对地址脚和数据脚的状态编码组帧以射频(RF)方式发送。SC2260 最多有10位三态地址编码。
特 点
●CMOS工艺制造,低功耗
●地址码最多可达59,049(310)种
●外部应用线路元器件少
●编码发射由数据管脚的高电平输入触发
●单端电阻振荡电路
●工作电压范围宽:2.4v ~13v
● 数据码分2、4或6位三种
●DIP16或SOP16封装
应用范围
●车辆防盗系统
●遥控玩具
● 家庭防盗系统
● 其他工业遥控
管脚如下图:
PT2260芯片的解码与PT2262芯片的解码方法相同,由于震荡电阻和震荡频率的不同,所以选择时间常数T时略有不同。
2、VD5026芯片
VD5026,VD5027是CMOS大规模数字集成电路(见图1)。前者是编码器,后者是译码器。VD5026编码器是一种8位编码发射器。它的第1~8脚是编码的输入端,每个输入端可以有3种状态,即“0”、“1”或“开路”,其中“0”表示为低电平,“1”表示为高电平,因此8个脚可以组成38=6561个不同的编码。如果需要更多的编码,可将输入端改为4态连接方式,这时第1脚是第4种状态的公共连接脚,第2脚~第8脚与第1脚连接时为第4种状态。所以第2脚~第8脚都可以有4种状态,即“0”、“1”、“开路”、“接1脚”。在这种情况下可以组成47=16384个编码。第10脚~第13脚也可作为编码地址线,与第1~第8脚联合起来组成12位编码地址线,这时编码数可高达411=4194304个。第10~第13脚用作数据输入线,根据需要这几个脚可以置“0”或置“1”。第14脚是发射指令端,当此脚接地时,VD5026输出端则发出一组编码脉冲。第15脚、第16脚是一个内置振荡器,外接几十到几百千欧的电阻即可产生振荡,振荡频率为fosc=1600/R(KHz),式中R为外接电阻,单位为千欧。第17脚是编码输出端,第18脚、第9脚分别是电源的正、负极。
VD5027接收解码器有相应于VD5026的12位信息。第1脚~第8脚是地址线。当VD5026发出的地址编码与VD5027预置的编码相同时,则在VD5027的第10脚~13脚有数据输出,该输出信息与VD5026的第10~第13脚所置的数据相同。第14脚为输入端,第15脚、第16脚是振荡器,外接电阻值应与VD5026完全相同。第17脚是输出端。编码器VD5026发射时,如果密码相同,VD5027就会输出高电平。下图是VD5026编码格式,可以看出它的编码格式与pt2262类似,除了“0”、“1”、“F”3种状态,只不过多了第四种状态“4TH”。 数据“0“=”窄、窄“,数据”1“=”宽、宽“,数据“F“=”宽、窄“,第四态=”窄、宽“,所以解码时要多加一项判断第四态。
3、LX2240、PT2240芯片
LX2240这款国产芯片,是根据PT2240的编码格式进行设计,但与PT2240在脉冲宽度上略有差别,但只要配上适当的振荡电阻,即可与PT2240互换通用。LX2240 是一片由 CMOS 设计制造的可预烧内码的学习码编码 IC ,由软件解码;内码共有 20 个位元可预烧 1048576 组内码组合,降低使用上的重码率。
(1)主要特点:
1 .低公耗静态电流<1uA ;
2 .工作电压 Vcc=2.4 -12.0V;
3 . 四个按键组合输入,最多可组合至 15 个按键;
4 .单端振荡电路,只需一个外接电阻。
5 .小体积 8 脚SSOP 封装,是 LX2260 的升级产品;
6 .与 PT2240B完全兼容;
(2)脚位图:
(3)管脚说明:
符号 | 描述 | 管脚 | I/O |
Vcc | 电源正 | 1 | - |
Vss | 电源负 | 2 | - |
Dout | 串行编码输出 | 3 | O |
D0 | 按键输入(内含下拉) | 4 | I |
D1 | 按键输入(内含下拉) | 5 | I |
D2 | 按键输入(内含下拉) | 6 | I |
D3 | 按键输入(内含下拉) | 7 | I |
OSC | 振荡电阻输入,接电阻至正电源 | 8 | I |
(4)编码格式:
内码C0~C19(100万组) | D0 | D1 | D2 | D3 | 同步码 |
(5)应用电路:
4、eV1527芯片
eV1527 是一片由 CMOS设计制造的可预烧内码的学习码编码 IC,由软件解码;内码共有
20 个位元可预烧 1048576组(220)内码组合,降低使用上编码重复的机率。
(1)功能简述:
◆低功耗静态电流<1.0μA;
◆工作电压 Vcc=3.0-13V;
◆四个按键输入,最多可组合至 15个按健;
◆内含振荡线路,只须外接一个电阻(推荐值 330K);
◆eV1527 可代替RT1527 以及升级 FP527、eV527;
◆eV1527 修正了上面那些型号的一些Bug;
◆小体积 8 脚贴片封装。是PT2260、PT2262 理想的升级换代产品
(2)脚位图:
(3)脚位功能说明:
(4)编码格式:



(5)部分振荡阻值表:(此表仅供参考)
(6)应用电路

(五)、部分程序代码
;下面是数据采集代码
PT2260: MOV10H,#03H ;2E-2F存频率
MOV 11H,#15H
MOV 12H,#22H
MOV 13H,#60H
PTKSS0: JB JS315,$ ;找到同步码后,开始解码
MOV R0,#30H;1AH
PTS01: MOV R6,#49 ;判断高电平时间常数,识别数据?
PTKS0: MOV TH0, #00H
MOV TL0, #64H;A
PTKS1: JNB JS315, PTKS1
SETB TR0 ;高电平启动定时器1
PTKS2: JB JS315,PTKS2 ;等待变低
CLR TR0
PTKS3: MOV A,TH0 ;低电平停止定时,把数据放到@R0中
MOV @R0,A
INC R0
DJNZ R6,PTKS0
MOV14H,48H ;48H单元存同步码时间常数128T
MOV R6,#24 ;判断高电平时间常数,识别数据24+同步+24=49个 ,1527是20位内码+4位数据=48+同步+48=97位
PTKS4: MOV TH0, #00H
MOV TL0, #64H;A
PTKS5: JNB JS315, PTKS5
SETB TR0 ;高电平启动定时器1
PTKS6: JB JS315,PTKS6 ;等待变低
CLR TR0
MOV A,TH0 ;低电平停止定时,把数据放到@R0中
XRL A,#00H
JZ PTKS7
MOV A,TH0
MOV 15H,A
MOV A,TL0
MOV16H,A
AJMP PTKS8
PTKS7: MOV A,TL0
MOV 17H,A
PTKS8: DJNZ R6,PTKS4 ;采集49个数据
KS10: LCALL BJ0;比较2次采集的数据是否一致,不一致返回重新采集
JZ JS9
LJMP Q
JS9: MOV R2,#12
MOV R1,#22H;22-2DH显示转换后的地址和数据12个结果
MOV R0,#30h;显示缓冲区也是数据采集区
CZ15: MOVA,@R0;采集的48个数据合成为24个,@R0中的数据合并到@R1
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
;下面对24个数据进行判断,数据=“10、20、30、40、50”时为“F”, 数据=“11、22、33、44、55”时为“0”, 数据=“00”时为 “1”,定时器0高位TH0的数据从10到50或从11到55扩展是为了扩大震荡电阻的检测范围。
XRLA,#10H;10H ;判断数据是否=”F”,波形是一宽一窄两个高电平波形是“F”
JZ CZ30
MOV A,@R1
XRLA,#20H;10H ;A0-A8悬浮时波形是一宽一窄两个高电平波形
JZ CZ30
MOV A,@R1
XRLA,#30H;10H ;A0-A8悬浮时波形是一宽一窄两个高电平波形
JZ CZ30
MOV A,@R1
XRLA,#40H;10H ;A0-A8悬浮时波形是一宽一窄两个高电平波形
JZ CZ30
MOV A,@R1
XRLA,#50H;10H ;A0-A8悬浮时波形是一宽一窄两个高电平波形
JNZ CZ11
CZ30: MOVA,#0FH ;悬浮脚代码F
MOV @R1,A
AJMP CZ14
CZ11: MOVA,@R1 ;判断是否数据“0“
XRLA,#11H ;A0-A8=0时波形是2个宽高电平波形就是数据“0“
JZ CZ40
MOV A,@R1
XRLA,#22H;11H ;A0-A8=0时波形是2个宽高电平波形
JZ CZ40
MOV A,@R1
XRLA,#33H ;A0-A8=0时波形是2个宽高电平波形
JZ CZ40
MOV A,@R1
XRLA,#44H ;A0-A8=0时波形是2个宽高电平波形
JZ CZ40
MOV A,@R1
XRLA,#55H;11H ;A0-A8=0时波形是2个宽高电平波形
JNZ CZ12
CZ40: MOVA,#0 ;是数据“0”存@R1
MOV@R1,A
AJMP CZ14
CZ12: MOV A,@R1
XRL A,#00H;00H ;是数据“1”
JNZ CZ13
MOVA,#01H ;A0-A8=1时波形是2个窄高电平波形
MOV @R1,A
AJMP CZ14
CZ13: MOVA,@R1 ;数据是一窄一宽电平波形时为1527芯片
XRL A,#01H
JZ CZ50
MOVA,@R1 ;是一窄一宽电平波形时为1527芯片
XRL A,#02H
JZ CZ50
MOVA,@R1 ;是一窄一宽电平波形时为1527芯片
XRL A,#03H
JZ CZ50
MOVA,@R1 ;是一窄一宽电平波形时为1527芯片
XRL A,#04H
JZ CZ50
CZ14: INC R1
INCR0
DJNZR2,CZ15
CZ18: MOV R2,#6
MOV R1,#22H;4CH
MOV R0,#22h;1AH
CZ19: MOV A,@R0
ANL A,#0FH
SWAP A
MOV @R1,A
INC R0
MOV A,@R0
ANL A,#0FH
ADD A,@R1
MOV @R1,A
INC R0
INC R1
DJNZ R2,CZ19
AJMPXS;去显示子程序
CZ50: MOV 12H,#15H
MOV13H,#27H
CZ5: MOVR2,#3 ;合成3字节 16进制数3B7C21,是反码因三极管反相
MOV R1,#22H;4CH ;显示缓冲器起始地址
MOV R0,#30H;1AH ;数据采集区起始地址
CZ6: MOVR3,#08H ;8位合成一个字节
CZ7: MOV A,#00h;采集的数据同步码为17h,长脉冲02h,短脉冲00h,用00h判断是宽脉冲还是短脉冲
CLR C
SUBB A,@R0 ;
JNC CZ8
MOV A,@R1
RLC A
MOV @R1,A
AJMP CZ9
CZ8: CLR C
MOV A,@R1
RLC A
MOV @R1,A
CZ9: INC R0
DJNZ R3,CZ7
INC R1
DJNZ R2,CZ6
;去显示子程序
BJ0: MOVR2,#24 ;校验30H及49H起始的24个数据,如果校验成功说明解码成功
MOV R0,#30h;1AH
MOV R1,#49H;33h
BJ1: MOV A,@R0
XRL A,@R1
JNZ QL8
INC R0
INC R1
DJNZ R2,BJ1
MOV A,#00H
QL8: RET
作者: 河马 时间: 2016-3-3 06:35
强得很,值得学习
作者: yanzhe 时间: 2016-3-6 14:52
牛!有没有C语言的
作者: hhdsdy 时间: 2016-8-22 09:58
这个分析得很透彻,制作得很好,只是既然用上那么多的硬件,软件功能就稍显单一了,可以再增加一些功能
作者: wolfe~alone 时间: 2017-3-4 17:50
麻烦问下359us是怎么来的SS: MOVR6,#24; 查找同步码,同步码高电平长度是359微秒的31倍11129微秒=15BCH,所以TH1=15和10之间
作者: wolfe~alone 时间: 2017-3-4 17:51
麻烦问下359us是怎么来的 “SS: MOVR6,#24; 查找同步码,同步码高电平长度是359微秒的31倍11129微秒=15BCH,所以TH1=15和10之间”
作者: zdmjjp 时间: 2017-7-3 13:48
强得很,值得学习
作者: 51jia 时间: 2017-12-17 21:32
资料不错,很全面!
作者: wb8899 时间: 2018-7-30 22:21
有C程序的吗,汇编没学
作者: GLaDOSOvO 时间: 2019-1-8 20:41
我也想要c语言的。汇编语言看不懂。。
作者: hzz 时间: 2019-2-25 15:06
我也想要c语言的
作者: 新乡家电维修 时间: 2019-5-13 15:32
汇编程序解码速度快,比C语言解码准确
我自己写的程序能解码3ms---25ms同步头范围的遥控信号(已经够宽了,还可以增加宽度,没必要),
除了我们知道的0、F、1之外,我发现个别遥控,特别是电动车遥控锁有10数据出现
特增加了D=10显示,扩大解码范围
另外想增加功能,学习遥控码,然后发射出去,这是下一步方向
这是1000米遥控解码测试,结果完全正确
此遥控出现了D码
这遥控震荡电阻比较大,11.9ms同步头
作者: ealoo 时间: 2019-6-24 18:02
请问,10数据是个什么状态?
作者: small_tiger09 时间: 2019-12-17 23:24
不错,很详细,赞!
作者: 这是我 时间: 2020-10-7 08:58
厉害了,记下了,pt2272用的680K的振荡电阻,对应的pt2262用的是3.3M。
作者: kkklq 时间: 2020-11-16 18:40
谢谢楼主的分享,看完之后很受用
作者: tomgay 时间: 2020-11-17 00:53
Cảm ơn bạn đã chia sẻ, rất hữu ích sau khi đọc
作者: yyght 时间: 2020-12-28 14:46
感谢楼主的分享。收藏、值得学习
作者: cba_cba 时间: 2021-1-5 16:30
楼主是高手,高手中高手。赞一个!!!!!!!

欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |