关于单片机和上位机的通信协议问题
#include "DCconnect.h" //头文件里没东西,就是函数声明
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
extern u16 cs; //current speed 当前的速度
extern u16 ss; //set speed 设定的速度
//extern int e; //speed error 转速误差
extern u8 cmode; //0为开环,1为闭环
sbit LEDdd=P2^7; //测试LED灯位
//extern u8 r; //电阻值
//extern u16 current; //Digital Filter
char speed[5];
extern u8 iflag;
u8 t;
extern u8 flag;
void updateCurrent(u16 data1)
{
char message[8];
// LEDdd=~LEDdd;
message[0] = '*';
message[1] = '1';
message[2] = data1/1000+48; //Transfer the number to Ascii
message[3] = data1%1000/100+48;
message[4] = data1%100/10+48;
message[5] = data1%10+48;
message[6] = '#';
message[7] = '\0';
for(t=0;t<8;t++)
{
SBUF=message[t]; //向串口1发送数据
}
while(!TI);
TI=0;
}
void updateSpeed(u16 data1)
{
char message[8];
// LEDdd=~LEDdd;
message[0] = '*';
message[1] = '2';
message[2] = data1/1000+48;
message[3] = data1%1000/100+48;
message[4] = data1%100/10+48;
message[5] = data1%10+48;
message[6] = '#';
message[7] = '\0';
for(t=0;t<8;t++)
{
SBUF=message[t]; //向串口1发送数据
while(!TI);
TI=0;
}
}
void remoteDataIncoming() interrupt 4
{
static int i;
static flag=0;
static u16 ls;
static u8 USART_RX_BUF[7];
if(SBUF=='*')
flag=1;
// RI = 0;
if(flag==1)
{
USART_RX_BUF[i]=SBUF;
// RI = 0;
i++;
if(SBUF=='#')
{
flag=0;
if(USART_RX_BUF[0]=='*' && USART_RX_BUF[6]=='#')
{
speed[0] = USART_RX_BUF[2];
speed[1] = USART_RX_BUF[3];
speed[2] = USART_RX_BUF[4];
speed[3] = USART_RX_BUF[5];
cmode=(u8)(USART_RX_BUF[1]!='1');
ls=ss;
ss=(speed[0]-48)*1000+(speed[1]-48)*100+(speed[2]-48)*10+(speed[3]-48)*1;
if(ls != ss)
{
flag=1;
if(cmode)iflag=0;
}
//for(i=0;i<3;i++) ss+=speed[i]*10^i;
}
for(t=0;t<7;t++)
{
USART_RX_BUF[i]=0;
}
}
}
}