积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> 汇编
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
PIC单片机滚动码汇编解码程序
 
作者:未知   来源:东哥单片机学习网    点击数:290   更新时间:2008-8-5
您可以添加到网摘 让更多人关注此文章:

    

#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   B'00010000'     ; 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   B'10000000'     ; 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


 



相关文章
· 基于PIC单片机的便携式测试记录仪设计[82]
· PIC16F84电机速度控制程序[263]
· PIC单片机控制的遥控防盗报警器[116]
· 用PIC16C73实现高精度数字电度表[101]
· 基于PIC单片机的低功耗键盘接口设计[86]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM嵌入式系统基础教程(N

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
赛普拉斯为用于机器视觉与运动分析应用
赛普拉斯针对机器视觉与全息数据存储应
金融危机来袭 台湾LED产
半导体市场环境恶化 安森美
Vishay 的新型&nb
Intersil推出采用小尺寸QFN
富士通微电子携手西安电子科技大学成立
纤巧和高压的 LDO&nb
华为计划收购北电业务 华为
华为计划收购北电业务 华为
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
四折批发各种数码相机,摄相机等...
最低价销售各种品牌手机...
震撼出售各种品牌笔记本电脑等!...
IC design 的流程...
电子工程师,别拿一分钱不当回事...
新款安全多用途非接触式芯片(T...
关于ARM启动的一篇文章!...
Linux网络设备驱动编程...
linux文件系统基础知识...
求奇想达QXD-DM642开发...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网