单片机简单串口通信的经典实验1_哥本哈根的百度空间等候环境对他的事业 ...
#include "REGX52.H"
#include <stdio.h>
void _nop_(void);
void delay(unsigned int i )//时子函数
{
    unsigned int time;

    for(time=0;time<i;time++)
    {
        _nop_;
        _nop_;
        _nop_;
   
    }
}
void com()
{
   
        //    IE=0x1a;                                       /*中断允许*/
        //通讯初始化子程序
            TMOD=0x21;                //设置定时器1为工作方式2,定时器0为工作方式1
            //ET1=0;                    //关闭T1中断使能
            TH1=0xf3;                //预置定时器初值fd,波特率9.6k
            TL1=0xf3;   
        //    TH0=0xb8;//定时器0初值,定时20ms
         //   TL0=0x62;
        //    ET0=1;//开定时器0中断
        //    TR0=1;//启动定时器0*/
            TR1=1;                    //起动定时器T1
            PCON|=0x80;                //波特率加倍
            SCON=0x50;                //串口工作在方式1,并且接收使能
        //    IE|=0x90;                //使能串口中断
        //通讯初始化结束
                                                   
         //   IE=IE|0x80;                                  /*开中断*/        
            //TR0=1;
            //TR2=1;
            SM0=0;//串口工作方式1
            SM1=1;
        //    EA=1;//开总中断
}
void main()

{
    unsigned char zhi;
    com();
         while(1)
        {
                if(RI)
            {
                    RI=0;
                    zhi=SBUF;
                    P0_0=~P0_0;
                    SBUF=zhi;
            }
        }
}

两个SUBF并不一样!在这里,简单说下。 RI,是数据标志位,也称为检测位吧,就是一旦单片机检测到串口给它发的数据,那么她自动将此值设定为非0值,

所以,一旦有数据从计算机发给单片机,就会进入if(RI)循环中。内部再将RI清零(RI=0;以方便下次数据来,让它再次检测!。zhi=SBUF;//将缓冲区的数据传给zhi。SBUF=zhi;//将接收到的数据送到发送的缓冲局。但他们在物理地址上并不代表同一个位置!

 
while(1)
   {
         if(RI)
      {
            RI=0;
            zhi=SBUF;//将缓冲区的数据传给zhi
            P0_0=~P0_0;//灯闪一下,我在这里接了一个灯嘎嘎
            SBUF=zhi;//将接收到的数据送到发送的缓冲局。
      }
     }


郑重声明:资讯 【单片机简单串口通信的经典实验1_哥本哈根的百度空间等候环境对他的事业 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——