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

📄 sci.c

📁 瑞萨单片机开发软代码.非常实用小巧的平台,很多应用都可以在上面实现.
💻 C
字号:
#include "h8s2215.h"
#include "sci.h"

extern volatile unsigned char EvRcv;
volatile unsigned char rcvdata;
void SCIInit(void)
{
	SCI2.SCR.BIT.TE = 0;
	SCI2.BRR = 12;          
//	SCI2.BRR = 14;
//	SCI2.SSR.BIT.RDRF = 0;
	
	SCI2.SCR.BIT.RIE = 1;   
	SCI2.SCR.BIT.RE = 1;    
	
}

#pragma interrupt (SCI2RX_Int)
void SCI2RX_Int(void)
{

	SCI2.SCR.BIT.RIE = 0;   
	SCI2.SCR.BIT.RE = 0;    
	
	if (SCI2.SSR.BIT.ORER | SCI2.SSR.BIT.PER | SCI2.SSR.BIT.FER)
	{
		rcvdata = SCI2.SSR.BYTE;
		SCI2.SSR.BIT.ORER = 0;	            
		SCI2.SSR.BIT.PER = 0;                  
		SCI2.SSR.BIT.FER = 0;
		SCI_Str("Error Occur: 0x");
		SCI_HexB(rcvdata);
		SCI_Str("\n");
    }
	else if (SCI2.SSR.BIT.RDRF==1)
	{
		//SCI_Str("Recive data:");
	 	rcvdata = SCI2.RDR;
	 	SCI2.SSR.BIT.RDRF = 0;
	 	//SCI_HexB(rcvdata);
		//SCI_Str("\n");
	} 	

	SCI2.SCR.BIT.RIE = 1;   
	SCI2.SCR.BIT.RE = 1;   
	EvRcv=TRUE;
	
}
void SCI_Str(char *s)
{
	while(1)
	{
		if(*s == 0)
			return;
		SCI_Char(*(s++));
	}	
}

void SCI_Char(unsigned char c)
{
	SCI2.TDR = c;
	SCI2.SCR.BIT.TE = 1;
	SCI2.SSR.BIT.TDRE = 0;
	while(SCI2.SSR.BIT.TEND == 0);
//	SCI2.SCR.BIT.TE = 0;
}


void SCI_Hex(unsigned long val)
{
	unsigned char i;
	unsigned char j;
	
	LONGBYTE lb;
	
	lb.Long = val;
	
	for(j=0;j<4;j++)
	{
		i = lb.Byte[j]/16;
		if(i >= 10)
			i += 'A'-10;
		else
			i += '0';
		SCI_Char(i);
	
		i = lb.Byte[j]%16;
		if(i >= 10)
			i += 'A'-10;
		else	
			i += '0';
		SCI_Char(i);
    }
}


void SCI_HexS(unsigned short val)
{
	register unsigned char i, j, k;
	
	i = val/0x100;
	j = val%0x100;
	
	k = i/16;
	if(k >= 10)
		k += 'A'-10;
	else
		k += '0';
	SCI_Char(k);
	
	k = i%16;
	if(k >= 10)
		k += 'A'-10;
	else	
		k += '0';
	SCI_Char(k);


	k = j/16;
	if(k >= 10)
		k += 'A'-10;
	else
		k += '0';
	SCI_Char(k);
	
	k = j%16;
	if(k >= 10)
		k += 'A'-10;
	else	
		k += '0';
	SCI_Char(k);

}



void SCI_HexB(unsigned char val)
{
	register unsigned char k;
	
	k = val/16;
	if(k >= 10)
		k += 'A'-10;
	else
		k += '0';
	SCI_Char(k);
	
	k = val%16;
	if(k >= 10)
		k += 'A'-10;
	else	
		k += '0';
	SCI_Char(k);
}


// SCI0 high speed UART
void SCI0Init(void)
{
	volatile unsigned char delay;

	SCI0.SCR.BYTE = 0x02;	// external clock
	SCI0.SEMR.BYTE = 0x85;	// 115.196Kbps, enable SSE, 16 times transfer rate
	//SCI0.SEMR.BYTE = 0x86;	// 460.784Kbps, enable SSE, 16 times transfer rate
	//SCI0.SEMR.BYTE = 0x8F;	// 720Kbps, enable SSE, 16 times transfer rate   
    
 	for (delay=0;delay>100;delay++);

	SCI0.SCR.BIT.RIE = 1;
	SCI0.SCR.BIT.RE = 1;
}

void SCI0_Str(char *s)
{
	while(1)
	{
		if(*s == 0)
			return;
		SCI0_Char(*(s++));
	}	
}

void SCI0_Char(unsigned char c)
{
	SCI0.TDR = c;
	SCI0.SCR.BIT.TE = 1;
	SCI0.SSR.BIT.TDRE = 0;
	while(SCI0.SSR.BIT.TEND == 0);
}

void SCI0_HexB(unsigned char val)
{
	register unsigned char k;
	
	k = val/16;
	if(k >= 10)
		k += 'A'-10;
	else
		k += '0';
	SCI0_Char(k);
	
	k = val%16;
	if(k >= 10)
		k += 'A'-10;
	else	
		k += '0';
	SCI0_Char(k);
}

                                    
#pragma interrupt (SCI0RX_Int)
void SCI0RX_Int(void)
{
	register unsigned char data;
	
	SCI0_Str("-");
	
	if (SCI0.SSR.BIT.ORER | SCI0.SSR.BIT.PER | SCI0.SSR.BIT.FER)
	{
		data = SCI0.SSR.BYTE;
		SCI0.SSR.BIT.ORER = 0;	            
		SCI0.SSR.BIT.PER = 0;                  
		SCI0.SSR.BIT.FER = 0;
		SCI0_Str("Error Occur 0x");
		SCI0_HexB(data);
		SCI0_Str("\r\n");
    }
	else if (SCI0.SSR.BIT.RDRF==1)
	{
	 	data = SCI0.RDR;
	 	SCI0.SSR.BIT.RDRF = 0;
	 	SCI0_HexB(data);
		SCI0_Str("\r\n");
	} 	
}
	
	

⌨️ 快捷键说明

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