单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28754|回复: 9
收起左侧

PT2262遥控器的单片机软件解码(省去PT2272)

  [复制链接]
51黑黑黑 发表于 2016-2-24 21:18 | 显示全部楼层 |阅读模式
本文中用到的PT2262/PT2272芯片是一对遥控收发的芯片,关于她的中文资料可以参考:http://www.51hei.com/bbs/dpj-44498-1.html
()、遥控器基本知识
遥控器种类很多,常见的有电视遥控器,汽车遥控器,卷帘门遥控器,空调遥控器,航模遥控器等等,按载波分类可以分为红外线遥控器,无线电遥控器,超声波遥控器等,红外线遥控的特点适用于室内,短距离的情况,功耗小,成本低,无线电遥控适用于远距离,室外情况下,成本高一些。其实我们每天都在和遥控器打交道,大部分人只知道使用这些遥控器,除非专业人员很少有人知道它的工作原理。

1、 遥控器的组成

下图是用PT2262编码的遥控器电路。
下图是红外线载波的电视机遥控器电路。

由上图可知遥控器一般是由按键电路,编码电路,发射电路及电源等组成。
无线发射电路是由三极管加上电阻,电容,三极管,声表面滤波器,天线组成。红外线发射电路比较简单,由电阻、三极管和红外线发射管组成。
编码电路主要由编码芯片完成,每个遥控器上面的编码都是通过集成电路芯片来完成的。只要我们按下按键,编码将通过发射电路以无线的形式发送出去。
2、编码芯片分类:
1)按编码类别分
固定码:所谓的固定码,就是指每次发送出去的编码都不会改变,因此使用这类芯片的遥控器比较容易被复制。如PT2262PT2260 PT2240  Ev1527  FP527 HT6014 SMC918等芯片。
滚动码:所谓滚动码,就是指每次发出去的码都不一样,通过一系列算法,完成滚动输出的功能。这类芯片的遥控器复制比较困难,可以通过移值,或者已破解过的遥控器来完成复制工作。如HCS301 HC300  HCS201 HCS200  HCS361等芯片。
2)按编码方式分
可变型:就是编码可通过人工手动修改。如PT2262编码集成电路,它有18个脚。它的1--8脚属于地址编码端,可以进行三态编码,就是一只脚可以是三种状态,即:接低电平(0)、高电平(1)、或悬空(F)三种状态,编码数有38次方,也就是共有6561种状态。这是一般的用法。PT2262还有4支脚,就是10111213,一般它是用来做数据端。它也可以编码,但是编码就只有两种状态:低电平(0)、高电平(1),没有悬空这种状态了。下面1图中的编码区编码是A0—A7都悬空,也就是A0=FA1=FA2=FA3=FA4=FA5=FA6=FA7=F,下面2图中的编码是A0=0A1=FA2=0A3=0A4=1A5=0A6=1A7=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
窄脉冲588微秒(高电平)
1764微秒(低电平)
窄脉冲588微秒(高电平)
1
宽脉冲1764微秒(高电平)
588微秒(低电平)
宽脉冲1764微秒(高电平)
F
窄脉冲588微秒(高电平)
1764微秒(低电平)
宽脉冲1764微秒(高电平)
  上表中我们用“窄、窄”表示数据“0”,“宽、宽”表示数据“1”,“窄、宽”表示数据“F”,实际应用时是经过CD40106反相后的波形,所以数据“0”就变成“宽、宽”,数据“1”变成“窄、窄”,数据“F”变成“窄、宽”了。我们用51单片机的定时器来测量这些脉冲的宽度来确定数据是“0”,“1”,还是“F”。这就是解码原理。
3PT2262 软件解码的单片机程序
    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)脚位功能说明:

Symbol
Description
Pin
I/O
OSC1
振荡线路输入脚接电阻至电源
1
I
Vcc
电源正
2

GND
电源负
3

TXD
串列资料输出脚
4
O
K0
按健输入脚内含接地电阻
5
I
K1
按健输入脚内含接地电阻
6
I
K2
按健输入脚内含接地电阻
7
I
K3
按健输入脚内含接地电阻
8
I

(4)编码格式:




(5)部分振荡阻值表:(此表仅供参考)


3V
4V
5V
6V
7V
8V
9V
10V
11V
12V
13V
47K
346us
306 us
284 us
270 us
262 us
254 us
248 us
242 us
238 us
234 us
230 us
51K
368us
322 us
300 us
288 us
278 us
270 us
264 us
258 us
254 us
250 us
246 us
56K
400us
354 us
330 us
316 us
306 us
298 us
292 us
286 us
282 us
278 us
274 us
62K
430us
384 us
358 us
344 us
334 us
326 us
318 us
312 us
308 us
302 us
300 us
68K
456us
408 us
382 us
368 us
356 us
348 us
342 us
336 us
330 us
326 us
322 us
75K
492us
442 us
418 us
402 us
390 us
382 us
374 us
368 us
362 us
358 us
352 us
82K
528us
476 us
452 us
436 us
424 us
416 us
408 us
400 us
392 us
388 us
384 us
91K
580us
524 us
492 us
480 us
468 us
456 us
448 us
444 us
436 us
432 us
424 us
100K
612us
560 us
528 us
512 us
500 us
488 us
480 us
472 us
464 us
460 us
456 us

(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语言的
回复

使用道具 举报

uestchina 发表于 2016-8-22 09:42 | 显示全部楼层
汇编只有高手才能看,我们都放下它几年了
回复

使用道具 举报

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程序的吗,汇编没学
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

快速回复 返回顶部 返回列表