论坛风格切换切换到宽版
  • 23614阅读
  • 44回复

使用AT89C2051解码PT2262 [复制链接]

上一主题 下一主题
离线bg3muy
 
发帖
119
只看楼主 倒序阅读 0楼 发表于: 2006-05-29


0-代表接vss 1-代表接vdd *-代表悬空
可以解平常的pt2262系列芯片的编码,使用lcd显示编码状态,比如遥控开关、车
库门、摩托车等遥控器的编码都能破解,当然不是用来偷车的只是测试用!
离线BG7IGJ
发帖
1998
只看该作者 1楼 发表于: 2006-05-29
不知你说的解 是解他的编码还是他输出的8421码
离线bg3muy
发帖
119
只看该作者 2楼 发表于: 2006-05-29
见左下图,包含地址编码和数据编码都解了出来。箭头左边是8位地址码箭头右边是4位数据码,也就是你所说的8421码
pt2262原理看这里http://www.xie-gang.com/pt2262%a3%ab2272.htm
离线BA5TX
发帖
4053
只看该作者 3楼 发表于: 2006-05-29
可以公开么?感兴趣
离线bd7qw
发帖
2370
只看该作者 4楼 发表于: 2006-05-29
公开可以么?很感兴趣!!,bd7qw
离线BG7IGJ
发帖
1998
只看该作者 5楼 发表于: 2006-05-29
解这个很简单的,用单片机来转换编码(2272),检测2272的vt脚是否有电平输出,有的话就锁定,没有继续转换编码就可以。
离线bg3muy
发帖
119
只看该作者 6楼 发表于: 2006-05-29
不是你说的那样,我是用at89c2051代替pt2272解码,可以用lcd显示地址码和数据码的状态
离线BG7IGJ
发帖
1998
只看该作者 7楼 发表于: 2006-05-29
'
不是你说的那样,我是用at89c2051代替pt2272解码,可以用lcd显示地址码和数据码的状态
'
用单片机解,可降低成本,是不错,但也降低了解码的速度,用多一只2272的话,程序可以简化,当然,实现同一功能,以降低成本为主
离线bv2ac
发帖
14169
只看该作者 8楼 发表于: 2006-05-30
正好作了一個相似的東西....

315 mhz 收信入 89c2051 的 p32, 解碼後由 p31 送出, 9600 n 8 1, 給 palm 顯示.

2 表示懸空,....

; tasobugr.asm , receive decoder and transmit
; may 18 2006, 89c2051+ 11.0592 mhz
;
;-----------------------------------------------------------
;
; p30-- /rx,
; p31-- /tx, --- to host
; p32-- /hdq, --- input for 315 m data
;
; p33-- /rs232 indicator
; p34--
; p35--led indicator /seeking 2 stream
; p37--
;
;----------------------------------------------------------------
tdn   reg   20h   ;
tdn1   reg   21h
;
tmp0      reg      30h
tmp1      reg      31h
;
buf1   reg   40h   ;store 1st stream data
;
buf2      reg      50h      ;store 2nd data
;
;-----------------------------------------------------------
    ;
    org   0
    jmp   lab00
    ;
    ;org   0bh
    ;jmp   tint
    ;
    ;org   23h
    ;jmp   sint
    ;
lab00   mov   sp,#60h
    mov   a,#0ffh
    mov   p1,a
    mov   p3,a
    ;
    call   dly01
       ;
    ;--------------------------------------
setbd   mov   tmod,#22h     ;timer1 : 8-bit autoreload (mode 2)
    mov   th1,#-3       ;set 9600 baud = 11.059m/12/ 3/32
    setb   tr1         ;turn timer1 on
    ;mov   ie,#10010000b   ;enable serial port interrupt
    mov   scon,#01010000b ;serial mode1 : 8,n,1 uart
    ;               ;enable receiver (ren=1)
    nop
    mov   th0,#-12     ;timer 0 mode 2, 8 bit reload
    clr   tr0         ;11.0592/12/12= 13 us
    ;
    mov   ie,#10010000b   ;enable es int, disable et0
          ;            ;et0 enable only at rxhby: read hdq byte
    ;--------------------------------
     ;
loopx   setb      p3.5
     call      wstat
     call      wstat            ;wait 2 sync (>3.3ms)
     clr      p3.5
     ;
     mov      r0,#buf1      ;analysis 1st stream
     mov      r2,#12
