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
程參考。
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微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?
方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...
51微控制器串列埠接收資料十進位制,51微控制器在串列埠問題,我們從串列埠上傳送資料是以16進位制的,在微控制器上接收是10進位制的,
即便是傳送ascii碼形式的字元,也可以傳送數字啊,如1234,mcu將收到4個ascii值,然後在mcu端判斷每個是否 0 9 以確保是數字的ascii碼,如果是就將收到的ascii值減去 0 不就得到它的十進位制值了麼。可以這樣 向微控制器傳送非壓縮bcd碼0x01,0x02,0x03,0x04...
關於51微控制器的中斷,關於51微控制器的中斷。
中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷髮生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5箇中斷源 中斷號 優...