打印
[资料分享与下载]

飞思卡尔单片机DZ60---SCI(查询接收)

[复制链接]
1891|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
niuyaliang|  楼主 | 2015-2-27 20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
niuyaliang|  楼主 | 2015-2-27 20:10 | 只看该作者
[cpp] view plaincopy
#define LED_D1      PTDD_PTDD0  
#define LED_D1_DIR  PTDDD_PTDDD0  
  
#define LED_ON      0  
#define LED_OFF     1  
  
unsigned char SCANF_SEND_STRINGS[] = "HELLO MCU WORLD";  
unsigned char *pSendString = SCANF_SEND_STRINGS;  
unsigned char ReceiveString;  
  
/*************************************************************/  
/*                  初始化总线时钟PEE模式                    */  
/*              外部晶振频率为4MHz,总线频率16MHz            */  
/*************************************************************/  
void INIT_MCG(void)   
{  
  MCGC2=0x36;         
  while(!MCGSC_OSCINIT);      
  MCGC1=0xb8;  
  while(MCGSC_IREFST);  
  while(MCGSC_CLKST!=0b10);  
  MCGC2_LP = 1;  
  MCGC1 = 0x90;  
  MCGC3 = 0x48;      
  MCGC2_LP = 0;  
  while(!MCGSC_PLLST);  
  while(!MCGSC_LOCK);  
  MCGC1 = 0x10;  
  while(MCGSC_CLKST!=0b11);  
}   
  
  
//延时函数  
void delay(void)   
{  
  unsigned int i;  
  unsigned int j;  
     
     
  for(i = 0; i < 100; i++)  
     for(j = 0; j < 4000; j++);  
   
}  
  
  
void main(void) {  
  
  DisableInterrupts;  
  SOPT1 = 0;  
  INIT_MCG();  
  EnableInterrupts; /* enable interrupts */  
  /* include your code here */  
   
  LED_D1_DIR = 1;  
  LED_D1     = LED_OFF;  
   
   
   
//以下为设置波特率,以及初始化SCI1控制寄存器   
  SCI1BDH = 0X00;  
  SCI1BDL = 0X68;//波特率设置为9600  
  SCI1C1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验  
  SCI1C2 = 0x0C; //RE = 1(bit2)接收器打开  
                 //TE = 1(bit3)发送器打开  
   
   
  while(1)  
  {  
    while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据  
    SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF  
    ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString  
  //  LED_D1 = ~LED_D1;  
   // delay();  
      
    while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据  
    SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
  //  LED_D1 = ~LED_D1;  
//   delay();  
           
  }  
   
   
  for(;;) {  
    __RESET_WATCHDOG(); /* feeds the dog */  
  } /* loop forever */  
  /* please make sure that you never leave main */  
}  
   

使用特权

评论回复
板凳
niuyaliang|  楼主 | 2015-2-27 20:10 | 只看该作者
[cpp] view plaincopy
#define LED_D1      PTDD_PTDD0  
#define LED_D1_DIR  PTDDD_PTDDD0  
  
#define LED_ON      0  
#define LED_OFF     1  
  
unsigned char SCANF_SEND_STRINGS[] = "HELLO MCU WORLD";  
unsigned char *pSendString = SCANF_SEND_STRINGS;  
unsigned char ReceiveString;  
  
/*************************************************************/  
/*                  初始化总线时钟PEE模式                    */  
/*              外部晶振频率为4MHz,总线频率16MHz            */  
/*************************************************************/  
void INIT_MCG(void)   
{  
  MCGC2=0x36;         
  while(!MCGSC_OSCINIT);      
  MCGC1=0xb8;  
  while(MCGSC_IREFST);  
  while(MCGSC_CLKST!=0b10);  
  MCGC2_LP = 1;  
  MCGC1 = 0x90;  
  MCGC3 = 0x48;      
  MCGC2_LP = 0;  
  while(!MCGSC_PLLST);  
  while(!MCGSC_LOCK);  
  MCGC1 = 0x10;  
  while(MCGSC_CLKST!=0b11);  
}   
  
  
//延时函数  
void delay(void)   
{  
  unsigned int i;  
  unsigned int j;  
     
     
  for(i = 0; i < 100; i++)  
     for(j = 0; j < 4000; j++);  
   
}  
  
  
void main(void) {  
  
  DisableInterrupts;  
  SOPT1 = 0;  
  INIT_MCG();  
  EnableInterrupts; /* enable interrupts */  
  /* include your code here */  
   
  LED_D1_DIR = 1;  
  LED_D1     = LED_OFF;  
   
   
   
//以下为设置波特率,以及初始化SCI1控制寄存器   
  SCI1BDH = 0X00;  
  SCI1BDL = 0X68;//波特率设置为9600  
  SCI1C1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验  
  SCI1C2 = 0x0C; //RE = 1(bit2)接收器打开  
                 //TE = 1(bit3)发送器打开  
   
   
  while(1)  
  {  
    while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据  
    SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF  
    ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString  
  //  LED_D1 = ~LED_D1;  
   // delay();  
      
    while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据  
    SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
  //  LED_D1 = ~LED_D1;  
//   delay();  
           
  }  
   
   
  for(;;) {  
    __RESET_WATCHDOG(); /* feeds the dog */  
  } /* loop forever */  
  /* please make sure that you never leave main */  
}  
   

使用特权

评论回复
地板
niuyaliang|  楼主 | 2015-2-27 20:11 | 只看该作者
[cpp] view plaincopy
程序改成下面语句,上位机串口发大数据不死机,但可能丢数据。  

使用特权

评论回复
5
niuyaliang|  楼主 | 2015-2-27 20:11 | 只看该作者
[cpp] view plaincopy
while(1)   
{   
/*  while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据     
   SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF     
   ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString   
  
      
  while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据     
  SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
/  
   if(SCI1S1_RDRF == 1)   
   {  
      ReceiveString = SCI1D;  
     if(SCI1S1_TDRE == 1)   
      {  
          SCI1D = ReceiveString;  
      }   
  
   }  
   
            
}   

使用特权

评论回复
6
ccw1986| | 2015-2-28 08:41 | 只看该作者
谢谢分享

使用特权

评论回复
7
cowboy2014| | 2015-2-28 16:18 | 只看该作者
谢谢楼主的分享啊

使用特权

评论回复
8
就是爱你乖| | 2015-9-11 18:02 | 只看该作者
您好,我配置的SCI1,发送接收完全没问题。可是SCI2怎么调都不行,您调通了吗?求讲解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