1樓:521五公子
51微控制器的串列埠,是個全雙工的串列埠,傳送資料的同時,還可以接收資料。當序列傳送完畢後,將在標誌位 ti 置 1,同樣,當收到了資料後,也會在 ri 置 1。無論 ri 或 ti 出現了 1,只要串列埠中斷處於開放狀態,微控制器都會進入串列埠中斷處理程式。
在中斷程式中,要區分出來究竟是傳送引起的中斷,還是接收引起的中斷,然後分別進行處理。看到過一些書籍和文章,在串列埠收、發資料的處理方法上,很多人都有不妥之處。接收資料時,基本上都是使用「中斷方式」,這是正確合理的。
即:每當收到一個新資料,就在中斷函式中,把 ri 清零,並用一個變數,通知主函式,收到了新資料。傳送資料時,很多的程式都是使用的「查詢方式」,就是執行 while(ti ==0); 這樣的語句來等待傳送完畢。
這時,處理不好的話,就可能帶來問題。
看了一些網友編寫的程式,發現有如下幾條容易出錯:
1.有人在傳送資料之前,先關閉了串列埠中斷!等待傳送完畢後,再開啟串列埠中斷。這樣,在傳送資料的等待期間內,如果收到了資料,將不能進入中斷函式,也就不會儲存的這個新收到的資料。
這種處理方法,就會遺漏收到的資料。
2.有人在傳送資料之前,並沒有關閉串列埠中斷,當 ti = 1 時,是可以進入中斷程式的。但是,卻在中斷函式中,將 ti 清零! 這樣,在主函式中的while(ti ==0);,將永遠等不到傳送結束的標誌。
3.還有人在中斷程式中,並沒有區分中斷的**,反而讓傳送引起的中斷,執行了接收中斷的程式。
2樓:軍綠蘭
51微控制器串列埠傳送「?」的原因如下,51微控制器的序列口 51微控制器的序列口是一個可程式設計全雙工的通訊介面,具有uart(通用非同步收發器)的全部功能,一般來說,只能接受或只能傳送的稱為單工序列;既可接收又可傳送,但不能同時進行的稱為半雙工;能同時接收和傳送的序列口稱為全雙工序列口。
3樓:樸巨集峻
51微控制器的序列口主要是由兩個獨立的序列資料快取器subf(一個傳送快取暫存器,一個接收快取暫存器)和傳送控制器、接收控制器、輸入移位暫存器及若干控制閘電路組成。
51微控制器串列埠是什麼工作方式?
怎麼實現51微控制器與電腦串列埠之間的通訊?
4樓:匿名使用者
微控制器和電腦之間要加個ttl-rs232電平轉換,一般用max232晶片及外圍電路實現。
然後通過串列埠線,3芯即可,連線與電腦的串列埠連線。
51微控制器tcp通訊的**和串列埠的區別
51微控制器序列口每一次傳送多少字元? 網上答案五花八門,我需要正確的,有解析最好
5樓:做而論道
51微控制器序列口每一次傳送多少字元?
--最基本的,當然是一個字元。也就是一個位元組。也稱為一幀。--這一個字元,通常是:一個起始位、8個資料位、一個停止位。
--有時,需要傳送的內容較多,就需要傳送多個字元。--這就是傳送一串字元。--這種需要,必須先制訂通訊協議,專門編寫程式。
-- 一波特,是指每秒傳送一位二進位制數。
6樓:匿名使用者
51微控制器序列口每一次傳送一個位元組8位。
1.方式0同步方式有8位波特率是fosc/122.方式1有10位加了一個起始位和一個停止位且波特率由定時器控制3.
方式2有11位除了一個起始位和一個停止位外加了個第9位波特率是fosc/32或fosc/64
4.方式3有11位除了一個起始位和一個停止位外加了個第9位且波特率由定時器控制。
第9位可用於多機通訊也可用於奇偶校驗。
51微控制器串列埠通訊問題1
7樓:做而論道
第一什麼時候進那個中斷服務函式,是定時器給的初值上計數產生溢位時進入嗎?
還是ri或ti=1時進入中斷,如果是ri或ti=1進入,那我就不明白那個定時器溢位有什麼作用了,難道是只是為了設 定傳送速度嗎?
是在ri或ti=1進入。
確實是為了設定傳送速度。
第二,當進入中斷第一條語句是ri=0;說明接收到了數才將ri=0;,什麼時候接收的數呢?
對方傳送、本機接收,收齊了各個位的時候,ri就為1了。
上面主函式中是傳送數的,所以沒寫,a=subf;接收資料,微控制器接收到的這個數是誰發給它的,電腦嗎?
是《對方》傳送的,對方,是什麼都行。電腦、微控制器。都行。
那subf的內容是什麼?
是對方傳送的,內容究竟是什麼,要看事先的約定。
8樓:匿名使用者
第一,要進入中斷服務程式必然是發生了相應的中斷,void ser() inturrupt 4是串列埠中斷服務程式,es=1是開啟串列埠中斷,所以只有當串列埠接收或傳送資料成功後才進入中斷服務程式。定時器中斷沒有開啟,所以定時器溢位時不會產生中斷,況且也沒有相應的中斷服務程式供它使用。定時器裝載初值是為了設定串列埠通訊速率。
第二,串列埠接收到資料產生中斷這個就是硬體層面的問題,寫軟體暫時可以不用考慮這個問題。至於誰傳送給微控制器的資料就要看微控制器串列埠和誰連線的了,subf中肯定是你串列埠接收到的資料,此資料表示什麼就要看你通訊協議裡是怎麼規定的了。
51微控制器的串列埠擴充套件問題
9樓:q群
我id關於微控制器串bai口問題,一般du
來講是採用分時複用zhi的方式,也就是dao說分時間段來把版串列埠分配給不同的權模組使用。但你要求a模組不間斷輸出資料給微控制器。這就要求a模組需要一個專用的串列埠。
那麼b和c就不能再使用這個串列埠了。
有兩個辦法來解決這個問題。
換個微控制器,有多個串列埠的。
如果一定要用一個串列埠的微控制器,那你可能用普通io來模擬串列埠。從網上查資料還是有的。
另:你的理解是不是有問題,所謂有a模組不間斷輸出資料給微控制器,可能嗎?那你微控制器就要不停地處理串列埠了,還幹不幹別的。
建議你把三個模組都設定為被動傳送(即從機)的,最好不要主動的,如果一定要有主動的,也不要超過1個。這樣在待機時你把串列埠與這個模組連線。這樣一個串列埠也夠了。
如果有什麼問題可以交流。
51微控制器串列埠通訊
51微控制器程式設計問題(串列埠很難將資料傳送至上位機)
10樓:矮子根
首先,串列埠波特率2400,作為串列埠波特率**的定時器1計數方式2初值應為0xf4;而你的初裝值。
為0xfd,且pcon中最高位又設定為1,那麼波特率實為19200,其次,pcon=0x80為波特率倍增設定,故而19200又倍增為38400。這已遠遠超出了51微控制器的頻。
率範圍,第三,雖然設定了串列埠方式1(t1控波),但未設定串列埠中斷(ti)。所以當傳送完一個字元後,cpu並未產生中斷訊號,無法判斷是否已傳送完畢 ,故而持續等待中斷的發生,造成時間上的佔用,延緩了傳送速度。
51微控制器,通過串列埠助手向微控制器傳送字串,微控制器將字串逆序傳送回計算機,用C語言程式設計
電腦通過串列埠助手向微控制器傳送字串,微控制器定義一個可以儲存7個字元的陣列,依次儲存接收的字串,當接收到7個字串後,就可以從陣列的最後一個字元向前傳送每一個字元給電腦就可以了。剩下的就是串列埠初始化,串列埠接收和傳送程式了,就比較好寫了。其實,電腦傳送任意的7個字元的字串都可以,微控制器收到後就可...
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...