标题: Freescale单片机能否象下面程序那样进行位定义 [打印本页]
作者: strongchen 时间: 2007-1-31 09:20
在CodeWarrior中用户可以进行位定义,而且所有寄存器的位定义在头文件中已经定义号了。用户可以参考头文件中的格式定义自己的变量或寄存器位。
作者: strongchen 时间: 2007-1-31 11:37
可以用宏定义,非常方便。
作者: maikeo 时间: 2007-1-31 12:42
请问那里有Freescale单片机宏定义资料,谢谢!
作者: seuafu2005 时间: 2007-1-31 14:19
你是说汇编宏定义?
一般在Codewarrior中可以这样定义
比如关继电器
Close_Delay: MACRO
clr 1,PTB
ENDM
在CW help里面搜索宏可以得到相关帮助
作者: maikeo 时间: 2007-1-31 14:45
唉!折腾了半天还是要 CLR 1,PTB
看来都没有仔细看我说的,也没明白我的意思.
本来是想看看Freescale单片机能否象其他单片机那样定义,见最上面例子;目的是为了让程序一目了然和方便编程不用老记着是PA口还是PB口或PC口,以后久了再拿程序出来更改也方便,就算硬件更改也只要改变定义就可以了;若还是误解我的意思的话只能说明我中文没学好.
作者: maikeo 时间: 2007-1-31 14:48
也许是我没说清楚,我的意思是:
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编辑过]
作者: maikeo 时间: 2007-1-31 14:49 标题: 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编辑过]
作者: seuafu2005 时间: 2007-1-31 15:11
我明白你的意思,只是我引的例子给你了错觉
在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
这完全可以等同于你原先的例子
作者: maikeo 时间: 2007-2-4 10:05
好麻烦哦!感觉好象是可以,但我看不太懂,DATASHEET中没有介绍这种用法,CLR_BIT: MACRO中的“MACRO”是何东东,“bclr \1,PTAD”是清PTA中的某位吗?那么置位是否改为“BSET \1,PTAD”就可以了,这些东东那里有资料哇。
[此贴子已经被作者于2007-2-4 10:05:24编辑过]
作者: seuafu2005 时间: 2007-2-5 09:43
macro就是表示定义一个宏,在codewarrior中写入的话自动会显示蓝色,表示宏定义。
\1,就表示宏中的一个参数,置位的方式就是你写的那种。
这个在CodeWarrior中是支持的,可以查看codewarrior相关的使用帮助。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |