[资料分享与下载] 飞思卡尔单片机DZ60---SCI(查询接收)

[复制链接]
2242|7
niuyaliang 发表于 2015-2-27 20:09 | 显示全部楼层 |阅读模式
  1. [cpp] view plaincopy
  2. #include <hidef.h> /* for EnableInterrupts macro */  
  3. #include "derivative.h" /* include peripheral declarations */  
  4.   
  5. //整个功能:PC-单片机-PC,PC串口发数据-单片机串口接收数据-单片机将接收到的数据发送回给PC  


 楼主| niuyaliang 发表于 2015-2-27 20:10 | 显示全部楼层
  1. [cpp] view plaincopy
  2. #define LED_D1      PTDD_PTDD0  
  3. #define LED_D1_DIR  PTDDD_PTDDD0  
  4.   
  5. #define LED_ON      0  
  6. #define LED_OFF     1  
  7.   
  8. unsigned char SCANF_SEND_STRINGS[] = "HELLO MCU WORLD";  
  9. unsigned char *pSendString = SCANF_SEND_STRINGS;  
  10. unsigned char ReceiveString;  
  11.   
  12. /*************************************************************/  
  13. /*                  初始化总线时钟PEE模式                    */  
  14. /*              外部晶振频率为4MHz,总线频率16MHz            */  
  15. /*************************************************************/  
  16. void INIT_MCG(void)   
  17. {  
  18.   MCGC2=0x36;         
  19.   while(!MCGSC_OSCINIT);      
  20.   MCGC1=0xb8;  
  21.   while(MCGSC_IREFST);  
  22.   while(MCGSC_CLKST!=0b10);  
  23.   MCGC2_LP = 1;  
  24.   MCGC1 = 0x90;  
  25.   MCGC3 = 0x48;      
  26.   MCGC2_LP = 0;  
  27.   while(!MCGSC_PLLST);  
  28.   while(!MCGSC_LOCK);  
  29.   MCGC1 = 0x10;  
  30.   while(MCGSC_CLKST!=0b11);  
  31. }   
  32.   
  33.   
  34. //延时函数  
  35. void delay(void)   
  36. {  
  37.   unsigned int i;  
  38.   unsigned int j;  
  39.      
  40.      
  41.   for(i = 0; i < 100; i++)  
  42.      for(j = 0; j < 4000; j++);  
  43.    
  44. }  
  45.   
  46.   
  47. void main(void) {  
  48.   
  49.   DisableInterrupts;  
  50.   SOPT1 = 0;  
  51.   INIT_MCG();  
  52.   EnableInterrupts; /* enable interrupts */  
  53.   /* include your code here */  
  54.    
  55.   LED_D1_DIR = 1;  
  56.   LED_D1     = LED_OFF;  
  57.    
  58.    
  59.    
  60. //以下为设置波特率,以及初始化SCI1控制寄存器   
  61.   SCI1BDH = 0X00;  
  62.   SCI1BDL = 0X68;//波特率设置为9600  
  63.   SCI1C1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验  
  64.   SCI1C2 = 0x0C; //RE = 1(bit2)接收器打开  
  65.                  //TE = 1(bit3)发送器打开  
  66.    
  67.    
  68.   while(1)  
  69.   {  
  70.     while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据  
  71.     SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF  
  72.     ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString  
  73.   //  LED_D1 = ~LED_D1;  
  74.    // delay();  
  75.       
  76.     while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据  
  77.     SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
  78.   //  LED_D1 = ~LED_D1;  
  79. //   delay();  
  80.            
  81.   }  
  82.    
  83.    
  84.   for(;;) {  
  85.     __RESET_WATCHDOG(); /* feeds the dog */  
  86.   } /* loop forever */  
  87.   /* please make sure that you never leave main */  
  88. }  
  89.    
 楼主| niuyaliang 发表于 2015-2-27 20:10 | 显示全部楼层
  1. [cpp] view plaincopy
  2. #define LED_D1      PTDD_PTDD0  
  3. #define LED_D1_DIR  PTDDD_PTDDD0  
  4.   
  5. #define LED_ON      0  
  6. #define LED_OFF     1  
  7.   
  8. unsigned char SCANF_SEND_STRINGS[] = "HELLO MCU WORLD";  
  9. unsigned char *pSendString = SCANF_SEND_STRINGS;  
  10. unsigned char ReceiveString;  
  11.   
  12. /*************************************************************/  
  13. /*                  初始化总线时钟PEE模式                    */  
  14. /*              外部晶振频率为4MHz,总线频率16MHz            */  
  15. /*************************************************************/  
  16. void INIT_MCG(void)   
  17. {  
  18.   MCGC2=0x36;         
  19.   while(!MCGSC_OSCINIT);      
  20.   MCGC1=0xb8;  
  21.   while(MCGSC_IREFST);  
  22.   while(MCGSC_CLKST!=0b10);  
  23.   MCGC2_LP = 1;  
  24.   MCGC1 = 0x90;  
  25.   MCGC3 = 0x48;      
  26.   MCGC2_LP = 0;  
  27.   while(!MCGSC_PLLST);  
  28.   while(!MCGSC_LOCK);  
  29.   MCGC1 = 0x10;  
  30.   while(MCGSC_CLKST!=0b11);  
  31. }   
  32.   
  33.   
  34. //延时函数  
  35. void delay(void)   
  36. {  
  37.   unsigned int i;  
  38.   unsigned int j;  
  39.      
  40.      
  41.   for(i = 0; i < 100; i++)  
  42.      for(j = 0; j < 4000; j++);  
  43.    
  44. }  
  45.   
  46.   
  47. void main(void) {  
  48.   
  49.   DisableInterrupts;  
  50.   SOPT1 = 0;  
  51.   INIT_MCG();  
  52.   EnableInterrupts; /* enable interrupts */  
  53.   /* include your code here */  
  54.    
  55.   LED_D1_DIR = 1;  
  56.   LED_D1     = LED_OFF;  
  57.    
  58.    
  59.    
  60. //以下为设置波特率,以及初始化SCI1控制寄存器   
  61.   SCI1BDH = 0X00;  
  62.   SCI1BDL = 0X68;//波特率设置为9600  
  63.   SCI1C1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验  
  64.   SCI1C2 = 0x0C; //RE = 1(bit2)接收器打开  
  65.                  //TE = 1(bit3)发送器打开  
  66.    
  67.    
  68.   while(1)  
  69.   {  
  70.     while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据  
  71.     SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF  
  72.     ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString  
  73.   //  LED_D1 = ~LED_D1;  
  74.    // delay();  
  75.       
  76.     while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据  
  77.     SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
  78.   //  LED_D1 = ~LED_D1;  
  79. //   delay();  
  80.            
  81.   }  
  82.    
  83.    
  84.   for(;;) {  
  85.     __RESET_WATCHDOG(); /* feeds the dog */  
  86.   } /* loop forever */  
  87.   /* please make sure that you never leave main */  
  88. }  
  89.    
 楼主| niuyaliang 发表于 2015-2-27 20:11 | 显示全部楼层
[cpp] view plaincopy
程序改成下面语句,上位机串口发大数据不死机,但可能丢数据。  
 楼主| niuyaliang 发表于 2015-2-27 20:11 | 显示全部楼层
  1. [cpp] view plaincopy
  2. while(1)   
  3. {   
  4. /*  while(!SCI1S1_RDRF);// SCI1S1_RDRF = 1时,表示接收数据寄存器满,可以取出数据     
  5.    SCI1S1_RDRF  = 0; //清除SCI1S1_RDRF     
  6.    ReceiveString = SCI1D; //将接收寄存器中的数据保存至ReceiveString   
  7.   
  8.       
  9.   while(!SCI1S1_TDRE);//SCI1S1_TDRE = 1时,发送数据寄存器(缓存区)空,可以发送数据     
  10.   SCI1D = ReceiveString;//将接收到的数据,放至发送数据寄存器(缓存区),发送  
  11. /  
  12.    if(SCI1S1_RDRF == 1)   
  13.    {  
  14.       ReceiveString = SCI1D;  
  15.      if(SCI1S1_TDRE == 1)   
  16.       {  
  17.           SCI1D = ReceiveString;  
  18.       }   
  19.   
  20.    }  
  21.    
  22.             
  23. }   
ccw1986 发表于 2015-2-28 08:41 | 显示全部楼层
谢谢分享
cowboy2014 发表于 2015-2-28 16:18 | 显示全部楼层
谢谢楼主的分享啊
就是爱你乖 发表于 2015-9-11 18:02 | 显示全部楼层
您好,我配置的SCI1,发送接收完全没问题。可是SCI2怎么调都不行,您调通了吗?求讲解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部