当前位置:首页 > 单片机 > 单片机
[导读] 定义用户寄存器WEI1EQUH’0C’;BIT0=MODS:选择模式位0:模式11:模式2;BIT1=BREK:断路判别位0:无断路1:有断路;BIT2=;BIT3=;BIT4=;BIT5=慢响;BIT6=快响;BIT7=长响WEI2EQUH’0D’;“百位值运算”的启始值 W

定义用户寄存器
WEI1EQUH’0C’;BIT0=MODS:选择模式位0:模式11:模式2
;BIT1=BREK:断路判别位0:无断路1:有断路
;BIT2=
;BIT3=
;BIT4=
;BIT5=慢响
;BIT6=快响
;BIT7=长响
WEI2EQUH’0D’;“百位值运算”的启始值

WEI3EQUH’0E’;“十位值运算”的启始值
WEI4EQUH’0F’;个位值
WEI5EQUH’10’;百位值
WEI6EQUH’11’;十位值
WEI7EQUH’12’;
WEI8EQUH’13’;
WEI9EQUH’14’;
WEIAEQUH’15’;
WEIBEQUH’16’
WEICEQUH’17’
WEIDEQUH’18’
WEIEEQUH’19’
WEIFEQUH’1A’
WEIGEQUH’1B’
WEIHEQUH’1C’
WEIIEQUH’1D’
CHECKEQUH’7’
DPEQUH’1’
ADEQUH’0’
BUZZEREQUH’3’
REQUH’2’
LEQUH’4’
;************************************************************************
;矢量地址
ORGH’00’;复位矢量
GOTOMAIN
ORGH’04’;中断矢量
NOP
GOTOINTER
;************************************************************************
;数码值
TABLE:
ADDWFPCL,F;
RETLWB’01000000’;“0”值
RETLWB’01111001’;“1”值
RETLWB’00100100’;“2”值
RETLWB’00110000’;“3”值
RETLWB’00011001’;“4”值
RETLWB’00010010’;“5”值
RETLWB’00000010’;“6”值
RETLWB’01011000’;“7”值
RETLWB’00000000’;“8”值
RETLWB’00010000’;“9”值
;------------------------------------------------------------------------
;清除寄存器WEI1-WEIG
MAIN:
CLRFWEI1;
CLRFWEI2;
CLRFWEI3;
CLRFWEI4;
CLRFWEI5;
CLRFWEI6;
CLRFWEI7;
CLRFWEI8;
CLRFWEI9;
CLRFWEIA;
CLRFWEIB;
CLRFWEIC;
CLRFWEID;
CLRFWEIE;
CLRFWEIF;
CLRFWEIG;
CLRFWEIH;
CLRFWEII;
BSFSTATUS,RP0;
BCFOPTION_REG,NOT_RBPU
BCFSTATUS,RP0;
MOV FPORTB,1;
BTFSSPORTB,1;
BSFWEI1,0;
;------------------------------------------------------------------------
;设置A/D通道及A/D结构
BSFSTATUS,RP0;
MOV LWB’00000010’;设置一个“A/D口”
MOV WFADCON1;参考电压:工作电压5V
MOV LWB’10000000’;
MOV WFTRISB;
MOV LWB’00000001’;
MOV WFTRISA;
MOV LWB’10000111’;
MOV WFOPTION_REG;
MOV LWB’10100000’;
MOV WFINTCON;
;-----------------------------------------------------------------------
;设置端口“输入/输出”并设置初始状态
BCFSTATUS,RP0;
MOV LWB’01000000’;设置A/D通道:AN0
MOV WFADCON0;选用内部1:8时钟振荡
MOV LWB’01111111’;
MOV WFPORTB;
MOV LWB’00010110’;
MOV WFPORTA;
MOV LWD’252’;
MOV WFTMR0;设置TMR0初始值
;------------------------------------------------------------------------
;选择模式
BTFSCWEI1,0;判断“模式开关”是否闭合
GOTOMODLE2;“模式开关”闭合,则进入“模式2”
GOTOMODLE1;“模式开关”断开,则进入“模式1”
;------------------------------------------------------------------------
;“模式1”初始化
MODLE1:
MOV FPORTB,1;
BTFSSPORTB,CHECK;判断是否有断路
GOTO$+7;
BSFWEI1,1;
BSFWEI1,6;有断路:蜂鸣器快响并且“无显示”延时3秒
BCFWEI1,5;
BCFWEI1,7;
CALLDELAY3S;无断路:“无显示”延时3秒
GOTOSTART;
CALLDELAY3S;
GOTOSTART;
;------------------------------------------------------------------------
;“模式2”初始化检测数码管各段,蜂鸣器“长响”
MODLE2:
BSFWEI1,0;设置“模式选择位”
BSFWEI1,7;打开蜂鸣器“长响”
BCFWEI1,5;
BCFWEI1,6;
BCFSTATUS,C;设置“进位标志位”
MOV LWB’11111111’;
MOV WFWEI7;
RLFWEI7,F;
MOV FWEI7,W;
MOV WFPORTB;设置“检测数码管段值”给PORT5
BCFPORTA,R;开通“右数码管”
BCFPORTA,L;开通“左数码管”
CALLDELAYP5;
BSFPORTA,R;关闭“右数码管”
BSFPORTA,L;关闭“左数码管”
MOV LWB’11111111’;
MOV WFPORTB;清除给PORT5的“检测数码管段值”
BTFSCWEI7,6;检测是否完毕
GOTO$-D’11’;没有完毕继续检测
BCFPORTA,DP;已完毕设置“小数点”及“1”值
BCFPORTA,R;开通“右数码管”
BCFPORTA,L;开通“左数码管”
CALLDELAYP5;
BSFPORTA,R;关闭“右数码管”
BSFPORTA,L;关闭“左数码管”
BSFPORTA,DP;清除“小数点”及“1”值
BCFWEI1,7;关闭蜂鸣器“长响”
BCFWEI1,6;
BCFWEI1,5;
GOTOSTART;
;------------------------------------------------------------------------
;开始工作
START:
MOV FPORTB,F;
BTFSCPORTB,CHECK;判断是否有断路
GOTODUANLU;有断路
BCFWEI1,1;清0断路判别位
GOTOPANZHI;无断路
;------------------------------------------------------------------------
;断路处理
DUANLU:
BSFWEI1,1;设置断路判别位
BSFWEI1,6;
BCFWEI1,5;
BCFWEI1,7;
GOTOPANZHI;
;------------------------------------------------------------------------
;判断电压值
PANZHI:
BSFADCON0,ADON;A/D处于工作状态
BSFADCON0,GO_DONE;A/D开始运行
BTFSCADCON0,GO_DONE;判A/D是否完成
GOTO$-1;A/D没完成
BCFADCON0,ADIF;
BCFADCON0,ADON;A/D已完成关闭A/D
CALLCV;
MOV FADRES,W;
MOV WFWEI8;
MOV WFWEI2;A/D值传给WEI2
BCFSTATUS,C;清零“进位标志位”
SUBLWD’200’;
BTFSSSTATUS,C
GOTOV_20;跳到“20V以上”程序
MOV FADRES,W
BCFSTATUS,C;清零“进位标志位”
SUBLWD’160’
BTFSSSTATUS,C
GOTOV16;跳到“16V-19.9V之间”程序
MOV FADRES,W
BCFSTATUS,C;清零“进位标志位”
SUBLWD’100’
BTFSSSTATUS,C
GOTOV10;跳到“10V-15.9V之间”程序
MOV FADRES,W
BCFSTATUS,C;清零“进位标志位”
SUBLWD’50’
BTFSSSTATUS,C
GOTOV5;跳到“5V-9.9V之间”程序
GOTOV4.9;跳到4.9V以下程序
;-------------------------------------------------------------------------
V4.9:;4.9V以下数码管显示LL
BTFSCWEI1,1;判断是否有断路
GOTO$+6;
BSFWEI1,7;无断路长响
BCFWEI1,6;
BCFWEI1,5;
CALLLL;
GOTOSTART;
BSFWEI1,6;有断路快响
BCFWEI1,5;
BCFWEI1,7;
CALLLL;
GOTOSTART;
;-------------------------------------------------------------------------
V5:;5V-9.9V之间
BTFSCWEI1,1;判断是否有断路
GOTO$+5;
BSFWEI1,5;无断路慢响
BCFWEI1,6;
BCFWEI1,7;
GOTODISPLAY;
BSFWEI1,6;有断路快响
BCFWEI1,5;
BCFWEI1,7;
GOTODISPLAY;
;-------------------------------------------------------------------------
V10:;10V-15.9V之间
BTFSCWEI1,1;判断是否有断路
GOTO$+5;
BCFWEI1,5;无断路不响
BCFWEI1,6;
BCFWEI1,7;
GOTODISPLAY;
BSFWEI1,6;有断路快响
BCFWEI1,5;
BCFWEI1,7;
GOTODISPLAY;
;-------------------------------------------------------------------------
V16:;16V-19.9V
BSFWEI1,6;快响
BCFWEI1,5;
BCFWEI1,7;
GOTODISPLAY;
;-------------------------------------------------------------------------
V_20:
BTFSCWEI1,1;判断是否有断路
GOTO$+6;
BSFWEI1,7;无断路长响
BCFWEI1,6;
BCFWEI1,5;
CALLHH;
GOTOSTART;
BSFWEI1,6;有断路快响
BCFWEI1,5;
BCFWEI1,7;
CALLHH;
GOTOSTART;
;-------------------------------------------------------------------------
;运算“显示值”
DISPLAY:
NOP;
HUN:
MOV FWEI2,W;
MOV WFWEI3;WEI2-100D的余值传给WEI3作为“十位值运算”的启始值
MOV LWD’100’
BCFSTATUS,C;清零“进位标志位”
SUBWFWEI2,F;WEI2-100D余值传给WEI2
BTFSSSTATUS,C;判WEI2是否大于100D
GOTOTEN;小于100D跳到“十位值运算”处
INCFWEI5,F;大于100DWEI5+1:百位值
GOTOHUN
TEN:
MOV FWEI3,W;
MOV WFWEI4;
MOV LWD’10’;WEI3-10D的余值传给WEI4作为“个位值运算”的启始值
BCFSTATUS,C;清零“进位标志位”
SUBWFWEI3,F;WEI3-10D余值传给WEI3
BTFSSSTATUS,C;判WEI2是否大于10D
GOTONUMB;小于10D跳到“个位值运算”处
INCFWEI6,F;大于10DWEI6+1:十位值
GOTOTEN
;------------------------------------------------------------------------
;显示“十位值”“小数点”
NUMB:
MOV FWEI6,W
CALLTABLE;
MOV WFPORTB;设置“十位值”
BCFPORTA,DP;设置小数点
BCFPORTA,L;打开显示“十位值”
CALLDELAY;
MOV LWB’11111111’;
MOV WFPORTB;清除“十位值”
BSFPORTA,DP;清除小数点
BSFPORTA,L;关闭显示“十位值”
;------------------------------------------------------------------------
;显示“个位值”“百位值”
MOV FWEI4,W
CALLTABLE
MOV WFPORTB;设置“个位值”
BCFSTATUS,Z;清除“零标志位”
CLRW;清除W
IORWFWEI5,W;
BTFSSSTATUS,Z;判有无“百位值”
BCFPORTA,DP;显示“百位值”
BCFPORTA,R;打开显示“个位值”
CALLDELAY;
MOV LWB’11111111’;
MOV WFPORTB;清除“个位值”
BSFPORTA,DP;清除“百位值”
BSFPORTA,R;关闭显示“个位值”
CLRFWEI6;
CLRFWEI5;
GOTOSTART;
;************************************************************************
;延时20MS秒程序
DELAY:
MOV LWD’10’;
MOV WFWEIE;
DELAY1:
MOV LWD’10’;
MOV WFWEIF;
DELAY2:
MOV LWD’10’;
MOV WFWEIG;
DELAY3:
DECFSZWEIG,F;
GOTODELAY3;
DECFSZWEIF,F;
GOTODELAY2;
DECFSZWEIE,F;
GOTODELAY1;
RETURN;
;------------------------------------------------------------------------
;延时0.5秒程序
DELAYP5:
CLRFWEI9;
CLRFWEIA;
BTFSSWEIA,2;
GOTO$-1;
CLRFWEI9;
CLRFWEIA;
RETURN;
;------------------------------------------------------------------------
;延时3秒程序
DELAY3S:
CLRFWEI9;
CLRFWEIA;
BTFSSWEIA,4;
GOTO$-1;
CLRFWEI9;
CLRFWEIA;
RETURN;
;------------------------------------------------------------------------
CV:
BTFSSWEI1,0;
RETURN;
MOV LWB’11100000’;
ANDWFWEI1,W;
BTFSSSTATUS,Z;
RETURN;
MOV FADRES,W;
XORWFWEI8,W;
BTFSSSTATUS,Z;
GOTOCLEAR;
BTFSSWEIA,4;
RETURN;
BSFINTCON,RBIE;使能PORTB引脚电平变化中断
BCFINTCON,GIE;禁止全局中断
BCFINTCON,T0IE;
MOV FPORTB,F;读状态
SLEEP;进入休眠状态
NOP;
CLRFINTCON;
BSFINTCON,GIE;
BSFINTCON,T0IE;
CLRFWEI9;
CLRFWEIA;
RETURN;
CLEAR:
CLRFWEI9;
CLRFWEIA;
RETURN;
;------------------------------------------------------------------------
LL:
MOV LWB’11000111’;
MOV WFPORTB;
BCFPORTA,L;
BCFPORTA,R;
CALLDELAY;
MOV LWB’11111111’;
MOV WFPORTB;
BSFPORTA,L;
BSFPORTA,R;
RETURN
;------------------------------------------------------------------------
HH:
MOV LWB’10001001’;
MOV WFPORTB;
BCFPORTA,L;
BCFPORTA,R;
CALLDELAY;
MOV LWB’11111111’;
MOV WFPORTB;
BSFPORTA,L;
BSFPORTA,R;
RETURN
;************************************************************************
;TMR0中断
INTER:
MOV WFWEIH;W,STATUS压入堆栈
SWAPFSTATUS,W;
MOV WFWEII;
BCFINTCON,T0IF;
MOV LWD’252’;
MOV WFTMR0;设置TMR0初始值
INCFSZWEI9,F;
GOTO$+2;
INCFWEIA,F;
MOV LWB’11100000’;
ANDWFWEI1,W;
BTFSCSTATUS,Z;
GOTOOUT2;
MOV LWB’00001000’;
XORWFPORTA,F;
BTFSSWEI1,6;
GOTO$+D’10’;
INCFSZWEIB,F;
GOTOOUT;
BCFPORTA,BUZZER;
BSFSTATUS,RP0;
MOV FTRISA,W;
XORLWB’00001000’;
MOV WFTRISA;
BCFSTATUS,RP0;
GOTOOUT;
;------------------------------------------------------------------------
BTFSSWEI1,5;
GOTOOUT1;
INCFSZWEIC,F;
GOTOOUT;
INCFWEID,F;
BTFSSWEID,2;
GOTOOUT;
CLRFWEIC;
CLRFWEID;
BCFPORTA,BUZZER;
BSFSTATUS,RP0;
MOV FTRISA,W;
XORLWB’00001000’;
MOV WFTRISA;
BCFSTATUS,RP0;
GOTOOUT;
OUT1:
BSFSTATUS,RP0;
MOV FTRISA,W;
ANDLWB’11110111’;
MOV WFTRISA;
BCFSTATUS,RP0;
GOTOOUT;
OUT2:
BCFPORTA,BUZZER;
OUT:
SWAPFWEII,W;W,STATUS弹出堆栈
MOV WFSTATUS;
SWAPFWEIH,F;
SWAPFWEIH,W;
RETFIE;允许中断并返回
END

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