導航:首頁 > 操作系統 > 單片機非同步通信模塊

單片機非同步通信模塊

發布時間:2022-07-21 00:45:06

⑴ 兩個單片機之間的簡單非同步串列通信

因為你是用查詢方式進行通信的,而程序沒有中沒有設置兩機通信的聯絡信號,即接受機接收到的第一位數據不一定是發送機發送的第一位數據,而有可能是第二、第三位數據,這樣接受到的八位數據就可能是發送機發送多次數據中截取的八位數據,又因兩機延時時間不同,因此接受到的第一位數據不可能固定不變的。
所以就會出現你說的現象。如果採用的是查詢方式進行串列通信,兩機之間需要建立握手信號,告知接受機發送機開始發送地位數據,接受機才開始接受數據。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void uart_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1;
SCON=0x50;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}

void main()
{
uart_init();

do
{
SBUF=0x01;
while(TI==0);
TI=0;

while(RI==0);
REN=0;
}
while(SBUF!=0x02) ;

while(1)
{
SBUF=0x07;
while(TI==0);
TI=0;
delay(500) ;
SBUF=0x00;
while(TI==0);
TI=0;
delay(500) ;
}

}

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void uart_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1;

SM0=0; //串口方式1
SM1=1;
REN=1;

}

void main()
{
uart_init();
do
{
SBUF=0x02;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
P2=SBUF;
}
while(P2!=0x01);

while(1)
{

while(RI==0);
P1=SBUF;
RI=0;

}

}

⑵ 單片機多機串列非同步通信

//===================================================================== // 多機通訊從機1程序 //cong1.c //writer:穀雨 2008年3月22日於EDA實驗室 //註: //===================================================================== #include<reg52.h> #define addr 0x31 //從機1地址 unsigned char receive; unsigned char xx[ ]={"1234567890"}; void Uart_Init(void) { TMOD = 0x20; //定時器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位數據位,波特率9600bit/s,允許接收 TR1 = 1; //開始計時 EA = 1; //中斷允許 ES = 1; //串列中斷允許 } void Serial_INT() interrupt 4 { if(!RI) return; RI=0; if(RB8==1) { if(SBUF==addr) SM2=0; else SM2=1; } if(RB8==0) receive=SBUF; } void SendOneByte(unsigned char c) { TB8=0; SBUF = c; while(!TI); TI = 0; } void SendListChar(unsigned char *DData,unsigned char Ef) { unsigned char L=0; if(Ef!=0) { for( ;L<Ef;L++) //顯示有效長度 SendOneByte(DData[L]); //發送單個字元 }else while (DData[L]!='\0') //發送至字串結束 { SendOneByte(DData[L]); //發送單個字元 L++; //下一個字元 } } void main() { Uart_Init(); while(1) { switch(receive) { case 0xff: break; case 0x01: //在此可以寫入要完成的動作,最多可完成256個動作 SendListChar(xx,0); break; case 0x02: break; case 0x33: P1=!P1; //為方便其間,賦值給P1口,測P1口電平來檢測該程序 break; default: break; } receive=0xff; } } //===================================================================== // 多機通訊主機程序 //zhuji.c //writer:穀雨 2008年3月22日於EDA實驗室 //註:主機先發送地址,接收到應答後,再發送數據 //===================================================================== #include<reg52.h> #define addr1 0x31 //從機1地址 #define addr2 0x32 //從機2地址 unsigned char xx[10]; unsigned char p = 0; void delay_1ms(unsigned int i) { unsigned char j; while ((i--)!=0) {for (j=0;j<125;j++);} } void Uart_Init(void) { TMOD = 0x20; //定時器T1使用工作方式2 TH1 = 0XF3; TL1 = 0XF3; PCON = 0x00; //SMOD=1; SCON = 0xf0; //工作方式3,9位數據位,波特率9600bit/s,允許接收 SM2 = 0; TR1 = 1; //開始計時 EA = 1; //中斷允許 ES = 1; //串列中斷允許 } void Serial_INT() interrupt 4 { if(!RI) return; ES = 0; RI = 0; xx[p] = SBUF; p++; ES = 1; } void send_addr(unsigned char addr) //發送地址 { p = 0; TB8 = 1; //發送地址幀 SBUF=addr; //發送地址 while(!TI); //等待發送完畢 TI=0; //軟體復位TI } void send_data(unsigned char ddata) //發送數據 { TB8=0; //發送數據幀 SBUF=ddata; //發送數據 while(!TI); TI=0; //軟體復位TI } void main() { Uart_Init(); delay_1ms(2000); while(1) { send_addr(addr1); //向從機1發地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='0') P1=0xaa; delay_1ms(500); send_addr(addr2); //向從機2發地址 send_data(0x33); send_data(0x01); delay_1ms(500); if(xx[9]=='9') P1=0x55; delay_1ms(500); } // while(1); }

