突破渴望

飞思卡尔SCI模块应用

0
阅读(4526)

 

//------------------------------------------------------------------------------------------------------------------//
//功能说明: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) ;
}