📄 sci.c
字号:
/* Include Files */
#include <MC68HC908GZ16.h> /* include peripheral declarations */
#include "Sci.h"
#include "Type.h"
#include "MSCAN08.h"
#include "MCU.h"
#include "MotorCmd.h"
#pragma MESSAGE DISABLE C2705 /*Disable warning C2705 "possible loss of data"*/
/* Local Variables */
UINT8 SciTxData[20];
UINT8 SciTxLenth;
/*****************************************************************************
* SCIInit:SCI模块初始化
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
void SCIInit(void){//发送中断在后续程序中将被允许
SCC1=0X40;//允许sci模块
SCC2=0X08;//使能发送
SCC3=0x00;
//SCBR=0X30;//BPD=13,BD=1,BAUD=8000000/64/13/1=9615
SCBR=0X01;//BPD=1,BD=1,BAUD=8000000/64/1/2/(3+0.25)=19230
SCPSC=0X48;//PD=3,PDFA=0.25
}
/*****************************************************************************
* PutChar_SCI:使用SCI发送一个字节
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
void PutChar_SCI(UINT8 ch){
while(SCS1_SCTE==0);
SCDR=ch;
}
/*****************************************************************************
* SendCmd:对电机命令进行打包,准备向电机发送命令,
* Input: cmd:命令 value:值,范围 0 to 4294967295
* Output: None
* Parameters: None
*
****************************************************************************/
void SendCmd(UINT8 Cmd,UINT32 Value){
UINT8 CmdLenth,i=0,j=0,ValueTemp[6];
switch(Cmd){
case LA_FORWARD: SciTxData[0]='L';SciTxData[1]='A';CmdLenth=2; break;
case LA_BACK: SciTxData[0]='L';SciTxData[1]='A';SciTxData[2]='-';CmdLenth=3; break;
}
if(Value==0){
SciTxData[CmdLenth+1]='0';
SciTxData[CmdLenth+2]=13;
SciTxData[CmdLenth+3]=10;
SciTxData[CmdLenth+4]='M';
SciTxData[CmdLenth+5]=13;
SciTxData[CmdLenth+6]=10;
SciTxLenth=CmdLenth+6;
}
else{
ValueTemp[0]=(char)(Value/100000);
ValueTemp[1]=(char)((Value%100000)/10000);
ValueTemp[2]=(char)((Value%10000)/1000);
ValueTemp[3]=(char)((Value%1000)/100);
ValueTemp[4]=(char)((Value%100)/10);
ValueTemp[5]=(char)(Value%10);
for(j=0;j<6;j++){// find the head
if(ValueTemp[j]>0) break;
}
for(;j<6;j++,i++){
switch(ValueTemp[j]){
case 0 : ValueTemp[j]=48; break;
case 1 : ValueTemp[j]=49; break;
case 2 : ValueTemp[j]=50; break;
case 3 : ValueTemp[j]=51; break;
case 4 : ValueTemp[j]=52; break;
case 5 : ValueTemp[j]=53; break;
case 6 : ValueTemp[j]=54; break;
case 7 : ValueTemp[j]=55; break;
case 8 : ValueTemp[j]=56; break;
case 9 : ValueTemp[j]=57; break;
}
SciTxData[CmdLenth+i]= ValueTemp[j];
}
SciTxData[CmdLenth+i]=13;
SciTxData[CmdLenth+i+1]=10;
SciTxData[CmdLenth+i+2]='M';
SciTxData[CmdLenth+i+3]=13;
SciTxData[CmdLenth+i+4]=10;
SciTxLenth=CmdLenth+i+5;
}
SciTxEnable;
}
/*****************************************************************************
* SciTx_ISR:中断服务程序,向电机发送命令
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
interrupt 14 void SciTx_ISR(void){
static UINT8 TxDataNum=0;
asm SEI;
PTA_PTA3=!PTA_PTA3;
switch (++TxDataNum){
case 1:PutChar_SCI(SciTxData[0]); break;
case 2:PutChar_SCI(SciTxData[1]); break;
case 3:PutChar_SCI(SciTxData[2]); break;
case 4:PutChar_SCI(SciTxData[3]); break;
case 5:PutChar_SCI(SciTxData[4]); break;
case 6:PutChar_SCI(SciTxData[5]); break;
case 7:PutChar_SCI(SciTxData[6]); break;
case 8:PutChar_SCI(SciTxData[7]); break;
case 9:PutChar_SCI(SciTxData[8]); break;
case 10:PutChar_SCI(SciTxData[9]); break;
case 11:PutChar_SCI(SciTxData[10]); break;
case 12:PutChar_SCI(SciTxData[11]); break;
case 13:PutChar_SCI(SciTxData[12]); break;
case 14:PutChar_SCI(SciTxData[13]); break;
case 15:PutChar_SCI(SciTxData[14]); break;
case 16:PutChar_SCI(SciTxData[15]); break;
case 17:PutChar_SCI(SciTxData[16]); break;
case 18:PutChar_SCI(SciTxData[17]); break;
case 19:PutChar_SCI(SciTxData[18]); break;
case 20:PutChar_SCI(SciTxData[19]); break;
/*case 1:PutChar_SCI(MessageID_Real>>24); break;
case 2:PutChar_SCI(MessageID_Real>>16); break;
case 3:PutChar_SCI(MessageID_Real>>8); break;
case 4:PutChar_SCI(MessageID_Real); break;
case 5:PutChar_SCI(CmdCarSpeed); break;
case 6:PutChar_SCI(StateCarSpeed); break;
// case 7:PutChar_SCI(CAN_RX_Data[2]); break; */
default:SciTxDisable;break;// SCC2_SCTIE=0;
}
if (TxDataNum==SciTxLenth) SciTxDisable;
asm CLI;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -