51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > PIC单片机 > 详细内容
PIC16C711电压检测
发布时间:2009/7/18  阅读次数:446  字体大小: 【】 【】【
;定义用户寄存器
                       WEI1     EQU H’0C’         ;BIT0=MODS:选择模式位   0:模式1   1:模式2
                                                                 ;BIT1=BREK:断路判别位   0:无断路 1:有断路
                                                                 ;BIT2=
                                                                 ;BIT3=
                                                                 ;BIT4=
                                                                 ;BIT5=慢响
                                                                 ;BIT6=快响
                                                                 ;BIT7=长响
                       WEI2     EQU H’0D’         ;“百位值运算”的启始值
                       WEI3     EQU H’0E’         ;“十位值运算”的启始值
                       WEI4     EQU H’0F’         ;个位值
                       WEI5     EQU H’10’         ;百位值
                       WEI6     EQU H’11’         ;十位值
                       WEI7     EQU H’12’         ;
                       WEI8     EQU H’13’         ;
                       WEI9     EQU H’14’         ;
                       WEIA     EQU H’15’         ;
                       WEIB     EQU H’16’
                       WEIC     EQU H’17’
                       WEID     EQU H’18’
                       WEIE     EQU H’19’
                       WEIF     EQU H’1A’
                       WEIG     EQU H’1B’        
                       WEIH     EQU H’1C’
                       WEII     EQU H’1D’    
                       CHECK   EQU H’7’
                       DP         EQU H’1’
                       AD         EQU H’0’
                       BUZZER EQU H’3’
                       R           EQU H’2’
                       L           EQU H’4’
;************************************************************************
;矢量地址
                       ORG       H’00’               ;复位矢量
                       GOTO   MAIN
                       ORG       H’04’               ;中断矢量
                       NOP                                                      
                       GOTO   INTER    
;************************************************************************
;数码值
TABLE:    
                       ADDWF   PCL,F                         ;
                       RETLW       B’01000000’         ;“0”值
                       RETLW       B’01111001’         ;“1”值
                       RETLW       B’00100100’         ;“2”值
                       RETLW       B’00110000’         ;“3”值
                       RETLW       B’00011001’         ;“4”值
                       RETLW       B’00010010’         ;“5”值
                       RETLW       B’00000010’         ;“6”值
                       RETLW       B’01011000’         ;“7”值
                       RETLW       B’00000000’         ;“8”值
                       RETLW       B’00010000’         ;“9”值
;------------------------------------------------------------------------
;清除寄存器WEI1-WEIG                
MAIN:            
                       CLRF   WEI1                 ;
                       CLRF   WEI2                 ;
                       CLRF   WEI3                 ;
                       CLRF   WEI4                 ;
                       CLRF   WEI5                 ;
                       CLRF   WEI6                 ;
                       CLRF   WEI7                 ;
                       CLRF   WEI8                 ;
                       CLRF   WEI9                 ;
                       CLRF   WEIA                 ;
                       CLRF   WEIB                 ;
                       CLRF   WEIC                 ;
                       CLRF   WEID                 ;
                       CLRF   WEIE                 ;
                       CLRF   WEIF                 ;
                       CLRF   WEIG                 ;                    
                       CLRF   WEIH                 ;
                       CLRF   WEII                 ;  
                       BSF       STATUS,RP0   ;
                       BCF       OPTION_REG,NOT_RBPU
                       BCF       STATUS,RP0   ;
                       MOVF     PORTB,1         ;
                       BTFSS   PORTB,1         ;
                       BSF       WEI1,0           ;
;------------------------------------------------------------------------
;设置A/D通道及A/D结构
                       BSF       STATUS,RP0   ;                                              
                       MOVLW   B’00000010’ ;设置一个“A/D口”
                       MOVWF   ADCON1           ;参考电压:工作电压5V
                       MOVLW   B’10000000’ ;
                       MOVWF   TRISB             ;
                       MOVLW   B’00000001’ ;
                       MOVWF   TRISA             ;
                       MOVLW   B’10000111’ ;
                       MOVWF   OPTION_REG   ;
                       MOVLW   B’10100000’ ;
                       MOVWF   INTCON           ;                                              
