pos機顯示請連接串口線(xiàn),51單片機串口通信 環(huán)形緩沖區隊列

 新聞資訊  |   2023-05-20 10:22  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于pos機顯示請連接串口線(xiàn),51單片機串口通信 環(huán)形緩沖區隊列的知識,也有很多人為大家解答關(guān)于pos機顯示請連接串口線(xiàn)的問(wèn)題,今天pos機之家(m.xjcwpx.cn)為大家整理了關(guān)于這方面的知識,讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機顯示請連接串口線(xiàn)

pos機顯示請連接串口線(xiàn)

最近在做畢業(yè)設計剛好涉及到51單片機,簡(jiǎn)單的研究一下發(fā)現51單片機串口只有一個(gè)字節的緩存,如果遇到單片機串口中斷沒(méi)有及時(shí)處理SBUF的值或者串口中斷長(cháng)時(shí)間未退出很容易照成數據丟失,于是就自己寫(xiě)了個(gè)緩沖區,代價(jià)就是消耗一部分內存空間,時(shí)間-空間本來(lái)就是一對矛盾體,想減少串口通信中數據丟失問(wèn)題只能犧牲部分空間,來(lái)減少數據通信過(guò)程中的丟失問(wèn)題。

核心代碼如下所示:

/**********************************************************/

#define BUFFER_MAX 16 //緩沖區大小

typedef struct _circle_buffer{

unsigned char head_pos; //緩沖區頭部位置

unsigned char tail_pos; //緩沖區尾部位置

unsigned char circle_buffer[BUFFER_MAX]; //緩沖區數組

}circle_buffer;

circle_buffer buffer;

void bufferPop(unsigned char* _buf)

{

if(buffer.head_pos==buffer.tail_pos) //如果頭尾接觸表示緩沖區為空

*_buf=0xFF;

else

{

*_buf=buffer.circle_buffer[buffer.head_pos]; //如果緩沖區非空則取頭節點(diǎn)值并偏移頭節點(diǎn)

if(++buffer.head_pos>=BUFFER_MAX)

buffer.head_pos=0;

}

}

void bufferPush(const unsigned char _buf)

{

buffer.circle_buffer[buffer.tail_pos]=_buf; //從尾部追加

if(++buffer.tail_pos>=BUFFER_MAX) //尾節點(diǎn)偏移

buffer.tail_pos=0; //大于數組最大長(cháng)度 制零 形成環(huán)形隊列

if(buffer.tail_pos==buffer.head_pos) //如果尾部節點(diǎn)追到頭部節點(diǎn) 則修改頭節點(diǎn)偏移位置丟棄早期數據

if(++buffer.head_pos>=BUFFER_MAX)

buffer.head_pos=0;

}

考慮到看到此博文的人可能有很多小白并不知道如何使用,在此簡(jiǎn)單的說(shuō)一下,假設你已經(jīng)能進(jìn)行簡(jiǎn)單的串口發(fā)送接收了,然后串口中斷部分可以這樣寫(xiě)

void serial1(void) interrupt 4

{

if(RI)

{

bufferPush(SBUF);

RI=0;

}

if(TI)

{

TI=0;

}

}

在主程序中我們只需要調用函數就行了如:

void main()

{

unsigned char dat ;

//讀取緩沖區一個(gè)字符,如果dat=0xff表示緩沖區為空,所以接收的字符不能有0xff。

bufferPop(&dat);

}

bufferPop函數中沒(méi)調用一次,便從緩沖區取出一個(gè)字符,頭部指針就會(huì )進(jìn)行偏移,具體看源碼并不是很復雜 只是一個(gè)數組類(lèi)型的環(huán)形FIFO緩沖區。

有一點(diǎn)要注意的是,如果緩沖區滿(mǎn)的話(huà),后面的數據會(huì )覆蓋最前面的數據。

你可以把緩沖區設置大些,就可以盡可能的減少數據覆蓋問(wèn)題,但是帶來(lái)的額外問(wèn)題就是51或者其他系列的單片機RAM是非常小的,并不像PC中緩沖區動(dòng)不動(dòng)就1024KB。所以緩沖區設置多大,根據自己需求調整就行了。

以上就是關(guān)于pos機顯示請連接串口線(xiàn),51單片機串口通信 環(huán)形緩沖區隊列的知識,后面我們會(huì )繼續為大家整理關(guān)于pos機顯示請連接串口線(xiàn)的知識,希望能夠幫助到大家!

轉發(fā)請帶上網(wǎng)址:http://m.xjcwpx.cn/news/49732.html

你可能會(huì )喜歡:

版權聲明:本文內容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻,該文觀(guān)點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權,不承擔相關(guān)法律責任。如發(fā)現本站有涉嫌抄襲侵權/違法違規的內容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實(shí),本站將立刻刪除。