當前位置:編程學習大全網 - 源碼下載 - 向大神求助,有沒有C語言的基於485的51單片機的主從應答的程序啊,就是主機向各個從機發送地址碼要求應答

向大神求助,有沒有C語言的基於485的51單片機的主從應答的程序啊,就是主機向各個從機發送地址碼要求應答

這個問題很簡單,用485通訊的話,思路如下

思路:

PC方面:可以用MSCOMM控件先發壹個字符表示接收地址,後延遲1ms,(註意PC端在485通訊在字符發送過程中壹定要加延遲,這是我多次測試的總結,如果是用調試助手的話,他內部代碼已經加過延遲了,就不必考慮這個問題)再發控制指令,初學者建議直接用調試助手

單片機方面:首先對接收數據進行核對,如果不是本地地址,放棄,如果是本地地址,在檢測命令是否正確,如果正確,做出處理後返回PC本地地址並發送命令

我舉個例子教妳怎麽玩多站通訊,下面是我已經通過測試的壹個程序

#include <reg51.h> //選用晶振11.0592MHz

#include <absacc.h>

#define DATA51 DBYTE[0x80] //80H存數據

#define AddressID 0x31 //本機地址1

sbit RS485E=P3^7; //定義485的使能腳// RS5485E=0為接收狀態 RS5485E=1為發送狀態

sbit MAX485_DIR=P3^7;

main()

{

//****************通訊設置

SCON = 0xF0; //REN=1允許串行接受狀態,串口工作模式3,SM2=1

TMOD|= 0x20; //定時器工作方式2

PCON|= 0x80; //波特率提高壹倍

IP=0x10; //串口優先級高

// TH1 = 0xFD; //baud*2 /* reload value 19200、數據位8、停止位1。效驗位無(11.0592)

TH1 = 0xf4; //fa // //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (11.0592M)

TL1 = 0xf4;

TR1 = 1; //開啟定時器1

EA = 1; // 開總中斷

ES = 1; //開串口中斷

RS485E=0; // RS5485E=0為接收狀態 RS5485E=1為發送狀態

while(1);

}

void counter4(void) interrupt 4 using 2 //串口中斷

{

while(RI==0);

RI=0;

if(SBUF==AddressID)

{

while(RI==0);

RI=0;

if(SBUF==0x01) //發送指令

{

MAX485_DIR=1; //開發送

SBUF=AddressID;

while(TI==0);

TI=0;

SBUF=0x6f; //發送o

while(TI==0);

TI=0;

SBUF=0x6b; //發送k

MAX485_DIR=0; //開接收

}

if(SBUF==0x00) //接收

{

//這裏怎麽處理就看妳自己要怎麽做了,妳沒要求,我也不好怎麽寫,就自己寫吧

}

}

}

程序調試通過,可以直接套用

  • 上一篇:大數據學習需要什麽基礎,我沒有基礎,能學習嗎?
  • 下一篇:機器人系統仿真的發展概況
  • copyright 2024編程學習大全網