1. 用C直接操作DPTR方式
我们平常用Keil C访问总线一般是定义 unsigned char xdata *fardptr; fardptr=0xbf00; *fardptr=0; 来访问,这就涉及到一个问题:首先增加一个占两个字节的变量,其次是每次系统多了一个赋值给这个变量,不论你是否要用这个用量。用汇编操作总线 MOVX A,@DPTR 和MOVX @DPTR,A,我们可以用混汇编方法是可以插入,但象这种类似操作多了,代码看起来不清晰,还有一种办法:
我们先定义一个宏:#define dptr(n) (*((unsigned char xdata *)n)) 然后我们就可以象写函数一样
dptr(0xbf04)=0;
dptr(0xbf05)=0xff;
dptr(0xbf06)=0x18;
这种方式用Keil C 编译成的实际形式就是:
MOV DPTR,#0BF04H
CLR A
MOVX @DPTR,A
INC DPTR ;这里Keil c自动优化为INC ,而不是 MOV DPTR ,#0BF05H,使执行速度更快
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
MOV A,#018H
MOVX @DPTR,A
这种写法是和直接汇编的效率是一样高的!但反过来行不行呢?
unsigned char m;
dptr(0xbf04)=0; m=dptr(0xb