機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
PIC單片機(jī)滾動碼匯編解碼程序
PIC單片機(jī)滾動碼匯編解碼程序
 更新時(shí)間:2009-12-12 11:14:59  點(diǎn)擊數(shù):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編譯器開發(fā)PIC系列單片機(jī)的代碼
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1