打印

一段程序请教.

[复制链接]
1784|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kenkel|  楼主 | 2007-3-20 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一下.
#define XBYTE ((unsigned char *)0x20000L)
#define RS82C55 XBYTE[0x0803]
   RS82C55=0x81;

这是8255工作方式设置,对于第一个及第二个宏的具体作用不懂!



TMOD=0x21; 
SCON=0xf0;
 SM2=1;
  TL1=-8;  
  TH1=-8;
PCON=0x80;

没见过赋负数的,不知道什么意思?

相关帖子

沙发
ayb_ice| | 2007-3-20 15:10 | 只看该作者

随便说说

  好好看看C的强制指针变换吧,
  负数最终变换成补码表示,没有见过只能说明你是菜鸟.

使用特权

评论回复
板凳
rainbowwrh| | 2007-3-20 15:33 | 只看该作者

呵呵

楼上的说得对, 这是补码, 是设置定时器1的初始值.

使用特权

评论回复
地板
lenglx| | 2007-3-20 17:01 | 只看该作者

宏无非就是展开
#define XBYTE ((unsigned char *)0x20000L)
#define RS82C55 XBYTE[0x0803]
 RS82C55=0x81;
=> XBYTE[0x803] = 0x81;
=> ((unsigned char *)0x20000L)[0x803] = 0x81;
=> * ((unsigned char *)0x20803) = 0x81;

不知道你的什么编译器.如果是keil c51,这个通用指针定义的有问题.
通用指针中,xdata 用1表示.
似乎应当 #define XBYTE ((unsigned char *)0x10000L)
我不大知道8255的具体功能,但对于外设,似乎这样更好
更正确的做法: #define XBYTE ((unsigned char volitale *)0x10000L)
如果这个端口是一个状态标志,更应当这样定义:
#define XBYTE ((unsigned char volitale const *)0x10000L)

实际上,这样定义也许更好:
#define XBYTE ((unsigned char volitale const xdata*)0)






 

使用特权

评论回复
5
kenkel|  楼主 | 2007-3-31 16:12 | 只看该作者

#define XBYTE ((unsigned char *)0x20000L)

对这条疑问地址为什么要用20000L这个2,高工告诉我是单片机固定的什么定义了?

使用特权

评论回复
6
ayb_ice| | 2007-3-31 16:36 | 只看该作者

随便说说

  最好不要定义XBYTE,因为KEIL已经定义了这个宏,会造成误会...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

19

帖子

1

粉丝