PIC单片机编程风格和格式

首先我们来看一段程序:
tittle ‘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、程序结构要合理。

倒车雷达
骁龙820渐行渐近:全新Hexagon 680 DSP推出
选购智能手表时需要关注的重点功能
OpenAI:阿尔特曼将重回OpenAI担任CEO
详解Qualcomm的Wi-Fi微控制器QCA401x
PIC单片机编程风格和格式
3G窜升CDMA2000正在取代GSM
5G换机潮前夜,手机厂商竞争激烈
德国研究人员开发出一款UVLED净化模块 用于饮料装瓶过程中的细菌消毒
世强电讯亮相2010国际工博
全国首家无前台的智慧酒店于7月2日正式对外开放
安科瑞远程预付费电能管理系统在高德置地集团的案例
安全问题再次响起警钟 LED显示屏的安全性需要加强
超级电容器与蓄电池相比,它的特点是什么
艾尼克斯亮相慕尼黑电子展
为什么有的LED灯关了以后还是会微亮?怎么解决?
喷火无人机清除导线异物,为输电线路的安全保驾护航
利用HFSS软件进行3D可视化建模
DYTRAN微型加速度计3049系列特点
传比特大陆终止IPO,究竟是何原因?