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是字元 你的串列埠...