智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5211|回复: 8
打印 上一主题 下一主题

[编程类] mc9s12xs128的sci程序

[复制链接]

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
威望
178
贡献
22
兑换币
0
注册时间
2009-11-2
在线时间
4 小时
跳转到指定楼层
1#
发表于 2009-11-2 17:00:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
我的 程序是网上下的,然后如果不用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(;;)
   {

   }
}

最佳答案

查看完整内容

回复 5# simpleliu 我忘了,倍频寄存器不一样。你把你邮箱给我,我发个程序你。

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
2#
发表于 2009-11-2 17:00:54 | 只看该作者
回复 5# simpleliu

我忘了,倍频寄存器不一样。你把你邮箱给我,我发个程序你。
回复

使用道具 举报

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
3#
发表于 2009-11-2 22:08:13 | 只看该作者
回复 1# simpleliu


    你试试你的40M频率上去了没?也就是看看pll工作了?
回复

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
4#
发表于 2009-11-3 20:14:27 | 只看该作者
这个是DG128的?
DG128的PLL和XS128有些不一样。
主要问题是PLL没有成功。
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
威望
178
贡献
22
兑换币
0
注册时间
2009-11-2
在线时间
4 小时
5#
 楼主| 发表于 2009-11-4 01:55:38 | 只看该作者
回复 2# zdhly0401


    哥,我新手。。。
怎么看PLL上去没?
很着急呢。。因为第一次接触这款弹片机。。。
我的是MC9S12XS128
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
威望
178
贡献
22
兑换币
0
注册时间
2009-11-2
在线时间
4 小时
6#
 楼主| 发表于 2009-11-4 01:56:43 | 只看该作者
回复 3# whut_wj


    啊?哪里不同?哥能详细的给出吗?
我的是XS的
回复

使用道具 举报

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
7#
发表于 2009-11-4 10:21:43 | 只看该作者
回复 4# simpleliu
点个灯,看看程序运行不,如果pll不成功就不能跑程序,论坛有xs的超频程序,你下载个看看,祝你好运
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
威望
178
贡献
22
兑换币
0
注册时间
2009-11-2
在线时间
4 小时
8#
 楼主| 发表于 2009-11-14 21:23:47 | 只看该作者
回复 7# whut_wj


    simpleliu55@126.com不好意思,很九没上了
回复

使用道具 举报

35

主题

168

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1215
威望
416
贡献
249
兑换币
22
注册时间
2009-9-10
在线时间
275 小时
9#
发表于 2009-11-15 17:35:40 | 只看该作者
通过串口,在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 */
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 06:38 , Processed in 0.052959 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表