历史上的今天
今天是: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、程序结构要合理。
下一篇:PIC单片机数据存储的问题
史海拾趣
|
总结起来最主要的有以下几个吧 1 ADS调试用 确切的说是ADS AXD。ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。 有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是 ...… 查看全部问答> |
|
我在uC/OS的中断服务程序中只要不调用函数,中断服务程序是可以运行的,但是一旦中断服务函数中涉及信号量,则外部等待这个信号量的任务只会执行一次就死在那里了! 串口中断接收程序: interrupt 20 void iUART0_Receive(void){ OSIn ...… 查看全部问答> |
|
我现在定义了,如果P2.4是低电平则执行一个操作,使一个变量的值+1,现在我在P2.4口上接了个开关,就是那种按下去接着弹起来的按钮开关,现在按下去则P2.4是低电平,但是我发现这样有一些问题,按一次变量的值乱蹦,因为执行了很多次吧。 于是我加 ...… 查看全部问答> |
|
由中国健康教育协会、中国保健协会食物营养与安全专业委员会、中国营养师网等单位共同发起,华夏量健(北京)科技有限公司全程支持的中国营养健康教育信息化工程启动仪式近日在首届中国营养健康教育高峰论坛上成功举行。   ...… 查看全部问答> |
|
我有一块S3C2440的板子,装好后通电三组串口好像短路一样,相互之间的阻值只有几十欧,用串口0连PC开机就不断输出乱码或者00 00....,本来调试串口是UART1的,即使启动时的调试信息也是通过UART1输出的。很奇怪,不知道是什么原因。… 查看全部问答> |
|
本人做的项目是车载导航多媒体系统,主板是Pxa270,现在要添加usbhost驱动, 不知道PB工程里怎么修改,驱动程序生成的是DLL吗?大家说详细点 谢谢!… 查看全部问答> |
|
我在port_DataReceived事件中对窗口控件操作时老是提示要与独立线程创建的控件交互, 比如,我中该事件中收到一段字符,判断后关闭当前窗口, 这个简单的应用都实现不了,我该怎么做呢?… 查看全部问答> |




