日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基于51单片机的Uart串口通信协议

發布時間:2024/9/18 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机的Uart串口通信协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.串口通信協議

  嵌入式開發中,UART串口通信協議是我們常用的通信協議(UART、I2C、SPI等)之一,全稱叫做通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),是異步串口通信協議的一種,工作原理是將傳輸數據的每個字符一位接一位地傳輸,它能將要傳輸的資料在串行通信與并行通信之間加以轉換,能夠靈活地與外部設備進行全雙工數據交換。

1)起始位

  當未有數據發送時,數據線處于邏輯“1”狀態;先發出一個邏輯“0”信號,表示開始傳輸字符。

2)數據位

  緊接著起始位之后。資料位的個數可以是4、5、6、7、8等,構成一個字符。通常采用ASCII碼。從最低位開始傳送,靠時鐘定位。

3)奇偶校驗位

  資料為加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。

4)停止位

  它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。 由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。

5)空閑位或起始位

  處于邏輯“1”狀態,表示當前線路上沒有資料傳送,進入空閑狀態。

  處于邏輯“0”狀態,表示開始傳送下一數據段。

6)波特率

  表示每秒鐘傳送的碼元符號的個數,是衡量數據傳送速率的指標,它用單位時間內載波調制狀態改變的次數來表示。

  常用的波特率有:9600、115200……

  時間間隔計算:1秒除以波特率得出的時間,例如,波特率為9600的時間間隔為1s / 9600(波特率) = 104us。

7)接口

接口通過兩個引腳從外部連接到其它設備。任何 USART 雙向通信均需要 至少兩個引腳:接收數據輸入引腳 (RX) 和發送數據引腳輸出 (TX):
  RX:接收數據輸入引腳就是串行數據輸入引腳。過采樣技術可區分有效輸入數據和噪聲,從而用于恢復數據。
  TX:發送數據輸出引腳。如果關閉發送器,該輸出引腳模式由其 I/O 端口配置決定。如果使 能了發送器但沒有待發送的數據,則 TX 引腳處于高電平。在單線和智能卡模式下,該 I/O 用于發送和接收數據。

2.發送函數

  這里的發送指的是51單片機發送數據到串口,單片機的TX接串口的RX。

  首先要根據你單片機的晶振頻率,調試出一個104us的延時函數,用于時序控制。

  

 void Delay_104us(void)
{
    uint x=58;
	while(x-- !=0)
	{
		_nop_();
	}
}

  這個延時是基于下圖所示的頻率

  然后是發送函數

/************串口發送函數,Tx_Data為要發送的數據***********/
void Uart_Tx(uchar Tx_Data)
 {
	uchar uData=Tx_Data;	 
	uint i=0;

	/************拉低單片機的TX引腳104us,作為開始信號***********/
	UART_TX=0;
	Delay_104us();
	/************根據一字節數據每一個比特位的不同,TX拉高或拉低,保持104us,作為數據信號***********/
	for(i=0;i<8;i++)
	{
		UART_TX= uData & 0x01;
		Delay_104us();
		uData=uData>>1;

	}
	/************拉高單片機的TX引腳104us,作為結束信號***********/
	UART_TX=1;
	Delay_104us();
}

 3.接收函數 

  這里的接收指的是51單片機接收串口所發的數據,單片機的RX接串口的TX。

  這里還要調試出一個52us的延時。

  

void Delay_52us(void)
{
    uint x=28;
	while(x-- !=0)
	{
		_nop_();
	}
}

  接收函數

 /************串口接收函數,返回值為接收到的數據***********/
uchar Uart_Rx(void)
{
    uchar R_Data = 0x00,i;
    /************判斷單片機的RX引腳是否拉低,有沒有開始信號***********/    
    if( UART_RX== 0)
    {
    /************如果有,再過52us判斷一次,這是防抖操作***********/    
        Delay_52us();
        if(UART_RX == 0)
      {
         /************如果是真的,就沒過104us判斷一次RX的電平變化,記錄每一位數據***********/    
            Delay_104us();
            for(i=0;i<8;i++)
            {
                R_Data=R_Data>>1;
                if(UART_RX == 1)
                {
                    R_Data=R_Data|0x80;
                }                
                Delay_104us();                
            }            
        }
         /************判斷單片機的RX引腳是否拉高,有沒有結束信號,如果有就返回和重新用串口發送接收到的數據***********/    
        Delay_104us();
        if(UART_RX == 1)
        {
            Uart_Tx(R_Data);
            return R_Data;      
        
        }
    }
   
    return 0;

}

