資源簡介
RS485多機通信,Keil C51源程序,Proteus仿真!適合初學(xué)者與項目參考!

代碼片段和文件信息
//MAX485的使能轉(zhuǎn)換時會出很麻煩的問題!!!
//通信協(xié)議:主機發(fā)地址信息,相應(yīng)從機發(fā)地址應(yīng)答信息(地址+0x80)
//??????????主機發(fā)命令信息,相應(yīng)從機發(fā)命令應(yīng)答信息(命令+0x80)
//??????????命令a(主發(fā)從收命令),命令號:0x0a,主機首先發(fā)數(shù)據(jù)數(shù)量N,緊接著發(fā)N個數(shù)據(jù),最后發(fā)2字節(jié)CRC校驗(高位在前)
//?????????????????????????????????從機無需應(yīng)答,只需把數(shù)據(jù)連同檢驗存入接收緩沖區(qū)即可,接著進行校驗,校驗正確發(fā)肯定應(yīng)答(0xaa)
//?????????????????????????????????否則發(fā)否定應(yīng)答(0xee),主機若收到否定應(yīng)答,則全部從發(fā)(從地址開始)
#include
#include
#define?uchar?unsigned?char
#define?uint??unsigned?int
uchar*??receive_buffer_head=0xa0; ??//接收數(shù)據(jù)緩沖區(qū)
uchar*??send_buffer_head=0x60; ??//發(fā)送數(shù)據(jù)緩沖區(qū)
uchar*??current_receive_pointer;??????????//當(dāng)前接收指針
uchar*??current_send_pointer; ??//當(dāng)前發(fā)送指針
uchar*??crc_head=0x80;
uchar?receive_buffer_length;??????????????//接收緩沖區(qū)數(shù)據(jù)長度
uchar?send_buffer_length; ??????//發(fā)送緩沖區(qū)數(shù)據(jù)長度
uchar?respon;?????????????????????????????//應(yīng)答信息
uchar?slave1adress=0x01; ??//從機1地址
uchar?slave2adress=0x02; ??//從機2地址
uchar?slave3adress=0x03; ??//從機3地址
uchar?crc_high;
uchar?crc_low;
uint??crc;
uchar?command_a=0x0a;
sbit?sending=P2^0;????????????????????????//發(fā)送指示燈??
sbit?receiveing=P2^1;?????????????????????//接收指示燈
sbit?test=P2^2;
sbit?send_enable=P2^7;????????????????????//發(fā)送使能,只有發(fā)送時為高,其余時間為低
sbit?receive_enable_inv=P2^6;?????????????//接收使能,低電平有效
//***********************************************************
//??????????????????????延時函數(shù),延時x毫秒
//***********************************************************
void?DelayMS(uint?ms) ???????? ???
{
???uchar?i;
???while(ms--)
???for(i=0;i<120;i++);
}
//***********************************************************
//?????????????????寫主機的發(fā)送緩沖區(qū)數(shù)據(jù)
//這里簡單地往發(fā)送緩沖區(qū)寫入a~z
//***********************************************************
void?Write_Send_Buffer()
{??
???uchar?i;
???uchar*?temp_pointer;
???temp_pointer=send_buffer_head;
???for(i=0x00;i<0x1a;i++)
???{
????*temp_pointer=i+0x41;
?temp_pointer++;
???}??
}
//***********************************************************
// ?????????????RS-485初始化
//***********************************************************
void?RS485_initial()
{
?????sending=0;?????????????????????//發(fā)送指示燈??
?????receiveing=0;??????????????????//接收指示燈
?test=0;
?????current_receive_pointer=receive_buffer_head;????//初始化當(dāng)前的接收緩沖區(qū)指針指向接收緩沖區(qū)首地址
?????current_send_pointer=send_buffer_head;??????????//初始化當(dāng)前的發(fā)送緩沖區(qū)指針指向發(fā)送緩沖區(qū)首地址??????????????
?receive_buffer_length=0;?????????//接收緩沖區(qū)數(shù)據(jù)長度初始化為0
?????send_buffer_length=0; ??//發(fā)送緩沖區(qū)數(shù)據(jù)長度初始化為0
?send_enable=1;???????????????????//初始化發(fā)送有效
?receive_enable_inv=1;????????????//接收無效
?REN=0;???????????????????????????//初始化為不允許接收
?P1=0x88;
??
}
//***********************************************************
//UART初始化
//***********************************************************
void?UART_initial()
{
???EA=1;????????????????????????//開總中斷
???ES=1;????????????????????????//開串行口中斷
???ET1=1;???????????????????????//開定時計數(shù)器1中斷
???SCON=0xd0; ????????????????//設(shè)置串行方式,1101?0000?方式3,不允許多機,允許接收
???TMOD=0x20; ????????????????//設(shè)置計數(shù)器方式,
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????477??2012-12-16?14:42??RS_485_多機通信\RS-485說明文檔.txt
?????文件?????126001??2012-12-16?14:27??RS_485_多機通信\rs485.DSN
?????文件??????12569??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485
?????文件???????8898??2012-12-16?14:29??RS_485_多機通信\主機host\again_rs485.c
?????文件???????3129??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.hex
?????文件?????????39??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.lnp
?????文件??????14396??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.LST
?????文件??????14472??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.M51
?????文件??????14185??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.OBJ
?????文件???????4203??2012-12-16?14:20??RS_485_多機通信\主機host\again_rs485.plg
?????文件??????55227??2012-12-16?14:30??RS_485_多機通信\主機host\again_rs485.uvopt
?????文件??????13245??2012-12-13?21:58??RS_485_多機通信\主機host\again_rs485.uvproj
?????文件??????55230??2012-12-16?14:29??RS_485_多機通信\主機host\again_rs485_uvopt.bak
?????文件??????13241??2012-12-13?20:54??RS_485_多機通信\主機host\again_rs485_uvproj.bak
?????文件??????12568??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1
?????文件??????12280??2012-12-16?14:29??RS_485_多機通信\從機1\again_rs485_slave1.c
?????文件???????3319??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.hex
?????文件?????????53??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.lnp
?????文件??????20101??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.LST
?????文件??????14986??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.M51
?????文件??????14070??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.OBJ
?????文件???????4332??2012-12-16?14:19??RS_485_多機通信\從機1\again_rs485_slave1.plg
?????文件??????55252??2012-12-16?14:30??RS_485_多機通信\從機1\again_rs485_slave1.uvopt
?????文件??????13266??2012-12-13?21:58??RS_485_多機通信\從機1\again_rs485_slave1.uvproj
?????文件??????55254??2012-12-16?14:29??RS_485_多機通信\從機1\again_rs485_slave1_uvopt.bak
?????文件??????????0??2012-12-13?20:54??RS_485_多機通信\從機1\again_rs485_slave1_uvproj.bak
?????文件??????11837??2012-12-16?14:19??RS_485_多機通信\從機2\again_rs485_slave2
?????文件??????11950??2012-12-16?14:19??RS_485_多機通信\從機2\again_rs485_slave2.c
?????文件???????3213??2012-12-16?14:19??RS_485_多機通信\從機2\again_rs485_slave2.hex
?????文件?????????53??2012-12-16?14:19??RS_485_多機通信\從機2\again_rs485_slave2.lnp
............此處省略15個文件信息
評論
共有 條評論