0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機與PC機串口通信實驗

CHANBAEK ? 來源:狂錘硬件 ? 作者:顧 ? 2023-06-28 11:39 ? 次閱讀

這是我們的實驗要求:

效果1 單片機發(fā)送數據給PC機,PC機利用串口調試助手將數據顯示出來。(40分)

效果2 PC機發(fā)送數據給單片機,單片機將收到的數據返回給PC機,并通過串口調試助手顯示出來。(50分)

01電路圖

這個圖的最小系統的電路是有問題的?!揪褪菃纹瑱C左邊的電路,參考時要慎重】

圖片

虛擬串口:

圖片

然后是單片機的串口設置

圖片

我們把虛擬串口com2給了MCU,那么我們把com3給PC端

02寫代碼前的一些設置

1.晶振設置為11.0592MHz

2.我們的波特率9600

SCON = 0X50;   //SM0=0,SM1 =1【方式一】,REN =1【允許串口接收】
  PCON = 0X80;   //控制波特率的倍速提高一倍:SMOD = 1
  TMOD |= 0X20;  //使用的是定時器T1
  TH1 = 0XFA;    //波特率為9600
  TL1 = 0XFA;
  TR1 = 1;
  IE = 0X90;    // 1001 0000  EA 置為1   ES 置為1
  //EA 中斷總允許位    ES 串行中斷允許位

【注意】 定時器T1作為默認的波特率發(fā)生器,要記得禁止T1中斷。

接下來說說我們的TH1和TL1怎么計算的

TL1 = TH1 = 256-(2^SMOD * f_osc )/ 32 * 12 * 波特率

f_osc:晶振頻率 (單位:MHz) 計算時,記得乘以10^6

例如我們本次實驗使用的是提高一倍的波特率的倍速

PCON = 0X80;   //控制波特率的倍速提高一倍:SMOD = 1

波特率為9600,晶振為11.0592MHz

圖片

那么我們的TH1 = 256-(211.059210^6)/(32129600)=250

打開電腦的計算器:將十進制數轉換為十六進制數,在DEC那里輸入250,我們要獲取的就是HEX的值

圖片

最后TH1=TL1 = 0XFA;

這里也要設置哦

image.png

這個是串口助手的設置

圖片

03代碼

代碼很短小哦

#include < reg51.h >


#define u8 unsigned char
#define u16 unsigned int 


u8 data_r;


void init()
{
  SCON = 0X50;
  PCON = 0X80;
  TMOD |= 0X20;
  TH1 = 0XFA;
  TL1 = 0XFA;
  TR1 = 1;
  IE = 0X90;
}


void putchar(u8 n)
{
  SBUF = n;
  while(TI == 0);
  TI = 0;
}


void main(){

  init();
  putchar('H');
  putchar('E');
  putchar('L');
  putchar('L');
  putchar('O');
  while(1)
  {  
  }
}


void Usart () interrupt 4
{
  if(RI == 1)
  {
    data_r = SBUF ;
    putchar(data_r);
    RI = 0;
  }

}

04分塊來講

//串口、定時器T1的初始化
void init()
{
  SCON = 0X50;
  PCON = 0X80;
  TMOD |= 0X20;
  TH1 = 0XFA;
  TL1 = 0XFA;
  TR1 = 1;
  IE = 0X90;
}

這個初始化就不多說了,我們的“02”部分,要點已經講完了。

void putchar(u8 n)
{
  SBUF = n;
  while(TI == 0);
  TI = 0;
}

這一部分也沒啥好講的,就是一個發(fā)送字符的函數,我們將要發(fā)送的字符,放進我們的發(fā)送寄存器SBUF中,TI是系統自動產生的中斷信號,最后記得T1手動清零哦。

TI = 0;

這個是串口中斷函數:

void Usart () interrupt 4
{
  if(RI == 1)
  {
    data_r = SBUF ;
    putchar(data_r); //寫了這句話,是為了在串口助手看到你發(fā)過去的數據
    RI = 0;
  }
}

這個SBUF是接收寄存器SBUF

data_r = SBUF ;

將接收到的字符存入我們的data_r中,再通過這句代碼,就可以在串口助手上,看到我們發(fā)送給單片機的數據

putchar(data_r); //寫了這句話,是為了在串口助手看到你發(fā)過去的數據

最后是我們的主函數

void main(){
  init();
  putchar('H');
  putchar('E');
  putchar('L');
  putchar('L');
  putchar('O');
  while(1)
  {  
  }
}

這塊代碼的效果:串口助手顯示:HELLO【可以自己去試一試昂】

