📄 16c711电压表.asm
字号:
;定义用户寄存器
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 + -