;-----------------------------------------------------------------------                    
;设置端口“输入/输出”并设置初始状态
                       BCF     STATUS,RP0     ;
                       MOVLW   B’01000000’ ;设置A/D通道:AN0
                       MOVWF   ADCON0           ;选用内部1:8时钟振荡
                       MOVLW   B’01111111’ ;
                       MOVWF   PORTB             ;
                       MOVLW   B’00010110’ ;
                       MOVWF   PORTA             ;
                       MOVLW   D’252’           ;
                       MOVWF   TMR0               ;设置TMR0初始值  
;------------------------------------------------------------------------        
;选择模式
                       BTFSC   WEI1,0           ;判断“模式开关”是否闭合
                       GOTO     MODLE2           ;“模式开关”闭合,则进入“模式2”
                       GOTO     MODLE1           ;“模式开关”断开,则进入“模式1”
;------------------------------------------------------------------------
;“模式1”初始化
MODLE1:        
                       MOVF     PORTB,1           ;
                       BTFSS   PORTB,CHECK   ;判断是否有断路
                       GOTO     $+7                   ;
                       BSF       WEI1,1             ;
                       BSF       WEI1,6             ;有断路:蜂鸣器快响并且“无显示”延时3秒
                       BCF       WEI1,5             ;
                       BCF       WEI1,7             ;
                       CALL     DELAY3S           ;无断路:“无显示”延时3秒
                       GOTO     START               ;  
                       CALL     DELAY3S           ;                                          
                       GOTO     START               ;
;------------------------------------------------------------------------
;“模式2”初始化   检测数码管各段,蜂鸣器“长响 ”
MODLE2:        
                       BSF       WEI1,0             ;设置“模式选择位”
                       BSF       WEI1,7             ;打开蜂鸣器“长响 ”
                       BCF       WEI1,5             ;
                       BCF       WEI1,6             ;
                       BCF       STATUS,C         ;设置“进位标志位”                  
                       MOVLW   B’11111111’   ;      
                       MOVWF   WEI7                 ;      
                       RLF       WEI7,F             ;
                       MOVF     WEI7,W             ;          
                       MOVWF   PORTB               ;设置“检测数码管段值”给PORT5
                       BCF       PORTA,R           ;开通“右数码管”
                       BCF       PORTA,L           ;开通“左数码管”
                       CALL     DELAYP5           ;
                       BSF       PORTA,R           ;关闭“右数码管”
                       BSF       PORTA,L           ;关闭“左数码管”
                       MOVLW   B’11111111’   ;
                       MOVWF   PORTB               ;清除给PORT5的“检测数码管段值”
                       BTFSC   WEI7,6             ;检测是否完毕
                       GOTO     $-D’11’           ;没有完毕 继续检测
                       BCF       PORTA,DP         ;已完毕 设置“小数点”及“1”值
                       BCF       PORTA,R           ;开通“右数码管”        
                       BCF       PORTA,L           ;开通“左数码管”
                       CALL     DELAYP5           ;
                       BSF       PORTA,R           ;关闭“右数码管”
                       BSF       PORTA,L           ;关闭“左数码管”
                       BSF       PORTA,DP         ;清除“小数点”及“1”值
                       BCF       WEI1,7             ;关闭蜂鸣器“长响 ”
                       BCF       WEI1,6             ;
                       BCF       WEI1,5             ;        
                       GOTO     START               ;
;------------------------------------------------------------------------
;开始工作
START:          
                       MOVF     PORTB,F           ;
                       BTFSC   PORTB,CHECK   ;判断是否有断路
                       GOTO     DUANLU             ;有断路
                       BCF       WEI1,1             ;清0断路判别位
                       GOTO     PANZHI             ;无断路
;------------------------------------------------------------------------
;断路处理
DUANLU:        
                       BSF       WEI1,1             ;设置断路判别位
                       BSF       WEI1,6             ;
                       BCF       WEI1,5             ;
                       BCF       WEI1,7             ;
                       GOTO     PANZHI             ;              
;------------------------------------------------------------------------
;判断电压值
PANZHI:        
                       BSF       ADCON0,ADON       ;A/D处于工作状态
                       BSF       ADCON0,GO_DONE ;A/D开始运行
                       BTFSC   ADCON0,GO_DONE ;判A/D是否完成
                       GOTO     $-1                       ;A/D没完成
                       BCF       ADCON0,ADIF       ;
                       BCF       ADCON0,ADON       ;A/D已完成 关闭A/D
                       CALL CV                             ;
                       MOVF     ADRES,W               ;
                       MOVWF   WEI8                     ;
                       MOVWF   WEI2                     ;A/D值传给WEI2
                       BCF       STATUS,C             ;清零“进位标志位”                              
                       SUBLW   D’200’                 ;
                       BTFSS   STATUS,C
                       GOTO     V_20                     ;跳到“20V以上”程序
                       MOVF     ADRES,W
                       BCF       STATUS,C             ;清零“进位标志位”
                       SUBLW   D’160’
                       BTFSS   STATUS,C
                       GOTO     V16                       ;跳到“16V-19.9V之间”程序
                       MOVF     ADRES,W
                       BCF       STATUS,C             ;清零“进位标志位”
                       SUBLW   D’100’
                       BTFSS   STATUS,C
                       GOTO     V10                       ;跳到“10V-15.9V之间”程序
                       MOVF     ADRES,W
                       BCF       STATUS,C             ;清零“进位标志位”
                       SUBLW   D’50’
                       BTFSS   STATUS,C
                       GOTO     V5                         ;跳到“5V-9.9V之间”程序
                       GOTO     V4.9                     ;跳到4.9V以下程序                      
;-------------------------------------------------------------------------                    
V4.9:                                                         ;4.9V以下 数码管显示LL
                     BTFSC     WEI1,1                 ;判断是否有断路
                     GOTO       $+6                       ;
                     BSF         WEI1,7                 ;无断路 长响
                     BCF         WEI1,6                 ;
                     BCF         WEI1,5                 ;
                     CALL       LL                         ;
                     GOTO       START                   ;
                     BSF         WEI1,6                 ;有断路 快响
                     BCF         WEI1,5                 ;
                     BCF         WEI1,7                 ;
                     CALL       LL                         ;
                     GOTO       START                   ;                    
;-------------------------------------------------------------------------
V5:                                                             ;5V-9.9V之间                    
                     BTFSC     WEI1,1                 ;判断是否有断路
                     GOTO       $+5                       ;
                     BSF         WEI1,5                 ;无断路 慢响
                     BCF         WEI1,6                 ;
                     BCF         WEI1,7                 ;
                     GOTO       DISPLAY               ;
                     BSF         WEI1,6                 ;有断路 快响
                     BCF         WEI1,5                 ;
                     BCF         WEI1,7                 ;
                     GOTO       DISPLAY               ;                    
;-------------------------------------------------------------------------
V10:                                                           ;10V-15.9V之间
                     BTFSC     WEI1,1                 ;判断是否有断路
                     GOTO       $+5                       ;
                     BCF         WEI1,5                 ;无断路 不响
                     BCF         WEI1,6                 ;
                     BCF         WEI1,7                 ;
                     GOTO       DISPLAY               ;
                     BSF         WEI1,6                 ;有断路 快响
                     BCF         WEI1,5                 ;
                     BCF         WEI1,7                 ;
                     GOTO       DISPLAY               ;
;-------------------------------------------------------------------------
V16:                                                           ;16V-19.9V                    
                     BSF         WEI1,6                 ;快响
                     BCF         WEI1,5                 ;
                     BCF         WEI1,7                 ;
                     GOTO       DISPLAY               ;
;-------------------------------------------------------------------------
V_20:
                     BTFSC     WEI1,1                 ;判断是否有断路
                     GOTO       $+6                       ;
                     BSF         WEI1,7                 ;无断路 长响
                     BCF         WEI1,6                 ;
                     BCF         WEI1,5                 ;
                     CALL       HH                         ;
                     GOTO       START                   ;
                     BSF         WEI1,6                 ;有断路 快响
                     BCF         WEI1,5                 ;
                     BCF         WEI1,7                 ;
                     CALL       HH                         ;
                     GOTO       START                   ;
;-------------------------------------------------------------------------
;运算“显示值”
DISPLAY:      
                       NOP                                     ;
HUN:              
                       MOVF     WEI2,W                 ;
                       MOVWF   WEI3                     ;WEI2-100D的余值传给WEI3作为“十位值运算”的启始值
                       MOVLW   D’100’
                       BCF       STATUS,C             ;清零“进位标志位”
                       SUBWF   WEI2,F                 ;WEI2-100D余值传给WEI2
                       BTFSS   STATUS,C             ;判WEI2是否大于100D
                       GOTO     TEN                       ;小于100D 跳到“十位值运算”处
                       INCF     WEI5,F                 ;大于100D WEI5+1:百位值
                       GOTO     HUN                            
