[問題] 8051串列傳輸 使用Keil C

看板Electronics作者 (dio)時間18年前 (2007/11/29 17:28), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
想利用8051的串列埠重覆地連續丟四個byte出去 在重覆丟的迴圈之中 我同時用P1.0這個接腳讓LED燈閃爍 但實際使8051執行時 LED燈確實有在持續閃爍 但串列埠卻沒有動作 (我用示波器量測 只有幾十mV的雜訊) 不知道是出了什麼問題 煩請各位大大指教 謝謝 ---- 另外請問兩個小問題: 1. 我可以直接在程式碼中寫 TI=1; 強迫改變這個代表傳送完畢的位元值嗎 2. 假設兩個8051互相利用串列埠溝通 那兩個8051之間是TxD接TxD,RxD接RxD嗎 還是TxD接RxD,RxD接TxD呢 有點搞混 我以為TxD表示傳送 RxD表示接收 謝謝 ---- 程式碼如下: #include <regx51.h> #include <stdio.h> #define XTAL 11059200 #define baudrate 19200 void SendTx(char tx); // 由串列埠丟一個byte void Delay(void); // 放在迴圈中用來延遲 void com_initialize(void) { SCON=0x50; PCON=0x80; TMOD=0x20; TH1=0xFD; ES=1; TR1=1; return; } void main(void) { EA=1; com_initialize(); while(1) { SBUF=0x01; // 無意義 只是想使TI=1 P1=0x01; // 使P1.0接腳上的LED亮 SendTx(0xFF); // 連續送四個byte SendTx(0x80); SendTx(0x00); SendTx(((0x80^0x00)&0x7F)); Delay(); P1=0x00; // 使LED滅 Delay(); } } void SendTx(unsigned char tx) { while(TI==0); // 等到TI=1,也就是前一個byte傳送完畢 TI=0; SBUF=tx; // tx寫入SBUF 由TxD腳送出 return; } void Delay(void) { unsigned char i,j,k; for (i=0; i<255; i++) for (j=0; j<255; j++) for (k=0; k<3; k++) ; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.175.37 ※ 編輯: dio1984 來自: 140.112.175.37 (11/29 17:29)

11/29 22:09, , 1F
我不確定我說的對不對.不過...232在動作最好不要再控制
11/29 22:09, 1F

11/29 22:10, , 2F
其它的東西
11/29 22:10, 2F

11/30 00:43, , 3F
謝謝樓上大大回應
11/30 00:43, 3F

11/30 00:43, , 4F
我換了Keil C的版本 然後加入了中斷的寫法 問題已解決
11/30 00:43, 4F
文章代碼(AID): #17JePF-x (Electronics)