Arduino和C51之串口通信


技術:51單片機、Arduino、串口通信
 

概述

本文主要講解串口通信技術的使用方法,並通過串口點燈實驗介紹了51單片機和Arduino串口的使用,為初學者學習串口知識提供幫助

詳細

一、串口通信

串口通信(Serial CommunicaTIons)的概念非常簡單,串口按位(bit)發送和接收字節。串口用於ASCII碼字符的傳輸,通信使用3根線完成,分別是地線、發送線、接收線.由於串口通信是異步的,端口能夠在一根線上發送數據同時在另一根線上接收數據,其他線用於握手,但不是必須的。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對於兩個進行通信的端口,這些參數必須要匹配。

二、51單片機串口通信

51單片機實現串口通信時會用到的寄存器:SCON、TMOD、PCON

  • SCON:特殊功能寄存器,用以設定串行口的工作方式、接收/發送控制以及設置狀態標志

SCON寄存器中位的定義:

圖片1.png

設置SM0和SM1確定串行口工作方式:

1544959796475054171.png

 

  • TMOD:用於設置定時/計數器的工作方式,低四位用於T0,高四位用於T1

TMOD寄存器中位的定義:

1544959804936011385.png

定時/計數器的工作方式主要有以下四種:

 

1544959813646032836.png

  • PCON:電源管理寄存器

PCON寄存器中位的定義:

1544959820506069548.png

在串口通信時,我們主要使用SMOD位將波特率翻倍,當:

1. SMOD=0:串口方式1,2,3時,波特率正常。

2. SMOD=1:串口方式1,2,3時,波特率翻倍。

 

三、51單片機串口控制LED燈

//UsartInit()對串口進行初始化
void UsartInit()        //設置串口
{
    SCON=0X50;   //設置為工作方式1
    TMOD=0X20;   //設置計數器工作方式2
    PCON=0X80;   //波特率加倍
    TH1=0XF4;    //計數器初始值設置,波特率:4800
    TL1=0XF4;
    ES=1;      //打開接收中斷
    EA=1;      //打開總中斷
    TR1=1;     //打開計數器
}

這里TH1和TL1的初始值,使用了軟件進行計算:

圖片6.png

 

void Usart() interrupt 4 //進入中斷服務函數
{
    char receiveData;
             
    receiveData=SBUF;//出去接收到的數據,此時SBUF存放接收數據
    RI = 0;//清除接收中斷標志位
    if(receiveData=='1') 
    {
        led=0;    //接收1時,打開LED燈
    }
    if(receiveData=='0') 
    {
        led=1;    //接收0時,關閉LED燈
    }
    SBUF=receiveData;
    while(!TI);    //等待發送數據完成
    TI=0;       //清除發送完成標志位
}

打開串口調試助手 -- 修改波特率、停止位、數據位等

1544959857982038113.png

接着,通過串口調試助手,你可以發送任意你想發送的東西給單片機,這里:

1. 輸入1 ----- LED燈亮

2. 輸入0 ----- LED燈滅

四、Arduino串口控制LED燈

  • 設置波特率:Serial.begin(9600);

  • 發送數據到串口:Serial.println(data);

  • 從串口接收數據:Serial.read();

測試代碼如下:

 

char var;
void setup() 
{
  pinMode(13, OUTPUT);  //設置IO口13輸出模式
  Serial.begin(9600);  //設置波特率
  Serial.println("Hello!PC,I'm arduino!"); //發送數據到串口
}
void loop() 
{
    if (Serial.available())
    {
        var = Serial.read(); //從串口接收數據
        if (var == '1') 
        {
            digitalWrite(13, HIGH);
            Serial.println("LED is on!"); 
        }
        if (var == '0') 
        {
            digitalWrite(13, LOW);
            Serial.println("LED is off");
        }
    }
}

打開右上角--->串口調試器 -- 修改波特率等

1544959866684079160.png

1. 發送1 ----- LED燈亮

2. 發送0 ----- LED燈滅

五、總結

本文通過串口點燈實驗介紹了51單片機和Arduino串口的使用,后續文章會講解傳感器的使用,並使用串口打印傳感器信息,感謝你的支持。

六、項目結構圖

 

圖片9.png

注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM