Freescale单片机能否象下面程序那样进行位定义
- UID
- 104380
- 性别
- 男
|
在CodeWarrior中用户可以进行位定义,而且所有寄存器的位定义在头文件中已经定义号了。用户可以参考头文件中的格式定义自己的变量或寄存器位。 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 146315
- 性别
- 男
|
请问那里有Freescale单片机宏定义资料,谢谢! |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
你是说汇编宏定义?
一般在Codewarrior中可以这样定义
比如关继电器
Close_Delay: MACRO
clr 1,PTB
ENDM
在CW help里面搜索宏可以得到相关帮助 |
|
|
|
|
|
- UID
- 146315
- 性别
- 男
|
唉!折腾了半天还是要 CLR 1,PTB
看来都没有仔细看我说的,也没明白我的意思.
本来是想看看Freescale单片机能否象其他单片机那样定义,见最上面例子;目的是为了让程序一目了然和方便编程不用老记着是PA口还是PB口或PC口,以后久了再拿程序出来更改也方便,就算硬件更改也只要改变定义就可以了;若还是误解我的意思的话只能说明我中文没学好. |
|
|
|
|
|
- UID
- 146315
- 性别
- 男
|
也许是我没说清楚,我的意思是: CLR JDQ_OUT1 ;关继电器(有位定义功能一目了然不用管他是哪个I/O口,
;程序修改也方便,硬件改动只要把前面位定义改掉即可不用
;管后面程序) ----------------------------------------------------------- 而非如下那样(这种定义意义不大) JDQ_OUT1 EQU 0 B.0 . . . BCLR JDQ_OUT1,PTB ;还得写"PTB",编程时还得去留意是PTA还是PTB口,改硬件 ;时都得找到相应的程序把"PTB"改为"PTA"(假设改为PA口) ;所以说这种定义意义不大.
[此贴子已经被作者于2007-1-31 14:48:37编辑过] |
|
|
|
|
|
- UID
- 146315
- 性别
- 男
|
Freescale单片机能否象下面程序那样进行位定义
Freescale单片机能否象下面程序那样进行位定义
;************************************************************************** ; 控制寄存器定义 ;************************************************************************** JDQ_OUT1 EQU PA.5 ;继电器 (硬件改动只要把位定义改掉即可不用管后面程序) D164_SDA EQU PA.6 D164_CLK EQU PA.7 。 。 。 ; code .section at 0 'code' ORG 00H JMP RESET ORG 04H JMP INTEXT ORG 08H JMP INTTMR ORG 0CH JMP INTAD ;************************************************************************** ; 主 程 序(复位地址) ;************************************************************************** ; ORG 00H RESET: CLR INTC ;禁止所有中断 CLR ADCR 。 。 。 CLR JDQ_OUT1 ;关继电器(有位定义功能一目了然不用管他是哪个I/O口,
;程序修改也方便,硬件改动只要把前面位定义改掉即可不用
;管后面程序)
[此贴子已经被作者于2007-1-30 21:41:08编辑过]
[此贴子已经被作者于2007-1-31 14:49:32编辑过] |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
我明白你的意思,只是我引的例子给你了错觉
在CW中,没有和你最上面一模一样的方式,但是可以通过宏定义等方式来做相同的功能
比如你对PTA口的5,6,7bit做了这个定义,希望用CLR JDQ_OUT1 这个语句来进行一个关的操作
JDQ_OUT1 EQU PA.5
D164_SDA EQU PA.6
D164_CLK EQU PA.7
在CW中可以通过如下方式来做
JDQ_OUT1 EQU PTAD_PTAD5
D164_SDA EQU PTAD_PTAD6
D164_CLK EQU PTAD_PTAD7
然后定义宏
CLR_BIT: MACRO
bclr \1,PTAD
ENDM
在程序中可以如下操作
CLR_BIT JDQ_OUT1
这完全可以等同于你原先的例子 |
|
|
|
|
|
- UID
- 146315
- 性别
- 男
|
好麻烦哦!感觉好象是可以,但我看不太懂,DATASHEET中没有介绍这种用法,CLR_BIT: MACRO中的“MACRO”是何东东,“bclr \1,PTAD”是清PTA中的某位吗?那么置位是否改为“BSET \1,PTAD”就可以了,这些东东那里有资料哇。
[此贴子已经被作者于2007-2-4 10:05:24编辑过] |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
macro就是表示定义一个宏,在codewarrior中写入的话自动会显示蓝色,表示宏定义。
\1,就表示宏中的一个参数,置位的方式就是你写的那种。
这个在CodeWarrior中是支持的,可以查看codewarrior相关的使用帮助。 |
|
|
|
|
|