📄 uart0.c
字号:
#include<c8051f340.h>
#include<intrins.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<absacc.h>
unsigned char xdata rbuf[500]; //接收缓冲
unsigned char xdata tbuf[500]; //发送缓冲
unsigned char xdata datatra[70]; //**********数据转换区
unsigned char xdata datatime[6]; //取历史数据的时间
unsigned char xdata id[8];
char xdata coefficient[8];
float xdata tempcoe;
float xdata tempcoe2;
float xdata humicoe;
float xdata prescoe;
float xdata COEFFMID;
char xdata windcoe;
extern xdata unsigned char VOLTAGE[2];
unsigned int idata rnum=0; //接收缓冲区数据接收位
unsigned int idata tnum=0; //发送缓冲区数据发送位
unsigned int idata readnum=0; //接收缓冲区数据读出位
unsigned int idata writenum=0; //发送缓冲区数据写入位
unsigned char uporload; //即时数还是历史数据
unsigned long length; //读取历史数据长度
unsigned char ordernum=0;
unsigned int idata readnum1=0;
unsigned int idata readnum2=0;
unsigned char xdata minutelength;
unsigned int xdata errortime=0xffff;
xdata unsigned char TIMEDEC[6];//读出来的十进制时间
xdata unsigned char timede[6];//临时存放时间
xdata unsigned char TIMEBIN[4];//存入FLASH的时间数据
bit rw; //是否需要发数据
bit xorz; //小数还是整数标志位
bit uu=0;
bit fengxiang;
bit timefrocomputer01=0;
bit historydatadisplay=0;
xdata unsigned char iiii=0;
extern xdata unsigned char PRESSUREBIN[2];//存入FLASH的气压数据
extern xdata unsigned char timefromcomputer[7];
void ckta (void);
void uptemp();
void temp_tra();
void uphumi();
void humi_tra();
void uppres();
void pres_tra();
void upwind();
void wind_tra();
void data_tra(void);
void b1toa(unsigned char xorz,length,left,right,datanum);
void b2toa(unsigned char left,right,datanum);
void send (void);
void buffer(void);
void global(void);
void rdid(void);
void wdid(void);
void IDjudge(void);
void wenshi(void);
void rsts(void);
void baud(void);
void load(void);
void datatimepro(void);
void inthor(void);
void onehor(void);
void userld(void);
void allday(void);
void visibility(void);
void cktm(void);
void succeedre();
void lostre();
void ordertimepro();
void coetra();
void para();
void flowerror();
void eepromerror();
void clockerror();
void temphumierror();
void preserror();
void flasherror();
void get_history_dataa();
extern void EEPROM_ByteRead(unsigned char addr,unsigned char addr1,unsigned char *array);
extern void EEPROM_ByteWrite(unsigned char addr,unsigned char addr1,unsigned char *array);
extern void AT45DB642D_MainMemoryPageRead(unsigned long PBA,unsigned char *pHeader,unsigned int len);//flash读PAGE
extern void timebintodec(unsigned char *timebin);//FLASH中的二进制表示时间转化为十进制时间
extern void S3530Aini();
/*********************************************
*时间校准请求子程序*
**********************************************/
void ckta()
{
int i;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]='0'; //0
writenum++;
tbuf[writenum]='T'; //T
writenum++;
tbuf[writenum]='A'; //A
writenum++;
tbuf[writenum]='C'; //C
writenum++;
tbuf[writenum]='K'; //K
writenum++;
tbuf[writenum]='T'; //T
writenum++;
tbuf[writenum]='A'; //A
writenum++;
tbuf[writenum]='\r'; //CH(13)
writenum++;
tbuf[writenum]='\n'; //CH(10)
writenum++;
writenum=0;
send(); //数据发送
}
/******************************************************************************
*温度上传子程序*
*******************************************************************************/
void uptemp()
{
int i;
uporload=0;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]=0x30; //0
writenum++;
tbuf[writenum]='U'; //U
writenum++;
tbuf[writenum]='D'; //P
writenum++;
tbuf[writenum]='T'; //D
writenum++;
tbuf[writenum]='M'; //A
writenum++;
tbuf[writenum]='P'; //T
writenum++;
tbuf[writenum]='R'; //A
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]='2'; //
writenum++;
tbuf[writenum]='0'; //
writenum++;
temp_tra(); //调用数据转换子程序
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send(); //数据发送
}
/******************************************************************************
*温度转换子程序*
*******************************************************************************/
void temp_tra()
{
b1toa(1,6,0,2,0); //年
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,4,2,6,0); //月
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,5,0,1,1); //日
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,5,4,4,1); //时
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,2,6,2); //分
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,0,0,3); //秒
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,7,4,4,7+57*uporload); //温度整数部分
b1toa(0,4,0,0,8+57*uporload); //温度小数部分
tbuf[writenum]='0'; //0
writenum++;
}
/******************************************************************************
*湿度上传子程序*
*******************************************************************************/
void uphumi()
{
int i;
uporload=0;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]=0x30; //0
writenum++;
tbuf[writenum]='U'; //U
writenum++;
tbuf[writenum]='D'; //P
writenum++;
tbuf[writenum]='H'; //D
writenum++;
tbuf[writenum]='U'; //A
writenum++;
tbuf[writenum]='M'; //T
writenum++;
tbuf[writenum]='I'; //A
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]='2'; //
writenum++;
tbuf[writenum]='0'; //
writenum++;
humi_tra(); //调用数据转换子程序
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send(); //数据发送
}
/******************************************************************************
*湿度转换子程序*
*******************************************************************************/
void humi_tra()
{
b1toa(1,6,0,2,0); //年
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,4,2,6,0); //月
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,5,0,1,1); //日
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,5,4,4,1); //时
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,2,6,2); //分
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,0,0,3); //秒
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,7,0,0,9+57*uporload); //湿度
}
/******************************************************************************
*气压上传子程序*
*******************************************************************************/
void uppres()
{
int i;
uporload=0;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]=0x30; //0
writenum++;
tbuf[writenum]='U'; //U
writenum++;
tbuf[writenum]='D'; //P
writenum++;
tbuf[writenum]='P'; //D
writenum++;
tbuf[writenum]='R'; //A
writenum++;
tbuf[writenum]='E'; //T
writenum++;
tbuf[writenum]='S'; //A
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]='2'; //
writenum++;
tbuf[writenum]='0'; //
writenum++;
pres_tra(); //调用数据转换子程序
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send(); //数据发送
}
/******************************************************************************
*气压转换子程序*
*******************************************************************************/
void pres_tra()
{
b1toa(1,6,0,2,0); //年
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,4,2,6,0); //月
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,5,0,1,1); //日
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,5,4,4,1); //时
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,2,6,2); //分
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,0,0,3); //秒
tbuf[writenum]=0x20; //
writenum++;
b2toa(4,4,10+57*uporload); //气压整数
b1toa(0,4,0,0,11+57*uporload); //气压小数
tbuf[writenum]=0x30; //
writenum++;
}
/******************************************************************************
*风速上传子程序*
*******************************************************************************/
void upwind()
{
int i;
uporload=0;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]=0x30; //0
writenum++;
tbuf[writenum]='U'; //U
writenum++;
tbuf[writenum]='D'; //P
writenum++;
tbuf[writenum]='W'; //D
writenum++;
tbuf[writenum]='I'; //A
writenum++;
tbuf[writenum]='N'; //T
writenum++;
tbuf[writenum]='D'; //A
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]='2'; //
writenum++;
tbuf[writenum]='0'; //
writenum++;
wind_tra(); //调用数据转换子程序
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]=VOLTAGE[0]/10+0x30;
writenum++;
tbuf[writenum]='.'; //.
writenum++;
tbuf[writenum]=VOLTAGE[0]%10+0x30;
writenum++;
tbuf[writenum]=VOLTAGE[1]/10+0x30;
writenum++;
tbuf[writenum]=VOLTAGE[1]%10+0x30;
writenum++;
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send(); //数据发送
}
/******************************************************************************
*风速转换子程序*
*******************************************************************************/
void wind_tra()
{
fengxiang=1;
b1toa(1,6,0,2,0); //年
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,4,2,6,0); //月
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,5,0,1,1); //日
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,5,4,4,1); //时
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,2,6,2); //分
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,0,0,3); //秒
tbuf[writenum]=0x20; //
writenum++;
b2toa(6,2,4); //风向
tbuf[writenum]=0x30; //
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]=0x30; //
writenum++;
b1toa(1,6,4,4,5); //风速整数
// tbuf[writenum]='.'; //.
// writenum++;
b1toa(0,4,0,0,6); //风速小数
fengxiang=0;
}
/******************************************************************************
*数据转换子程序*
*******************************************************************************/
void data_tra()
{
// unsigned char zf;
unsigned char i;
b1toa(1,6,0,2,0); //年
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,4,2,6,0); //月
tbuf[writenum]='-'; //-
writenum++;
b1toa(1,5,0,1,1); //日
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,5,4,4,1); //时
tbuf[writenum]=':'; //:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -