找回密码
 注册
搜索
查看: 1231|回复: 2

[MCU资料] 求解:51串口中断遇到的一点问题

[复制链接]
发表于 2012-4-2 11:11:16 | 显示全部楼层 |阅读模式
我想问一下关于51的串口SBUF寄存器,在读走SBUF寄存器后接收寄存器SBUF中的内容是否变化?在向SBUF写完一次数据后,直至单片机将SBUF中的数据完全传输出去令TI等于1时,发送寄存器SBUF内容是否会变化?
因为我在调试51串口发送数据到电脑时,发现将串口及定时器1初始化完成后,只要将SBUF设置了初值,电脑端就能一直接收该数据。如何实现每发完一帧数据后就停止发送呢?
串口及定时器1初始化后的debug情况
<img src="attachments/dvbbs/2012-4/20124211223423526.jpg" border="0" onclick="zoom(this)" onload="if(this.width>document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" />

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2012-4-2 11:22:01 | 显示全部楼层
代码如下:

  1. void main()
  2. {
  3.     UartInit(1);             //串口和定时器1初始化
  4.     EA = 1;
  5.     while(1)
  6.     {
  7.         switch(Rdata){
  8.              case 0xfe:  P1 = 0x55;
  9.                        break;
  10.              case 0xff:  P1 = 0xaa;
  11.                        break;
  12.              case 0xaa: SBUF = 0x12;
  13.                        while(!TI);
  14.                        TI = 0;
  15.         }
  16.      }
  17. }

  18. void ser() interrupt 4
  19. {
  20.       Rdata = 0;
  21.       if(!TI){       //接收中断
  22.         Rdata = SBUF;//将接收缓冲区中的数据读走并保留在Rdata变量中
  23.         RI = 0;          //将RI置0,允许接收
  24.        }
  25. }
复制代码
点评回复

使用道具 举报

发表于 2013-3-9 16:30:49 | 显示全部楼层
你的中断串口一直在收数据啊  你需要在while进来后先关断ES=0;让后 case 0xaa: SBUF = 0x12;后 在打开ES=1; 应该可以了  你试试
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 23:05 , Processed in 0.046374 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表