单片机学习小组
直播中

宫昊

7年用户 237经验值
私信 关注

请问有没有什么办法把SBUF清零?

省略。。。。
cmdIndex=SBUF;
if(cmdIndex==0x31)
            {
                         ST=1;
                         start1=0x00;
          如何让此时SBUF清零,或者在我上位机不送数据时候,***uf直接等于0x00
                         while(1&ST)
                          {
                            start1=SBUF;
                 if(start1!=0x00)
                           {
                           ST=0;
                           }
                          }
                          }
                          
            else if(cmdIndex==0x32)
            {
                          ST=1;
                          while(1&ST)
                           {
                                595_w(start1);
                                595_w(start1);
                                595_w(start1);
                                595_r();
                                ST=0;
                          }
vs界面按下按键1时给595送数据,按下按键2时,595会控制led亮。因为需要的功能很多,所以用很多按键来实现这些功能。每按一个按键实现一个小功能。在界面textBox
输入的十六进制直接送到595里面,按键1按下时***uf==0x31.但是我的程序每次595的数据start1都跟按键按下时送的数据一样,请问有没有什么办法把SBUF清零呢。或者可以互不影响呢。

回帖(6)

李响

2019-11-7 08:36:10
可以的。
if( cmdArrived)  
{
  cmdArrived=0;
  if(cmdIndex)
  .........
}
举报

李璐

2019-11-7 08:44:53
帮顶
举报

卞俱传

2019-11-7 09:00:38
SBUF,你这是51吧。用中断接收数据啊,又数据才进入,没有新数据不会进入
举报

王琴

2019-11-7 09:16:04
void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD|=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0Xfd;                                //计数器初始值设置,注意波特率是19200的
        TL1=0Xfd;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                                //打开计数器
}
void Usart() interrupt 4
{
    if (RI)  //接收到字节
    {                                                                                                                                                   
                cmdIndex = SBUF;
                RI = 0;  //清零接收中断标志位
                SBUF = cmdIndex;//将接收到的数据放入到发送寄存器
                cmdArrived = 1;  
    }
    if (TI)      //字节发送完
    {                                                                                                         
        TI = 0;  //清零发送中断标志位
    }
}
我加了中断。我的意思是我第一次发送数据0x01的时候,程序进入while循环,这时候我重新给***uf输入数据,在while里面可以接收到吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分