新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī) 特殊功能寄存器(SFR) SBUF使用方法

        51單片機(jī) 特殊功能寄存器(SFR) SBUF使用方法

        作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
          串行口中有兩個(gè)緩沖寄存器SBUF,一個(gè)是發(fā)送寄存器,一個(gè)是接收寄存器,在物理結(jié)構(gòu)上是完全獨(dú)立的。它們都是字節(jié)尋址的寄存器,字節(jié)地址均為99H。這個(gè)重疊的地址靠讀/寫(xiě)指令區(qū)分:串行發(fā)送時(shí),CPU向SBUF寫(xiě)入數(shù)據(jù),此時(shí)99H表示發(fā)送SBUF;串行接收時(shí),CPU從SBUF讀出數(shù)據(jù),此時(shí)99H表示接收SBUF。
          單片機(jī)串口
          #include #include
          #define unit unsigned int
          #define uchar unsigned char
          uchar date;
          uchar recFlag;//接收數(shù)據(jù)標(biāo)識(shí),0 未接收數(shù)據(jù) 1 接收數(shù)據(jù)
          void init_serial();
          void send();
          void receive();
          main()
          {
          init_serial();
          IE=0; //屏蔽中斷
          while(1)
          { receive(); send();}
          }
          void init_serial() //初始化串口
          { TMOD=0x20; //定時(shí)器T1使用工作方式2
          TH1=250; //設(shè)置初值
          TH0=250;
          TR1=1; //開(kāi)始計(jì)時(shí)
          PCON=0x80; //SMOD=1;
          SCON=0x50; //工作方式1,波特率9600bit/s,允許接收
          TI=1;
          }
          void send()
          { if(TI==1) //檢測(cè)輸出是否READY
          { if(recFlag==1) //是否接收過(guò)數(shù)據(jù)
          { SBUF=date; //發(fā)送數(shù)據(jù)
          recFlag=0;
          TI=0;
          }
          }
          }
          void receive()
          { if(RI==1) //檢測(cè)是否有數(shù)據(jù)接收
          { date=SBUF; //接收數(shù)據(jù)
          recFlag=1; //設(shè)置接收標(biāo)識(shí)符
          RI=0;
          }
          }


        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 乐都县| 电白县| 噶尔县| 房山区| 关岭| 武川县| 永德县| 迁西县| 塔河县| 巨野县| 桂林市| 潼南县| 南江县| 衡阳县| 来宾市| 弋阳县| 黄山市| 收藏| 牟定县| 武汉市| 太谷县| 萨迦县| 比如县| 无为县| 崇文区| 中方县| 宜兰县| 新乡市| 宽甸| 梁山县| 皮山县| 原阳县| 阿坝县| 客服| 青田县| 沈丘县| 潢川县| 晴隆县| 上思县| 项城市| 汕尾市|