⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 博世加速度传感器程序,代码进行了参数设置
💻 C
字号:
#include "reg51.h" 
#include "intrins.h"

//引脚定义
sbit  CSB  		= 	P3^5;
sbit  SDI  		= 	P3^2;
sbit  SDO		=	P3^3;			
sbit  SCK  		= 	P3^4;

/* 变量定义 */
unsigned char	bdata	control1=0;
sbit	sleep		=	control1^0;
sbit	soft_reset	=	control1^1;
sbit	self_test0	=	control1^2;
sbit	self_test1	=	control1^3;
sbit	ee_w		=	control1^4;
sbit	update_image=	control1^5;
sbit	reset_int	=	control1^6;
sbit	reserved	=	control1^7;

unsigned char	bdata	control2=0;
sbit	enable_LG	=	control2^0;
sbit	enable_HG	=	control2^1;
sbit	count_LG0	=	control2^2;
sbit	count_LG1	=	control2^3;
sbit	count_HG0	=	control2^4;
sbit	count_HG1	=	control2^5;
sbit	any_motion	=	control2^6;
sbit	alert		=	control2^7;

unsigned char	bdata	control3=0;
sbit	wake_up			=	control3^0;
sbit	wake_up_pause0	=	control3^1;
sbit	wake_up_pause1	=	control3^2;
sbit	shadow_dis		=	control3^3;
sbit	latch_int		=	control3^4;
sbit	new_data_int	=	control3^5;
sbit	enable_adv_int	=	control3^6;
sbit	SPI4			=	control3^7;

unsigned char	data	chip_ID=0;
unsigned char	data	LG_thres=0;
unsigned char	data	LG_dur=0;
unsigned char	data	HG_thres=0;
unsigned char	data	HG_dur=0;
unsigned char	data	any_motion_thres=0;
unsigned char	data	any_motion_dur=0;
unsigned char	data	range_bandwidth=0;

unsigned char	data	command;
unsigned char	data	comaddr,comdata;
unsigned char	data	rec_new;
unsigned char	data	index;


/*  函数声明 */
extern void 			WriteByte(unsigned char addr, unsigned char dat);
extern unsigned char 	ReadByte(unsigned char addr);
extern unsigned char 	ReadID(unsigned char addr);
void					Delay30mS(void);
void					SystemInit(void);
void					SetParameter(void);

void main(void)
{		
	CSB=1;
	SDI=1;
	SDO=1;
	SCK=1;
	Delay30mS();	
	SystemInit();
	rec_new=0;
	index=0;
	SetParameter();
	while(1)
	{
		if(rec_new==1)
		{
			rec_new=0;
			switch(command)
			{
				case 0x80:
						comdata=ReadByte(comaddr+0x80);
						Delay30mS();
						index=0;
						SBUF=command;						
						break;
				case 0x00:
						WriteByte(comaddr,comdata);
						Delay30mS();						
						index=0;
						SBUF=command;
						break;				
			}
		}
	}
	
}

void					Delay30mS(void)
{
	/*11.0592MHz晶振下~30mS*/
	register unsigned char	i,j;
	i=100;
	j=50;
	while(j--)
	{
		while(i--);
		i=100;
	};
}

void					SystemInit(void)
{
	TMOD	=	0x20;
	TH1		=	0xfd;	//9600bits/s
	TL1		=	0xfd;
	TCON	=	0x40;
	PCON	=	0x00;
	SCON	=	0x50;
	IE		=	0x90;
}

void					SetParameter(void)
{
	SPI4=1;
	WriteByte(0x15,control3);
	Delay30mS();
	ee_w=1;
	WriteByte(0x0a,control1);
	Delay30mS();	
	any_motion=1;
	WriteByte(0x2b,control2);
	Delay30mS();
	any_motion_thres=0x05;
	WriteByte(0x30,any_motion_thres);
	Delay30mS();
	any_motion_dur=0x00;
	WriteByte(0x31,any_motion_dur);
	Delay30mS();
	range_bandwidth=0x02;
	WriteByte(0x34,range_bandwidth);
	Delay30mS();
	wake_up=1;
	wake_up_pause0=0;
	wake_up_pause1=0;
	enable_adv_int=1;
	SPI4=1;
	WriteByte(0x35,control3);
	Delay30mS();
	ee_w=0;
	WriteByte(0x0a,control1);
	while(1){};	
}

void					serialINT(void)	interrupt 4
{
	if(RI)
	{
		RI=0;
		if(index==0)
			command=SBUF;
		else if(index==1)
			comaddr=SBUF;
		else if(index==2)
		{
			comdata=SBUF;
			rec_new=1;
			index=0;
		}
		index++;
	}
	else if(TI)
	{
		TI=0;
		index++;
		if(index==1)
			SBUF=comaddr;
		else if(index==2)
			SBUF=comdata;			
		else if(index==3)
			index=0;
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -