打印

C51 ,疑问。。。

[复制链接]
1013|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a1b2c8d9|  楼主 | 2012-3-24 10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 a1b2c8d9 于 2012-3-24 21:17 编辑

#include<reg51.h>       //包含单片机寄存器的头文件
sbit p=PSW^0;
/*****************************************************
函数功能:接收一个字节数据
***************************************************/
unsigned char Receive(void)
{
  unsigned char dat;
  while(RI==0)    //只要接收中断标志位RI没有被置"1"
         ;       //等待,直至接收完毕(RI=1)
   RI=0;      //为了接收下一帧数据,需将RI清0
     ACC=SBUF;  //将接收缓冲器中的数据存于dat
     if(RB8==p)
      {
        dat=ACC;
     return dat;
      }
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
   TMOD=0x20;  //定时器T1工作于方式2
   SCON=0xd0;  //SCON=1101 0000B,串口工作方式1,允许接收(REN=1)
   PCON=0x00;  //PCON=0000 0000B,波特率9600
   TH1=0xfd;    //根据规定给定时器T1赋初值
   TL1=0xfd;    //根据规定给定时器T1赋初值      
   TR1=1;      //启动定时器T1   
   REN=1;      //允许接收
   while(1)
   {
      P1=Receive(); //将接收到的数据送P1口显示        
   }
}




上面的程序,sbit p=PSW^0 省略,直接 if(RB8==PSW^0)为什么结果会不一样?

补充问一下,RB8跟PSW^0有什么必然联系么?

相关帖子

沙发
forgot| | 2012-3-24 10:31 | 只看该作者
因为PSW^0是位值,而你定义的P是变量,测试等于(==)用变量。

使用特权

评论回复
板凳
a1b2c8d9|  楼主 | 2012-3-24 10:37 | 只看该作者
本帖最后由 a1b2c8d9 于 2012-3-24 10:38 编辑

LS,不是出错,而是仿真结果不一样。

使用特权

评论回复
地板
forgot| | 2012-3-24 10:55 | 只看该作者
中断的问题

使用特权

评论回复
5
a1b2c8d9|  楼主 | 2012-3-24 11:02 | 只看该作者
不是很明白,能不能详细点。。。谢谢

使用特权

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

本版积分规则

0

主题

23

帖子

1

粉丝