英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
关于define和EQU
[打印本页]
作者:
kingman
时间:
2009-4-18 20:09
标题:
关于define和EQU
#define的作用是定义常数符号,即用一个符号变量替换另一个符号串或变量。被替换的可以是任意
字母数字组成的符号但替换者本身不能是一个纯数字。
例如:#define DELAY_TIME 1000 ;定义常数符号,即用DELAY_TIME符号代替1000
#define KEY1 PROTB,7 ;用KEY1代替端口PROTB的第7引脚。
用#define伪指令定义符号后,可使程序中的变量或指令变得更具实际意义,也使程序变得更易维
护。指令“btfss PORTB,7 ”和“btfss KEY1 ”在事先用了#define后编译的结果是一样的,但明显地
后者看起来更容易理解,一看就知道这是在测试编号为KEY1的一个按键。而且如果你的硬件设计改动
了KEY1所接的单片机引脚,只要改动这一处#define重新定义引脚位置,程序的其它部分无需任何修
改,再编译一次即可得到更新后的软件代码。一个好的编程习惯是事先把一些代表实际意义的变量、
单片机的输入输出引脚在硬件电路中的实际功能等用#define伪指令定义成简单直观的符号名字,然
后在程序中直接用其符号名字而不用简单机械的数字形式。替换的工作由编译器在编译时自动完成。
它会先扫描你的源程序代码,把事先#define的符号名改回成被替换的字符串,然后再继续编译生产
机器码。EQU顾名思义是“等于”的意思,其作用和#define伪指令有点类似,也是用一个符号名字
替换其它数字变量,但它只能替换立即数。如果要替换一个符号名字,则此符号名必须事先用
#define或equ伪指令已经定义替换了一个立即数。在绝对定位的编程模式中EQU被经常用于定义用户
自己的变量,即用一个符号名代替一个固定的存储单元地址,用EQU方式定义的符号在汇编后可以生
成相关的调试信息,可以通过各种变量观察的方式显示此符号所代表的内存地址处的数据内容,但用
#define方式定义的符号则不能产生调试信息。要注意equ伪指令本身并没有限定所定义的一定是一个
变量地址,它只是一个简单的符号和数字替换而已,其意义必须和具体的指令结合才能确定,.
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2