📄 sciint.c
字号:
#include "spwm.h"
#include "sci.h"
#include "2407.h"
#include "System.h"
unsigned int SCI_Rev_Data[MaxDataLength]; //包括命令字和信息,及校验和
int RevState=0;
int RevCount=0;
int RevDataLength=0; //信息祯长度
int ReFreshPrameter=0;
interrupt void sci_int(void) //串口接受中断程序,INT5
{
//*IFR=0x0010;
// asm(" CLRC INTM");
// *IFR=0x0010;
switch(*PIVR)
{
case 6: SCI_Rev();
break;
default:
break;
}
// *IFR=0xFF;
asm(" CLRC INTM");
}
void SCI_Rev()
{
int Revnum;
Revnum=*SCIRXBUF;
switch(RevState)
{
case 0:
if(Revnum==0x03) //起始位
RevState=1; //判断命令字状态
break;
case 1:
if(Revnum==0x01) //判断命令字
{
SCI_Rev_Data[0]=Revnum;
RevState=2; //判断命令字状态,处于接受参数设置信息状态
RevDataLength=SetPraLength ; //设置信息祯长度
}
break;
case 2:
SCI_Rev_Data[RevCount+1]=Revnum;
RevCount++ ;
if(RevCount==1+RevDataLength)
{
RevState=3; //信息祯接受完毕
RevCount=0;
}
break;
case 3:
if(Revnum==0x05)
{
if(BCC_Check(SCI_Rev_Data,RevDataLength+2)==0) //校验正确
{
sci_dataProssing();
*SCITXBUF=0x80; //回复上位机
}
else //校验错误
*SCITXBUF=0x8f;
RevState=0; //接受完毕信息处理
}
break;
default:
break;
}
return;
}
int BCC_Check(int *RevArray,int Length) //和校验
{
int i,sum=0;
for(i=0;i<Length-1;i++)
sum|=RevArray[i]; //求校验和
if(sum==RevArray[Length-1])
return 0;
else
return -1;
}
void sci_dataProssing(void) //接受信息处理
{
int i;
spwm_moudle.ControlMode=SCI_Rev_Data[1] ; //控制模式
OpenAmple[0]=(SCI_Rev_Data[2]<<8)+SCI_Rev_Data[3]; //3次
OpenAngle[0]=(SCI_Rev_Data[4]<<8)+SCI_Rev_Data[5];
OpenAmple[1]=(SCI_Rev_Data[6]<<8)+SCI_Rev_Data[7]; //5次
OpenAngle[1]=(SCI_Rev_Data[8]<<8)+SCI_Rev_Data[9];
OpenAmple[2]=(SCI_Rev_Data[10]<<8)+SCI_Rev_Data[11];
OpenAngle[2]=(SCI_Rev_Data[12]<<8)+SCI_Rev_Data[13];
spwm_moudle.Kp=(SCI_Rev_Data[14]<<8)+SCI_Rev_Data[15];
spwm_moudle.Ki=(SCI_Rev_Data[16]<<8)+SCI_Rev_Data[17];
spwm_moudle.Kd=(SCI_Rev_Data[18]<<8)+SCI_Rev_Data[19];
spwm_moudle.VoutToMaudleK=(SCI_Rev_Data[20]<<8)+SCI_Rev_Data[21];
if(spwm_moudle.ControlMode==0) //开环模式
{
for(i=0;i<3;i++)
{
spwm_moudle.Ample[i]=OpenAmple[i];
spwm_moudle.Angle[i]=OpenAngle[i];
}
ReCacuPWM=1; //再次计算PWM脉宽信号;
}
ReFreshPrameter=1;
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -