机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
PIC16C711电压检测程序
PIC16C711电压检测程序
 更新时间:2009-12-12 11:07:58  点击数:0
【字体: 字体颜色
;定义用户寄存器
            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,         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
  • 上一篇: PIC16C71单片机按键换醒CPU源程序
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1