/**********************************************************
* *
* 串口驱动程序 *
* *
**********************************************************/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "chuankou.h"
#include "main.h"
#include "delay.h"
bit Flag=1;
unsigned char i=0;
unsigned char ReData;
unsigned char rece_all[16],receive_ctl[2];
/**********************************************************
*函数:sendall() *
*功能:用串口发送收集到的所有数据 *
* *
**********************************************************/
void sendall(void)
{ // int k;
//湿度
// send_byte('s');
send_byte((char)(0X30+RH_data/10)); //湿度 高8位 十位
send_byte((char)(0X30+RH_data%10)); //湿度 高8位 个位
send_byte((char)(0X30+RL_data/10)); //湿度 低8位 十分位
// send_byte((char)(0X30+RL_data%10)); //湿度 低8位 百分位
//温度
//send_byte('w');
send_byte((char)(0X30+TH_data/10)); //温度 高8位 十位
send_byte((char)(0X30+TH_data%10)); //温度 高8位 个位
send_byte((char)(0X30+TL_data/10)); //温度 低8位 十分位
// send_byte((char)(0X30+TL_data%10)); //温度 低8位 百分位
//光照强度
//send_byte('g');
send_byte(guang[0]); // 千
send_byte(guang[1]); // 百
send_byte(guang[2]); // 十
send_byte(guang[3]); // 个
//二氧化碳浓度
//send_byte('e');
send_byte(co2[0]); // 千
send_byte(co2[1]); // 百
send_byte(co2[2]); // 十
send_byte(co2[3]); // 个
send_byte((char)(action[0]+0x30));
send_byte((char)(action[1]+0x30));
send_byte((char)(action[2]+0x30));
send_byte((char)(action[3]+0x30));
Flag=1;
}
/**********************************************************
*函数:ini() *
*功能:定时器初始化 *
* *
**********************************************************/
void ini()
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
TH1 = 0xF3; // 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1; //开启定时器1
ES = 1; //开串口中断
EA = 1; // 开总中断
}
/**********************************************************
*函数:ser_int() *
*功能:串口中断程序 *
* *
**********************************************************/
void ser_int (void) interrupt 4
{
if(RI==1)
{
RI=0;
ReData = SBUF;
if(ReData!='\0')
{
rece_all[i]=ReData;
i++;
if(i>15)
{
i=0;
Flag=1;
}
}
else
{
i=0;
}
}
}
/**********************************************************
*函数:send_byte() *
*功能:发送一个字节 *
* *
**********************************************************/
void send_byte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
/**********************************************************
*函数:assign() *
*功能:根据通信协议处理从上位机接收的数据 *
* *
**********************************************************/
void assign(void)
{
receive_ctl[0]=rece_all[0];
receive_ctl[1]=rece_all[1];
//湿度整数部分
shi_s[0] = rece_all[2];
shi_s[1] = rece_all[3];
shi_s[2] = 0x2e; //小数点
//湿度小数部分
shi_s[3] = rece_all[4];
//温度整数部分
wen_s[0] = rece_all[5];
wen_s[1] = rece_all[6];
wen_s[2] = 0x2e; //小数点
//温度小数部分
wen_s[3] = rece_all[7];
//光
guang_s[0]=rece_all[8]; //千位
guang_s[1]=rece_all[9]; //百位
guang_s[2]=rece_all[10]; //十位
guang_s[3]=rece_all[11]; //个位
//二氧化碳
co2_s[0]=rece_all[12]; //千位
co2_s[1]=rece_all[13]; //百位
co2_s[2]=rece_all[14]; //十位
co2_s[3]=rece_all[15]; //个位
}
串口驱动模块
最新推荐文章于 2024-09-19 15:58:29 发布