TEN:              
                       MOVF     WEI3,W                 ;
                       MOVWF   WEI4                     ;
                       MOVLW   D’10’                   ;WEI3-10D的余值传给WEI4作为“个位值运算”的启始值
                       BCF       STATUS,C             ;清零“进位标志位”
                       SUBWF   WEI3,F                 ;WEI3-10D余值传给WEI3
                       BTFSS   STATUS,C             ;判WEI2是否大于10D
                       GOTO     NUMB                     ;小于10D 跳到“个位值运算”处
                       INCF     WEI6,F                 ;大于10D WEI6+1:十位值
                       GOTO     TEN
;------------------------------------------------------------------------
;显示“十位值”“小数点”
NUMB:          
                       MOVF     WEI6,W
                       CALL     TABLE                 ;
                       MOVWF   PORTB                 ;设置“十位值”
                       BCF       PORTA,DP           ;设置小数点
                       BCF       PORTA,L             ;打开显示“十位值”
                       CALL     DELAY                 ;
                       MOVLW   B’11111111’     ;
                       MOVWF   PORTB                 ;清除“十位值”
                       BSF       PORTA,DP           ;清除小数点
                       BSF       PORTA,L             ;关闭显示“十位值”
;------------------------------------------------------------------------
;显示“个位值” “百位值”                    
                       MOVF     WEI4,W
                       CALL     TABLE
                       MOVWF   PORTB                 ;设置“个位值”
                       BCF       STATUS,Z           ;清除“零标志位”
                       CLRW                                 ;清除W
                       IORWF   WEI5,W               ;
                       BTFSS   STATUS,Z           ;判有无“百位值”
                       BCF       PORTA,DP           ;显示“百位值”
                       BCF       PORTA,R             ;打开显示“个位值”
                       CALL     DELAY                 ;
                       MOVLW   B’11111111’     ;
                       MOVWF   PORTB                 ;清除“个位值”
                       BSF       PORTA,DP           ;清除“百位值”
                       BSF       PORTA,R             ;关闭显示“个位值”
                       CLRF     WEI6                   ;
                       CLRF     WEI5                   ;
                       GOTO     START                 ;              
;************************************************************************
;延时20MS秒程序
DELAY:
                       MOVLW   D’10’                 ;
                       MOVWF   WEIE                   ;
DELAY1:
                       MOVLW   D’10’                 ;
                       MOVWF   WEIF                   ;
DELAY2:
                       MOVLW   D’10’                 ;
                       MOVWF   WEIG                   ;
DELAY3:
                       DECFSZ WEIG,F               ;
                       GOTO     DELAY3               ;
                       DECFSZ WEIF,F               ;
                       GOTO     DELAY2               ;
                       DECFSZ WEIE,F               ;
                       GOTO     DELAY1               ;
                       RETURN                             ;
;------------------------------------------------------------------------
;延时0.5秒程序
DELAYP5:    
                       CLRF     WEI9                     ;
                       CLRF     WEIA                     ;
                       BTFSS   WEIA,2                 ;
                       GOTO     $-1                       ;
                       CLRF     WEI9                     ;
                       CLRF     WEIA                     ;
                       RETURN                               ;
;------------------------------------------------------------------------
;延时3秒程序
DELAY3S:
                       CLRF     WEI9                     ;
                       CLRF     WEIA                     ;
                       BTFSS   WEIA,4                 ;
                       GOTO     $-1                       ;
                       CLRF     WEI9                     ;
                       CLRF     WEIA                     ;
                       RETURN                               ;
