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

📄 sci.h

📁 LF2407的各个模块的测试程序,包含2407里面的所有模块,均已经调试通过,心血所致,希望对大家有所帮助.
💻 H
字号:
void SCI_Init()
{
	*SCICCR = 0x7;
	
	*SCICTL1 = 0x13;
	*SCICTL2 = 0x2;//使能接收中断,禁止发送中断。
	*SCIHBAUD = 0x1;
	*SCILBAUD = 0x37;//9600,计算公式--》BRR = (SYSCLK/(SCI通讯波特率×8))-1,在这里开发板SYSCLK是15M
											//自己作的板子,12M晶振,为9B
											//2倍频的时候是0x137
											//4倍频的时候不稳定
	*SCICTL1 = 0x33;
	
	*SCIPRI = 0x60;

	*PADATDIR = 0x100;	
}

void SCI_Send_Char(char m_char)
{
	*SCITXBUF = m_char;
	while(!(*SCICTL2 & 0x80));//等待发送完成
}

void SCI_Send_String(char * string)
{
	int l = strlen(string);
	int i = 0;
	
	for(i=0;i<l;i++)
	{
		*SCITXBUF = string[i];
		while(!(*SCICTL2 & 0x80));//等待发送完成
	}
	*SCITXBUF = '\n';//换行
	while(!(*SCICTL2 & 0x80));//等待发送完成
}

void SCI_Send_DATA(UINT data)
{
	char i,temp = 0;
	
	for(i=12;i>=0;i = i-4)
	{
		temp = (data>>i)&0x000F;
		*SCITXBUF = (temp<10 ? temp+48 : temp+55);
		
		while(!(*SCICTL2 & 0x80));//等待发送完成 
	}	
}

void SCI_Send_SPDU(UINT SPDU_num)
{
	UINT i = 0;
	*SCITXBUF = SPDU[SPDU_num].ID>>8;
	while(!(*SCICTL2 & 0x80));//等待发送完成 
	*SCITXBUF = SPDU[SPDU_num].ID;
	while(!(*SCICTL2 & 0x80));//等待发送完成 
	
	for(i=0;i<8;i++)
	{
		SPDU[SPDU_num].Data[i] = (UINT)((SPDU[SPDU_num].Ver_Data[i]-SPDU[SPDU_num].Data_Def[i].Offset) / SPDU[SPDU_num].Data_Def[i].Precis);
	}
	for(i=0;i<8;i++)
	{
		//先发高字节
		*SCITXBUF = SPDU[SPDU_num].Data[i]>>8;
		while(!(*SCICTL2 & 0x80));//等待发送完成 
		*SCITXBUF = SPDU[SPDU_num].Data[i];
		while(!(*SCICTL2 & 0x80));//等待发送完成 
	}
}

void Load_SPDU()
{	
	SPDU[0].Ver_Data[0] = (float)AD_ACC/(float)0x03FF;
	SPDU[0].Ver_Data[1] = (float)AD_BRK/(float)0x03FF;
	SPDU[0].Ver_Data[2] = (float)ADIN_3/(float)0x03FF;//应该采集DA输出的电压信号
	SPDU[0].Ver_Data[3] = 0;
	SPDU[0].Ver_Data[4] = 0;
	SPDU[0].Ver_Data[5] = 0;
	SPDU[0].Ver_Data[6] = 0;
	SPDU[0].Ver_Data[7] = 0;
	
	SPDU[1].Ver_Data[0] = ((ADIN_5 > ADIN_6)?(ADIN_5-ADIN_6):(ADIN_6-ADIN_5));
	SPDU[1].Ver_Data[1] = QEP_count;
	SPDU[1].Ver_Data[2] = 0;
	SPDU[1].Ver_Data[3] = 0;
	SPDU[1].Ver_Data[4] = 0;
	SPDU[1].Ver_Data[5] = 0;
	SPDU[1].Ver_Data[6] = 0;
	SPDU[1].Ver_Data[7] = 0;	
}

void SCI_Recv()
{
	char RCV_char;	
	static int i = 0;
	
	RCV_char = *SCIRXBUF;	
	if(RCV_char == 0x0d)//回车符
		SCI_Send_Char('\n');
	else
		SCI_Send_Char(RCV_char);
	
	*IFR = 0x0010;
	asm(" clrc INTM");//开总中断
	return;
}

void interrupt SCI_INT()
{
	switch( *PVIR )
	{
		case 6:	SCI_Recv();
	//	case 7: SCI_Send_String("I am LvWei!");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -