1樓:匿名使用者
電腦通過串列埠助手向微控制器傳送字串,微控制器定義一個可以儲存7個字元的陣列,依次儲存接收的字串,當接收到7個字串後,就可以從陣列的最後一個字元向前傳送每一個字元給電腦就可以了。剩下的就是串列埠初始化,串列埠接收和傳送程式了,就比較好寫了。其實,電腦傳送任意的7個字元的字串都可以,微控制器收到後就可以逆序返回給電腦的。
用proteus **測試,可以用虛接終端代替電腦傳送和接收字串,**結果如下圖。
2樓:大維
像這種傳送字串的,需要有一個字串結束標誌,不能用0作為字串結束標誌了!這裡以回車作0xd為結束標誌!
#include
typedef unsigned char uint8;
bit flag = 0;
uint8 idata buf[30];
uint8 ct;
void inituart(void) //串列埠初始化 9600bps
tmod = 0x20;
scon = 0x50;
th1 = 0xfd;
tl1 = th1;
pcon = 0x00;
ea = 1;
es = 1;
tr1 = 1;
void send(uint8 c)
sbuf = c;
while(!ti);
ti = 0;
void main(void)
char j;
inituart();
while(1)
if(flag) //是否接收到回車 字串傳送完flag = 0;
for(j = ct ; j > 0 ; j--)send(buf[j-1]);
void uartinterrupt(void) interrupt 4
static uint8 i = 0;
if(ri)
ri = 0;
buf[i++] = sbuf;
if(sbuf == 0x0d) //接受到回車ct = i-1 ;
flag = 1;
i = 0;
else
ti = 0;
**結果
程式作為參考 希望 你自己能理解程式!只有自己掌握了才能很好地用!
微控制器串列埠通訊問題。當我在電腦上用串列埠助手向微控制器傳送一串字串以後,我希望微控制器用一個變數把字元
3樓:做而論道
通訊雙來方,需要制定一源個協議。
字串開bai始符、結束符,校du驗碼...,都要協商好。zhi簡單例dao
程:http://blog.163.com/asm_c/blog/static/248203113201311711560166/參考。
pc機與微控制器串列埠通訊問題 利用串列埠通訊助手將一個字串發給微控制器 微控制器返回一個字串到串列埠通訊助手
4樓:匿名使用者
問題出在你傳送時關掉中斷,因為丟掉了資料造成的,解決的辦法是:延時一段時間等待接收完畢後再傳送,比如檢測到有接收資料後,延時10毫秒,之後再傳送回pc。
5樓:掃地走人
給你指出幾處明顯的錯誤。
1.resv沒有最大值的限定,這樣你的程式在執行的時候ch[resv]會指向不明地址,因為ch最大為10個位元組。
2.某種程度上可以認為你的串列埠接收程式沒有錯誤,但是你的串列埠接收程式是每次接收到一個位元組就設定收到資料標誌的,所以你傳送資料應該每次傳送一個位元組。而你每次傳送一個字串,顯然和你微控制器上寫的程式不符,所以會產生不明錯誤。
3.可能你想要的是每次傳送多個位元組,也就是一個字串,然後將這個字串一起傳送到pc上。那你應該在串列埠中斷裡面設定一個判斷,也就是說,中斷裡面判斷到上位機傳送的資料結束後,微控制器的串列埠中斷程式才設定標誌位,然後根據標誌位和接收到資料到數量,把所有的資料一次性傳送給pc。
4.指出你出現異常的原因。因為串列埠在接收到1個位元組後,resv=1,也就是ch[1]='h',這個時候標誌位被設定,程式進入傳送程式,響應的sbuf=a,將h傳送出去。
因為51微控制器僅有一個串列埠快取暫存器,這樣傳送的時候是沒有辦法接收的,而pc機不知道,還是在傳送,也許這樣導致的錯誤。
6樓:匿名使用者
pc傳送是一個字串連續傳送的,微控制器在收到第一個字元時,就進入中斷,同時置標誌。
而你在主程式一檢測到標誌,立即關中斷,接收自然停止了。
解決方法:1. 要同時收發的話,可以直接在中斷內區分ti與ri,並寫sbuf = a;2. 完全接收後再一併傳送。
用串列埠除錯助手給微控制器傳送一串字串,微控制器接受完之後向串列埠助手回顯,出現了個神奇的問題,求助
7樓:
傳送子程式修改如下:
/*傳送子程式*/
void fasong(uchar dat)ti=0;}
8樓:
傳送函式中,這樣寫,防止ti還未來得及置為1,就一直在傳送,這樣寫可防止上述情況
#include
#define uint unsigned int#define uchar unsigned charsbit d0=p1^0;
uchar flag;
uchar a[30];
uint y, u,c;
/*傳送子程式*/
void fasong(uchar dat)/*延時子程式*/
void delay(uint n)
}/*主程式*/
void main()
y=0;
flag=0; }
}}void jsfs() interrupt 4 }es=1;
flag=1;}
微控制器串列埠通訊問題,51微控制器串列埠通訊問題
修者世界 p3 0xff的作用其實很簡單,就是為了更好的完成 讀 修改 寫 這個過程,其實對於p3口是沒有必要的,對於p0口這樣做是應該的。 革玉花戚雪 微控制器串列埠通訊的問題,其實你只有乙個問題,就是 p0 0xf0 s2buf 0xfc p0 s2buf 為什麼這裡p0是0x00 你覺得p0應...
微控制器通過串列埠控制另外微控制器問題
撒辰狂綺南 沒試過兩個微控制器直接tx對rx,rx對tx。貌似這樣不安全。我試過加上max232的。如圖所示的那種,不要九針底座。u2的t1out可以直接連線到u3的r1in。再u2的r1in直接連線到t1out.另外兩個微控制器的地線一定要相連,即電壓0點相同。可用u2的地線和u3的地線相連即可。...
51微控制器串列埠通訊波特率問題,51微控制器串列埠波特率問題
anyway中國 usb轉串列埠上的晶振12mhz,對波特率的準確度有一定影響。但是,微控制器通訊的波特率設定,還是得採用與微控制器相連的11.0582mhz晶振進行計算。11.0592mhz設定的的大部分波特率理論誤差為零,但是,串列埠轉usb會有為了減小誤位元速率,可按照12mhz晶振波特率設定...