1樓:匿名使用者
不用很複雜的,就兩步:1)設定一個內部定時器作為波特率發生器,例如用t1,做下必要的設定如下:
void inituart()//串列埠初始化函式
2)寫個串列埠傳送程式如下:
void senddata(uint dat)//mcu串列埠資料輸出函式
//這裡要注意這三條語句的順序!
應用如下:
/*********主函式***********************************/
main()
}//做演示時,要有一個毫秒延時函式相配合;對於普通c51微控制器延時可小些,對於1t微控制器延時要大些,視資料顯示的速度而定,真實應用時,根據具體情況而定。
2樓:匿名使用者
#include
void inituart(void)
void sendonebyte(unsigned char c)void main(void)
void uartinterrupt(void) interrupt 4
else
ti = 0;
}//設定計時器的初值就是設定了波特率 那個sendonebyte函式就是傳送(
//傳送是按照一個位元組一個位元組的傳送)
3樓:匿名使用者
只要在初始化時設定好波特率等,往裡面寫就會自動發出去了
4樓:匿名使用者
他是序列資料傳輸,我覺得subf可能是在上升\下降沿=時,資料鎖存和資料輸出(從器件中輸出出來),你設定定時器1就是給他一個脈衝,提供上升\下降沿。
51微控制器串列埠通訊時,讀取串列埠sbuf,sbuf始終為0!
5樓:匿名使用者
ri=0; //先是收到電腦傳送過來的資料,資料放在在sbuf中
sbuf=4;
a=sbuf; }
sbuf這個暫存器在微控制器裡內接收和傳送雖然是同名,但容是物理上是分開的,我記憶裡好像接收那個快取是隻能讀不能寫的,所以說sbuf=4;這個語句是不能成功寫入;
除非上位機發資料下來,要不這個暫存器的值應該一直都是0.……
6樓:匿名使用者
sbuf=4;
a=sbuf; }
p1=sbuf;
這個地方寫錯了
微控制器串列埠通訊工作方式0問題 1.它作為同步移位暫存器中的同步是說它的傳送和接收是同一時間嗎 40
7樓:匿名使用者
普通非同步通訊方式指的是沒有同步訊號,傳送和接收都只有是一根線,接收專和傳送側的波特率必屬
須一致,而移位暫存器方式傳送和接收都有2 根線, 一根線是資料,另一根線是時鐘線(同步訊號),在時鐘的上升沿或下降沿鎖存資料,因此可以不約定波特率
一個資料送給sbuf後,就開始傳送了,當傳送完了ti置1,如果設定了中斷就開始響應中斷,在這段時間內cpu可以幹其它任何工作
一般情況下,cpu沒有那麼忙,我們常用查詢方式來等待其傳送完畢
而資料接收時,一般我們不知道資料什麼時候來,為了不錯過資料,常常允許接收中斷
sbuf是微控制器內的一個暫存器(雙暫存器)
其資料的直接**一般是累加器a(也就 是cpu的影子)累加器a的資料**可以是內部特殊功能暫存器,也可能是通用暫存器(ram)
串列埠與微控制器通訊時好時壞,微控制器模擬串列埠通訊有什麼利弊??
首先試試串列埠好使不。拿pc機開啟個串列埠除錯軟體,將rxd與txd拿個導線短接一下。之後用軟體傳送隨便一些資料,由於txd與rxd是短接的,那麼軟體接收到的資料應該是和發射資料一致,如果不一致,線壞了,如果徹底就收不到,線懷了,多試幾次,時好時壞,線接觸不良。如果一切正常,那麼就得看微控制器的串列...
關於51微控制器串列埠非同步通訊的問題
傳送時是自己主動的,當然可以不用中斷方式,使用查詢法。接收時自己是被動的,你不知道什麼時候會發來資料,所以採用中斷方式,沒有中斷的時候執行其他的程式段。查詢法是不斷地查詢是否有資料接受到或資料是否傳送完成。中斷法是指當接收到資料或傳送資料後進入中斷子程式,子程式完成後再返回執行原來被中斷的程式。 1...
5V微控制器與3 3V微控制器串列埠通訊問題
yesyes科 5v微控制器與3.3v微控制器串列埠不能通訊,是設定錯誤造成的,解決方法如下 1 首先51微控制器的可用記憶體只有00h 7fh,堆疊指標設定在60h,則堆疊的大小就是60h 7fh。這算是有規定大小的。2 堆疊主要是為子程式呼叫和中斷操作而設立的,因此對應有兩項功能 保護斷點和保護...