loopx2      call      get2p            ;receive 2 pulse
     jnc      loopx1
     jmp      loopx            ;fail
     ;
loopx1      mov      a,b
     mov      @r0,a
     inc      r0
     djnz      r2,loopx2
     ;----------------
     call      wstat            ;
     ;
     mov      r0,#buf2      ;analysis 2nd stream
     mov      r2,#12
loopx3      call      get2p            ;receive 2 pulse
     jnc      loopx4
     jmp      loopx            ;fail
     ;
loopx4      mov      a,b
     mov      @r0,a
     inc      r0
     djnz      r2,loopx3
     ;
     setb      p3.5
     ;------------------
     ;                  ; check both stream data
     mov      r0,#buf1
     mov      r1,#buf2
     mov      r2,#12
     ;
loopx51      mov      a,@r0
     anl      a,#3
     mov      b,a
     mov      a,@r1
     anl      a,#3
     cjne      a,b,loopx5
     ;
     inc      r0
     inc      r1
     djnz      r2,loopx51
     jmp      txdata
     ;---------
loopx5      jmp      loopx            ;check fail, goto find new stream
     ;
     ;
;--------------------------------------------------
; (send out addr then keycode)
;tx stream data : $aaaaaaaaaaaa-kkkk! <cr><lf>
;           a, k = Ɔ' Ƈ'ƈ' Ɖ',   take 17ms
;-------------------------------------------------
txdata      mov      a,#'$'
     call      trans
     mov      r2,#8
     mov      r0,#buf1
     ;
txnxd      mov      a,@r0
     anl      a,#3
     call      convd
     ;
loopx6      call      trans
     inc      r0
     djnz      r2,txnxd
     ;
     mov      a,#'-'
     call      trans
     ;
     mov      r2,#4
txnxd1      mov      a,@r0
     anl      a,#3
     call      convd
     ;
loopx7      call      trans
     inc      r0
     djnz      r2,txnxd1
     ;
     mov      a,#'!'
     call      trans
     ;
     call      crlf
     ;
     jmp      loopx
     ;
;----------------------------------
convd      cjne      a,#0,conv1
     mov      a,#Ɔ'
     ret
conv1      cjne      a,#3,conv2
     mov      a,#Ƈ'
     ret
conv2      cjne      a,#1,conv3
     mov      a,#ƈ'
     ret
conv3      mov      a,#Ɖ'
     ret
     ;
;------------------------------
wstat      nop                  ;wait for stream slot >3ms
     mov      r4,#33
wstat1      jb      p3.2,wstat      ;find stream
     call      dly100u
     djnz      r4,wstat1
     ;
wstat2      jnb      p3.2,wstat2      
     ret                  ;find start of new stream
     ;
;-------------------------------
get2p      call      get1p            ;ret tmp0=high time, tmp1=low time
     jc      gperr
     mov      a,tmp1
     cpl      a
     add      a,tmp0            ;
     mov      b.1,c
     ;
     call      get1p            ;2
     jc      gperr            ;2
     mov      a,tmp1            ;2
     cpl      a            ;1
     add      a,tmp0            ;2
     mov      b.0,c            ;2
     ;
     clr      c
     ret
     ;
gperr      setb      c
     ret
     ;
;------------------------
get1p      mov      tdn,#0
rxhp1      jnb      p3.2,rxhp2      ;2 cycle
     inc      tdn            ;1      accumulate high time
     mov      a,tdn            ;1
     add      a,#-80            ;1 high:> 80*7*1.085>600u-->err
     jnc      rxhp1            ;2
     jmp      rxperr
     ;
rxhp2      mov      a,tdn            ;1, find low,
     add      a,#-5            ;1,
     jc      rxhp3            ;2, high must > 4*1.085*7 =31u
     jmp      rxperr            ;2,
     ;
rxhp3      mov      tmp0,tdn      ;2
     ;
     mov      tdn,#0            ;2
rxlp1      jb      p3.2,rxlp2      ;2
     inc      tdn            ;1
     mov      a,tdn            ;1
     add      a,#-80            ;1 low>      80*7*1.085>600u-->err
     jnc      rxlp1            ;2
     jmp      rxperr
     ;
rxlp2      mov      a,tdn            ;1, find high
     add      a,#-5            ;1
     jc      rxlp3            ;2, low must >31u
     jmp      rxperr            ;2
     ;
rxlp3      mov      tmp1,tdn      ;2
     clr      c
     ret
     ;
