Ⅰ RS485與51單片機通信
因該可以,485通信最遠1.2km,根據你設置通信距離,波特率越大,通信距離越短,按你的要求,波特率設置為9600就可以
Ⅱ 怎樣用rs485實現兩個51單片機串口通信,c51程序該怎麼寫
兩片單片機的程序按照一定的格式(其實就是自己做的協議)一個發一個收,通訊正確時執行相應動作就可以了。485隻是一個硬體的電平邏輯,不會影響編程,用485晶元搭起電路即可,祝成功~~
Ⅲ 51單片機與rs485連接電路在串口程序中怎麼驅動485在線等!!!謝謝
驅動485有硬體驅動方式和軟體方式。
軟體方式的話硬體電路比較簡單,吧485的2、3腳連在一起,並接在51單片機的一腳上(比如P1_0),單片機發送腳TX接485的DI腳(也就是4腳),單片機的串口接收RX接485的RO腳(1腳)。
默認P1_0為低電平,當發送數據之前先把P1_0置高,發送結束後再置低。
Ⅳ 51單片機如何用RS485/MAX485下載,要怎麼電路連接,或寫C程序,
求採納
Ⅳ PC通過485與51單片機通訊去控制繼電器,如何編單片機C語言程序
51對於繼電器的控制,只用高低電平就可以了。關鍵是,你在你的程序里要有一個判斷子程序,判斷單片機從PC機(通過RS485)穿過來的是什麼數據,從而對單片機的某位置位或者復位。比如:你可以用一個if語句,如果收到的數據時11111,在置位,如果收到的數據時00000,則復位,相應的繼電器就會動作了。
Ⅵ 51單片機怎樣和PC通過RS485進行通信
你已經用USB轉成RS485,再將RS485轉成TTL了,剩下的事就簡單了,就把RS485TTL的RXD接到單片機RXD,把485TTL的TXD接到單片機的TXD上就行了。然後就要寫程序了。電腦的USB轉485線要安驅動程序,虛擬出一個串口來,電腦就可以用串口調試助手與單片機通信了。
Ⅶ 51單片機485通訊實驗
void send(unsigned char dat)
{
DE=1; //485發送程序多了個DE控制,其他不變
SBUF=dat;
while(TI==0);
TI=0;
DE=0;
}
Ⅷ 用多塊51單片機用485進行串列通信
很明顯,第一個程序是發送程序,通過定時器控制發送的內容;第二個程序時接受程序,使用串口中斷接收。Rs485晶元有控制管腳,接收使能是低電平,一般只有在需要發送時方將其轉為發送狀態(高電平),發送完畢後即轉為接收狀態。
Ⅸ 關於51單片機RS485通信問題
/*******************************************************************************
* 標題: RS485串口通信試驗(接受與發送) *
* *
* 1.通過本常式了解串口的基本原理及使用 ,理解並掌握對串口進行初始化 *
* *
* 2.請使用串口調試助手(Baud 4800、數據位8、停止位1、效驗位無)做為上位機(發送)數據和(接受)數據,
* 請在字元串輸入框中輸入字元和數字(HEX),按發送按鈕。觀看接受窗顯示情況.也可以用自動循環發送。
*
* 3.試驗RS485需要用RS232轉485的轉換頭。RS485的A對應串口頭的9針 B對應4針.接法大家可以參考原理圖。
* *
* 請學員認真消化本常式,學會用C語言操作串口和485的實現 *
********************************************************************************/
#include <REG52.H>
#include <stdio.h>
sbit RS485E=P3^7; //定義485的使能腳
bit SendFlag;
unsigned int ReData,SenData;
/**************************************
延時程序
**************************************/
void delay(unsigned char i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main (void) {
SCON = 0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|= 0x20; //定時器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、數據位8、停止位1。效驗位無 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //開串口中斷
EA = 1; // 開總中斷
// IE = 0x0;
while(1)
{
if (SendFlag==1) // max485(半雙工通信) RE/DE定義 RE=0為接受狀態 DE=1為發送狀態(參考MAX485晶元管腳)
{ RS485E=1; // RS5485E=0為接收狀態 RS5485E=1為發送狀態
SBUF=SenData; //發送數據
delay(50);
}
else
{
RS485E=0; //接收狀態
}
}
}
/****************************************************
串口中斷程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(TI == 1)
{
TI = 0;
SendFlag = 0;
}
if(RI == 1) //RI接受中斷標志
{
RI = 0; //清除RI接受中斷標志
ReData = SBUF; //SUBF接受/發送緩沖器
SenData=ReData;
SendFlag = 1;
}
}
Ⅹ 51單片機rs485通訊問題,高分求助!
你這類似modbus協議,發送8個位元組,這程序好寫的。先聲明一個數組,8個元素,依次對應一幀數據的8個位元組,按協議先寫成每個元素的初始數。
發送時,地址位元組重寫入需要發送的地址,功能碼,數據碼需要變化就重寫入數組,然後循環計算前面位元組的和,作為校驗和寫入最後的元素內。
好啦,要發送的數據幀准備完,就可以循環發送這個數組了,就是發送一幀數據了。
下位機接收數據也採用類似方法,只是先接收,後判斷處理一幀數據。