📄 uart0.c
字号:
writenum++;
b1toa(1,6,2,6,2); //分
tbuf[writenum]=':'; //:
writenum++;
b1toa(1,6,0,0,3); //秒
tbuf[writenum]=0x20; //
writenum++;
fengxiang=1;
b2toa(6,2,4); //风向
tbuf[writenum]=0x30; //
writenum++;
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]=0x30; //
writenum++;
b1toa(1,6,4,4,5); //风速整数
b1toa(0,4,0,0,6); //风速小数
tbuf[writenum]=0x20; //
writenum++;
if(uporload==1)
{
for(i=0;i<19;i++)
{
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); //风速小数
tbuf[writenum]=0x20; //
writenum++;
}
}
fengxiang=0;
b1toa(1,7,4,4,7+57*uporload); //温度整数部分
// tbuf[writenum]='.'; //.
// writenum++;
b1toa(0,4,0,0,8+57*uporload); //温度小数部分
tbuf[writenum]='0'; //0
writenum++;
tbuf[writenum]=0x20; //
writenum++;
b1toa(1,7,0,0,9+57*uporload); //湿度
tbuf[writenum]=0x20; //
writenum++;
b2toa(4,4,10+57*uporload); //气压整数
// tbuf[writenum]='.'; //.
// writenum++;
b1toa(0,4,0,0,11+57*uporload); //气压小数
tbuf[writenum]=0x30; //
writenum++;
}
/******************************************************************************
*单字节二进制转ASC码*
*******************************************************************************/
void b1toa(unsigned char xorz,length,left,right,datanum)
{
unsigned char databyte1,databyte2,databyte3=0xff;
unsigned char ge,shi,bai;
databyte3>>=(8-length);
if(left==0)
{
databyte1=datatra[datanum];
databyte1>>=right;
databyte1 &= databyte3;
}
else
{
databyte1=datatra[datanum];
databyte1<<=left;
databyte2=datatra[++datanum];
databyte2>>=right;
databyte1 |= databyte2;
databyte1 &= databyte3;
}
ge=databyte1%10;
ge += 0x30;
databyte1/=10;
shi=databyte1%10;
shi += 0x30;
databyte1/=10;
bai=databyte1%10;
bai += 0x30;
if(bai!=0x30)
{
tbuf[writenum]=bai; //
writenum++;
}
if(xorz==1)
{
tbuf[writenum]=shi; //
writenum++;
tbuf[writenum]=ge; //
writenum++;
}
else
{
tbuf[writenum]=ge; //
writenum++;
}
}
/******************************************************************************
*双字节二进制转ASC码*
*******************************************************************************/
void b2toa(unsigned char left,right,datanum)
{
unsigned int databyte1,databyte2;
unsigned char ge,shi,bai,qian;
databyte1=datatra[datanum];
databyte2=datatra[++datanum];
databyte1<<=left;
databyte2>>=right;
databyte1+=databyte2;
ge=databyte1%10;
ge+=0x30;
databyte1/=10;
shi=databyte1%10;
shi+=0x30;
databyte1/=10;
bai=databyte1%10;
bai+=0x30;
databyte1/=10;
qian=databyte1%10;
qian+=0x30;
if(fengxiang==0)
{
tbuf[writenum]=qian; //
writenum++;
}
// tbuf[writenum]=qian; //
// writenum++;
tbuf[writenum]=bai; //
writenum++;
tbuf[writenum]=shi; //
writenum++;
tbuf[writenum]=ge; //
writenum++;
}
/******************************************************************************
*数据发送子程序*
*******************************************************************************/
void send()
{
// ES0=0;
while (tbuf[tnum]!=0x0a)
{
SBUF0=tbuf[tnum];
tnum++;
while(TI0==0) {}
TI0=0;
}
SBUF0=tbuf[tnum];
tnum++;
while(TI0==0) {}
TI0=0;
tnum=0;
// ES0=1;
}
/******************************************************************************
*串口中断子程序*
*******************************************************************************/
void UART0_Interrupt (void) interrupt 4
{
EA=0;
while(RI0==1)
{
rbuf[rnum]=SBUF0;
if(rbuf[rnum]==0x0a)
{
uu=1;
ordernum++;
}
RI0=0;
rnum++;
}
EA=1;
}
/******************************************************************************
*接收缓冲区数据处理子程序(ID部分)*
*******************************************************************************/
void buffer()
{
ES0=0;
EX0=0;
switch (rbuf[readnum])
{
case 'G':
// readnum=readnum99(10);
readnum+=11;
global();
break;
case 'W':
// readnum=readnum99(10);
readnum++;
IDjudge();
break;
case 'V':
// readnum=readnum99(10);
readnum+=11;
visibility();
break;
default:
readnum=rnum;
lostre();
break;
}
ES0=1;
EX0=1;
}
/******************************************************************************
*接收缓冲区数据处理子程序(全局部分)*
*******************************************************************************/
void global()
{
switch (rbuf[readnum])
{
case 'R':
rdid();
break;
case 'W':
wdid();
break;
default:
readnum=rnum;
lostre();
break;
}
}
/******************************************************************************
*读ID子程序(全局部分)*
*******************************************************************************/
void rdid()
{
int i;
// readnum=readnum99(6);
readnum+=6;
EEPROM_ByteRead(0x00,0x00,id);
for(;readnum1<readnum-2;readnum1++)
{
tbuf[writenum]=rbuf[readnum1];
writenum++;
}
tbuf[writenum]=0x20; //
writenum++;
for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
tbuf[writenum]=0x20; //
writenum++;
tbuf[writenum]='O'; //O
writenum++;
tbuf[writenum]='K'; //K
writenum++;
tbuf[writenum]=0x20; //
writenum++;
ordertimepro();
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send();
}
/******************************************************************************
*写ID子程序(全局部分)*
*******************************************************************************/
void wdid()
{
int i;
readnum+=5;
for(i=0;i<7;i++)
{
id[i]=rbuf[readnum];
readnum++;
}
readnum+=2;
EEPROM_ByteWrite(0x00,0x00,id);
succeedre();
}
/******************************************************************************
*ID判断子程序(全局部分)*
*******************************************************************************/
void IDjudge()
{
int i;
bit IDwrong=0;
for(i=1;i<7;i++)
{
if(rbuf[readnum]==id[i])
{
IDwrong=0;
}
else
{
IDwrong=1;
break;
}
readnum++;
}
if(IDwrong==0)
{
readnum+=4;
wenshi();
}
else
{
tbuf[writenum]='W'; //W
writenum++;
tbuf[writenum]='R'; //R
writenum++;
tbuf[writenum]='O'; //O
writenum++;
tbuf[writenum]='N'; //N
writenum++;
tbuf[writenum]='G'; //G
writenum++;
tbuf[writenum]='I'; //I
writenum++;
tbuf[writenum]='D'; //D
writenum++;
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send();
}
}
/******************************************************************************
*气象部分数据处理子程序(全局部分)*
*******************************************************************************/
void wenshi ()
{
switch (rbuf[readnum])
{
case 'R':
rsts();
break;
case 'C':
cktm();
break;
case 'L':
load();
break;
case 'B':
baud();
break;
case 'P':
para();
break;
default:
readnum=rnum;
lostre();
break;
}
}
/******************************************************************************
*系统复位子程序(全局部分)*
*******************************************************************************/
void rsts()
{
// int i;
/* for(i=0;i<7;i++)
{
tbuf[writenum]=id[i];
writenum++;
}
*/
readnum+=6;
succeedre();
RSTSRC=0x10;
}
/******************************************************************************
*时间校准子程序(全局部分)*
*******************************************************************************/
void cktm(){
// readnum=readnum99(6);
readnum+=7;
timefromcomputer[0]=rbuf[readnum]-0x30;
timefromcomputer[0]*=10;
readnum++;
timefromcomputer[0]+=rbuf[readnum]-0x30;
readnum+=2;
timefromcomputer[1]=rbuf[readnum]-0x30;
timefromcomputer[1]*=10;
readnum++;
timefromcomputer[1]+=rbuf[readnum]-0x30;
readnum+=2;
timefromcomputer[2]=rbuf[readnum]-0x30;
timefromcomputer[2]*=10;
readnum++;
timefromcomputer[2]+=rbuf[readnum]-0x30;
readnum+=2;
timefromcomputer[3]=rbuf[readnum]-0x30;
timefromcomputer[3]*=10;
readnum++;
timefromcomputer[3]+=rbuf[readnum]-0x30;
readnum+=2;
timefromcomputer[4]=rbuf[readnum]-0x30;
timefromcomputer[4]*=10;
readnum++;
timefromcomputer[4]+=rbuf[readnum]-0x30;
readnum+=2;
timefromcomputer[5]=rbuf[readnum]-0x30;
timefromcomputer[5]*=10;
readnum++;
timefromcomputer[5]+=rbuf[readnum]-0x30;
// readnum=readnum99(3);
readnum+=3;
S3530Aini();
for(;readnum1<readnum-2;readnum1++)
{
tbuf[writenum]=rbuf[readnum1];
writenum++;
}
tbuf[writenum]=0x20; //0
writenum++;
ordertimepro();
tbuf[writenum]=0x20; //0
writenum++;
tbuf[writenum]='O';
writenum++;
tbuf[writenum]='K';
writenum++;
tbuf[writenum]=0x0D; //回车
writenum++;
tbuf[writenum]=0x0A; //换行
writenum++;
writenum=0;
send();
timefrocomputer01=1;
}
/******************************************************************************
*波特率设置子程序(全局部分)*
*******************************************************************************/
void baud()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -