資源簡(jiǎn)介
采用51單片機(jī)作為主控制器,通訊方式為485總線,通訊協(xié)議為Modbus,波特率為9600,8位數(shù)據(jù),1個(gè)停止位,無校驗(yàn)位; 本程序作為從機(jī)部分編寫的;

代碼片段和文件信息
#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用忙標(biāo)識(shí)
//#define?_debug?0
/*串口2**傳感器*/
/*串口2接受數(shù)據(jù)長(zhǎng)度*/
u8?Rec2_len=0;?
u8?Uart2_Rec[9]={0};
/*串口1**max485*/
u8?Rec1_len=0;
u8?Rec_485buf[6];
u8?Send_485buf[11];
/****pm數(shù)據(jù)****/
u16?PM25_DATA=0;
u16?PM10_DATA=0;
u16?PM100_DATA=0;
/**485*********/?
sbit b485Send =? P2^0; //max485?發(fā)送接收控制?0接收?1發(fā)送
bit?flag=0;
/*AD采集電壓值===>換算為噪聲分貝值*/
u16?noise=0;
/******空氣質(zhì)量傳感器檢測(cè)******/
sbit?pin_a=P1^6;
sbit?pin_b=P1^7;
u8?AQI=0;?//空氣質(zhì)量等級(jí):0-3?0最優(yōu)
/*******本從機(jī)地址********/
extern?u8?localAddr;
/*******定時(shí)*******/
u8?Caiji_Time=0;
/********傳感器型號(hào)-程序版本信息*******/
u8?PRODUT_VER=255;
u8?CODE_VER=254;
/*
*?先進(jìn)先出濾波算法
*/
#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];?//?所有數(shù)據(jù)左移,低位仍掉
????filter_sum?+=?filter_buf[i];
??}
??return?(int)(filter_sum?/?FILTER_N);
}
/**********************************************************************
*?函數(shù)名:?unsigned?char?FucCheckSum(unsigned?char?*i?unsigned?char?ln)
*?功能描述:求和校驗(yàn)(取發(fā)送、接收協(xié)議的1\2\3\4\5\6\7的和取反+1)
*?函數(shù)說明:將數(shù)組的元素1-倒數(shù)第二個(gè)元素相加后取反+1(元素個(gè)數(shù)必須大于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);
}?
/************************************
????延時(shí)子程序
延時(shí)時(shí)間(xms*1)ms
*************************************/
void?delayms(u16?xms)
{
u16?xy;
for(x=xms;x>0;x--)
for(y=550;y>0;y--);
}
//定時(shí)器0初始化
void?Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR?|=?0x80; //定時(shí)器時(shí)鐘1T模式
TMOD?&=?0xF0; //設(shè)置定時(shí)器模式
TL0?=?0xCD; //設(shè)置定時(shí)初值
TH0?=?0xD4; //設(shè)置定時(shí)初值
TF0?=?0; //清除TF0標(biāo)志
TR0?=?1; //定時(shí)器0開始計(jì)時(shí)
ET0=1;
}
//串口1初始化?下載口?機(jī)復(fù)用到?p36、p37?485輸出用
void?Uart1Init(void) //9600bps@11.0592MHz
{
PCON?&=?0x7F; //波特率不倍速
SCON?=?0x50; //8位數(shù)據(jù)可變波特率
AUXR?|=?0x40; //定時(shí)器1時(shí)鐘為Fosc即1T
AUXR?&=?0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD?&=?0x0F; //清除定時(shí)器1模式位
TMOD?|=?0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1?=?0xDC; //設(shè)定定時(shí)初值
TH1?=?0xDC; //設(shè)定定時(shí)器重裝值
ET1?=?0; //禁止定時(shí)器1中斷
TR1?=?1; //啟動(dòng)定時(shí)器1
P_SW1?&=?~(S1_S0?|?S1_S1);????//S1_S0=1?S1_S1=0?
P_SW1|=S1_S0;??//設(shè)置串口1?在p36?p37
ES?=?1;??//使能串口中斷
??REN=1;//允許接收
}
//---串口1發(fā)送字節(jié)---//
void?Uart1_SendData(u8?dat)
{
????SBUF?=?dat;?????????????/
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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
評(píng)論
共有 條評(píng)論