4.其他

(1)引腳定義

這里面的TX和RX引腳是自定義的,只要能夠拉高,拉低,延時就行,下面是我定義的,

#define UART_TX P17
#define UART_RX P15

(2)發送漢字 

  每一個漢字都是由兩個字節作為地址,在字庫里索引出來的,發送就是發送漢字的地址,方法如下。

void Uart_String(uchar *Tx_String)
{
	while(*Tx_String)
	{
		Uart_Tx(*Tx_String++);
	}
} 

5.檢驗

  首先接好杜邦線,單片機的TX,RX接串口的RX,TX,還有GND線要接,VCC線可以不接。

在主函數的while(1)循環里調用Uart_Tx(0x34),發送0x34,注意把串口助手的波特率調為9600。

  在主函數的while(1)循環里調用Uart_Rx(),單片機接收串口發送的數據

 

在主函數的while(1)循環里調用Uart_String(),發送漢字,注意要把HEX顯示去掉,不然就是16進制數了

  

總結

以上是生活随笔為你收集整理的基于51单片机的Uart串口通信协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷久久五月天 | 久久亚洲av成人无码国产电影 | 日韩欧av| 亚洲狼人在线 | 丝袜 亚洲 另类 欧美 重口 | 性高湖久久久久久久久免费 | 国产亚洲高清视频 | 日本一本高清 | 久草av在线播放 | 伊人福利| 精品一区二区三区四区五区六区 | 日本理伦片午夜理伦片 | 在线看你懂得 | 久久国产精品无码一区二区 | 邻居少妇张开腿让我爽了在线观看 | 日韩视频中文字幕在线观看 | 性生交大全免费看 | 秘密基地动漫在线观看免费 | 久操网站 | 免看一级片 | 国产激情在线视频 | 婷婷色亚洲 | 吖v在线| 五月天激情开心网 | 法国空姐在线观看视频 | 精品成人中文无码专区 | 91视频免费在线观看 | 丰满熟妇肥白一区二区在线 | 亚洲第3页 | 中文字幕av免费 | 精品久久久中文字幕人妻 | 雨宫琴音一区二区三区 | 欧美一区二区三区网站 | 美女啪啪免费视频 | 韩国日本美国免费毛片 | 亚洲国产欧美精品 | 91久久爽久久爽爽久久片 | 91啦丨九色丨刺激 | 亚洲黄片一区 | 一区二区色 | 日韩一区二区三区在线视频 | 激情综合网av | 国产福利免费在线观看 | 国产精品不卡一区二区三区 | 成人3d动漫一区二区三区 | 久久三级网站 | 国产精品入口夜色视频大尺度 | 影音先锋在线视频 | 伊人国产女 | 色999五月色| 精品麻豆一区二区 | 欧美黄页在线观看 | 91久久婷婷 | 免费视频99| 久久精品播放 | 伊人国产在线 | 小宝贝真紧h军人h | 女性私密整形视频 | 婷婷另类小说 | 男人午夜网站 | 国产男女猛烈无遮挡免费视频动漫 | 狠狠爱成人 | 嫩草视频在线观看 | 男人日女人免费视频 | 亚洲激情中文 | 成人免费在线网址 | 免费黄色大片网站 | 色涩网站 | 天天干天 | 性做久久 | 人善交videos欧美3d动漫 | 国产女厕一区二区三区在线视 | 秋霞国产午夜精品免费视频 | 色婷婷狠狠18禁久久 | 999久久久免费精品国产 | 久久3p | ,午夜性刺激免费看视频 | 亚洲中文字幕第一区 | 夜夜骚av一区二区三区 | 国产精品久久久久无码av色戒 | 激情婷婷六月天 | 国产精品一区2区 | 性生交大片免费看女人按摩 | 青春草久久 | av免费一区 | 特级西西人体444www | 爽妇综合网 | 黄色av免费看 | 日韩视频精品 | 成人午夜视频免费看 | 中文字幕视频网站 | fc2成人免费视频 | 欧美专区在线视频 | 播色屋| 亚洲a级精品 | 性感美女一区 | 亚洲欧美另类国产 | 中文在线а√天堂官网 | 免费黄色在线观看 |