#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <reg52.h>
char sdata;
char CommandBuff[16]; //命了缓冲区
char *Command;
unsigned char CommandCome=0; //是否收到命了,收到命令是1
unsigned char InRec=0; // 不为 0 命了接收中
char s[12];
int rahh,ramm,rass,decdd,decmm;
char decs;
// LX200命令格式#:Ms##n##s#
void Uart_Printf()
{
SBUF=0;
printf("串口初始化完毕\n");
}
void init_rs232()
{
ES=0;
TR1=0;
IP=0x10;
TMOD=0x20;
PCON=0x80;//SMOD=1
TH1=250;
TL1=250;
TI=0;
RI=0;
SCON=0x50;//工作方式1,波特率9600,允许接收
IE=0x90;
TR1=1;
Uart_Printf();
}
void main()
{
init_rs232();
Command= &CommandBuff[0];
rahh=22;
ramm=31;
rass=45;
decs='+';
decdd=85;
decmm=10;
while (1)
{
if (CommandCome==1) //下面是命令解析
{
CommandCome=0;
if (strncmp(Command,"GR",2)==0) // 向东移动
{
// RAnow 02:31:45#
printf("%d%d:%d%d:%d%d#",rahh/10,rahh%10,ramm/10,ramm%10,rass/10,rass%10);
}
else if (strncmp(Command,"GD",2)==0) // 向西移动
{
// DECnow +89*10#
printf("%c%d%d:%d%d#",decs,decdd/10,decdd%10,decmm/10,decmm%10);
}
//Q
else if (strncmp(Command,"Q",1)==0)
{
printf("0");
}
//##:Sr 14:50:42#
// 012345678910 CommandBuff
else if (strncmp(Command,"Sr",2)==0)
{
printf("1");
rahh=(CommandBuff[3]-0x30)*10+(CommandBuff[4]-0x30);
ramm=(CommandBuff[6]-0x30)*10+(CommandBuff[7]-0x30);
rass=(CommandBuff[9]-0x30)*10+(CommandBuff[10]-0x30);
}
//Sd +16?30:33#
//:Sd +74:09:20#
// 0123456789012
else if (strncmp(Command,"Sd",2)==0)
{
printf("1");
decs= CommandBuff[3] ;
decdd=(CommandBuff[4]-0x30)*10+(CommandBuff[5]-0x30);
decmm=(CommandBuff[7]-0x30)*10+(CommandBuff[8]-0x30);
}
else if (strncmp(Command,"MS",2)==0)
{
}
// 非能解析命令不执行 否则 无法解析命令将会变成停止命令
}
}
}
void UartInt(void) interrupt 4
{
if (RI==1)
{
ES=0;
sdata=SBUF;
RI=0;
if ((sdata==':')&&(CommandCome==0)&&(InRec==0)) //收到冒号 并且 命令缓冲区为空
{
InRec=1; //命令接收中
}
else if ((InRec>0)&&(sdata!='#')) // 如果命了接收中 并且没有收到 #
{
CommandBuff[InRec-1]=sdata;
InRec=InRec+1;
}
else if ((sdata=='#')&&(InRec>0)) //收到命了结束表示
{
CommandBuff[InRec-1]=0;
InRec=0 ;
CommandCome=1; //收到命了
}
ES=1;
}
}
|