rxperr      setb      c
     ret
     ;
;-------------------------------
txasc   mov   a,@r1       ;tx 2 byte : "5a" --> Ƌ' 'a'
    swap   a
    anl   a,#0fh
    call   hexasc
    call   trans
    mov   a,@r1
    anl   a,#0fh
    call   hexasc
    call   trans
    ret
    ;
;------------------------------
hexasc add   a,#30h
    cjne   a,#39h,hexa1
    ret               ;39h
    ;
hexa1   jnc   hexa2
    ret               ;30..38h
hexa2   add   a,#7         ;3a-->41h
    ret
    ;
;------------------------------
crlf   mov   a,#0dh
    call   trans
    mov   a,#0ah
    call   trans
     ret
    ;
trans   mov   sbuf,a       ;send a from pin txd
    jnb   ti,$         ;wait,until ti = 1
    clr   ti         ;clear ti
    ret
    ;
;-----------------------------------------------
; delay loop
;-----------------------------------------------
dly01   mov   r6,#100       ;0.1 sec 100/1ms = 100
    jmp   dd1
dly50m mov   r6,#50
    jmp   dd1
dly40m mov   r6,#40
    jmp   dd1
dly20m mov   r6,#20
    jmp   dd1
dly8m      mov      r6,#8
     jmp      dd1
dly5m   mov   r6,#5
    jmp   dd1
;dly3m      mov      r6,#3
;      jmp      dd1
     ;
dly10m mov   r6,#10       ;
dd1   call   dlyt
    djnz   r6,dd1
    ;cpl   p1.7         ;wd
    ret
    ;
dly1m   nop
dlyt   mov   r5,#230       ;6mhz/12=2.0us
dlyt1   nop               ;11.0592m= 1.085u
    nop
    djnz   r5,dlyt1     ;1.085*230*4= 1ms
    ret
    ;
dly100u      mov      r5,#46
     djnz      r5,$
     ret
     ;
dly2hu mov   r5,#92       ;200us
    djnz   r5,$
    ret
    ;
dly5s   mov   r7,#50
    jmp   dlys1
dly2s   mov   r7,#20
    jmp   dlys1
dly02   mov   r7,#2
    jmp   dlys1
dly05   mov   r7,#5
    jmp   dlys1
dly1s   mov   r7,#10
dlys1   call   dly01
    djnz   r7,dlys1
    ret
    ;
    end
    ;

离线bg4iww
发帖
8696
只看该作者 9楼 发表于: 2006-05-30
用掌上电脑解?
离线BA5RW
发帖
48263
只看该作者 10楼 发表于: 2006-05-30
'
用单片机解,可降低成本,是不错,但也降低了解码的速度,用多一只2272的话,程序可以简化,当然,实现同一功能,以降低成本为主
'
好象不对,你的方案更麻烦,如你所述用滚动变换的方法,检测解码成功后的数据,速度更慢.MUY的方案显然是直接用MCU解调编码特征,速度才快.我们的实验还能在300到480之间直接获取手柄的频率和编码特征,这种东西在市场上主要用于店家的测试,已有产品,售价挺高的,硬件其实很简单,主要还是创意和软件成本,应该尊重他人的劳动不能随意为难和索取他人的劳动成果,感觉到有的技术还可能在扩散后被坏人利用危害社会的还要有意识的切断传播的途径,这是一个从事技术工作的爱好者应有的技术道德习惯和起码的自觉自爱的社会责任感.
离线bg3muy
发帖
119
只看该作者 11楼 发表于: 2006-05-31
贴一下解码程序,有兴趣的朋友参考一下
;检测大于3ms的同步码
rema:
mov 40h,#08h       ;测8位地址
mov tmod,#10h
  mov 43h,#5;延时3ms
d3:mov 44h,#250
d4:jb rem,d3
  djnz 44h,d4
  djnz 43h,d3
rem0:mov th1,#0ffh   ;准备检测第一个电平
  mov tl1,r4
  jnb rem,$       ;等待高电平
  setb tr1       ;启动定时器
  jnb tf1,$    
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第一个电平值
  mov c,rem
  jc rem1       ;判断电平高低,如果高则转---------------
  mov a,r0       ;高电平顺序执行
  rrc a
  mov r0,a
  mov th1,#0ffh   ;准备检测第二个电平
  mov tl1,r4
  jnb rem,$       ;等待高电平
  setb tr1       ;启动定时器
  jnb tf1,$    
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第二个电平值
  mov c,rem
  jc remaa       ;判断电平高低,如果高则转---------------
  mov a,r1
  rrc a
  mov r1,a
  djnz 40h,rem0
  lcall rem2
