当前位置:首页 > 单片机 > 单片机
[导读] ;定义用户寄存器 WEI1 EQU H’0C’ ;BIT0=MODS:选择模式位 0:模式1 1:模式2 ;BIT1=BREK:断路判别位 0:无断路 1:有断路 ;BIT2= ;BIT3= ;BIT4= ;BIT5=慢响 ;BIT6=快响 ;BIT7=长响 WEI2 EQU H’0D’ ;“百


;定义用户寄存器
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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

稳压器只能起到稳定直流电压的作用,它无法改变交流电压的大小和方向,也就无法替代变压器的作用。而变压器虽然自身并没有稳压功能,但是却能够改变电压大小和方向,使得电力设备能够正常传输和分配。

关键字: 稳压器 电压

自举电路(Bootstrap Circuit)是一种在电子电路中广泛应用的升压技术,其核心作用是通过电路自身的工作状态提升某个节点的电压,而无需增加外部电源电压。

关键字: 自举电路 电压

电路保护的意义在于保护电子电路中的元件免受过电压、过电流、浪涌和电磁干扰等有害因素的影响,从而防止设备损坏,确保电子设备的安全和稳定运行‌‌。

关键字: 电路保护 电压

在电子电路中,负电压的产生通常需要一种特殊的电路配置。然而,有一个简单的方法可以获得负电压,那就是利用运算放大器(Op-Amp)和地线。具体来说,你可以将运算放大器配置为一个反相放大器,其输入端接地,并通过适当的电阻和电...

关键字: 电压 运算放大器

一直以来,变压器都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来变压器的相关介绍,详细内容请看下文。

关键字: 变压器 电压 减容

在实际应用中,高压输电通常采用升压变压器将电能升压至数十万伏甚至更高,以减少在输电过程中的电能损耗,并提高输电效率。例如,在我国,送电距离在200-300公里时采用220千伏的电压输电;在100公里左右时采用110千伏;...

关键字: 电压 电网

锂电池多次筛选的关键原因是内阻的重要性‌。锂电池的内阻是指电池在工作时,电流流过电池内部所受到的阻力,包括欧姆内阻和极化内阻‌。内阻的大小直接影响电池的性能和寿命。

关键字: 电压 锂电池

今天,小编将在这篇文章中为大家带来摇表的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 摇表 电阻 电压

上海 2025年6月10日 /美通社/ -- MPS芯源系统(NASDAQ代码:MPWR)近期发布了两款新产品:NovoOne开关MPXG2100系列和PFC稳压器MPG44100系列,旨在为快速发展的快速充电市场、工...

关键字: ACDC 高集成 PS 电压

新型SMD保险丝可实现紧凑的全自动装配,并为高压应用提供增强的保护

关键字: SMD保险丝 自动化 电压
关闭