putchar('H');
  putchar('E');
  putchar('L');
  putchar('L');
  putchar('O');
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 電路圖
    +關注

    關注

    10344

    文章

    10721

    瀏覽量

    530641
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635352
  • PC機
    +關注

    關注

    2

    文章

    201

    瀏覽量

    28578
  • 串口通信
    +關注

    關注

    34

    文章

    1626

    瀏覽量

    55529
收藏 人收藏

    評論

    相關推薦

    LabVIEW串口通信實例:PC與51單片機串口通信實

    相關課程推薦:《8周LabVIEW視覺項目編程實戰(zhàn)特訓營》LabVIEW串口通信實例:PC與51單片機
    發(fā)表于 06-28 20:04

    LabVIEW串口通信實例:PCPC串口通信實

    08、LabVIEW串口通信實例:PCPC串口
    發(fā)表于 06-28 20:07

    LabVIEW串口通信實例:PC與51單片機串口通信實

    LabVIEW串口通信實例:PC與51單片機串口通信實
    發(fā)表于 12-18 10:16

    單片機串口通信實驗

    單片機串口通信實驗一、實驗目的二、實驗內容三、實驗步驟四、C代碼如下五、
    發(fā)表于 11-10 07:45

    AT89系列單片機PC的串行通信實驗電路圖

    AT89系列單片機PC的串行通信實驗電路圖:
    發(fā)表于 05-21 13:43 ?2930次閱讀
    AT89系列<b class='flag-5'>單片機</b>與<b class='flag-5'>PC</b><b class='flag-5'>機</b>的串行<b class='flag-5'>通信實驗</b>電路圖

    單片機PC串口通信應用 (RS232 協議)

    本文是關于計算機與單片機通信實驗的應用。主要包括實驗原理闡述、硬件電路圖、源程序等 目錄: 1、單片機串口
    發(fā)表于 08-20 10:38 ?908次下載
    <b class='flag-5'>單片機</b>和<b class='flag-5'>PC</b><b class='flag-5'>機</b>的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>應用 (RS232 協議)

    PC單片機通信應用

    本文是關于計算機與單片機通信實驗的應用。主要包括實驗原理闡述、硬件電路圖、源程序等 目錄: 1、單片機串口
    發(fā)表于 08-20 10:33 ?7212次閱讀
    <b class='flag-5'>PC</b><b class='flag-5'>機</b>與<b class='flag-5'>單片機</b><b class='flag-5'>通信</b>應用

    PC單片機串口通信程序設計.zip

    【LabVIEW從入門到精通】5.2.4.4 PC單片機串口通信程序設計
    發(fā)表于 01-08 15:48 ?0次下載

    單片機PC串口通信顯示

    單片機基礎學習,串口學習。使單片機PC串口通信,
    發(fā)表于 06-01 17:48 ?15次下載

    單片機_PC_串口通信

    單片機 PC 串口通信_1,感興趣的小伙伴們可以看看。
    發(fā)表于 08-03 17:55 ?46次下載

    單片機之間的串口通信實

    STC80C51-單片機之間的串口通信實
    發(fā)表于 09-01 15:44 ?25次下載

    單片機應用系統設計技術——雙單片機串口通信實驗

    單片機串口通信實驗一、實驗目的二、實驗內容三、實驗步驟四、C代碼如下五、
    發(fā)表于 11-05 13:50 ?15次下載
    <b class='flag-5'>單片機</b>應用系統設計技術——雙<b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>通信實驗</b>

    單片機PC 串口通信實驗

    實驗原理51 單片機的串行口是一個可編程的全雙工的通信接口,具有 UART(通用異步收發(fā)器)的全部功能,能同時進行數據的發(fā)送和接收,也可以作為同步移位寄存器使用。51 單片機的串行口主
    發(fā)表于 11-11 13:36 ?14次下載
    <b class='flag-5'>單片機</b>與 <b class='flag-5'>PC</b> <b class='flag-5'>機</b><b class='flag-5'>串口</b><b class='flag-5'>通信實驗</b>

    串口通信實驗

    串口通信實驗串口通信實驗代碼圖像串口通信實驗晶振12MHz,波特率1200, 程序啟動后
    發(fā)表于 01-14 10:12 ?6次下載
    <b class='flag-5'>串口</b><b class='flag-5'>通信實驗</b>

    基于LabVIEW的單片機串口通信實

    電子發(fā)燒友網站提供《基于LabVIEW的單片機串口通信實現.pdf》資料免費下載
    發(fā)表于 10-30 09:13 ?6次下載
    基于LabVIEW的<b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>通信實</b>現