1樓:
1.在串列埠通訊的兩根線併入監控裝置,採集通訊訊號。2.在其中一個微控制器寫一段程式,輸出通訊的資料到監控裝置。具體是否可以請試驗驗證。
如何實現2個51微控制器之間通過串列埠通訊的源程式
2樓:匿名使用者
彙編編寫的模擬串列埠通訊程式
t2作為波特率控制
uart_rxd 是硬中斷0或1口,如果能進入中斷,說明該線有一個起始位產生,進入中斷後調
用下面的接收程式。退出硬中斷之前還需要將硬中斷標誌重新復位。
uart_txd 是任何其它io即可。
uart_send:
push ie
push dph
push dpl
push psw
push 00h
push acc
clr ea
setb uart_txd ;start bit
mov r0,a
clr tr2 ;tr2置1,計數器2啟動,時間計數啟動。
mov a,rcap2l;計數器2重新裝載值
mov tl2,a ;置計數器2初值 ;t2需要重新裝載
mov a,dph
mov a,rcap2h
mov th2,a
mov a,r0
setb tr2 ;tr2置1,計數器
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2
clr uart_txd ;start bit
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2
mov r0,#08h
uart_send_loop:
rrc a
mov uart_txd,c ;8 bit
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2
djnz r0,uart_send_loop
setb uart_txd ;end bit
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2
pop acc
pop 00h
pop psw
pop dpl
pop dph
pop ie
ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
uart_rec:
push ie
push dph
push dpl
clr ea
clr tr2 ;tr2置1,計數器2啟動,時間計數啟動。
mov a,rcap2l;計數器2重新裝載值
mov tl2,a ;置計數器2初值 ;t2需要重新裝載
mov a,dph
mov a,rcap2h
mov th2,a
jb uart_rxd,$ ;rec
setb tr2 ;tr2置1,計數器2啟動,時間計數啟動。
jnb tf2,$
clr tf2 ;0.5 bit
jnb tf2,$
clr tf2 ;1 bit
jnb tf2,$
clr tf2 ;1.5 bit
mov c,uart_rxd
mov acc.0,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;2.5
mov c,uart_rxd
mov acc.1,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;3.5
mov c,uart_rxd
mov acc.2,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;4.5
mov c,uart_rxd
mov acc.3,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;5.5
mov c,uart_rxd
mov acc.4,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;6.5
mov c,uart_rxd
mov acc.5,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;7.5
mov c,uart_rxd
mov acc.6,c
jnb tf2,$
clr tf2
jnb tf2,$
clr tf2 ;8.5
mov c,uart_rxd
mov acc.7,c
jnb tf2,$
clr tf2 ;9.5
jnb uart_rxd,$ ;等待停止位,並重新復位計數器
setb uart_rxd
pop dpl
pop dph
pop ie
ret補充回答:
串列埠除錯
1. 傳送:向匯流排上發命令
2. 接收:從匯流排接收命令,並分析是地址還是資料。
3. 定時傳送:從記憶體中取數並向主機傳送.
經過除錯,以上功能基本實現,可以通過上位機對微控制器進行實時控制。
程式如下:
//這是一個微控制器c51串列埠接收(中斷)和傳送例程,可以用來測試51微控制器的中斷接收
//和查詢傳送,傳送沒有必要用中斷,因為程式的開銷是一樣的
#include
#include
#include
#define inbuf_len 4 //資料長度
unsigned char inbuf1[inbuf_len];
unsigned char checksum,count3 , flag,temp,ch;
bit read_flag=0;
sbit cp=p1^1;
sbit dir=p1^2;
int i;
unsigned int xdata *ramdata; /*定義ram地址指標*/
unsigned char a[6] = ;
void init_serial***m(void)
void serial () interrupt 4 using 3 }}
//向串列埠傳送一個字元
void timer0() interrupt 1 using 3
}//主程式
main()
while(1)
}除錯需要注意的問題:
1. 傳送過程:在傳送時必須保證ti=1:
即傳送緩衝器為空,否則將導致資料發不出去,如果想強制傳送可以用:ti=1.具體傳送資料:
利用printf(「abcd」);函式直接傳送即可。
2. 接收過程:在接收時多選用中斷方式,這樣可以節約cpu的時間,提高效率,
怎麼實現兩個微控制器之間的串列埠通訊
3樓:匿名使用者
兩個微控制器之間
串列埠通訊,如果是用proteus**,最簡單了,兩個微控制器的rxd,txd交叉連線就行了。回要是實物最好用rs232連線通訊,距離可以達到幾十米。再遠點距離,用rs485連線通訊。
總之,方法很多的,答也很靈活的。
4樓:匿名使用者
看書,書上大把
先設定同樣的波特率,再寫串列埠中斷服務子程式,或是自己重新收發標誌位,微控制器rxd和txd交叉連線
5樓:匿名使用者
設定相同的波特率,根據標誌位檢測是否有資訊,前提是硬體工作要做好
微控制器與微控制器之間如何進行序列通訊
6樓:匿名使用者
1、將兩個微控制器的rxd與txd相連
2、根據需要傳輸的資料編寫傳輸協議
3、編寫序列通訊程式,將自己需要傳送的資料按照協議進行傳送4、編寫接收程式,按照協議進行接收
5、將兩個程式分別寫入兩個微控制器,執行。
7樓:帆揚五分
微控制器雙機之間的序列通訊設計例項
可以參考一下,不懂再hi我!
8樓:匿名使用者
找個微控制器教程上面都有 兩機rxd txd 對連,然後編寫各個的通訊程式!也有的微控制器是帶can 的 那就按照說明連 ,編寫對應的通訊程式!
9樓:匿名使用者
共地,收/發反接,程式設計即可實現
10樓:匿名使用者
給個郵箱我發你個例項
11樓:匿名使用者
一樓還得把end連線吧
怎麼用51微控制器的一個串列埠實現與外設兩個串列埠通訊
12樓:好程式設計師
只有單串列埠的微控制器如何實現與兩個串列埠模組通訊--可以分時工作。
--分別和兩個串列埠外設,通訊。
--但是,外部電路,需要好好設計。
多個微控制器串列埠通訊如何進行
13樓:匿名使用者
利用微控制器串列埠控制暫存器scon中的**2位選擇模式2或模式3可以進行多機通訊,具體說是用第九位tb8和rb8來區分地址幀和資料幀,當tb8為0時傳送的是資料幀,通常微控制器接收到後直接拋棄,不產生中斷,當tb8為1時傳送的是地址幀,微控制器收到的第9位(rb8)為1時把收到的前8位地址與本機地址比對,如果相同則切換接收模式以接收接下來的資料幀,如果不同則繼續保持接收地址幀的狀態。
14樓:匿名使用者
採用rs485,每個微控制器設定一個地址,很簡單。
兩塊微控制器STC89C52之間怎麼串列埠通訊
將兩個微控制器的串列埠波特率等設定為相同,232的rx tx分別另一塊的tx rx相連,程式控制串列埠收發就即可 是 mcu 串列埠直接相連 就可以了 如果一方用max232,另外一方也得用!即 2端 介面電平必須一版致 才行!注意 要權交叉!a 機 b機 tx傳送 rx接收 rx接收 tx傳送 g...
請問使用TTL電平,能夠進行微控制器的串列埠通訊嗎
使用ttl電平,可以bai 3個du 或者多個 微控制器的串zhi口通訊,可以自己設計一個dao 通訊協議,多 機內 通訊 要設定容 一個 主機,可以多個從機,從機之間 的資料 交換 需要通過 主機,如果 短距離 通訊,可以 直接 串列埠連線,主機 rxd txd 連線 從機txd rxd,如果通訊...
怎麼實現51微控制器與電腦串列埠之間的通訊
首先,微控制器和微機通訊的電氣標準要一致,微機串列埠一般是rs232電氣標準,所以要加電平轉版換晶片權,大多用max232,一般微控制器實驗板上都提供這樣的標準串列埠。其次,要分別編寫上位機和下位機軟體程式,微控制器程式參照例程 教科書進行編寫 上位機微機可採用vb,組態軟體,labview等軟體編...