原创 PIC单片机编程漫谈(三)源程序的编辑

2009-8-3 12:47 2070 1 1 分类: MCU/ 嵌入式

来源 CEPARK电子网 http://www.cepark.com/Index.html#  作者: hnrain |


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


INTEN


           ……


     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、程序结构要合理。这个要说起来就复杂了,以后另起文章讨论吧?

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条