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

📄 16c711电压表.asm

📁 PIC 16c711 做电压表的源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;定义用户寄存器
            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         ;

⌨️ 快捷键说明

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