在线时间0 小时
UID3355979
注册时间2017-2-24
NXP金币0 
 
 
 
该用户从未签到 
新手上路 
  
 
	- 积分
 - 7
 
 
- 最后登录
 - 2017-2-25
  
 
 | 
 
小弟新手,在运行sci程序时,SCI1DRL寄存器的值一直是0,电脑接收到数据不对。为这个问题困惑好久了,已经试了n个网上例程了 ,下面是我现在正在测试的一很简单的程序,还是不行 
#include <hidef.h>      /* common defines and macros */ 
#include "derivative.h"      /* derivative-specific definitions */ 
#include<mc9s12xs128.h> 
 
#define RD   PTS_PTS7 
#define RD_dir  DDRS_DDRS7 
#define  BUS_CLOCK                   32000000           //总线频率 
#define  OSC_CLOCK                   16000000           //晶振频率 
#define BAUD 9600                    //串口波特率 
 
 
unsigned char k; 
unsigned char dat_send[8]={'F','R','E','E','F','L','Y','\r'}; 
void INIT_PLL(void)  
{ 
    CRGINT = 0;                  //关中断 
    CLKSEL_PLLSEL = 0;           //在未初始化PLL前不使用PLL的输出作为CPU时钟  
  #if(BUS_CLOCK == 40000000)  
    SYNR = 4; 
  #elif(BUS_CLOCK == 32000000) 
    SYNR = 3;      
  #elif(BUS_CLOCK == 24000000) 
    SYNR = 2; 
  #endif  
    REFDV = 1;                   //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M 
    PLLCTL_PLLON = 1;            //开PLL 
    while (CRGFLG_LOCK == 0);    //等待PLL锁定频率 
    CLKSEL_PLLSEL = 1;           //选择系统时钟由PLL产生 
} 
 
void INIT_SCI1(void)  
{ 
SCI1BD = BUS_CLOCK/16/BAUD;   //设置SCI1波特率为9600 
  SCI1CR1 = 0x00;        //设置SCI1为正常模式,八位数据位,无奇偶校验 
   SCI1CR2 = 0x0c;        //允许接收和发送数据,允许接收中断功能  
} 
 
 
void INIT_485(void)  
{ 
    RD_dir=1; 
    RD=0;  //用的隔离485芯片,控制引脚为0时,发送状态 
} 
 
void delay1ms(long n)  
{ 
   long i,j=0; 
    for(i=0;i<n;i++)  
    { 
        for(j=0;j<n;j++) 
         { 
         } 
    } 
} 
 
void main(void) { 
  DisableInterrupts; 
  INIT_PLL(); 
  INIT_SCI1(); 
  INIT_485(); 
  EnableInterrupts; 
  for(;;)  
  { 
     delay1ms(1000); 
     for(k=0;k<8;k++) 
        SCI1_send(dat_send[k]); 
     _FEED_COP(); 
  }  
} 
        
        
        
         |   
 
 
 
 |