📄 fm1608.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 + -