;------------------------------------------------------------------------
CV:                
                       BTFSS   WEI1,0                   ;
        ,                RETURN                                 ;
                       MOVLW     B’11100000’       ;
                       ANDWF     WEI1,W                 ;
                       BTFSS     STATUS,Z             ;
                       RETURN                                 ;
                       MOVF     ADRES,W                 ;
                       XORWF   WEI8,W                   ;
                       BTFSS   STATUS,Z               ;
                       GOTO     CLEAR                     ;
                       BTFSS   WEIA,4                   ;
                       RETURN                                 ;
                       BSF       INTCON,RBIE         ;使能PORTB引脚电平变化中断
                       BCF       INTCON,GIE           ;禁止全局中断
                       BCF       INTCON,T0IE         ;
                       MOVF     PORTB,F                 ;读状态
                       SLEEP                                   ;进入休眠状态
                       NOP                                       ;
                       CLRF     INTCON                   ;
                       BSF       INTCON,GIE           ;
                       BSF       INTCON,T0IE         ;
                       CLRF     WEI9                       ;
                       CLRF     WEIA                       ;
                       RETURN                                 ;
CLEAR:
                       CLRF   WEI9                         ;
                       CLRF   WEIA                         ;
                       RETURN                                 ;
;------------------------------------------------------------------------
LL:
                       MOVLW     B’11000111’       ;
                       MOVWF     PORTB                   ;
                       BCF         PORTA,L               ;
                       BCF         PORTA,R               ;
                       CALL       DELAY                   ;
                       MOVLW     B’11111111’       ;
                       MOVWF     PORTB                   ;
                       BSF         PORTA,L               ;
                       BSF         PORTA,R               ;
                       RETURN
;------------------------------------------------------------------------
HH:
                       MOVLW     B’10001001’       ;
                       MOVWF     PORTB                   ;
                       BCF         PORTA,L               ;
                       BCF         PORTA,R               ;
                       CALL       DELAY                   ;
                       MOVLW     B’11111111’       ;
                       MOVWF     PORTB                   ;
                       BSF         PORTA,L               ;
                       BSF         PORTA,R               ;
                       RETURN
;************************************************************************
;TMR0中断      
INTER:  
                       MOVWF     WEIH                     ;W,STATUS压入堆栈
                       SWAPF     STATUS,W             ;
                       MOVWF     WEII                     ;
                       BCF         INTCON,T0IF       ;
                       MOVLW     D’252’                 ;
                       MOVWF     TMR0                     ;设置TMR0初始值  
                       INCFSZ   WEI9,F                 ;
                       GOTO       $+2                       ;
                       INCF       WEIA,F                 ;
                       MOVLW     B’11100000’       ;
                       ANDWF     WEI1,W                 ;
                       BTFSC     STATUS,Z             ;
                       GOTO       OUT2                     ;
                       MOVLW     B’00001000’       ;
                       XORWF     PORTA,F               ;
                       BTFSS     WEI1,6                 ;
                       GOTO       $+D’10’               ;
                       INCFSZ   WEIB,F                 ;
                       GOTO       OUT                       ;
                       BCF         PORTA,BUZZER     ;
                       BSF         STATUS,RP0         ;
                       MOVF       TRISA,W               ;
                       XORLW     B’00001000’       ;
                       MOVWF     TRISA                   ;
                       BCF         STATUS,RP0         ;
                       GOTO       OUT                       ;
;------------------------------------------------------------------------
                       BTFSS     WEI1,5                 ;
                       GOTO       OUT1                     ;
                       INCFSZ   WEIC,F                 ;
                       GOTO       OUT                       ;
                       INCF       WEID,F                 ;
                       BTFSS     WEID,2                 ;
                       GOTO       OUT                       ;
                       CLRF       WEIC                     ;
                       CLRF       WEID                     ;
                       BCF         PORTA,BUZZER     ;
                       BSF         STATUS,RP0         ;
                       MOVF       TRISA,W               ;
                       XORLW     B’00001000’       ;
                       MOVWF     TRISA                   ;
                       BCF         STATUS,RP0         ;
                       GOTO       OUT                       ;
OUT1:            
                       BSF         STATUS,RP0         ;
                       MOVF       TRISA,W               ;
                       ANDLW     B’11110111’       ;
                       MOVWF     TRISA                   ;
                       BCF         STATUS,RP0         ;
                       GOTO       OUT                       ;
OUT2:              
                       BCF         PORTA,BUZZER     ;
OUT:      
                       SWAPF     WEII,W                 ;W,STATUS弹出堆栈
                       MOVWF     STATUS                 ;
                       SWAPF     WEIH,F                 ;
                       SWAPF     WEIH,W                 ;
                       RETFIE                                 ;允许中断并返回
                       END
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号