<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)與PC通信總結(jié)

          51單片機(jī)與PC通信總結(jié)

          作者: 時(shí)間:2014-01-14 來(lái)源:網(wǎng)絡(luò) 收藏

          的串口,是個(gè)全雙工的串口,發(fā)送數(shù)據(jù)的同時(shí),還可以接收數(shù)據(jù)。
          當(dāng)串行發(fā)送完畢后,將在標(biāo)志位 TI 置 1,同樣,當(dāng)收到了數(shù)據(jù)后,也會(huì)在 RI 置 1。
          無(wú)論 RI 或 TI 出現(xiàn)了 1,只要串口中斷處于開(kāi)放狀態(tài),單片機(jī)都會(huì)進(jìn)入串口中斷處理程序。
          在中斷程序中,要區(qū)分出來(lái)究竟是發(fā)送引起的中斷,還是接收引起的中斷,然后分別進(jìn)行處理。

          常用的方法有:
          接收數(shù)據(jù)時(shí),使用“中斷方式”,清除 RI 后,用一個(gè)變量通知主函數(shù),收到新數(shù)據(jù)。
          發(fā)送數(shù)據(jù)時(shí),也用“中斷方式”,清除 TI 后,用另一個(gè)變量通知主函數(shù),數(shù)據(jù)發(fā)送完畢。
          這樣一來(lái),收、發(fā)兩者基本一致,編寫程序也很規(guī)范、易懂。
          更重要的是,主函數(shù)中,不用在那兒死等發(fā)送完畢,可以有更多的時(shí)間查看其它的標(biāo)志。
          與單片機(jī)串口通信的程序,要求如下:
          1、如果在電腦上發(fā)送以$開(kāi)始的字符串,則將整個(gè)字符串原樣返回(字符串長(zhǎng)度不是固定的)。
          2、如果接收到1,則將P00置高電平,接收到0,P10置低電平。(用來(lái)控制一個(gè)LED)
          單片機(jī)是STC89C52RC/晶振11.0592/波特率要求是9600或4800。

          注意:調(diào)試軟件我選擇“串口獵人”,串口獵人中選擇“字符格式發(fā)送” 。當(dāng)然STC-ISP也是可以的
          ********************************************************/
          #include reg52.h>

          sbit LED=P0^0;
          unsigned char UART_buff;
          bit New_rec = 0, Send_ed = 1, Money = 0;

          void main ()
          {
          SCON = 0x50; //串口方式1, 10位UART(一個(gè)起始位“0”八個(gè)數(shù)據(jù)位一個(gè)停止位“1”), 允許接收.
          TMOD = 0x20; //T1方式2
          TH1 = 0xFD; //裝入自動(dòng)重加載的處置,9600bps@11.0592MHz
          TL1 = 0xFD; //裝入初值
          TR1 = 1; //啟動(dòng)定時(shí)器T1
          ES = 1; //開(kāi)串口中斷,但不開(kāi)定時(shí)器中斷,不允許定時(shí)器中斷
          EA = 1;

          while(Money == 0); //等著交費(fèi),呵呵,等著接收$.

          while(1)
          {
          if ((New_rec == 1) (Send_ed == 1))
          { //如果收到新數(shù)據(jù)及發(fā)送完畢
          SBUF = UART_buff; //那就發(fā)送.
          New_rec = 0;
          Send_ed = 0;
          }
          }
          }
          //----------------------------------------------
          void ser_int (void) interrupt 4
          {
          if(RI == 1) //如果收到.
          {
          RI = 0; //清除標(biāo)志.
          New_rec = 1;
          UART_buff = SBUF; //接收.
          if(UART_buff == '1') LED = 1;
          if(UART_buff == '0') LED = 0;
          if(UART_buff == '$') Money = 1;
          }
          else //如果送畢.
          {
          TI = 0; //清除標(biāo)志.
          Send_ed = 1;
          }
          }

          51單片機(jī)相關(guān)文章:51單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理


          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理




          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();