发表于:2005/5/22 9:07:00
#0楼
近来我在搞一个用485控制变频器的项目,我使用的变频器是VFD-A,使用c51对PHILIP的p89v669进行编程,每次通过变频器的停止按键停止后都可以通过键盘成功启动,但启动后再按别的键控制变频器,变频器却很难响应,只是偶尔响应一下,下面的程序是向变频器发送命令的子函数,没次按键只是调用一下它,大家帮我看看有没有什么问题,谢谢你们拉!
void sendStatus(uchar status,uint speed)
{
uchar s[4];
uchar i=0;
ES0=0;
P1_6=1;
CHG_BRGR(0x09,0xb4);
sendByte('C');
sendByte(0x03);
sendByte(0x01);
sendByte('0');
sendByte('0');
sendByte('X');
sendByte(status);
s[0]=speed/1000; //高
s[1]=(speed%1000)/100;
s[2]=(speed%100)/10;
s[3]=speed%10; //低
sendByte((s[0]+0x30));
sendByte((s[1]+0x30));
sendByte((s[2]+0x30));
sendByte((s[3]+0x30)); //
P1_6=0;
for(i=0;i<11;i++)
{
while(RI_0==0);
r[i]=SBUF;
RI_0=0;
}
}
其中,P1_6是控制485的收发位,CHG_BRGR(0x09,0xb4)是初始化通信端口的,单片机向变频器发送11字元的指令,变频器在回送11字元,每次按一次键就调用一次函数,高手帮我看看问题出在哪里啊?
void sendStatus(uchar status,uint speed)
{
uchar s[4];
uchar i=0;
ES0=0;
P1_6=1;
CHG_BRGR(0x09,0xb4);
sendByte('C');
sendByte(0x03);
sendByte(0x01);
sendByte('0');
sendByte('0');
sendByte('X');
sendByte(status);
s[0]=speed/1000; //高
s[1]=(speed%1000)/100;
s[2]=(speed%100)/10;
s[3]=speed%10; //低
sendByte((s[0]+0x30));
sendByte((s[1]+0x30));
sendByte((s[2]+0x30));
sendByte((s[3]+0x30)); //
P1_6=0;
for(i=0;i<11;i++)
{
while(RI_0==0);
r[i]=SBUF;
RI_0=0;
}
}
其中,P1_6是控制485的收发位,CHG_BRGR(0x09,0xb4)是初始化通信端口的,单片机向变频器发送11字元的指令,变频器在回送11字元,每次按一次键就调用一次函数,高手帮我看看问题出在哪里啊?