51微控制器,通過串列埠助手向微控制器傳送字串,微控制器將字串逆序傳送回計算機,用C語言程式設計

2021-06-25 02:57:51 字數 2906 閱讀 3797

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微控制器串列埠通訊寫一個字元

你主程式這麼寫,傳送一個字元後,微控制器並不停止。應該加一行無限迴圈語句,while 1 才能停,如下 include include unsigned char ch bit read flag 0 void init serialcom void 串列埠通訊初始設定 向串列埠傳送一個字元 voi...

電腦通過微控制器串列埠傳送調光指令使微控制器產生PWM訊號對LED調光

要實物嗎 我做微控制器設計的 思路可以,多思考,現成的資料應該不多,祝你好運。求串列埠控制微控制器利用pwm調光rgb三基色led源程式 找個有4路pwm的微控制器咯,串列埠設定pwm暫存器就好 源程式和電路圖都要呀!親如果是要解決方案的話可以找 http www.speech led.com 51...

微控制器串列埠通訊原理微控制器串列埠通訊的原理?

1 51系列微控制器的串列埠有4個模式,可分別用作串並轉換 並串轉換 非同步序列通訊 2種模式 非同步序列通訊中,有1 8 1和1 8 1 1兩種幀格式,多機通訊是特殊的通訊方式。2 基本原理是兩組移位暫存器。將並行通訊轉換成序列通訊模式 傳送部分 或反之 接收部分 可全雙工執行。3 速度通過移位脈...