51微控制器模擬串列埠的問題目前傳送資料沒有問題,接收資料時只能接收前兩位,如傳送010203只能接收到

2021-08-31 20:04:54 字數 2887 閱讀 7154

1樓:匿名使用者

我前幾天也做模擬串列埠程式,也遇到了與你類似的問題,不過現在解決了。

資料格式由一個起始位,八個資料位,一個或兩個結束位組成。在資料傳送是結束位是不能省。

但在資料接收時,程式中就沒有必要等待結束位了,因為在等待結束位的過程中,把下一個資料的起始中斷也等待過去了。

把函式uchar rbyte()中的最後一個waittf0();刪除,程式就能連續接收資料了。

下面是我的程式,你看一下就明白了。

/*模擬串列埠收發程式

改程式傳送口採用任一io口,接收口採用外部中斷0口,實現了9600bit/s的串列埠通訊

訊號產生與接收採用定時器定時溢位標誌來進行控制

注意問題:

1、中斷的中斷標誌要保證狀態正確

2、定時器定時要精確

*/#include

sbit txd=p3^1;

sbit rxd=p3^2;

sbit en=p1^7;

sbit clk=p3^7;

#define uchar unsigned char

uchar number,flag;

uchar num[10]=;

void wait(uchar i);

void send(uchar aa);

void main()

en=0;}}

}void send(uchar aa)

txd=1;

wait(0xb9);

flag=0;

}void int0() interrupt 0

number>>=1;clk=!clk;

if(rxd)number=0x80|number;

else number=0x00|number;

wait(0xd9);

num[flag]=number;

flag++;clk=!clk;

ie0=0;ex0=1;

if(flag>=10)flag=0;

}void wait(uchar i)

2樓:匿名使用者

這個可能還是需要你自己除錯。您可以試試一個一個的發,能否全部收到,然後兩個兩個的發,是否全部收到,然後再三個三個的發,問題可能出在中斷上或者資料儲存上。您多除錯一下吧。

希望對你有幫助 by fishmin2005

3樓:匿名使用者

建議 去 我的領地 5d6d 的 proteus 論壇看看

那裡有很多 微控制器**例項,包括proteus **圖 和 原始碼

4樓:匿名使用者

麻.煩`採納.··.·`··.

為什麼51微控制器接收一串資料時,只有接收16進位制資料時才進入串列埠中斷,而接收單個資料就沒有格式限制

5樓:做而論道

序列通訊,每次

來是傳輸一源個位元組,即8位二進位制數。

微控制器收到一個位元組,就會進入串列埠中斷。

樓主所說的:一串資料、16進位制資料、單個資料、兩個字、兩個以上的字元...,都是些什麼呀?

請按照專業術語:位元組,來說明你的問題。

6樓:匿名使用者

肯定是用串列埠bai助手傳送的吧,主du要原因是由於你處zhi理接收時間佔用太

dao長,第二

回個資料丟掉了,解決的辦法答是開闢一個接收緩衝區,用中斷方式接收,這樣一般不會丟資料了。

用c的話如下:

#include

#include

unsigned char pget,pput,serdata[16];

main()}}

void ser_isr(void) interrupt 4}

7樓:匿名使用者

在軟bai件上可以是數也可以是字元du,軟體內部串zhi口控制元件最終

還是將要發dao的資料或字元,轉化內成位元組,因為原始收發是容8位二進位制碼(1個位元組),它不管你是什麼資料還是字元,最終解釋必須是(0-255)才可以.即******xx,微控制器每接收一個位元組,中斷一次.

51微控制器序列通行時 接收到的資料和傳送的資料不一致

8樓:頓邦

1.下位機idr=sbuf;這一句為什麼不是放在接收中斷函式裡?

2. 用proteus 學微控制器很方便,特別對於新手來說,但是proteus用得久的人都知道畢竟是「仿」真,有很多地方仿得不夠真的。其中串列埠就是其中之一。

**數字邏輯還好點,類比電路就差遠了。

9樓:匿名使用者

串列埠通訊檢查一下波特率是不是一致的,在串列埠通訊的時候要先發 0x02檢測是否相通。

10樓:塞千山

1 t1時鐘初值都沒配置,復位預設為0,也就是說波特率都沒有配置,幸運的是兩片微控制器都沒配置,也就是波特率剛好相等。

2 微控制器程式最基本執行程式就是錯的,沒有死迴圈,程式只執行了一遍,然後就胡亂執行,怎麼可能按你的要求執行。

建議不要改程式,還是重新學寫程式,

買塊開發板,按照附帶的例程 理解後再寫

11樓:匿名使用者

proteus**串列埠,很好用的,特別是用來除錯時。

波特率對嗎?

51微控制器在串列埠問題,我們從串列埠上傳送資料是以16進位制的,在微控制器上接收是10進位制的,

12樓:匿名使用者

16進位制代表的數值跟十進位制代表的數值是一樣的16進位制能取到的最大值是65536

所以可以首先資料對10000求模

得到最高位

然後對10000求餘數再對1000求模

其他依次類推。

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

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

51微控制器裡TMOD設定問題,51微控制器裡TMOD設定問題

可以理解為 同時設定了兩個定時器的工作方式。但要看t1是否有啟動,如果系統中沒有用到t1,沒有啟動,設定了也沒關係。如果兩個都需要使用,需要分別設定,標準的做法是tmod 0x01,這樣就只設定了 t0,t1保留原來的狀態。tmod是8位暫存器,高4 位和低4位分別控制定時器1和0 用或操作的話就是...

有關51實驗版微控制器的問題,關於51微控制器的問題

初步瀏覽了一下,動態顯示的話delay時間太長就會閃爍。你好 初步看一眼,數碼管閃爍的原因無非是時間間隔太長,先建議你縮短延時時間,再事實。希望我的回答能幫助到你。像是串列埠驅動的數碼管,靜態顯示。這樣的電路,不宜頻繁的顯示,一秒鐘,顯示一次就可以了。把顯示部分,移到定時中斷裡面,即可 main v...