#define U0RBR (*((volatile unsigned char *) 0xE000C000))

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:59:58
有没有人知到刮号里面的要怎么理解,我看的不是很懂
还有
#define EINT1 (1<<16) /* P0.16 */
我只知道<<在C语言里面是表示左移,而上面的这句又要怎么理解啊,请求高手帮助呀,谢谢啦
#define DIRECT1 1<<10 //接收数据拉低,发送数据抬高
#define DIRECT0 1<<16 //接收数据拉低,发送数据抬高
这个又是怎么解释呢?是不是“<<”只有左移的意思。没有其他的意思呢?

#define U0RBR (*((volatile unsigned char *) 0xE000C000))
还有这句话要怎么读

#define U0RBR (*((volatile unsigned char *) 0xE000C000))
这个在单片机里很常见,
((volatile unsigned char *) 0xE000C000) 是将0xE000C000强制转换为
保存可能随时更新(volatile的作用)无符号字符型数据的地址
前面又加了*,是表示指向这个地址里面的值,这与其他普通定义的指针一样了,如char x,y,*p;p=&x;*p=y;y=*p
就如同一个变量一样,既可以从这里读出值,也可以给被赋值,这里需要注意的是,这个地址值里的东西是不是既可以读又可以写,这个在datasheet应该有定义,或者看程序中都拿他干什么。
#define U0RBR (*((volatile unsigned char *) 0xE000C000)) 这个是宏定义,即UORBR替换(*((volatile unsigned char *) 0xE000C000)),宏定义是为了程序书写方便,因为在程序中可能有好多地方要使用(*((volatile unsigned char *) 0xE000C000)),在用时,总要写这么多东西麻烦。

(1<<16),没错这个也是左移,只不过不是给变量里的数左移,而是直接把1左移16位,也即把16位数中的最高位置1
0000 0000 0000 0001 //1
移之后
1000 0000 0000 0000 //0x8000

#define DIRECT1 1<<10 //接收数据拉低,发送数据抬高
#define DIRECT0 1<<16 //接收数据拉低,发送数据抬高

拿着这个两个宏定义给寄存器赋值,或者是与寄存器按位与或者按位或等等。
这个应该懂了吧,应该是给位9和位15(从位0开始)置1
我猜想位9应该控制的是发送数据,位15控制的是控制的是发送数据

1<<16就是1 向左移16位,即为1000000000000000000。值为65536

接下来的那句话我