历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2020年01月15日 | 基于PIC单片机直流电压表的汇编程序分享

2020-01-15 来源:elecfans

定义用户寄存器

WEI1EQUH’0C’;BIT0=MODS:选择模式位0:模式11:模式2

;BIT1=BREK:断路判别位0:无断路1:有断路

;BIT2=

;BIT3=

;BIT4=

;BIT5=慢响

;BIT6=快响

;BIT7=长响

WEI2EQUH’0D’;“百位值运算”的启始值

基于PIC单片机直流电压表的汇编程序分享
 

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

推荐阅读

史海拾趣

AK-Nord_GmbH公司的发展小趣事

AK-Nord_GmbH深知人才是企业发展的核心。因此,公司注重人才培养和团队建设。公司定期举办内部培训和交流活动,提升员工的专业技能和团队协作能力。同时,公司还积极引进外部优秀人才,为公司的创新发展注入新的活力。这些举措使得AK-Nord_GmbH的团队逐渐壮大,为公司的发展提供了有力的人才保障。

富信半导体(FOSAN)公司的发展小趣事

为了确保产品质量和客户满意度,AK-Nord_GmbH投入大量资源建设质量管理体系。公司引入了国际先进的质量管理标准和流程,对产品的研发、生产、测试等各个环节进行严格把控。同时,公司还建立了完善的客户服务体系,及时响应客户需求和处理问题。这些举措有效提升了公司的产品质量和客户满意度,为公司赢得了良好的口碑。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,AMICC开始积极拓展国内外市场。公司通过与大型电子企业建立战略合作关系,成功打入国际市场。同时,AMICC还积极参加各类行业展会和交流活动,提升品牌知名度和影响力。在市场拓展的过程中,AMICC始终坚持客户至上的原则,为客户提供优质的产品和服务,赢得了客户的信任和好评。

Honda Tsushin Kogyo Co Ltd公司的发展小趣事

随着电子技术的快速发展,Honda Tsushin Kogyo不断加大研发投入,致力于技术创新和产品升级。公司可能引入了先进的生产设备和技术人才,推动了产品线的拓展。从最初的简单连接器产品,逐步发展到包括Board To Board、Board To Cable、Cable To Cable、I/O、Card、Coxial、Optical、Power等在内的多种电子连接器产品。这些产品广泛应用于通信、计算机、汽车、航空航天等多个领域,为公司带来了更广阔的市场空间。

Good Will Instrument Co., Ltd.公司的发展小趣事

Honda Tsushin Kogyo在发展的过程中,可能形成了独特的企业文化和社会责任感。公司注重员工培训和团队建设,为员工提供良好的工作环境和发展机会。同时,公司还积极参与社会公益事业,通过捐赠、志愿服务等方式回馈社会。这些举措不仅提升了企业的社会形象,还增强了员工的归属感和凝聚力。在企业文化和社会责任的引领下,Honda Tsushin Kogyo实现了经济效益和社会效益的双赢。

需要注意的是,由于Honda Tsushin Kogyo的具体发展历程和详细故事可能并不完全公开,以上内容主要基于一般性的电子行业发展趋势和企业发展规律进行推测和整理。

Coors Components Inc公司的发展小趣事

随着电子行业的不断发展,智能化、绿色化成为了行业的新趋势。Coors Components Inc公司敏锐地捕捉到这一趋势,加大了对智能电子产品和环保材料的研发力度。通过不断推出符合市场需求的新产品,公司成功抓住了行业发展的机遇,实现了快速发展。

问答坊 | AI 解惑

可视倒车雷达

ddddddddddddddddddddddddddddddd…

查看全部问答>

锁相环的作用

今天听讲的时候,听说锁相环有三大功效! 倍频。软件的分频用延时就可以实现。要倍频的话,的确需要它。稳定时钟。为了得到稳定的时钟频率。用锁相环吧!调相。为了得到可靠的有用信号,特别是是一些检测信号。一个始终内的延时。就需要调相了。不 ...…

查看全部问答>

dsp晶振选用

请问dps外接晶振用无源的好还是有源的好?57个问题中说:晶体没有电压的问题,可以适应于任何DSP,建议用无源的晶体,是这样吗?…

查看全部问答>

Thumb2汇编程序(博大家一笑而已)

反正最近的工作就是在CORTEX-M3平台上做产品 最近在研究其堆栈布局和使用的时候 写出了一个本人有屎以来最短的程序 编译生成的目标代码只有12个字节 其中,中断向量表8个字节,程序,2个字节,另外两个是ARMASM要求的字对其, 实际上没啥技术 ...…

查看全部问答>

散分!!!!!!!

恭喜发财,我散分,我发财,大家一起发财!!!!!!…

查看全部问答>

如何选择A/D

我最近要做一个温度检测系统,范围0---99,检测分辨率 0.1℃,在检测电路设计上用铂电阻电桥检测(三线),由于第一次做设计不懂如何选择A\\D,请各位朋友帮忙小弟一下,感激不尽!…

查看全部问答>

eVC++ 对web service 的调用可以么??

论坛以前有这个帖子可是没有明确的答复。 如果谁知道这个问题可以麻烦帮忙解答一下么?? 如果不能调用可以说出根据 或者 文章出处么/? 如果可以调用的话,可以介绍一下方法么?? 谢谢!!…

查看全部问答>

NXP和UPM加强合作推出数据存取方便的 NFC标签

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 NXP 半导体 N.V.公司是总部设在荷兰Eindhoven的全球半导体器件公司, UPM RFID 是无源 HF 和 UHF无线识别标签和芯片领先的设计和制造商,两家公司宣布 ...…

查看全部问答>