历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | PIC单片机编程格式和风格

2020-02-12 来源:eefocus

首先我们来看一段程序:

ittle ‘Input.asm’ ;标题

这是一个简单的输入实验

include

COUNT EQU 20H ;定义20H寄存器名为COUNT

ORG 0 ;程序区将从0000H开始装载

GOTO START

ORG 4 ;中断入口

GOTO INTEN ;中断发生时跳转到INTEN

ORG 10 ;START将从第10行开始

START

……

MAIN

……

GOTO MAIN

INTSEVER

……

RETFIE ;中断返回

END ;程序结束伪指令,不能少!


事实上汇编程序并没有固定的格式,但是它的各部分是有一定的位置安排的,习惯上依次为:

①程序标题:用Tittle伪指令定义,可缺省;

②程序注释:请注意必须在程序说明及注释部分的内容前面用“;”号,否则将会出现编译错误。程序说明及注释部分均可缺省;

③调用到的.inc文件:用include伪指令来调用。通常.inc文件是与单片机型号相对应的,包括了一些特殊寄存器的定义等内容。PIC单片机各种型号的.inc文件在MPLAB目录中就能找到,不需要自己编写。如果被调用的.inc文件遗失,编译时将会出现编译错误;

④通用寄存器定义:用EQU伪指令定义,格式为“寄存器名称 EQU 寄存器标号”,寄存器名称要顶格写。这是程序编写人员为所用到的通用寄存器起的名字,对应了一个实际的通用积存器地址;

⑤宏定义:在上面的程序中没有用到宏,缺省;

⑥程序初始化:START部分;

⑦主程序:MAIN部分;

⑧子程序:如本程序的INTSEVER部分。有时候会将子程序放在初始化程序的前面,例如一些查表程序等;

⑨程序结束:END语句,不可缺省。


以上的部分构成了一个完整的PIC汇编程序。在程序编写过程中需要注意的问题我认为有以下几点:

1、编程中首先要避免使用直接地址对寄存器操作。使用直接地址来操作寄存器会使程序的可读性大大的降低,一来容易和数据发生混淆,二来也不容易更改。以上面的程序来说吧,寄存器“COUNT”的直接地址是20H。假如调试过程中我突然发现调用到COUNT的子程序中其它的寄存器都是在BANK1的,我为了调用它需要常常切换BANK极不方便,因此要将它的地址改为90H。那么现在我只要将定义的语句改为“COUNT EQU 90H ”就可以了,假如我没有这样定义,那么我只能去程序中查找20H然后一一改为90H……


2、注意子程序标号的可读性。虽然这些标号在被编译之后是没有区别的(当然了,地址还是不一样的),只是编程人员用以识别的标记(比如:main通常被使用作为程序的主循环标号,而start则常被用做程序初始化的标号,可以说,标号的命名情况与程序的编译、运行是没有太大的影响的。假如你的main标号被改成loop,编译结果也是一样),但是它们的合理与否将会影响到程序的调试。通常来讲,标号最好是能一目了然,甚至要能概括这段程序处理的内容。比如延时程序用dealy,中断服务用intsever等等。这样一来程序的可读性高了,以后要修改调试起来也很方便。


3、程序结构要合理。

推荐阅读

史海拾趣

Dae Ryung Electronic Co Ltd公司的发展小趣事

Dae Ryung Electronic Co Ltd公司自创立之初,就致力于电子技术的研发与创新。公司创始人深知技术是企业发展的核心驱动力,因此投入大量资源用于研发。经过数年努力,公司成功研发出一款高性能、低成本的微处理器,这一产品迅速在市场上获得认可,为公司带来了可观的利润。随后,公司继续加大研发投入,不断推出新产品,逐渐在电子行业中树立了技术领先的形象。

冠图电子(GTL-POWER)公司的发展小趣事

在追求经济效益的同时,Dae Ryung Electronic Co Ltd公司也积极履行社会责任并推动可持续发展。公司注重环保和节能减排工作,在生产过程中采用环保材料和工艺减少污染排放。同时,公司还积极参与社会公益事业和慈善活动回馈社会。这些做法不仅提升了公司的社会形象也促进了企业与社会的和谐发展。

Daewoo公司的发展小趣事

