首先我们来看一段程序:
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、程序结构要合理。
关键字:PIC单片机 编程风格 可读性
引用地址:
PIC单片机编程风格和格式简介
推荐阅读最新更新时间:2024-03-16 13:01
PIC单片机实现二进制码与压缩BCD码的相互转换
编写子程序Bin2BCD、BCD2Bin实现二进制数到压缩BCD码的相互转换。待转换的二进制数存放在w寄存器内,子程序调用完成后得到的BCD码仍存放在w寄存器内返回。例如: movlw .45 ; w=45 call Bin2BCD ; nop ; w=0x45 一、实现二进制数到压缩BCD码的转换 二进制数转压缩BCD码的方法是将二进制码左移8次,每次移位后都检查低四位是否大于4,如果大于4则低四位加3,否则不加;高4位做同样处理。 list p=16f877A ;标明所用的处理器类型 #include p16f877A.inc ;调用头文件 __CONFIG _CP_OFF &
[单片机]
PIC单片机-PICC介绍
目录: 一、如何从汇编转向PICC 二、浅谈PICC 的位操作 三、PICC 之延时函数和循环体优化 五、在PICC 中使用常数指针 六、PICC 关于unsigned 和 signed 的几个关键问题 七、用PICC 写高效的位移操作 八、C 程序优化 九、关于PIC的C语言中嵌入汇编语言 十、PICC中实现C语言与汇编语言混合编程 ---------------------------------------------------------------------------------------------------------------- 一、如何从汇编转向PICC
[单片机]
PIC单片机应用设计经验与技巧
美国微芯公司(Microch{p TECHNOLOGY Inc.)开发的CM0S工艺PIC系列8位单片机(RISC微控制器),特别是采用内置第二代FLASH存储器(40年存储寿命)的微控制器在快速应用方面具有独到之处。由于其易用性和高可靠性,该系列微控制器稳居8位单片机全球出货量之首。PIC系列单片机具有指令集简洁、简单易学、速度高、功能强、功耗低、价格低廉、体积小巧、适用性好及抗干扰能力强等特点,大量应用于汽车电气控制、电机控制、工业控制仪表和仪表、通信、家电、玩具、低功耗的测控应用等领域,在国内越来越受到广大设计者的欢迎,微芯公司的单片机已经成为目前单片机世界的主流产品。 PIC 8位单片机内已经包含运算器、存储器、A/D、
[单片机]
PIC单片机指令周期计算
PIC单片机的每四个时钟周期为一个内部指令周期 例如:8MHz的晶振,则内部指令周期为1/(8/4)= 0.5 uS 实例一:35us, 8MHz的晶振, 8位定时器, 分频比1/2 , 初值 E4 实例二:156.25us , 32768Hz的晶振, 8位定时器, 分频比1/32 , 初值 FC 计算方法一: 35 = =(256-初值)*分频*4/晶振 + 14/分频 =(256-初值)+14/2 计算方法二:0.015625 =(256-初值)*分频*4/晶振 = (256-初值)*32*4/32768 特别注意:分频比1-8 需要加上一个14/分频 什么是预分频比 后分频比 分频器一般都是
[单片机]
PIC单片机捕捉模块的程序设计
由于本设计测试4种参数,并且可以利用键盘选择显示其中的任何一种,因此编程设定S9为加1键、S11为减1键、S10为确定键、S12为功能键。 当按下S9键时,寄存器COUNTER可以从1连续或点动步进地加到4;同理按下S11键时,COUNTER从4减到1,并且把COUNTER值显示在LED上,不同的COUNTER值对应不同的测试参数。 程序根据不同的COUNTER值把相应的参数(已转换成BCD码)送到显示缓冲区,此时按下确定键,则LED上显示出该COUNTER值对应的测试参数。 按下功能键时,LED上示出当前的COUNTER值,又可以对其讲行加减操作。从而选择显示不同的参数,COUNTER值与其对应的测试参数关系
[单片机]
PIC单片机驱动LCD12864液晶显示闪动字体程序
/********************************************************************** *** 功能:12864LCD显示 显示闪动字体,各位同学可以自己修改。 *** 实验内容:0x81 0x90 0x88 0x98 分别是LCD四行的行首地址,我们操作LCD现实的字符就是分别放在这里面的 *** 开发板连接方法: 接上有字库LCD12864 注意调节对比度,LCD12864工作电流较大,请用外接电源供电。 *************************************************************************************
[单片机]
PIC单片机TIMER1应用注意的问题
1、当对TMR1H和TMR1L初始化时,预分频器将会自动清零。 2、在寄存器对TMR1H和TMR1L进行写操作时,将使预分频器清零。当TMR1处于运行状态时,对TMR1H或TMR1L值进行的写操作,可能会写入不希望的值。 3、TMR1工作于异步计数方式时,不能做为CCP模块的输入捕捉或输出捕捉的基准时间。 4、在上电复位(POR)或其它复位时,TMR1H和TMR1L保持原有数值,不会复位到0000H。 5、在上电复位或掉电复位控制寄存器T1CON的值将回到00H,并将关闭TMR1,且预分频器的分频比设定为缺的 1:1.在其他复位时均不会影响T1CON的值。 6、如果在复位时要将TMR1H和TMR1L的内容回到00H,可以
[单片机]