⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci.c

📁 飞思卡尔08单片机程序
💻 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 + -