然而,好景不长。1997年亚洲金融危机的爆发给Daewoo公司带来了前所未有的挑战。由于过度扩张和错误的投资决策,公司背负了巨额债务,资不抵债。面对这一困境,Daewoo公司不得不进行资产重组和裁员等措施,以减轻财务压力。虽然这些措施在短期内带来了痛苦,但也为公司的未来发展奠定了基础。

Adaptive Networks Inc公司的发展小趣事

在汽车产业领域,Daewoo公司同样取得了令人瞩目的成就。大宇汽车公司作为Daewoo集团的骨干企业,自1983年独立以来,凭借其先进的技术和出色的品质,迅速在韩国汽车市场崭露头角。公司不仅在国内市场表现优异,还积极开拓国际市场,成功将产品出口到世界各地。

CQR SECURITY公司的发展小趣事

CQR SECURITY公司在追求商业成功的同时,也积极履行社会责任。公司定期举办网络安全宣传活动,提高公众的网络安全意识。同时,CQR还积极参与社会公益事业,为弱势群体提供网络安全支持和帮助。这种积极履行社会责任的举措不仅提升了CQR的品牌形象,还为公司赢得了社会的广泛赞誉。

这些故事虽然虚构,但反映了电子安全公司可能经历的一些普遍发展路径和挑战。希望这些故事能够为您提供一些启发和参考。如果需要更多关于特定公司的信息,建议您查阅相关新闻报道、行业分析报告或公司官网等渠道。

Gustav Klauke GmbH公司的发展小趣事

在激烈的市场竞争中,CQR SECURITY公司不断探索创新服务模式。公司推出了基于云计算的安全服务平台,为客户提供更加便捷、高效的安全服务。同时,CQR还加强了对客户需求的深入了解,量身定制安全解决方案,满足客户的个性化需求。这种创新服务模式不仅提升了客户满意度,还为CQR带来了更多的商业机会。

问答坊 | AI 解惑

开发都需要学习哪些软件

总结起来最主要的有以下几个吧 1 ADS调试用 确切的说是ADS AXD。ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。 有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是 ...…

查看全部问答>

请教怎么加载两个菜单。

如题, 在练习菜单的基本设计, 请问高手们怎么在一个窗口加载两个菜单, 就是说手机屏幕上左下角和右下角都是菜单。 多谢高手们指教。…

查看全部问答>

uC/OS中断函数使用信号量出问题

我在uC/OS的中断服务程序中只要不调用函数,中断服务程序是可以运行的,但是一旦中断服务函数中涉及信号量,则外部等待这个信号量的任务只会执行一次就死在那里了! 串口中断接收程序: interrupt 20 void iUART0_Receive(void){    OSIn ...…

查看全部问答>

请教 单片机上使用开关,有抖动的问题

我现在定义了,如果P2.4是低电平则执行一个操作,使一个变量的值+1,现在我在P2.4口上接了个开关,就是那种按下去接着弹起来的按钮开关,现在按下去则P2.4是低电平,但是我发现这样有一些问题,按一次变量的值乱蹦,因为执行了很多次吧。 于是我加 ...…

查看全部问答>

求 NT 文件系统内幕一书

求 NT 文件系统内幕一书  中文版 可以另外加分或者现金 电子版 印刷版均可 tao_ao@126.com…

查看全部问答>

中国营养健康教育信息化工程启动

    由中国健康教育协会、中国保健协会食物营养与安全专业委员会、中国营养师网等单位共同发起,华夏量健(北京)科技有限公司全程支持的中国营养健康教育信息化工程启动仪式近日在首届中国营养健康教育高峰论坛上成功举行。   ...…

查看全部问答>

s3c2440的串口问题

我有一块S3C2440的板子,装好后通电三组串口好像短路一样,相互之间的阻值只有几十欧,用串口0连PC开机就不断输出乱码或者00 00....,本来调试串口是UART1的,即使启动时的调试信息也是通过UART1输出的。很奇怪,不知道是什么原因。…

查看全部问答>

新手求助如何实现USB功能

  本人做的项目是车载导航多媒体系统,主板是Pxa270,现在要添加usbhost驱动, 不知道PB工程里怎么修改,驱动程序生成的是DLL吗?大家说详细点 谢谢!…

查看全部问答>

怎样在.net2005中使用serialport控件

我在port_DataReceived事件中对窗口控件操作时老是提示要与独立线程创建的控件交互, 比如,我中该事件中收到一段字符,判断后关闭当前窗口, 这个简单的应用都实现不了,我该怎么做呢?…

查看全部问答>