|
在此先谢谢大家的帮忙!目前问题已经有点眉目了!
有以下几个问题请教大家:
1:如果发送端:指令+(参数)+0x0D,程序中还需要怎么修改?因为最终输出要的是ASIIC码。
2:输出一组"MA20000",“F9608000,"M2880000"”字符串后将程序关闭。有没有好的操作办法?
3: 目前的输出是M2880000 MA20000 FD96000 间隔1200毫秒。理想输出MA200000 F9608000 M28800000x0D"
//要通过RS232通讯口控制驱动,指令格式如下
指令结构
驱动器采用ASCII 码指令与上位机通讯。
ASCII码指令的构成:
发送端:指令+(参数)+0x0D
回应端:#+数据+0x0D+0x0A
指令:仅使用字母的字符串;
参数:指令后为ASCII码数字,有些指令后面无参数;
结束符:发送端以0x0D(回车)结束,回应端以0x0D,0x0A(换行)结束;
是不是可以在uchar a[7]={'M','A','2','0','0','0','0'};
中这样设置
如下:
uchar a[11]={'M','A','2','0','0','0','0'','0','x','0','D',};
指令是MA,参数是20000,0x0D是结束符号。
//程序要的结果是输出"MA20000"字“FD96000,"MD2880000x0D"”到串口。
//下面程序已经编译通过,在实验板上也通过了。
#include
#define uint unsigned int
#define uchar unsigned char
uchar a[7]={'M','A','2','0','0','0','0'};
uchar b[8]={'F','D','9','6','0','0','0','0'};
uchar c[12]={'M','D','2','8','8','0','0','0','0','x','0','D'};
void delay(uint i) //延迟nMS函数
{
uint k;
while(i--)
for(k=0;k <1200;k++){;}
}
void uini() //串口初始化
{
TMOD=0x20;
TH1=0xfd;TL1=0xfd;
TR1=1;
SCON=0x50;
}
void main()
{
uini();
while(1)
{
uint i;
for(i=0;i <7;i++) //发送第一个字符串
{
SBUF=a;
while(!TI);
TI=0;
}
delay(1200); //延迟1200ms
for(i=0;i <8;i++) //发送第二个字符串
{
SBUF=b;
while(!TI);
TI=0;
}
delay(1200); //延迟1200ms
for(i=0;i <12;i++) //发送第三个字符串
{
SBUF=c;
while(!TI);
TI=0;
}
delay(1200); //延迟1200ms
}
|
|