⑶ 怎麼把單片機和GSM模塊連接什麼型號都行。

把單片機和GSM模塊連接,直接把非同步串列通信口的TX和RX連上就可以,別忘了地線。但是需要注意幾點:

1、不同的單片機有不同的電壓,一般GSM模塊的輸入輸出電平是2.85V,51系列的電平是5V,一般在51輸出的TX那根線上串聯2K的電阻,基本上可以使用。如果是3.3V的單片機,這個電阻就可以很小,幾百歐姆就可以。

2、GSM模塊本身的電源和SIM卡電路很麻煩,首先是大多數GSM模塊都是用FPC40的介面,排線的間距只有零點五毫米,而且是塑料外殼,不好焊接。焊不好的話工作不穩定。

其次是電源部分較麻煩,GSM模塊的發射電流較大,最大瞬間電流2A。所以電源部分一般要用LM2576這種大電流的DC-DC變換器來提供4V的電壓,DCDC電路設計本身就很不容易,個人應用比較難,需要做電路板。

⑷ 單片機的sci模塊和spi模塊分別指的什麼啊

SPI(Serial Peripheral Interface--串列外設介面)匯流排系統是一種同步串列外設介面,它可以使MCU與各種外圍設備以串列方式進行通信以交換信息。
串列通信介面SCI(serial communication interface)由Motorola公司推出。它是 sci串口連接
一種通用非同步通信介面UART,與MCS-51的非同步通信功能基本相同。
簡單說一個同步一個非同步。

SCI是串口就是rs232,主要用來和其他的MCU或則電腦進行通信

spi是串列通信匯流排,主要和串列的外設進行數據交流,比如說串列的DA轉換器

SCI是非同步串列口,也就是UART,最高速度也不超1Mbps,SPI是同步串列口,速度可以到幾Mbps

⑸ 單片機基礎知識分享:什麼是同步通信和非同步通信

同步通信要求收發雙方的通信時鍾同步,同步是個時間概念,指的是節拍,步調一致

⑹ 單片機之間如何實現通信

兩個單片機之間串口通信,如果是用proteus模擬,最簡單了,兩個單片機的rxd,txd交叉連接就行了。要是實物最好用rs232連接通信,距離可以達到幾十米。再遠點距離,用rs485連接通信。總之,方法很多的,也很靈活的。

⑺ 關於51單片機串口非同步通信的問題

發送時是自己主動的,當然可以不用中斷方式,使用查詢法。
接收時自己是被動的,你不知道什麼時候會發來數據,所以採用中斷方式,沒有中斷的時候運行其他的程序段。
查詢法是不斷地查詢是否有數據接受到或數據是否發送完成。
中斷法是指當接收到數據或發送數據後進入中斷子程序,子程序完成後再返回執行原來被中斷的程序。

⑻ mcs-51單片機的串列通信中非同步通訊方式和同步通訊方式的非同步和同步怎樣理解

同步串列通信進行數據傳輸時,發送和接收雙方要保持完全的同步,也就是雙方的速率要相等,因此要使用同一時鍾
非同步通信中,在每一幀的數據前後放上了控制字元,雙方的時鍾可以彼此獨立

閱讀全文

與單片機非同步通信模塊相關的資料

熱點內容
格式工廠壓縮圖片大小 瀏覽:889
程序員的黑科技視頻 瀏覽:294
加密欄位表格顯示 瀏覽:401
pdf列印缺字 瀏覽:515
安卓手機鎖住圖標用什麼app 瀏覽:288
程序員牧師 瀏覽:456
影音伺服器是什麼意思 瀏覽:856
安卓如何合入補丁 瀏覽:929
文件夾中的應用隱藏怎麼辦 瀏覽:467
伺服器如何調用全部cpu計算 瀏覽:84
如何搜索AppID 瀏覽:792
組裝電腦水冷解壓 瀏覽:280
珠海存儲伺服器地址怎麼找 瀏覽:416
md5演算法字元串長度 瀏覽:8
可以二次虛化的雲伺服器 瀏覽:783
思科2500編程器固件 瀏覽:239
php開發桌面應用程序 瀏覽:908
支付寶app哪裡可以加油 瀏覽:74
路由器ttl刷編程器固件 瀏覽:722
縱向加密密鑰協商狀態時間 瀏覽:854