導航:首頁 > 操作系統 > 51單片機雙機通信最遠能跑多遠

51單片機雙機通信最遠能跑多遠

發布時間:2023-04-06 14:45:40

① 51單片機雙機通訊物理接線有什麼要求(晶元引腳怎麼連接)

51單片機雙機通訊,如果雙機距離超過了1米,就要採用RS232介面,這是常用的串口通信方式,物理接線可採用3線連接即可,距離超過10米時應採用雙芯屏蔽線。距離小於1米時,屬於實驗性的臨時串口通信,兩個單片機的RXD,TXD引腳交叉連接就行,需要共地,用普通的3條導線連接。

② 51單片機的雙機通信 跪求大神幫我讀懂程序,馬上採納

ORG 0000H
LJMP START
ORG 0023H //定時器中哪叢斷入口地址
LJMP SINT1 //定時器中斷程序
ORG 0040H//主程序從0040h開始執行
START:
MOV SP,#60H//設置堆棧
MOV TMOD,#20H//初始化定時器控制寄存器
MOV TH1,#0F3H
MOV TL1,#0F3H//設置定時器1初值
SETB TR1//開啟定時器1
MOV SCON,#0C0H;方式3//設置串口控制寄存器
MOV PCON,#00H
SETB EA//允許總中斷
SETB ES//允許串口中斷
{ MOV R0,#20H
MOV A,@R0
MOV C,P//p和tb8估計是用偽指令定義的東西
MOV TB8,C
MOV SBUF,A} 讀取地址20h里的內容發送到串口

(JNB TI,$//等待發送完
CLR TI);//發送完以後清除發送標志 這兩句不需要了
AJMP $//原地等待
SINT1:
PUSH PSW
PUSH A//壓入堆棧保護
CLR TI 清發送標志
INC R0 //寄存器ro裡面的內容加1
MOV A,@R0//間接定址 讀取ro所指向地址的內容 比如:ro裡面是21h 就是讀取21h地址的內容到 a
MOV C,P
MOV TB8,C
MOV SBUF,A
CJNE R0,#2FH,RET1 //比較是否發送完如果完了就離開中斷沒有的蔽賀話繼續發送 ;跳出中斷

CLR TI//清標志
CLR ES//不允許串口中斷
CLR EA//關總中斷

POP A
POP PSW //彈出a和psw的數據 回復psw中斷之前的數值
RET1: RETI
END

這個發送程序就是通過定時器中斷依次把數據送到串口發送寄存器。

接收程序:
ORG 0000H
LJMP START
ORG 0023H
LJMP SINT1
ORG 0040H
START:
MOV SP,#60H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV SCON,#0D0H
MOV PCON,#00H
SETB EA
SETB ES
MOV R0,#20H
AJMP $
SINT1: PUSH PSW
PUSH A //a和psw壓入堆棧保護
CLR RI//清串口接收標志
MOV A,SBUF//讀取串口的數值

MOV C,P
JNC L1
JNB RB8,ERROR//這幾句是判斷 如果錯誤就跳轉到錯誤處理程序

AJMP NORMAL//沒問題宏緩派的話跳轉到正常執行
L1:JB RB8,ERROR
NORMAL:MOV @R0,A 讀取a的內容到ro所指向的地址 單片機間接定址
INC R0 //
CJNE R0,#30H,RET1 // 比較 如果夠了就中斷返回 ;跳出中斷
POP A //還不夠
POP PSW //還不夠恢復a 和psw的值 准備下一次中斷接收
RET
ERROR: 「出錯了」
CLR RI
CLR ES
CLR EA //錯誤處理 關掉串口中斷和總中斷 不恢復psw裡面的值。單片機將無事可做。老在執行 AJMP $
RET1: RETI
END

夠詳細了吧
自己多查查資料。

③ 51單片機怎麼雙機通信

你好!!

單片機雙機通訊,就是直接單片機的串口RX和TX直接連接,然後通過串口命令完成通訊!

給你一個實例,可以完全滿足你的要求!

希望幫到你,滿意請採納!

④ 51單片機雙機通信

//=====================================================================
// 多機通訊主機程序
//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);
} //=====================================================================
// 多機通訊從機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;
}
}

⑤ 兩個單片機做一個系統,單片機之間用什麼方式通信最好啊!!

1、一般採用單片機串口通訊就可以。
2、串口通訊採用什麼信號,要根據實際情況確定。
3、如果單片機之間通訊距離遠的話,可以採用RS485通訊方式;如果單片機之間通訊距離近的話,兩個單片機串口可以直接通訊。
4、如果對通訊速度要求不高的話,也可以用單片機的普通口做,通過外搭電路,實現兩個單片機的通訊。
5、不論採用什麼方式的通訊,通訊協議都是自己定義。

