<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C51 單片機(jī)開發(fā)單片機(jī)發(fā)數(shù)據(jù)給 PC

          共 2557字,需瀏覽 6分鐘

           ·

          2024-07-01 07:30

          公眾號文章同步閱讀網(wǎng)址:www.netor0x86.com

          閑話:某人在某劇中有這樣一段話,“酒喝不出朋友,煙抽不走寂寞,訴換不來同情,怨改不了命運,炫帶不了幸福,憤解不了饑渴,在這個涼薄的世界,自己不強(qiáng)大,什么都是浮云,狐朋狗友說的再美,都抵不過碎銀幾兩”。你認(rèn)可么?

          本篇文章整理了串口的波特率的初始化,以及向 SBUF 發(fā)送數(shù)據(jù)的代碼實現(xiàn)。


          0x01:串口發(fā)送數(shù)據(jù)的準(zhǔn)備

          串口發(fā)送數(shù)據(jù)給電腦,那么按照約定會設(shè)置串口相關(guān)的參數(shù),比較重要的就是波特率。設(shè)置波特率并不是單片機(jī)一方進(jìn)行設(shè)置,而是單片機(jī)和電腦都要進(jìn)行設(shè)置。

          波特率表示每秒傳送二進(jìn)制代碼的位數(shù),所以兩端要一致。

          波特率的初始化,也是一系列寄存器的設(shè)置,這里可以使用 STC-ISP 來生成,如下圖:

          從圖中我們可以看出,波特率設(shè)置為 9600,串口使用的是 串口1,數(shù)據(jù)位是 8位數(shù)據(jù),波特率跟晶振相關(guān),那么就需要用到定時器,這里我們使用 定時器1(8 位自動重載),定時器時鐘使用 12T。

          然后我們發(fā)送數(shù)據(jù)時,我們就一秒發(fā)送一個字符,那么讓 STC-ISP 來給我們生成一個軟件延時,如下圖:

          有了上面這兩部分,我們就可以完成我們要的功能了。


          0x02:代碼實現(xiàn)

          我們發(fā)送的數(shù)據(jù)是小寫字母 a ~ z,然后循環(huán)發(fā)送,一秒鐘發(fā)送一個字母。

          代碼如下:

          #include <intrins.h>
          #include "reg52.h"

          sfr AUXR = 0x8e;    /* 聲明AUXR寄存器的地址 */

          void UartInit(void)  //[email protected]
          {
           PCON &= 0x7F;
           SCON = 0x50;
           AUXR &= 0xBF;
           AUXR &= 0xFE;
           TMOD &= 0x0F;
           TMOD |= 0x20;
           TL1 = 0xFD;
           TH1 = 0xFD;
           ET1 = 0;
           TR1 = 1;
          }

          void Delay1000ms()  //@11.0592MHz
          {
           unsigned char i, j, k;

           _nop_();
           i = 8;
           j = 1;
           k = 243;
           do
           {
            do
            {
             while (--k);
            } while (--j);
           } while (--i);
          }

          void main()
          {
              char data_msg = 'a';
              
              UartInit();
              
              while (1)
              {
                  Delay1000ms();
                  SBUF = data_msg;
                  data_msg ++;
                  if (data_msg > 'z')
                  {
                      data_msg = 'a';
                  }
              }
          }

          然后通過 STC-ISP 將代碼生成的 hex 文件寫入單片機(jī),然后打開 STC-ISP 的 串口助手,選擇連接單片機(jī)的串口,選擇相同的 波特率、校驗位 和 停止位。最后點擊 打開串口 按鈕,就可以收到單片機(jī)發(fā)來的數(shù)據(jù)了。如下圖所示:


          我是一個程序員,了解 C、PHP、Java、ASM、Python,有 信安、CISP 證書,寫小白也能看得懂的文章,感謝關(guān)注!!!

          我的網(wǎng)站:https://www.netor0x86.com

          我錄制的視頻課程:

          1. 入門級棧溢出分析

          2. WEB端獲取MAC地址真實項目案例

          3. PHP擴(kuò)展模塊開發(fā)之DLL編寫與調(diào)用

          4. C語言零基礎(chǔ)入門教程

          5. PE 文件結(jié)構(gòu)初識與二進(jìn)制手寫可執(zhí)行程序

          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人操人人搞 | 性交免费网站 | 日本一级电影在线 | 色情小电影免费网站观看网址在线播 | 欧美深夜福利 |