導航:首頁 > 編程語言 > 串口程序處理

串口程序處理

發布時間:2023-02-07 01:31:52

A. 串口接收比較好的處理方式

串口接收比較好的處理方式如下。
1.設定好通訊協議,如包頭+長度+數據+校驗+包尾,那麼中斷中每收到一個位元組就判斷,直到收到包尾為止。這是51時代用得比較多的狀態機接收流程。
但如果由於接收中斷被嵌套,或干擾等原因導致一幀數據的後部分丟失,就是說接收不到包尾,那麼這個狀態機如何能自動復位以便接收下一幀?

2.串口空閑中斷也是用得比較多的一種方法,但是波特率較高的時候,空閑中斷的觸發時間相應變短,使得接收中斷不被打斷的要求變高,如果接收中斷被耽誤了,從而觸發空閑中斷,也是收不到完整數據。

3.定時器中斷代替串口空閑中斷,這個可以避免串口空閑中斷時間不夠的問題,因為這個定時器中斷可以自己設置。但是一個串口需要搭配一個定時器使用,不爽。

4.串口接收只把數據放到緩存,此外不做任何事情。然後在另一個線程不斷parse這個緩存,從頭開始找其中有沒有符合一幀的數據,如果有就是解析,同時將這一幀從緩存中刪掉,如果沒有就什麼也不做。這樣的程序就不用管一幀是否結束,可以較好的適應各種收不全、丟數據的問題。

B. vb怎樣讀取串口數據並進行處理

VB6.0可使用MsComm控制項實現串口通信。按通信協議和數據幀規約接收和處理數據。

MSComm 控制項通過串列埠傳輸和接收數據,為應用程序提供串列通訊功能。

MSComm 控制項提供下列兩種處理通訊的方式:

  1. 事件驅動通訊是處理串列埠交互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在 Carrier Detect (CD) 或
    Request To Send (RTS) 線上一個字元到達或一個變化發生時。在這些情況下,可以利用 MSComm 控制項的 OnComm
    事件捕獲並處理這些通訊事件。OnComm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 CommEvent
    屬性。

  2. 在程序的每個關鍵功能之後,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應用程序較小,並且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字元都產生事件,因為唯一等待接收的字元是數據機的「確定」響應。

盡管 MSComm 控制項有很多重要的屬性,但首先必須熟悉幾個屬性。

C. 51單片機通過串口實現數據的發送與接收程序

串口收發,要有通信協議。也就是什麼時候開始接收,接收到指令後,轉發什麼數據。這個要知道,才可以寫。而且使用不同的51單片機,其內部寄存器配置是不同的。
一般來說,過程如下:
1,配置串口參數、波特率等,開啟串口中斷;
void Init_UART()
{

}
2,中斷函數里寫中斷響應函數,根據接收的指令或者數據,執行相應的動作;
程序一般為:
void UART_ISR() interrupt x using y
{
;串口中斷處理函數
}
x - 單片機的C51中斷號
y - 指定使用的當前工作寄存器組號(0-3 PSW中的RS0,RS1組合)

3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//數據發送函數
}
}

D. 怎樣編寫單片機的串口通信的程序,一般的步驟是怎麼樣

編寫串口通訊程序步驟為:

1、設置波特率

2、設置串口工作方式

3、收發數據。

比如:

main()
{
unsignedchardat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0);
RI=0;
dat=SBUF;
SBUF=~dat;
while(TI==0)
TI=0;
}
}

E. 串口通信程序

根據你的要求,寫了幾個簡單的子函數。 #include<reg52.h>
#define N 6 //方便修改密碼的長度
sbit key=P1^0; //確定發送密碼,發送完後將密碼清0
unsigned char i,a[N]; //定義數組來存放密碼 void serial_init()//串口初始化
{
TMOD=0x20;//設置定時器1為工作方式2
TH1=0xfd; //波特率為9600,標准波特率
TL1=0xfd;
TR1=1; //啟動定時器1
PCON&=0x7f; //SMOD=0,這里不需要倍頻
SCON=0x40; //設置串口為工作方式1
} void serial_send() //串口發送函數
{
for(i=0;i<N;i++)
{
TI=0; //串口發送完畢標志位清0
SBUF=a[i]; //發送數組中存放的密碼字元
while(!TI); //等待發送完畢
}
} void keyscan() //鍵盤掃描
{
if(!key) //用獨立鍵盤簡單舉例,按下為低電平
{
delay(10);//延時10毫秒,去抖。delay()函數省略
if(!key)
{ while(!key); //鬆手監測
serial_send(); //發送密碼
for(i=0;i<N;i++) //發送完畢清0
a[i]=0;
}
}
} void main(){ serial_send() ; while(1) { keyscan() ; }}大概就是這個思路,你可以把密碼鍵盤的值都寫在keyscan()函數里,可以加刪除鍵(密碼輸錯可以退格),最好加個顯示,密碼雖然不能顯示出來,但還是要顯示輸入的個數吧。還有個要提醒你的,就是上位機軟體的編寫,下位機發送的格式要與上位機接收的格式對應(字元或者數字)。

閱讀全文

與串口程序處理相關的資料

熱點內容
ubuntu翻譯工具 瀏覽:665
wifi安裝教程 瀏覽:398
蘋果有些qq文件打不開 瀏覽:139
微信分身圖片緩存在哪個文件 瀏覽:544
眾籌用什麼網站 瀏覽:1
天馬座的幻想版本 瀏覽:536
微雲保存文件圖片沒有了 瀏覽:236
如何把excel表格圖片導出到文件夾 瀏覽:387
qq三國快速升級攻略 瀏覽:660
js監聽手機home事件 瀏覽:439
第2章linux的桌面管理副本 瀏覽:452
qq郵箱手機上登錄微信賬號密碼錯誤 瀏覽:627
編程如何讓人物重復發射子彈 瀏覽:853
db2查看錶空間文件 瀏覽:607
ps文件界面設置 瀏覽:779
c語言12位的數據應該怎麼存儲 瀏覽:953
將ape導入iphone 瀏覽:107
js組合快捷鍵 瀏覽:174
linux系統盤默認掛在的文件夾 瀏覽:667
淘寶數據包如何操作上架 瀏覽:567

友情鏈接