⑥ 8051單片機的串列通信速率可以達到10MB/S嗎

對於標准51內核來說,其串口波特率發生器最少也是振盪周期的16分頻。

如果串口通信達運燃運到10MB/s,按照8N1格式相旁梁當於100Mbps,也就是說這顆51需要跑在1.6GHz的速率段基下……太難了。
以前有人用液氮冷卻讓51跑到接近100MHz,但1600MHz只能說是天方夜譚了。

⑦ 單片機跟PC的串列通信 速度可以達到多快

單片機主要看時鍾,串口波特率是由時鍾分頻而來的,一般極限值是最大時鍾/16
串口本身看距離,距離越遠速度越低,標准232最大距離只有15m

以上哪個值低,哪個就是最快速度

⑧ 51單片機雙機通信問題

#include<reg51.h> //發送 供參考
sbitk0=P1^0; //這是10按鍵
sbitk1=P1^1; //發送0-9 的編碼
sbitk2=P1^2;
sbitk3=P1^3;
sbitk4=P1^4;
sbitk5=P1^5;
sbitk6=P1^6;
sbitk7=P1^7;
sbitk8=P3^3;
sbitk9=P3^4;
sbitled=P3^5;
bit y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
voidmain(void)
{
SCON=0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|=0x20; //定時器工作方式2
PCON|=0x80; //數據位8、停止位1。效驗位無(12M)
TH1=0xFD; //TH1=0xFD;波特率9600
TL1=0xFD;
TR1 =1;
while(1)
{
if(k0==0&&y0==0){y0=1;SBUF=0xc0;led=0;}
if(k0==1){y0=0;}
if(k1==0&&y1==0){y1=1;SBUF=0xf9;led=0;}
if(k1==1){y1=0;}
if(k2==0&&y2==0){y2=1;SBUF=0xa4;led=0;}
if(k2==1){y2=0;}
if(k3==0&&y3==0){y3=1;SBUF=0xb0;led=0;}
if(k3==1){y3=0;}
if(k4==0&&y4==0){y4=1;SBUF=0x99;led=0;}
if(k4==1){y4=0;}
if(k5==0&&y5==0){y5=1;SBUF=0x92;led=0;}
if(k5==1){y5=0;}
if(k6==0&&y6==0){y6=1;SBUF=0x82;led=0;}
if(k6==1){y6=0;}
if(k7==0&&y7==0){y7=1;SBUF=0xf8;led=0;}
if(k7==1){y7=0;}
if(k8==0&&y8==0){y8=1;SBUF=0x80;led=0;}
if(k8==1){y8=0;}
if(k9==0&&y9==0){y9=1;SBUF=0x90;led=0;}
if(k9==1){y9=0;}
if(led==0)
{
while(!TI);
TI=0;
led=1;
}
}
}

#include<reg51.h>//接收
voidmain(void)
{
SCON=0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|=0x20; //定時器工作方式2
PCON|=0x80; //數據位8、停止位1。效驗位無(12M)
TH1=0xFD; //TH1=0xFD;波特率9600
TL1=0xFD;
TR1 =1;
ES =1; //開串口中斷
EA =1; //開總中斷
P1=0xbf;
while(1)
{

}
}
voidchuankou(void)interrupt4
{
if(RI==1)
{
RI=0;
TI=0;
P1=SBUF; // 顯示0-9
}
}

閱讀全文

與51單片機雙機通信最遠能跑多遠相關的資料

熱點內容
pr怎麼壓縮文件大小 瀏覽:861
查看oracle字元集命令 瀏覽:177
鋰電池增加密度 瀏覽:659
linux用戶密碼忘記 瀏覽:240
gb壓縮天然氣 瀏覽:633
圖片拼接不壓縮app 瀏覽:668
我的世界如何編程 瀏覽:84
vue反編譯代碼有問題 瀏覽:948
linuxshell字元串連接字元串 瀏覽:51
androidviewpager刷新 瀏覽:438
python編程計算平均分 瀏覽:678
加密數字貨幣市值查詢 瀏覽:692
時尚商圈app怎麼樣 瀏覽:584
stacklesspython教程 瀏覽:138
用命令行禁用135埠 瀏覽:212
linux防火牆編程 瀏覽:627
pdf閱讀器刪除 瀏覽:979
考研人如何緩解壓力 瀏覽:822
買電暖壺哪個app便宜 瀏覽:505
洛克王國忘記伺服器了怎麼辦 瀏覽:782