1. 程式人生 > >51微控制器串列埠通訊接收一串字串

51微控制器串列埠通訊接收一串字串

在51微控制器中,我們使用上下位機時,我們通常會發送一串字串,將它作為訊號發給微控制器處理。

因為串列埠通訊時,傳送資訊是以一個個字元的形式傳送過來的,所以接收的就是一個個字元,通常我們是一個字元陣列儲存,在進行下一步處理,同時字元陣列長度固定有限,但是如果上位機發送的字元不滿足我們想要處理的資料時,其接收的資料多出的部分就有可能儲存在SBUF中, 影響接下來的資料接收,以至於接下來的資料不滿足我們的要求。或是傳送資料少於陣列長度時,也會出錯。

在這裡我的解決辦法(以下以STC12C5A60S2晶片為例):

void serial_port_one_init()
{                       //根據自己微控制器設定;

    //22.1184M   波特率: 115200
    SCON = 0x50; 
    BRT = 0xFA;
    AUXR |= 0x04;
    AUXR |= 0x01;
    AUXR |= 0x10;
   ES      =   1;    
   EA      =   1;    
}                   

#define Data_SIZE 10 //資料長度   9位資料 +  /r/n  -  /n =10位

char RevBuf[Data_SIZE];      //資料接收緩衝區
char temp[Data_SIZE];        //防資料抵消緩衝區
unsigned char flished_flag=0; //資料接收符合要求標誌
int data_count=0;    //資料長度
int temp_length;    //資料長度
int data_flished_count = 0;  //
char data_flished;           //

void UART_one_Interrupt_Receive(void) interrupt 4
{  
    uchar temp;
  if(RI==1)
    {
        RI=0;
        temp=SBUF;
//        senduart(temp);  //用來測試過資料接收是否正確
        
        if(temp!='\n') //判斷是否接收到結束符
        {
            RevBuf[data_count]=temp;// 否,就存到RevBuf【】陣列中
            data_count++;
        }
        else
        {
            temp_length=data_count;//是,記錄其資料長度
            data_count=0;
        }
        
    }
    
}             

void main(void)

{

    serial_port_one_init();  //串列埠初始化

   while(1)

    {

          if(Data_SIZE == temp_length)   //判斷資料長度是否滿足我們的要求。
        {
            for(i=0;i<Wifi_Data_SIZE;i++)
            {
                temp[i]=RevBuf[i];             // 同時我們將temp【】作為緩衝區,防止資料被衝到
            }
            flished_flag=1;          //資料接收成功標誌
        }

      if(1==flished_flag)  //     資料接收完整成功
        {
            
            wifi_flished_flag=0;  //

           //

           //你想要實現的功能

/*

switch(temp[1])//我常把資料第一位或前幾位作為指令,後幾位作為資料,你也可以把整個傳送的資料就作為指令。

{

case 'A' :

//具體操作

break;

}

         */

        }

    }

  while(1);

}

同時某些特殊情況,我們會將資料寫成:資料頭+資料  

分析資料頭,實現其代表的功能

上位機中 要在傳送資料的最後加上 ‘/n’這個字元

用串列埠工具測試時, 傳送資料為:資料+enter鍵(其代表的是兩個字元 /r /n)


相關推薦

51微控制器串列通訊接收字串

在51微控制器中,我們使用上下位機時,我們通常會發送一串字串,將它作為訊號發給微控制器處理。 因為串列埠通訊時,傳送資訊是以一個個字元的形式傳送過來的,所以接收的就是一個個字元,通常我們是一個字元陣列儲存,在進行下一步處理,同時字元陣列長度固定有限,但是如果上位機發送的字元

51微控制器串列通訊的傳送與接收

51微控制器的串列埠,是個全雙工的串列埠,傳送資料的同時,還可以接收資料。 當序列傳送完畢後,將在標誌位 TI 置 1,同樣,當收到了資料後,也會在 RI 置 1。 無論 RI 或 TI 出現了 1,只要串列埠中斷處於開放狀態,微控制器都會進入串列埠中斷處理程式。 在中斷

51微控制器串列通訊的幀資料接收

首先定義一個數據幀格式,Header :{ 0xAA 0x55} type:{ 0x01 | 0x02 | 0x03 } length:{  N } body :{____n個位元組的資料___ } 資料的格式就是上面的定義  Header 為幀頭 標記一個數據幀的開始,t

QT筆記(8)——Qt與51微控制器串列通訊

工業控制中微控制器與pc機通訊,常常通過串列埠通訊來完成,本次基於RS232通訊來完成的,硬體是普中的STC51微控制器開發板;板子如下圖: 不需要液晶顯示器,自帶的例子這裡就不貼了,主要實驗是Qt進行串列埠連結,傳送資料,微控制器判斷髮送的內容並做出反饋; 微控制器

51微控制器串列通訊(電腦傳送數字到微控制器數碼管顯示)

#include<reg51.h> #include<intrins.h> //--定義使用的IO--// #define GPIO_DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; typ

深入理解51微控制器串列通訊

串列埠通訊的基本認識 通訊分為並行通訊和序列通訊,並行通訊時的資料各個位同時傳送,可以實現位元組為單位通訊,但通訊線多佔用資源,成本高。以前用到的的P1=0x55,一次給P1口的8個管腳分別賦值,同時進行訊號輸出,類似於8個車道可以過去8輛車,這樣的形式是並行的,一般稱P0

