智能车制作

标题: mc9s12xs128的sci程序 [打印本页]

作者: simpleliu    时间: 2009-11-2 17:00
标题: mc9s12xs128的sci程序
我的 程序是网上下的,然后如果不用PLL的 话是可以用的,我照着思路改波特率,然后用上PLL,用调试工具始终接受不到。。。郁闷哪。。。弄了好些天了 。。各位大哥大姐给看看吧?如果程序没问题的话还可能是?
#include <hidef.h>    /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#include <ctype.h>
#include <string.h>
#include <stdarg.h>
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#pragma CODE_SEG DEFAULT

unsigned char uart_getkey(void)
{  
while(!(SCI0SR1&0x80)) ; //keep waiting when not empty  
return SCI0DRL;
}

void uart_putchar(unsigned char ch)
{
   
   while(!(SCI0SR1&0x80)) ;    //keep waiting when not empty  
   SCI0DRL=ch;
}
void putstr(char ch[])
{
   unsigned char ptr=0;
   while(ch[ptr]){
   uart_putchar((unsigned char)ch[ptr++]);
   }   
  
}
                                             

void pll_Init(void)
{
    CLKSEL = 0x00;    //disengage PLL to system
    PLLCTL_PLLON = 1;   //turn on PLL
    SYNR = 4;         
    REFDV = 1;          //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
    _asm(nop);          //BUS CLOCK=40MHz
    _asm(nop);
    while(!(CRGFLG_LOCK == 1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL = 1;          //engage PLL to system;  
}


//-----------------------------------------------------
static void SCI_Init(void)
{
SCI0CR1 =0x00;
SCI0CR2 =0x2c; //enable Receive Full Interrupt,RX enable,Tx enable   
SCI0BD =0x106; //SCI0BDL=busclk/(16*SCI0BDL)
               //busclk   8MHz, 9600bps,SCI0BD=0x34
               //busclk 16MHz, 9600bps,SCI0BD=0x68
               //busclk 24MHz, 9600bps,SCI0BD=0x9C
}                 //busclk 32MHz, 9600bps,SCI0BD=0xD0  
               //busclk 40MHz, 9600bps,SCI0BD=0x106

void main(void){

    pll_Init();

   SCI_Init();
   DDRA=0xFF;
  
  uart_putchar(0x11) ;
   EnableInterrupts;  
   for(;;)
   {

   }
}

作者: whut_wj    时间: 2009-11-2 17:00
回复 5# simpleliu

我忘了,倍频寄存器不一样。你把你邮箱给我,我发个程序你。
作者: zdhly0401    时间: 2009-11-2 22:08
回复 1# simpleliu


    你试试你的40M频率上去了没?也就是看看pll工作了?
作者: whut_wj    时间: 2009-11-3 20:14
这个是DG128的?
DG128的PLL和XS128有些不一样。
主要问题是PLL没有成功。
作者: simpleliu    时间: 2009-11-4 01:55
回复 2# zdhly0401


    哥,我新手。。。
怎么看PLL上去没?
很着急呢。。因为第一次接触这款弹片机。。。
我的是MC9S12XS128
作者: simpleliu    时间: 2009-11-4 01:56
回复 3# whut_wj


    啊?哪里不同?哥能详细的给出吗?
我的是XS的
作者: zdhly0401    时间: 2009-11-4 10:21
回复 4# simpleliu
点个灯,看看程序运行不,如果pll不成功就不能跑程序,论坛有xs的超频程序,你下载个看看,祝你好运
作者: simpleliu    时间: 2009-11-14 21:23
回复 7# whut_wj


    simpleliu55@126.com不好意思,很九没上了
作者: hufangwu    时间: 2009-11-15 17:35
通过串口,在pc机上得不到正确的数据,这是为什么啊 请指教



#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"



/*************锁相环******************/
void PLL_Init(void){
  //锁相环设置:频率40M
         SYNR=0x49;
         REFDV=0x43;
         while(CRGFLG_LOCK!=1);
         CLKSEL_PLLSEL=1;
}
/***********************************/
void uart_Init(void) {    //40MHZ  波特率9600   8位无校验。
  SCI0CR2=0x0c;
  SCI0BD=0x104;

    SCI0CR2_RIE=0;

}

void uart_sendchar(char *cs) {  //单字符发送函数
  while(SCI0SR1_TDRE==0);
  SCI0DRL=*cs;
}

void uart_sendstring(char *ss){  //字符串发送函数
  while(*ss){
    uart_sendchar(ss);
    ++ss;
  }
}
//***********************************************

void main(void) {
  PLL_Init();
  uart_Init();
  DisableInterrupts;

  uart_sendstring("Hello World!");
   
  for(;;) {} /* wait forever */
  /* please make sure that you never leave this function */
}




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2