首页 PIC16F73编写的门禁读卡器解码并显示的源程序

PIC16F73编写的门禁读卡器解码并显示的源程序

举报
开通vip

PIC16F73编写的门禁读卡器解码并显示的源程序所使用编译器的版本,HI-TECH PICC Version 9.50PL1(正版) 本例是一个用PIC16F73编写的门禁读卡器解码并显示的源程序 ;门禁读卡头为韦根26编码格式,数据“0"为DATAO线上出现400US的低电平加2000US的高电平; 数据”1"为DATA1线上出现400US的低电平加2000US的高电平 ; 无数据输出时DATA0,DATA1线上为高电平 ;晶振4MHZ ;*******************************************************...

PIC16F73编写的门禁读卡器解码并显示的源程序
所使用编译器的版本,HI-TECH PICC Version 9.50PL1(正版) 本例是一个用PIC16F73编写的门禁读卡器解码并显示的源程序 ;门禁读卡头为韦根26编码格式,数据“0"为DATAO线上出现400US的低电平加2000US的高电平; 数据”1"为DATA1线上出现400US的低电平加2000US的高电平 ; 无数据输出时DATA0,DATA1线上为高电平 ;晶振4MHZ ;******************************************************************* LIST P=16F73,R=DEC ;定义器件为16F73,默认数制为十进制 #INCLUDE #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 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
本文档为【PIC16F73编写的门禁读卡器解码并显示的源程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-05
浏览量:22