📄 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 + -