⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 em4001门禁卡解码程序.txt

📁 本例是一个用PIC16F73编写的门禁读卡器解码并显示的源程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;本例是一个用PIC16F73编写的门禁读卡器解码并显示的源程序
;门禁读卡头为韦根26编码格式,数据“0"为DATAO线上出现400US的低电平加2000US的高电平
;                            数据”1"为DATA1线上出现400US的低电平加2000US的高电平
;                            无数据输出时DATA0,DATA1线上为高电平
;晶振4MHZ
;*******************************************************************
LIST P=16F73,R=DEC  ;定义器件为16F73,默认数制为十进制
#INCLUDE<P16F73.INC>
#DEFINE        DATE164      PORTA,0     ;定义164数据位
#DEFINE        CLK164       PORTA,1     ;定义164时钟位 
#DEFINE        ENABLE164    PORTA,2     ;定义164显示使能位
;-------中断保护寄存器
W_TEMP         EQU           20H        ;W中间寄存器
STATUS_TEMP    EQU           21H        ;STATUS中间寄存器
;-------延时寄存器
COUNT0_DELAY   EQU           22H        ;延时记数用寄存器
COUNT1_DELAY   EQU           23H 
;-------显示寄存器
DATE_ZJ        EQU           24H        ;显示数据寄存器
TEMP_JZ        EQU           25H        ;显示间址寄存器
BZ_TEMP        EQU           26H        ;刷新标志寄存器
COUNT_FMBCD    EQU           27H        ;发码次数寄存器
QIAN           EQU           28H        ;显示千位寄存器
BAI            EQU           29H        ;百
SHI            EQU           2AH        ;十
GE             EQU           2BH        ;个
;-------移位数据寄存器
TEMP_YIWEI     EQU           2DH
;-------韦根解码寄存器
TEMP_QIAN      EQU           30H        ;韦根解码数据寄存器
TEMP_BAI       EQU           31H
TEMP_SHI       EQU           32H
TEMP_GE        EQU           33H
COUNT_WG       EQU           34H        ;韦根数据位数寄存器
;--------------数制转换寄存器
DATE_7         EQU           35H        
DATE_6         EQU           36H
DATE_5         EQU           37H
DATE_4         EQU           38H
DATE_3         EQU           39H
DATE_2         EQU           3AH
DATE_1         EQU           3BH
;------------------------------------------------
               ORG           00H
               NOP
               GOTO          START
;--------------中断子程序----------------------------
               ORG           04H
PBDPZD
               MOVWF       W_TEMP           ;现场保护
               SWAPF       STATUS,0       
               MOVWF       STATUS_TEMP
               CALL        SHUJU_JS
;----------------
INEND          BCF         INTCON,RBIF      ;清PORTB中断标志位
               SWAPF       STATUS_TEMP,W    ;恢复中断前STATUS,W的值
               MOVWF       STATUS
               SWAPF       W_TEMP,1
               SWAPF       W_TEMP,0         ;(用SWAPF才不会影响STATUS的值)
               RETFIE
;--------------显示代码表-------------------------------
TB             ADDWF         PCL,1
               RETLW         03H           ;0
               RETLW         9FH           ;1
               RETLW         25H           ;2
               RETLW         0DH           ;3
               RETLW         99H           ;4
               RETLW         49H           ;5
               RETLW         0C1H          ;6
               RETLW         1FH           ;7
               RETLW         01H           ;8
               RETLW         19H           ;9
               RETLW         11H           ;A
               RETLW         0C1H          ;B
               RETLW         63H           ;C
               RETLW         0A1H          ;D
               RETLW         61H           ;E
               RETLW         71H           ;F
               RETLW         0FFH          ;关显示
               RETURN
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;--------------主程序------------------------------------------------------
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
               ORG            60H
START
;--------------寄存器全部清零
               MOVLW          20H
               MOVWF          FSR
ST:            CLRF           00H
               INCF           FSR,1
               BTFSS          FSR,6
               GOTO           ST   
;---------------
               BCF           STATUS,RP0    ;选体0
               BCF           STATUS,RP1    ;
               CLRF          PORTA         ;清RA,RB,RC口
               CLRF          PORTB
               CLRF          PORTC
;---------------
               BSF           STATUS,RP0    ;选体1
               MOVLW         06H
               MOVWF         ADCON1        ;RA口设置为普通I/O口
               MOVLW         00H              
               MOVWF         TRISA         ;RA口设置为输出口
               MOVLW         0FFH
               MOVWF         TRISB         ;RB口设置为输入口
               MOVLW         06H
               MOVWF         TRISC         ;CCP1,CCP2为输入口
               BCF           STATUS,RP0    ;恢复体0
;--------------程序测试子程序(初始显示1234)        
               MOVLW         01H           ;1
               MOVWF         QIAN             
               MOVLW         02H           ;2
               MOVWF         BAI
               MOVLW         03H           ;3
               MOVWF         SHI 
               MOVLW         04H           ;4
               MOVWF         GE
               CALL          XIANSHI
;---------------
               BCF           INTCON,RBIF
               BSF           INTCON,RBIE      ;开RB口电平中断
               BSF           INTCON,GIE       ;开总中断
;************************************************************
;**************主程序内核************************************
MAIN           NOP
               MOVLW         1AH           ;设置韦根解码位数
               MOVWF         COUNT_WG 
               BTFSS         PORTB,1       ;判断是否需要移位操作
               CALL          AJYW          
               BTFSS         PORTB,2       ;判断是否需要显示转换
               CALL          XSZH
               BTFSC         BZ_TEMP,0     ;判断是否需要数制转换
               CALL          BINZHEX
               BTFSC         BZ_TEMP,1     ;判断是否需要显示刷新
               CALL          XIANSHI
               GOTO          MAIN
;************************************************************
;==============数据接收子程序================================
SHUJU_JS
               CLRF          TEMP_GE       ;清韦根解码数据寄存器
               CLRF          TEMP_SHI
               CLRF          TEMP_BAI
               CLRF          TEMP_QIAN
               CLRF          TMR1L         ;清TMR1寄存器
               CLRF          TMR1H
               CLRF          T1CON         ;TMR1计数分配比1:1
               BCF           PIR1,TMR1IF   ;清TMR1中断标志位
;--------------
               BTFSS         PORTB,6       ;判断数据是"0"?
               GOTO          SHUJU_JS0L
               BTFSS         PORTB,7       ;判断数据是"1"?
               GOTO          SHUJU_JS1L
               GOTO          SHUJU_WAN
;--------------数据0
SHUJU_JS0L
               BCF           T1CON,TMR1ON  ;关闭TMR1
               CLRF          TMR1L         ;清TMR1寄存器
               CLRF          TMR1H
               BSF           T1CON,TMR1ON  ;启动TMR1

               BTFSC         PIR1,TMR1IF   ;如TMR1计数溢出则是错误接收
               GOTO          SHUJU_WAN
               BTFSS         PORTB,6
               GOTO          $-3
               BCF           STATUS,C      ;将数据"0"压入数据寄存器
               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      ;数据接收完毕则置刷新标志位
;--------------数据1
SHUJU_JS1L

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -