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

📄 51

📁 51单片机应用系统典型模块开发大全
💻
字号:
#include <reg51.h>
#include <absacc.h>

#define uchar unsigned char
#define uint  unsigned int
#define right_set XBYTE[0x0000]	//右端配置区旗语锁存器
#define dat_get   XBYTE[0x0001]	//数据区旗语锁存器
#define int_left  XBYTE[0X2FFE]	//左邮箱单元地址

uchar xdata *right_addr;		//右端配置地址区
uchar xdata *dat_addr;			//右端采集数据区
uchar dat_num,n=0;
uchar buffer[100];				//接收数据缓冲区

/*******************声明函数********************/
void init_right(void);			//初始化右端单片机
void init_serial(void);			//初始化串口
void sem_flag(uchar *sem_apply);//旗语申请函数
void save_dat(void);			//保存采集数据
/********************主函数********************/
main()
{
	init_right();				//初始化右端单片机
	init_serial();				//初始化串口
	while(1)
	{
		if(n=dat_num)			//采集完规定量数据
		{
			n=0;				//数据采集个数清零
			save_dat();			//保存数据
		}
	}
}
/****************初始化右端单片机****************/
void init_right(void)
{
    sem_flag(&right_set);		//获得配置区旗语
    dat_num=*right_addr;		//读出采集数据个数
    dat_addr=(*(right_addr+1))|(*(right_addr+2));//读出数据存储区起始地址
	right_set=1;				//释放旗语
}
/****************初始化串行中断****************/
void init_serial(void)
{
	SCON = 0x50;				//8位串行口模式1,允许接收,REN=1
	TMOD|= 0x20;				//定时器1工作在模式2
	TH1 = 0xfd;					//波特率为9600,晶振频率为11.0592MHz
	TL1 = 0xfd;
	ES = 1;            			//使能串行口中断
	EA = 1;						//使能全局中断
	TR1 = 1;					//启动定时器1
}
/****************串口中断服务程序****************/
void serial_IT(void) interrupt 4
{
	if(RI==1)
	{
		RI=0;
		buffer[n++]=SBUF;		//将串口接收数据送入接收数据缓冲区
	}
}
/****************数据采集接收程序****************/
void save_dat(void)
{
	uchar i;
	sem_flag(&dat_get);			//获得采集数据区旗语
	for(i=0;i<dat_num;i++)
	{
		(*(dat_addr+i))=buffer[i];//将缓冲区数据送入采集数据存储区
	}
	int_left=0xff;				//触发左端单片机外部中断
	dat_get=1;					//释放采集数据区旗语
}
/*************通过申请旗语获取某地址区域的使用权**************/
void sem_flag(uchar *sem_apply)
{
    *sem_apply=0x00;			//申请旗语
    while((*sem_apply)!=0x00);	//等待并获得旗语
}

⌨️ 快捷键说明

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