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

📄 fm1608.c

📁 单片机应用系统(光盘内容)
💻 C
字号:
#include <reg51.h>#include <absacc.h>#define uint  unsigned int#define uchar unsigned char#define FM1608_ADDR XBYTE[0X0000]// FM1608的地址sbit RE1=P1^0;					// 数据采集接收使能端,低有效sbit DE1=P1^1;					// 数据采集发送使能端sbit RE2=P1^2;					// 与计算机数据通信接收使能端,低有效sbit DE2=P1^3;					// 与计算机数据通信发送使能端uint idata time0_0; 			// 临时变量,用于计算定时uchar time2ms;					// 2ms时间计数uchar buffer;		 			// 接收数据缓冲区void init_serial(void);			// 初始化串行中断void init_time0(void);			// 初始化定时器中断void time0_int(void);			// 定时器中断void serial_IT(void);			// 串行中断void sample(void);				// 0.2s时间到,采集数据void main(){	init_serial();				// 初始化串口程序	init_time0();				// 初始化定时器0程序	time2ms=0;					// 请除时间计数	RE2=0;DE2=0;				// 接收计算机的请求允许	IP=0x10;					// 中断优先级设置,串行中断优先级高	EA=1;						// 使能全局中断	if(time2ms==100)			// 2*100=200ms 0.2s时间到,采集数据	{		sample();	}	}/****************初始化串行中断****************/void init_serial(void){	SCON=0x50;							//8位串行口模式1,允许接收,REN=1	TMOD|=0x20;							//定时器1工作在模式2	TH1=0xfd;							//波特率位9600,晶振频率位11.0592MHz	TL1=0xfd;	ES=1;             					//使能串行口中断	TR1=1;								//启动定时器1}/****************初始化定时器T0****************/void init_time0(void){	TMOD|=0x01;		   					//T0工作方式1	TH0=0x0F8;							//2ms 定时设置,定时器高位赋初值	TL0=0x30;							//定时器低位赋初值	TR0=1;								//开定时器0	ET0=1;								//开定时器0的中断	}/****************串口中断服务程序****************/void serial_IT(void) interrupt 4{	if(RI==1)	{		RI=0;					// 清接收标志位		buffer=SBUF;			// 将串口接收数据送入接收数据缓冲区		if(buffer==0xbb)		// 如果计算机发送的为BB,则表示计算机需要读取数据		{			ES = 0; 			// 关串行中断			RE2=1;DE2=1;		// 发送数据给计算机 允许			buffer=FM1608_ADDR;	// 从FM1608的00地址读取数据						SBUF=buffer;			while(TI==0);		// 等待发送完成			TI=0;				// 清发送标志位			RE2=0;DE2=0;		// 接收计算机的请求允许			ES=1;             	// 使能串行口中断		}	}}/**************定时器中断服务子程序*************/void time0_int(void) interrupt 1{		TH0=0x0F8;					// 初值重装	TL0=0x30;	time2ms+=1;					// 时间暂存期数据加1}/******************采样子程序*******************/void sample(void){	time2ms=0;					// 清除时间计数	ES = 0; 					// 关串行中断	RE2=1;DE2=0;				// 禁止与计算机通信	RE1=1;DE1=1;				// 发送数据允许	SBUF=0XAA;					// 发送联络信号AA	while(TI==0);				// 等待发送数据	TI=0;						// 清发送标志位	RE1=0;DE1=0;				// 接收数据允许	while(RI==0);				// 等待接收数据	RI=0;						// 清接收标志位	buffer=SBUF;				// 暂存数据			FM1608_ADDR=buffer;			// 存储数据到FM1608的00地址	RE1=1;DE1=0;				// 传感器不允许	RE2=0;DE2=0;				// 接收计算机的请求允许	ES = 1;             		// 使能串行口中断	}

⌨️ 快捷键说明

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