资源简介
大气压强传感器BMP280单片机程序,主控为C51单片机,包括I2C协议和串口协议,I2C与传感器通信,串口与上位机通信,串口波特率为9600,通信引脚为RXD:3.0,TXD:3.1,I2C通信引脚SCL:1.5,SDA:1.4

代码片段和文件信息
// FileName : dataCollector.c
// Data : 2018/03/09
// Description : 使用单片机制作数据采集器,包括温度、湿度、光照度、CO2的环境数据
// Author : song
#include “intrins.h“
#include “stc8.h“
#define BMP280_ADDR 0xec
#define BMP280_TEMP_ADDR 0xfa
#define BMP280_PRESS_ADDR 0xf7
unsigned short dig_T1;
short dig_T2;
short dig_T3;
unsigned short dig_P1;
short dig_P2;
short dig_P3;
short dig_P4;
short dig_P5;
short dig_P6;
short dig_P7;
short dig_P8;
short dig_P9;
/********** 定义串口参数 ***************/
//时钟晶振
#define FOSC 11059200UL
//定义波特率9600
#define BRT (256 - FOSC / 9600 / 32)
//UART1忙标志位
bit Uart1_BusyFlag;
//Uart1输入输出数组
char bufferPtr;
char Uart1Buffer[16];
void delay_ms(int x)
{
unsigned char i j;
while(x-- > 0)
{
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
}
}
void Uart1Int() interrupt 4 using 1
{
if(TI)
{
TI = 0;
Uart1_BusyFlag = 0;
}
if(RI)
{
RI = 0;
Uart1Buffer[bufferPtr++] = SBUF;
}
}
void Uart1Init()
{
//固定波特率9位数据方式
SCON = 0x50;
//定时器1 8位自动重载模式
TMOD = 0x20;
TL1 = BRT;
TH1 = BRT;
AUXR = 0x40;
TR1 = 1;
bufferPtr = 0;
Uart1_BusyFlag = 0;
}
void Uart1SendByte(char dat)
{
while(Uart1_BusyFlag);
Uart1_BusyFlag = 1;
SBUF = dat;
}
void Uart1SendStr(char *p)
{
while(*p)
{
Uart1SendByte(*p++);
}
}
//I2C相关参数
void I2C_Wait()
{
while(!(I2CMSST & 0x40));
//Uart1SendStr(“i2c wait...\r\n“);
I2CMSST &= ~0x40;
}
void I2C_Start()
{
I2CMSCR = 0x01;
I2C_Wait();
}
void I2C_SendData(char dat)
{
I2CTXD = dat;
I2CMSCR = 0x02;
I2C_Wait();
}
void I2C_RecvACK()
{
I2CMSCR = 0x03;
I2C_Wait();
}
char I2C_RecvData()
{
I2CMSCR = 0x04;
I2C_Wait();
return(I2CRXD);
}
void I2C_SendACK()
{
I2CMSST = 0x00;
I2CMSCR = 0x05;
I2C_Wait();
}
void I2C_SendNAK()
{
I2CMSST = 0x01;
I2CMSCR = 0x05;
I2C_Wait();
}
void I2C_Stop()
{
I2CMSCR = 0x06;
I2C_Wait();
}
void I2C_Init()
{
P_SW2 = 0x80;
I2CCFG = 0xe0;
I2CMSST = 0x00;
}
void printHex(unsigned char i)
{
unsigned char j;
for(j = 0;j < 8;j++)
{
if(j == 4)
{
Uart1SendByte(‘ ‘);
}
if(i & 0x80)
{
Uart1SendByte(‘1‘);
}
else
{
Uart1SendByte(‘0‘);
}
i <<= 1;
}
Uart1SendByte(‘ ‘);
}
unsigned char bmp280_ReadByte(unsigned char addr)
{
unsigned char temp;
I2C_Start();
I2C_SendData(BMP280_ADDR);
I2C_RecvACK();
I2C_SendData(addr);
I2C_RecvACK();
I2C_Start();
I2C_SendData(BMP280_ADDR + 1);
I2C_RecvACK();
temp = I2C_RecvData();
I2C_SendNAK();
I2C_Stop();
return temp;
}
void bmp280_WriteByte(unsigned char addr unsigned char dat)
{
I2C_Start();
I2C_SendData(BMP280_ADDR);
I2C_RecvACK();
I2C_SendData(addr);
I2C_RecvACK();
I2C_SendData(dat);
I2C_RecvACK();
I2C_Stop();
}
long bmp280_MultipleReadThree(unsigned char addr)
{
unsigned char msb lsb xlsb;
long temp = 0;
msb = bmp280_Re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-21 15:06 大气压强\
目录 0 2018-03-20 17:55 大气压强\Listings\
文件 14143 2018-03-20 17:53 大气压强\Listings\STARTUP.lst
文件 14921 2018-03-20 17:55 大气压强\Listings\test.lst
文件 25111 2018-03-20 17:55 大气压强\Listings\test.m51
目录 0 2018-03-20 17:55 大气压强\ob
文件 819 2018-03-20 17:53 大气压强\ob
文件 35442 2018-03-20 17:55 大气压强\ob
文件 107 2018-03-20 17:55 大气压强\ob
文件 1042 2018-03-20 17:55 大气压强\ob
文件 9036 2018-03-20 17:55 大气压强\ob
文件 115 2018-03-20 17:55 大气压强\ob
文件 38842 2018-03-20 17:55 大气压强\ob
文件 6376 2015-05-29 12:09 大气压强\STARTUP.A51
文件 6248 2018-03-20 17:55 大气压强\test.c
文件 71289 2018-03-21 15:06 大气压强\test.uvgui.user
文件 5051 2018-03-19 13:51 大气压强\test.uvopt
文件 14057 2018-03-19 13:51 大气压强\test.uvproj
文件 713 2018-03-12 14:52 大气压强\test2.c
文件 0 2018-03-12 09:45 大气压强\test_uvproj.bak
评论
共有 条评论