机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
PIC单片机滚动码汇编解码程序
PIC单片机滚动码汇编解码程序
 更新时间:2009-12-12 11:14:59  点击数:0
【字体: 字体颜色

#include <p16f877.inc>
;
   global DECRYPT
   global KEY0,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7
   global CSR0,CSR1,CSR2,CSR3,CSR4,CSR5,CSR6,CSR7,CSR8
;
#define  HOP1 CSR0    ; ﹚竡 HOP1~4 单 CSR1~4
#define  HOP2 CSR1
#define  HOP3 CSR2
#define  HOP4 CSR3

#define  MAX_CODE_LENGTH .72
#define  CODE_LENGTH .66
;
     UDATA_SHR     ; Difine CSR0:CSR7 on Share memory  
CSR0  res 1      ; Hopping Code 钡Μ纗既竟 (LSB)
CSR1  res 1
CSR2  res 1
CSR3  res 1
CSR4  res 1
CSR5  res 1
CSR6  res 1
CSR7  res 1
CSR8  res 1      ; Hopping Code 钡Μ纗既竟 (MSB)
;
Encrypt_Data UDATA 0x20
KEY0  res 1      ; 64-bit 秆盞じン戈 (LSB)
KEY1  res 1
KEY2  res 1
KEY3  res 1
KEY4  res 1
KEY5  res 1
KEY6  res 1
KEY7  res 1
;
  UDATA
CNT0  res 1
CNT1  res 1
HOP_LENGTH res 1
MASK  res 1
KEELOQ_Temp res 1
;
;
KEELOQ_CODE CODE
;

;*****************************************************
;**** Rotate CSRs register right 1 bit
;*****************************************************
ROT_CSRs
   RRF  CSR8,F
   RRF     CSR7,F
         RRF     CSR6,F                   
         RRF     CSR5,F                    
         RRF     CSR4,F
         RRF     CSR3,F                    
          RRF     CSR2,F                    
         RRF     CSR1,F                   
         RRF     CSR0,F    
   return
;
;
;
;
;****************************************************************
;
; FUNCTION      : DECRYPT ()          
;
; DESCRIPTION   : DECRYPTS 32 BIT [HOP1:HOP4] USING [CSR0:CSR7]
;
;****************************************************************
DECRYPT
   BANKSEL CNT1
         MOVLW   (.11+1)         ; OUTER LOOP 11+1 TIMES
         MOVWF   CNT1           ; OUTER LOOP 11+1 TIMES

DECRYPT_OUTER
         MOVLW   .48             ; INNER LOOP 48 TIMES
         MOVWF   CNT0           ; INNER LOOP 48 TIMES