rem1:mov a,r0
  rrc a
  mov r0,a
  mov th1,#0ffh   ;准备检测第二个电平
  mov tl1,r4
  jb rem,$     ;等待低电平
  jnb rem,$       ;等待高电平
  setb tr1
  jnb tf1,$
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第二个电平值
  mov c,rem
  jc remaa       ;判断电平高低,如果高则转---------------
  mov a,r1
  rrc a
  mov r1,a
  djnz 40h,rem0
  lcall rem2
remaa:mov a,r1
  rrc a
  mov r1,a
  jb rem,$     ;等待低电平
  djnz 40h,rem0
;测4位数据--------------------------------------------------------------
rem2:mov 40h,#04h       ;测4位数据
rem5:mov th1,#0ffh   ;准备检测第一个电平
  mov tl1,r4
  jnb rem,$       ;等待高电平
  setb tr1       ;启动定时器
  jnb tf1,$    
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第一个电平值
  mov c,rem
  jc rem3       ;判断电平高低,如果高则转---------------
  mov a,r2       ;高电平顺序执行
  rrc a
  mov r2,a
  mov th1,#0ffh   ;准备检测第二个电平
  mov tl1,r4
  jnb rem,$       ;等待高电平
  setb tr1       ;启动定时器
  jnb tf1,$    
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第二个电平值
  mov c,rem
  jc rembb       ;判断电平高低,如果高则转---------------
  mov a,r3
  rrc a
  mov r3,a
  djnz 40h,rem5
  lcall rem4
rem3:mov a,r2
  rrc a
  mov r2,a
  mov th1,#0ffh   ;准备检测第二个电平
  mov tl1,r4
  jb rem,$     ;等待低电平
  jnb rem,$       ;等待高电平
  setb tr1
  jnb tf1,$
  clr tr1       ;时间到停止
  clr tf1
;采集接收信号并记录第二个电平值
  mov c,rem
  jc rembb       ;判断电平高低,如果高则转---------------
  mov a,r3
  rrc a
  mov r3,a
  djnz 40h,rem5
  lcall rem4
rembb:mov a,r3
  rrc a
  mov r3,a
  jb rem,$     ;等待低电平
  djnz 40h,rem5
;四位数据编码由高四位移到低四位上
rem4:mov a,r2
  swap a
  mov r2,a
  mov a,r3
  swap a
  mov r3,a
离线我是火腿
只看该作者 12楼 发表于: 2006-06-02
'

0-代表接vss 1-代表接vdd *-代表悬空
可以解平常的pt2262系列芯片的编码,使用lcd显示编码状态,比如遥控开关、车
库门、摩托车等遥控器的编码都能破解,当然不是用来偷车的只是测试用!
'


不知道你用的晶振是几m的。我想用6m的晶振解码,时间来得及么?
离线bg3muy
发帖
119
只看该作者 13楼 发表于: 2006-06-02
没问题,重新计算一下定时初值就可以,我用的是2m、4m的晶振,可以自动适应pt2262的震荡电阻1.2-4.7兆欧,单片机使用太高的频率工作会干扰接收模块。
离线bd8te
发帖
4255
只看该作者 14楼 发表于: 2006-06-02
怎么每看见有电路
离线ljchip
发帖
459
只看该作者 15楼 发表于: 2006-06-06
偶6年前用pic16c56做了,效果不错的。
离线bg4wby
发帖
460
只看该作者 16楼 发表于: 2006-06-14
大家有没有看过06期无线电杂志,上面有2262的万能遥控器,不知他的专用集成电路是什么,.
离线bg4wby
发帖
460
只看该作者 17楼 发表于: 2006-06-14
'

0-代表接vss 1-代表接vdd *-代表悬空
可以解平常的pt2262系列芯片的编码,使用lcd显示编码状态,比如遥控开关、车
库门、摩托车等遥控器的编码都能破解,当然不是用来偷车的只是测试用!
'有图吗?
离线bd7bq
发帖
1491
只看该作者 18楼 发表于: 2006-07-27
无聊好玩我也做了一个,软硬件还在进一步完善中。
离线stor
发帖
2721
只看该作者 19楼 发表于: 2006-07-27
感兴趣......