?? em4001門禁卡解碼程序.txt
字號:
BCF T1CON,TMR1ON ;關閉TMR1
CLRF TMR1L ;清TMR1寄存器
CLRF TMR1H
BSF T1CON,TMR1ON ;啟動TMR1
BTFSC PIR1,TMR1IF ;如TMR1計數溢出則是錯誤接收
GOTO SHUJU_WAN
BTFSS PORTB,7
GOTO $-3
BSF STATUS,C ;將數據"1"壓入數據寄存器
RLF TEMP_GE,1
RLF TEMP_SHI,1
RLF TEMP_BAI,1
RLF TEMP_QIAN,1
DECFSZ COUNT_WG,1 ;判斷26位數據是否接收完畢
GOTO SHUJU_JSH ;未接收完畢則轉向測高電平脈寬
GOTO SHUJU_BZ ;數據接收完畢則置刷新標志位
;--------------測高電平脈寬
SHUJU_JSH
BCF T1CON,TMR1ON ;關閉TMR1
CLRF TMR1L ;清TMR1寄存器
CLRF TMR1H
BSF T1CON,TMR1ON ;啟動TMR1
SHUJU_JSH_1
BTFSC PIR1,TMR1IF ;如TMR1計數溢出則是錯誤接收
GOTO SHUJU_WAN
BTFSS PORTB,6
GOTO SHUJU_JS0L
BTFSS PORTB,7
GOTO SHUJU_JS1L
GOTO SHUJU_JSH_1
;--------------
SHUJU_BZ BSF BZ_TEMP,0 ;置數制轉換標志位
SHUJU_WAN RETURN
;--------------二進制轉十六進制碼---------------------------------------
BINZHEX
BCF BZ_TEMP,0 ;清數制轉換標志位
MOVLW 03H ;取TEMP_QIAN的低二位存入DATE_7
ANDWF TEMP_QIAN,0
MOVWF DATE_7
;-------------
MOVLW 0F0H ;取TEMP_BAI的高四位存入DATA_6
ANDWF TEMP_BAI,0
MOVWF DATE_6
SWAPF DATE_6,1
MOVLW 0FH ;取TEMP_BAI的低四位存入DATE_5
ANDWF TEMP_BAI,0
MOVWF DATE_5
;--------------
MOVLW 0F0H ;取TEMP_SHI的高四位存入DATA_4
ANDWF TEMP_SHI,0
MOVWF DATE_4
SWAPF DATE_4,1
MOVLW 0FH ;取TEMP_SHI的低四位存入DATE_3
ANDWF TEMP_SHI,0
MOVWF DATE_3
;---------------
MOVLW 0F0H ;取TEMP_GE的高四位存入DATA_2
ANDWF TEMP_GE,0
MOVWF DATE_2
SWAPF DATE_2,1
MOVLW 0FH ;取TEMP_GE的低四位存入DATE_1
ANDWF TEMP_GE,0
MOVWF DATE_1
;---------------
MOVF DATE_7,0
MOVWF QIAN
MOVF DATE_6,0
MOVWF BAI
MOVF DATE_5,0
MOVWF SHI
MOVF DATE_4,0
MOVWF GE
;--------------
BINZHEX_WAN
BSF BZ_TEMP,1 ;置刷新標志位
RETURN
;=============移位顯示子程序=================================
AJYW CALL DELAY20MS ;延時判斷按鍵的有效性
BTFSC PORTB,1
GOTO AJYW_WAN ;是干擾則返回主程序
BTFSS PORTB,1 ;判斷按鍵是否松開
GOTO $-1
MOVF QIAN,0 ;進行移位操作
MOVWF TEMP_YIWEI
MOVF BAI,0
MOVWF QIAN
MOVF SHI,0
MOVWF BAI
MOVF GE,0
MOVWF SHI
MOVF TEMP_YIWEI,0
MOVWF GE
BSF BZ_TEMP,1 ;置刷新標志位
AJYW_WAN RETURN
;==============顯示轉換子程序==============================
XSZH CALL DELAY20MS ;延時判斷按鍵的有效性
BTFSC PORTB,2
GOTO XSZH_WAN ;是干擾則返回主程序
BTFSS PORTB,2 ;判斷按鍵是否松開
GOTO $-1
;--------------
BTFSC BZ_TEMP,2 ;判斷韋根顯示標志位
GOTO XSZH_1
;--------------顯示韋根數據的低三位
BSF BZ_TEMP,2 ;韋根顯示標志位取反
MOVF DATE_1,0
MOVWF GE
MOVF DATE_2,0
MOVWF SHI
MOVF DATE_3,0
MOVWF BAI
MOVLW 10H
MOVWF QIAN
GOTO XSZH_2
;------------- 顯示韋根數據的高四位
XSZH_1
BCF BZ_TEMP,2 ;韋根顯示標志位取反
MOVF DATE_7,0
MOVWF QIAN
MOVF DATE_6,0
MOVWF BAI
MOVF DATE_5,0
MOVWF SHI
MOVF DATE_4,0
MOVWF GE
;--------------
XSZH_2 BSF BZ_TEMP,1 ;置刷新標志位
XSZH_WAN RETURN
;==============顯示子程序==================================
XIANSHI BCF BZ_TEMP,1 ;清刷新標志位
MOVLW 28H
MOVWF TEMP_JZ
XIANSHI_1 BTFSC TEMP_JZ,2
GOTO XIANSHI_WAN
MOVF TEMP_JZ,0
MOVWF FSR
MOVF 00H,0
CALL TB
MOVWF DATE_ZJ
CALL FSBCD
INCF TEMP_JZ,1
GOTO XIANSHI_1
XIANSHI_WAN RETURN
;**************BCD碼發送子程序****************************
FSBCD MOVLW 08H ;發送循環次數
MOVWF COUNT_FMBCD
BCF ENABLE164 ;關顯示
BCF STATUS,0
FSBCD_1 BCF CLK164
RLF DATE_ZJ,1
BTFSS STATUS,0
GOTO FSBCD_2
BSF DATE164
GOTO FSBCD_3
FSBCD_2 BCF DATE164
NOP
FSBCD_3 BSF CLK164 ;產生時鐘上升沿
DECFSZ COUNT_FMBCD,1 ;發送完畢否?
GOTO FSBCD_1
BSF ENABLE164 ;開顯示
RETURN
;=============延時20MS子程序===============================
DELAY20MS MOVLW 28H
MOVWF COUNT0_DELAY
DELAY20MS_1 MOVLW 5DH
MOVWF COUNT1_DELAY
DECFSZ COUNT1_DELAY,1
GOTO $-1
DECFSZ COUNT0_DELAY,1
GOTO DELAY20MS_1
RETURN
;---------------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -