|
//------------------------------------------------------------------------------------------------------------------//
//功能说明:MC9S12XS128--SCI例程
//使用说明:实现PC→MCU→PC通信,用户可以根据需要修改程序,实现PC→MCU或者MCU→PC通信
//程序设计:woolf
//设计时间:2011.10.21
//----------------------------------------------------------------------------------------------------------------//
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
//unsigned char txt[]={"Hello World!"} ;
void delay(unsigned int time)
{
unsigned int i,j,k;
for(i=0;i<125;i++)
for(j=0;j<125;j++)
for(k=time;k>0;k--);
}
//-----------------------初始化SCI0----------------------------//
void SciInit()
{
SCI0BD=52; //9600bps Baud Rate=BusClock/(16*SCIBD)//波特率计算公式
SCI0CR1=0; //1个起始位,8个数据位,1个停止位,正常8位模式,无奇偶校验,在等待模式下允许SCI
SCI0CR2=0X2C; //0010 1100 bit 5—RIE 接受中断允许位,若置1则允许RDRF或OR置1时产生SCI中断请求,bit 4—TE发送允许位,为1表示允许SCI发送部分工作,TxD引脚(PS1 PS3 ) 用于发送。bit 3—RE 接收允许位,为1表示允许SCI接受器工作。
}
//----------------------读SCI数据-----------------------------//
unsigned char SciRead()
{
if(SCI0SR1_RDRF==1) //RDRF为接收数据标志,当接收到的字符已经在SCIDR中就续时,RDRF置位,顺次读取SCISR1和SCIDR将会自动清除RDRF。表明数据从位移寄存器传输到SCI数据寄存器,为1表示SCI中数据已经就绪
{ //
SCI0SR1_RDRF=1; //接收数据就绪标志,将RDRF置1,顺次读取SCIRI,
//和SCIDR将会自动清除RDRF
return SCI0DRL; //返回数据寄存器的数据
}
}
//********************************写SCI数据**********************************//
void SciWrite(unsigned char sendchar)
{
while (!(SCI0SR1&0x80));//发送保持器空标志位,为1表示发送保持器的数、
已被传送到发送移据位器,这时可以向发送保持器写入新的数据
SCI0DRH=0;
SCI0DRL=sendchar;
}
//------------------------main----------------------------------//
void main(void)
{
SciInit();
EnableInterrupts;
for(;;)
{
} /* wait forever */
/* please make sure that you never leave this function */
}
//---------------------------接收中断函数-----------------------//
#pragma CODE_SEG NON_BANKED
void interrupt 20 SCI0_re(void)
{
unsigned char ch;
ch=SciRead();
SciWrite(ch) ;
}
|