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

📄 sci_test.c

📁 SH3
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :scinew.c                                                */
/*  DATE        :Wed, Apr 20, 2005                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :SH7709S                                               */
/*                                                                     */
/*  This file is for sending the received data.                        */
/*  The sending data can be got and displaied by super terminator.     */
/***********************************************************************/
              
#include 	"7709s.h"

void SCI0_init();
void put_char ( char P );
char get_char ();

#ifdef __cplusplus
//#include <ios>					// Remove the comment when you use ios                  
//int ios_base::Init::init_cnt;		// Remove the comment when you use ios
#endif
#ifdef __cplusplus
extern "C" {
#endif
void abort(void);
#ifdef __cplusplus
}
#endif

#define LED_DATA (*(volatile unsigned short *)0x00800000) 

int i,j;
unsigned short temp;

void main(void)
{
	temp=0x55;
	SCI0_init();
	LED_DATA=temp;				//提示初始化成功
	for(;;) put_char(get_char());
}

void abort(void)
{
	
}

void SCI0_init()
{  
	int i;
	SCI.SCSCR.BYTE = 0x00;				//禁止发送中断、禁止接收中断、发送禁止、接收禁止、多处理器中断禁止、发送结束中断禁止、异步内部时钟SCK引脚输入状态
	SCI.SCSMR.BYTE = 0x00;				//异步、8数据位、无奇偶校验、1位停止位、非多处理器模式、模块时钟不分频
	SCI.SCBRR = 0x19;					//模块时钟32MHz,设置波特率38400bit/s
	for ( i = 0 ; i < 2000 ; i++);		//延时使波特率生效
	SCI.SCSCR.BYTE = 0x30;				//发送接收使能 
}

// Send a character by SCI0
void put_char ( char P )
{
	//while(SCI.SCSSR.BIT.TEND==0);		//等待上次发送结束
	while (SCI.SCSSR.BIT.TDRE==0);  	/* TDRE=1? */
	SCI.SCTDR = P+1;													//写入SCTDR寄存器不影响TDRF状态。
	SCI.SCSSR.BIT.TDRE=0;	  			/* Clear TDRE bit in SCSSR1 */ 	//如果不清零则TDRE将在置1后永远不变,无法判断数据是否已经发出。
	                                                                  	//清零后在本帧数据发出后TDRE=1,可用于判断是否可以写入下一数据。    
	temp = ~temp;
 	LED_DATA = temp;

}

// Recieve a character by SCI0
char get_char ( )
{
	char Q;
	while (SCI.SCSSR.BIT.RDRF==0); 		/* RDRF=1? */
	Q=SCI.SCRDR;														//读取SCRDR寄存器不影响RDRF状态。
	SCI.SCSSR.BIT.RDRF=0;	  			/* Clear RDRF bit in SCSSR */  	//如果不清零则RDRF将在置1后永远不变,无法判断数据是否已被读取。
	                                                                   	//清零后在下帧数据接收后RDRF=1,可用于判断是否可以读取下一数据。
    return(Q);  			   			// Read the receive DATA		
}


/* 使用下面的写法也可以 */

/*
// Send a character by SCI0
void put_char ( char P )
{
	while (!(SCI.SCSSR.BYTE & 0x80) );  // TDRE=1? 
	SCI.SCTDR = P+1;													//写入SCTDR寄存器不影响TDRF状态
	SCI.SCSSR.BYTE &= 0x7f;  			// Clear TDRE bit in SCSSR1  	//如果不清零则TDRE将在置1后永远不变,无法判断数据是否已经发出。
	                                                                   	//清零后在本帧数据发出后TDRE=1,可用于判断是否可以写入下一数据。
}

// Recieve a character by SCI0
char get_char ( )
{
	while (!(SCI.SCSSR.BYTE & 0x40) );  // RDRF=1? 
	
	SCI.SCSSR.BYTE &= 0xbf;  			// Clear RDRF bit in SCSSR  	//如果不清零则RDRF将在置1后永远不变,无法判断数据是否已被读取。
	                                                                   	//清零后在下帧数据接收后RDRF=1,可用于判断是否可以读取下一数据。
    return( SCI.SCRDR );     			// Read the receive DATA		//读取SCRDR寄存器不影响RDRF状态
}
*/

⌨️ 快捷键说明

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