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

📄 51

📁 51单片机应用系统典型模块开发大全
💻
字号:
#include <reg51.h>#include <absacc.h>#define uint  unsigned int#define uchar unsigned char#define fosc	11.0592		    // 晶振频率 #define time0	2000			// 定时2000us#define FM1808_ADDR XBYTE[0X0000]// FM1808的地址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	RI=0;						// 清除串行传输标志位		TI=0;	//	EA = 1;						// 使能全局中断}void init_time0(void){	TMOD|=0x01;		   			// T0工作方式1								// 2ms 定时设置	time0_0 = 65536-time0*fosc/12;	TH0=(time0_0/256);			// 定时器高位赋初值	TL0=(time0_0%256);			// 定时器低位赋初值	TR0=1;						// 开定时器0	ET0=1;						// 开定时器0的中断	//	EA = 1;						// 使能全局中断	}/****************串口中断服务程序****************/void serial_IT(void) interrupt 4{	if(RI==1)	{		RI=0;					// 清接收标志位		buffer=SBUF;			// 将串口接收数据送入接收数据缓冲区		if(buffer==0xbb)		// 如果计算机发送的为BB,则表示计算机需要读取数据		{			ES = 0; 			// 关串行中断			RE2=1;DE2=1;		// 发送数据给计算机 允许			buffer=FM1808_ADDR;	// 从FM1808的00地址读取数据						SBUF=buffer;			while(TI==0);		// 等待发送完成			TI=0;				// 清发送标志位			RE2=0;DE2=0;		// 接收计算机的请求允许			ES = 1;             // 使能串行口中断		}	}}/* 定时器0中断服务子程序,定时动态扫描显示 */void time0_int(void) interrupt 1{		TH0=(time0_0/256);			// 初值重装	TL0=(time0_0%256);	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;				// 暂存数据			FM1808_ADDR=buffer;			// 存储数据到FM1808的00地址	RE1=1;DE1=0;				// 传感器不允许	RE2=0;DE2=0;				// 接收计算机的请求允许	ES = 1;             		// 使能串行口中断	}

⌨️ 快捷键说明

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