微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机串口通信的问题

单片机串口通信的问题

时间:10-02 整理:3721RD 点击:

  1. P0=0xf0;
  2. S2BUF=0xfc;       
  3. P0=S2BUF; //为什么这里P0=0X00?
  4. while(!(S2CON & S2TI));
  5. S2CON &= ~S2TI;

复制代码

双机通信
单片机相同是STC15F60s2波特率相同,误差%0为什么P0会是0x00?中断里面什么都没

还是S2BUF读和写代表不同的寄存器?

  1. void main()
  2. {
  3.         P_SW2 |= S2_S0;             //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)

  4.         S2CON = 0x50;                //8位数据,可变波特率       
  5.         AUXR |= 0x01;                //串口1选择定时器2为波特率发生器               
  6.         AUXR |= 0x04;                //定时器2时钟为Fosc,即1T
  7.         T2L = 0x8F;                        //设定定时初值
  8.         T2H = 0xFD;                        //设定定时初值
  9.         AUXR |= 0x10;                //启动定时器2
  10.         IE2=0x01;
  11.         EA=1;

  12.         P0=0XF0;
  13.         S2BUF=0xfc;               
  14.         P0=S2BUF;                //为什么这里P0是0x00 ?
  15.         while(!(S2CON & S2TI));
  16.         S2CON &= ~S2TI;                       

  17.         while(1)
  18.         {
  19.         }
  20. }
  21. void Uart2() interrupt 8  using 1
  22. {

  23. }

复制代码


P0=S2BUF=0xfc;没有等于0x00。

我也知道啊,我是说,实物测试,无所谓P0是0x00

串口助手接收到的,确实是0xfc没错

这个有道理,S2BUF是2个寄存器,同个地址,收发相同地址,只是,应该如何印证确实是这样的呢

名字相同的缓冲器S2BUF,为什么能实现双机通信(发送和接收)?
名字相同地址不同啊,就相当于有2个缓冲器!
能实现发送和接收已经证明名称相同地址不同。

确定P0=0X00么?     P0=0Xfc

不是的,手册说到,S2BUF是 发送缓存器和接收缓存器,是2个不同寄存器,但他们共用1个地址,共用1个名字,由CPU自己判断

确定、肯定、一定

既然有2个寄存器,就有2个地址,只是入口地址一样,但并不代表2个寄存器的地址就一样,如果一样的话,CPU就无法判断。

小编用串口肯定遇到了问题,何必拐弯抹角?不妨直接说出来!

没有遇到问题啊,就是为什么P0=0x00....晕...没拐弯,很直接了....
真是共用1个地址

问题已经解决。

虽然你不是正确答案,但你给了我提示,让我找到了答案,谢谢

谢谢拉,这就是我的最爱啦

大家一起共同学习

最近在研究 学习学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top