資源簡介
采用51單片機作為主控制器,通訊方式為485總線,通訊協議為Modbus,波特率為9600,8位數據,1個停止位,無校驗位; 本程序作為從機部分編寫的;

代碼片段和文件信息
#include
#include
#include
#include
#define?u8?unsigned?char
#define?u16?unsigned?int?
#define?u32?unsigned?long
#include?“modbus.h“
#include
#include“eeprom.h“
//串口2添加控制
#define?S2RI??0x01??????????????//S2CON.0
#define?S2TI??0x02??????????????//S2CON.1
#define?S2RB8?0x04??????????????//S2CON.2
#define?S2TB8?0x08??????????????//S2CON.3
//串口2切換io控制?
#define?S2_S0?0x01??????????????//P_SW2.0
//串口1切換io控制
#define?S1_S0?0x40??????????????//P_SW1.6
#define?S1_S1?0x80??????????????//P_SW1.7
bit?busy;?//串口2用忙標識
//#define?_debug?0
/*串口2**傳感器*/
/*串口2接受數據長度*/
u8?Rec2_len=0;?
u8?Uart2_Rec[9]={0};
/*串口1**max485*/
u8?Rec1_len=0;
u8?Rec_485buf[6];
u8?Send_485buf[11];
/****pm數據****/
u16?PM25_DATA=0;
u16?PM10_DATA=0;
u16?PM100_DATA=0;
/**485*********/?
sbit b485Send =? P2^0; //max485?發送接收控制?0接收?1發送
bit?flag=0;
/*AD采集電壓值===>換算為噪聲分貝值*/
u16?noise=0;
/******空氣質量傳感器檢測******/
sbit?pin_a=P1^6;
sbit?pin_b=P1^7;
u8?AQI=0;?//空氣質量等級:0-3?0最優
/*******本從機地址********/
extern?u8?localAddr;
/*******定時*******/
u8?Caiji_Time=0;
/********傳感器型號-程序版本信息*******/
u8?PRODUT_VER=255;
u8?CODE_VER=254;
/*
*?先進先出濾波算法
*/
#define?FILTER_N?12
int?filter_buf[FILTER_N?+?1];
int?Filter()?{
??int?i;
??int?filter_sum?=?0;
??filter_buf[FILTER_N]?=?GetADCResult(2);?//p12AD
??for(i?=?0;?i?????filter_buf[i]?=?filter_buf[i?+?1];?//?所有數據左移,低位仍掉
????filter_sum?+=?filter_buf[i];
??}
??return?(int)(filter_sum?/?FILTER_N);
}
/**********************************************************************
*?函數名:?unsigned?char?FucCheckSum(unsigned?char?*i?unsigned?char?ln)
*?功能描述:求和校驗(取發送、接收協議的1\2\3\4\5\6\7的和取反+1)
*?函數說明:將數組的元素1-倒數第二個元素相加后取反+1(元素個數必須大于2)
********************************************************************/
unsigned?char?FucCheckSum(unsigned?char?*i?unsigned?char?ln)
{
unsigned?char?jtempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{
tempq+=?*i;?
i++;
}
tempq=(u8)((~tempq)+1);
return(tempq);
}?
/************************************
????延時子程序
延時時間(xms*1)ms
*************************************/
void?delayms(u16?xms)
{
u16?xy;
for(x=xms;x>0;x--)
for(y=550;y>0;y--);
}
//定時器0初始化
void?Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR?|=?0x80; //定時器時鐘1T模式
TMOD?&=?0xF0; //設置定時器模式
TL0?=?0xCD; //設置定時初值
TH0?=?0xD4; //設置定時初值
TF0?=?0; //清除TF0標志
TR0?=?1; //定時器0開始計時
ET0=1;
}
//串口1初始化?下載口?機復用到?p36、p37?485輸出用
void?Uart1Init(void) //9600bps@11.0592MHz
{
PCON?&=?0x7F; //波特率不倍速
SCON?=?0x50; //8位數據可變波特率
AUXR?|=?0x40; //定時器1時鐘為Fosc即1T
AUXR?&=?0xFE; //串口1選擇定時器1為波特率發生器
TMOD?&=?0x0F; //清除定時器1模式位
TMOD?|=?0x20; //設定定時器1為8位自動重裝方式
TL1?=?0xDC; //設定定時初值
TH1?=?0xDC; //設定定時器重裝值
ET1?=?0; //禁止定時器1中斷
TR1?=?1; //啟動定時器1
P_SW1?&=?~(S1_S0?|?S1_S1);????//S1_S0=1?S1_S1=0?
P_SW1|=S1_S0;??//設置串口1?在p36?p37
ES?=?1;??//使能串口中斷
??REN=1;//允許接收
}
//---串口1發送字節---//
void?Uart1_SendData(u8?dat)
{
????SBUF?=?dat;?????????????/
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2794??2017-06-29?18:36??多合一code\AD.h
?????文件???????5620??2017-07-01?11:11??多合一code\eeprom.h
?????文件??????14967??2017-07-10?10:40??多合一code\Listings\main.lst
?????文件??????13205??2017-07-10?10:40??多合一code\Listings\modbus.lst
?????文件??????29789??2017-06-27?18:09??多合一code\Listings\senor.m51
?????文件??????88869??2017-07-10?10:40??多合一code\Listings\senor.map
?????文件??????15134??2017-06-27?11:49??多合一code\Listings\STARTUP.lst
?????文件???????7956??2017-07-10?16:27??多合一code\main.c
?????文件???????7870??2017-07-10?13:33??多合一code\modbus.c
?????文件????????403??2017-06-27?18:09??多合一code\modbus.h
?????文件??????39290??2017-07-10?10:40??多合一code\ob
?????文件??????17132??2017-07-10?10:40??多合一code\ob
?????文件??????54034??2017-07-10?10:40??多合一code\ob
?????文件???????1215??2017-07-10?10:40??多合一code\ob
?????文件??????12444??2017-07-10?10:40??多合一code\ob
?????文件????????102??2017-07-10?10:40??多合一code\ob
?????文件??????28529??2017-07-10?10:40??多合一code\ob
?????文件???????1068??2017-06-27?11:49??多合一code\ob
????.......????170614??2017-07-10?16:27??多合一code\senor.uvgui.Administrator
????.......??????5477??2017-07-01?13:18??多合一code\senor.uvopt
????.......?????14222??2017-07-01?13:18??多合一code\senor.uvproj
?????文件???????6376??2016-03-14?08:58??多合一code\STARTUP.A51
?????文件??????12805??2017-06-26?09:57??多合一code\stc15f2k60s2.h
?????目錄??????????0??2017-07-10?10:40??多合一code\Listings
?????目錄??????????0??2017-07-10?10:40??多合一code\ob
?????目錄??????????0??2017-07-10?16:27??多合一code
-----------?---------??----------?-----??----
???????????????549915????????????????????26
評論
共有 條評論