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...