微控制器串列埠通訊資料高位總是出錯

2023-01-03 05:55:10 字數 1500 閱讀 7294

1樓:我要上自習

這個應該是晶振的原因,9600是針對11.05??(具體那個值我忘了),但是你手裡的微控制器,應該是12m的吧,會產生影響

2樓:匿名使用者

先把if(ti==1)改成while(ti==0);再說

3樓:匿名使用者

我也遇到了同樣的問題,把串列埠的傳送和接收腳短接時,傳送和接收是正常的。有誰知道怎麼解決的請幫個忙!!

4樓:匿名使用者

/採用非同步方式傳送資料,偶校驗,一位結束位,傳輸的資料傳輸速率為9600bit/s。每個資料幀包含10byte資訊,1byte作為幀起始標誌,8byte資料,1byte的校驗和。

#include

#define count 10 // 定義接收緩衝區大小

unsigned char buffer[count]; //定義接收緩衝區

unsigned char point; //定義接收資料個數指示變數

void uart_init(); //串列埠初始化函式

void com_send(void); //串列埠接收函式

unsigned char clu_checkdata(void); //計算校驗位函式

// 函式名稱: uart_init()串列埠初始化函式

// 函式功能: 在系統時鐘為11.059mhz時,設定串列埠波特率為9600bit/s

// 串列埠接收中斷允許,傳送中斷禁止

//初始化序列口和波特率發生器

void uart_init()

// 函式名稱: com_interrup()串列埠接收中斷處理函式

// 函式功能: 接收包括起始位's'在內的十位資料到資料緩衝區

com_interrupt(void) interrupt 4 using 3

else if(point>0&&point<10) //判斷是否接收夠十位資料

buffer[point++]=receivr_buffer; //不夠,把接收到的資料放入接收快取區

else point=0; //緩衝區已滿,清除快取區內資料重新接收

}if(ti) //處理髮送中斷

}void com_send(void)

}// 函式名稱: clu_checkdata()計算校驗位函式

// 輸入變數: 無

// 輸出變數: checkdata,包括起始位在內的前九位資料的校驗和

unsigned char clu_checkdata(void)//計算校驗位

return(checkdata);

}void main(void)

while(1);}

51微控制器串列埠通訊問題 微控制器發資料到電腦上時第四位資料

你這裡的難點在於來 只傳送一次 可以自定義一個標誌變數初始為0,當p1.1 0時且標誌為0,向串列埠傳送一個資料,並置該標誌為1,即使p1.1依然為0也不會一直髮送 當檢測到p1.1 1時,置標誌為0,以便下次再觸發。其他依此類推。在除錯rs232串列埠通訊時,微控制器往pc機上發資料,串列埠除錯助...

微控制器與微控制器之間串列埠通訊需要幾個MAX232晶片

1個微控制器與1臺dupc用一個zhimax232就可以了。因為max232是可以雙向dao電平轉內換的。並且每容方向各有2路。ttl 轉232再轉ttl。結果同微控制器的rxtx交叉直連是沒什麼根本性的區別,唯一的好處是 兩個微控制器間可以遠距離的通訊了。兩個微控制器能不能不通過兩個max232直...

11F04E微控制器串列埠通訊,傳送1,回傳資料混亂沒有規則(波特率4800),串列埠初始化有問題嗎

你的程式有兩個問題,一是波特率計算錯誤,串列埠方式1用t1的方式2控制波特率,與傳統51是完全相容的。而你的th1,tl1初始值的計算是時鐘不分頻的方式,需要設定auxr暫存器才行。二是串列埠中斷程式中的判斷錯誤,電腦傳送的1是字元,所以應改為 if receivedata 1 1是字元 你的串列埠...