51微控制器串列通訊的實現.

在串列埠通訊實際操作裡面往往串列埠還要和電腦上的上位機軟體進行互動,實現電腦軟件傳送不同的指令,微控制器對應執行不同操作的功能,這就要求我們組織一個比較合理的通訊機制和邏輯關係,用來實現我們想要的結果。我們發的資料往往是一組(一幀)資料,那麼我們是如何判斷一段資料有沒有接收完

51微控制器串列通訊

串列埠通訊好東西,但我沒用過。 下面照著普中科技的ppt搬運下。        隨著多微機系統的廣泛應用和計算機網路技術的普及,計算機的通訊功能愈來愈顯得重要。計算機通訊是指計算機與外部裝置或計算機與計算機之間的資訊交換。 通訊方式 有並行

51微控制器串列通訊

一.基礎知識 1.序列通訊和並行通訊:目前用的比較多的是序列通訊。序列通訊優點是連線簡單,傳輸距離遠;缺點是傳輸速度慢。 2.序列通訊:分為同步通訊和非同步通訊;非同步通訊是指傳送和接收裝置利用各自

51微控制器 (5)VSPD+Proteus+串列除錯工具+Keil C51實現微控制器串列通訊模擬

【若有疑問錯誤或版權等問題請聯絡我】 1、效果圖 2、虛擬串列埠 通過VSPD虛擬串列埠工具虛擬出兩個串列埠用於通訊 3、串列埠除錯 開啟兩份串列埠除錯工具,第一個開啟com1,

MFC串列通訊)——MSComm控制元件簡介

Visual C++為我們提供了一種好用的ActiveX控制元件Microsoft Communications Control(即MSComm)來支援應用程式對串列埠的訪問,在應用程式中插入MSComm控制元件後就可以較為方便地實現對通過計算機串列埠收發資料。&nbs

第二部分 基礎篇-第6章 CC2530串列通訊-接收字串

1 理論分析 當 1 寫入 UxCSR.RE 位時,在 UART 上資料接收就開始了。然後 UART 會在輸入引腳 RXDx 中尋找有效起始位,並且設定 UxCSR.ACTIVE 位為 1。當檢測出有效起始位時,收到的位元組就傳入到接收暫存器,UxCSR.RX

關於微控制器串列通訊的幾個問題

串列埠通訊:(從微控制器的角度考慮) 過程:(無論中斷開關與否,資料都能進出SBUF,且RI和TI都能硬體置1,只是CPU未進行接收) 接收:PC發一個位元組-->RI硬體置1-->進入中斷,接收資料(RI手動置0)-->返回現場 傳送:單片機發一個位元

微控制器串列通訊波特率計算

在模式0和模式2下,串列埠波特率固定,模式0為Fosc/12。模式2為Fosc/32或Fosc/64,具體由PCON暫存器的SMOD位決定。 在模式1和模式3下,波特率是一個可變值,波特率可以由定時器1產生(8052可以由定時2產生),那麼波特率到底為多少呢?波特率由定

51微控制器串列列印不管是中文還是英文都是亂碼的問題

講道理都tm大三暑假了還搞51微控制器而且關鍵是還遇到了一個問題解決了一天才解決出來真的是很丟人了。不過我會珍惜這個機會的,畢竟這有可能是我輩子最後一次跟著老師搞這個破玩意了。好了不廢話了 收!昨天遇到的問題是微控制器用串列埠給電腦發資料,本人用串列埠助手檢視時亂碼了,傳送的

教你如何在51微控制器上模擬串列通訊!!!

我們可以不使用微控制器本身帶有的串列埠,而自己用程式去模擬一個串列埠並達到和本身的串列埠具有同樣的功能, 首先,我們需要用到CH340串列埠模組,大家可以上某寶自行購買。 正面: 反面:   然後我們需要了解一下這串列埠模組上的引腳: 5V  :與VCC短路為5V TL

51微控制器學習——串列通訊

51微控制器的UART串列埠的結構由序列口控制暫存器SCON、傳送和接收電路三部分構成。 SCON位分配 位 7 6 5 4 3 2 1 0 符號

51微控制器】(手把手教你)串列通訊-基礎篇

通訊方式 並行 適合短距離通訊,並行通訊控制簡單、相對傳輸速度快(8位一起傳輸)。 序列 只能一位一位的傳送。 同步(瞭解) 建立傳送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此

51微控制器串列通訊

一、程式下載的不同方式 1、程式傳送和電平介面: 由於兩個電平無法通訊,所以需要轉換電平 1、轉換電平可以裝驅動(CH340) 2、可以使用轉電平晶片 一般採用第一種方式 二、通訊方式 (一)、並行通訊 (二)、序列通訊 三、序列通訊傳輸方向 四、序列通訊的分

基於51微控制器的pwm和串列通訊

此例程設定了按鍵可以調整100-1000hz的不同頻率(100的倍數)的方波,另外還加入了串列埠通訊,可以通過串列埠傳送來的數字來設定相對應的頻率; #include <reg52.h> #include"uart.h" sbit PWMOUT = P1^0