c语言问题,谢谢回答*((unsigned char pdata *)R0)什么意思?????

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:46:23
//复位脚MR=P4^6;P0^4~P0^7分别控制A2,A1,A0,/CS2脚,晶振为11.0592M,波特率设为115200bps,无奇偶校验,8位数据位,1位停止位
void TL16C550_Init(void)
{
int i;
uchar R0;
P4 = 0x40 ; //复位好tl16c550
for(i=0;i<25;i++) ;
P4 = ~0x40 ;
for(i=0;i<25;i++) ; //延时,等待稳定
EMI0CN = 0XFF ; //外部寻址
P0 = 0x6f ; //选中LCR寄存器
*((unsigned char pdata *)R0)= 0x80 ; //设置LCR.7=1,设置波特率,一个读时序需要10个时钟周期
for(i=0;i<10;i++) ; //延时10个时钟周期,等待写完
P0 = 0x0f ; //选中除数锁存低位
*((unsigned char pdata *)R0)= 0x06 ; //设置波特率=时钟/16/除数
for(i=0;i<10;i++) ; //延时10个时钟周期,等待写完
P0 = 0x2f ; //选中除数锁存高位
*((unsigned char pdata *)R0)= 0x00;
for(i=0;i<10;i++) ; //延时10个时钟周期,等待写完
P0 = 0x6f ; //选中LCR寄存器
*((unsigned char pdata *)R0)= 0x03; //LCR设置数据帧格式,数据位8位,1个停止位
for(i=0;i<10;i++) ; //延时10个时钟周期,等待写完

*((unsigned char pdata *)R0)
这是在单片机以及嵌入式中很常用的语句
将R0这个地址强制转换成某类型的指针,然后解引用
这样就可以把某个固定的地址作为变量
在直接操作硬件的时候非常有用
呵呵~

还真是不知道中间的pdata是一个什么东西,如果pdata是一个自定义类型,那么前面又出现了char类型,当真匪夷所思。