DECRYPT_INNER
   CLRWDT     ; RESET WATCHDOG TIMER
         MOVFW   CNT1   ; LAST 48 LOOPS RESTORE THE KEY
         XORLW   .1              ; LAST 48 LOOPS RESTORE THE KEY
         btfsc STATUS,Z        ; LAST 48 LOOPS RESTORE THE KEY
         GOTO    ROTATE_KEY      ; LAST 48 LOOPS RESTORE THE KEY

        ; THE LOOKUP TABLE IS COMPRESSED INTO IN 4 BYTES TO SAVE SPACE
        ; USE THE 3 LOW INDEX BITS TO MAKE UP AN 8-BIT BIT MASK
        ; USE THE 2 HIGH INDEX BITS TO LOOK UP THE VALUE IN THE TABLE
        ; USE THE BIT MASK TO ISOLATE THE CORRECT BIT IN THE BYTE
        ; PART OF THE REASON FOR THIS SCHEME IS BECAUSE NORMAL TABLE
        ; LOOKUP REQUIRES AN ADDITIONAL STACK LEVEL
       
         bcf STATUS,C         ; CLEAR CARRY (FOR THE LEFT SHIFT)
      
         MOVLW   .1              ; INITIALISE MASK = 1
         BTFSC   HOP3,3        ; SHIFT MASK 4X IF BIT 2 SET
         MOVLW   B00010000     ; SHIFT MASK 4X IF BIT 2 SET
         MOVWF   MASK            ; INITIALISE MASK = 1

         BTFSS   HOP2,0        ; SHIFT MASK ANOTHER 2X IF BIT 1 SET
         GOTO    $+3
         RLF     MASK,F
         RLF     MASK,F           

         BTFSC   HOP1,0        ; SHIFT MASK ANOTHER 1X IF BIT 0 SET
         RLF     MASK,F

        ; MASK HAS NOW BEEN SHIFTED 0-7 TIMES ACCORDING TO BITS 2:1:0

   MOVlw HIGH TABLE
   MOVwf PCLATH

   MOVlw LOW TABLE
   MOVwf KEELOQ_Temp
  
         MOVLW   0               ; TABLE INDEX = 0
         BTFSC   HOP4,1
         IORLW   .2              ; IF BIT 3 SET ADD 2 TO THE TABLE INDEX
         BTFSC   HOP4,6
         IORLW   .4              ; IF BIT 4 SET ADD 4 TO THE TABLE INDEX

   addwf KEELOQ_Temp,W
   btfsc STATUS,C
   incf PCLATH,F
  
         MOVwf PCL            ; ADD THE INDEX TO THE PROGRAM COUNTER
         ;  [ MUST BE IN LOWER HALF OF PAGE ]
                              
TABLE
         MOVLW   0x2E            ; BITS 4:3 WERE 00
         GOTO    TABLE_END       ; END OF LOOKUP

         MOVLW   0x74            ; BITS 4:3 WERE 01
         GOTO    TABLE_END       ; END OF LOOKUP

         MOVLW   0x5C            ; BITS 4:3 WERE 10
         GOTO    TABLE_END       ; END OF LOOKUP

         MOVLW   0x3A            ; BITS 4:3 WERE 11
                                
TABLE_END
         ANDWF   MASK,1          ; ISOLATE THE CORRECT BIT
         MOVLW   0               ; COPY THE BIT TO BIT 7
         btfss STATUS,Z        ; COPY THE BIT TO BIT 7
         MOVLW   B10000000     ; COPY THE BIT TO BIT 7

         XORWF   HOP2,W      ; ONLY INTERESTED IN BIT HOP2,7
         XORWF   HOP4,W      ; ONLY INTERESTED IN BIT HOP4,7
         XORWF   KEY1,W   ; ONLY INTERESTED IN BIT KEYREG1,7

         MOVWF   MASK            ; STORE W TEMPORARILY (WE NEED BIT 7)
         RLF     MASK,F          ; LEFT ROTATE MASK TO GET BIT 7 INTO CARRY
 
         RLF     HOP1,F          ; SHIFT IN THE NEW BIT
         RLF     HOP2,F
         RLF     HOP3,F
         RLF     HOP4,F

ROTATE_KEY
         bcf STATUS,C   ; CLEAR CARRY
         BTFSC   KEY7,7        ; SET CARRY IF LEFTMOST BIT SET
         bsf STATUS,C         ; SET CARRY IF LEFTMOST BIT SET

         RLF     KEY0,F          ; LEFT-ROTATE THE 64-BIT KEY
         RLF     KEY1,F
         RLF     KEY2,F
         RLF     KEY3,F
         RLF     KEY4,F
         RLF     KEY5,F
         RLF     KEY6,F
         RLF     KEY7,F        

         DECFSZ  CNT0,F          ; INNER LOOP 48 TIMES
         GOTO    DECRYPT_INNER   ; INNER LOOP 48 TIMES

         DECFSZ  CNT1,F          ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)
         GOTO    DECRYPT_OUTER   ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)

         RETLW   0               ; RETURN

  • 上一篇: 用PICC编译器开发PIC系列单片机的代码
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1