智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 11418|回复: 29
打印 上一主题 下一主题

MC9S12XS128系列例程--RTI

  [复制链接]

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
跳转到指定楼层
1#
发表于 2009-3-3 16:50:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
**************************************************************************************
龙丘MC9S12XS128 多功能开发板
Designed by Chiu Sir
E-mail:chiusir@163.com
软件版本:V1.1
最后更新:2009年2月28日
相关信息参考下列地址:
博客:  http://longqiu.21ic.org
淘宝店:http://shop36265907.taobao.com
------------------------------------
Code Warrior 4.7
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock:16.000MHz
pllclock:32.000MHz

演示程序使用说明:
1.实时时钟的演示:
2.毫秒级计时输出;
3.串口输出速率:9600bps.
4.中断的使用。
*****************************************************************************************/

#include <hidef.h>      
#include <MC9S12XS128.h>   
#include <stdio.h>
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"  

volatile dword u32_time_cnt=0;     

//====================中断函数==================================   

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 7 RTI_ISR(void) {   // 32.75ms timer overflow   
  ++u32_time_cnt;         
  PORTB_PB2=~PORTB_PB2;
  CRGFLG|=0X80;//Write 1 to clear RTIF bit   
}


// 函 数 名: void DLY_ms(word x)
// 功能描述: 毫秒级延时
void DLY_ms(int ms)  //x取值1~255;
{
  int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<2770;jj++);    //32MHz--1ms  
}
//-----------------------------------------------------
static void Port_Init(void)
{  
    DDRA = 0xff;  
    PORTA= 0x00;         
    DDRB = 0xff;  //LED  PTB0--7,
    PORTB= 0xff;  //LEDs off  
}
//-----------------------------------------------------
static void SCI_Init(void)
{
    SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enable
    SCI0BDH=0x00; //busclk  8MHz,19200bps,SCI0BDL=0x1a
    SCI0BDL=0x68; //SCI0BDL=busclk/(16*SCI0BDL)                  
                  //busclk 16MHz, 9600bps,SCI0BDL=0x68                  
}                 
void uart_putchar(unsigned char ch)
{
  if (ch == '\n')  
  {
      while(!(SCI0SR1&0x80)) ;     
      SCI0DRL= 0x0d;            //output'CR'
     return;
  }
  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++]);
  }
}
// setup of the RTI interrupt frequency     
static void RTI_Init(void)
{               
    RTICTL=0x77;   //8x2^16 =>32,75ms,30.5175Hz                     
    //CRGINT=0X80;   //enable RTI Interrupt
    CRGINT=0X80;   //enable RTI Interrupt
}
// PLL初始化子程序   BUS Clock=16M
void setbusclock(void)
{   
    CLKSEL=0X00;    //disengage PLL to system
    PLLCTL_PLLON=1;   //turn on PLL
    SYNR=1;         
    REFDV=1;          //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
    _asm(nop);          //BUS CLOCK=16M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
}
//-----------------------------------------------------
#pragma CODE_SEG DEFAULT
void Init_Dev(void)
{
    setbusclock();
    Port_Init();
    SCI_Init();      
    RTI_Init();
}

//====================main()==================================
#pragma CODE_SEG DEFAULT     
void main(void)   
{
   
  char  txtbuf[66]="";
  byte  u8_mintes=0;
  word  u16_sec=0,u16_ms=0;   
   
  Init_Dev();  
  PORTB=0x00;
  putstr("\nLongQiu s.&t. Co. Ltd.");   
  putstr("\nhttp://shop36265907.taobao.com");   
  DLY_ms(1000);     
  PORTB=0xFF;
  EnableInterrupts;   
  for(;;)
  {
//----------时钟计时器---------------------------------
    u16_sec=u32_time_cnt*131/4;//理论值为32.75ms,时间计算部分  
    u16_ms=u16_sec%1000;        
    u16_sec=u16_sec/1000;   
    sprintf(txtbuf,"\n%d:%02ds-%03dms ",u8_mintes,u16_sec,u16_ms);     
    putstr(txtbuf);           
    if(u16_sec>58)
    {
      u8_mintes++;
      u32_time_cnt=0;
    }
//--------------------------------------------------------   
    PORTB_PB0=~PORTB_PB0;
    DLY_ms(50);         
  }//for(;;)
} //main

10

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
708
威望
431
贡献
219
兑换币
6
注册时间
2011-11-26
在线时间
29 小时
30#
发表于 2012-1-15 11:45:15 | 只看该作者
回复 支持 反对

使用道具 举报

4

主题

240

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6812

论坛元老奖章

QQ
威望
1268
贡献
4600
兑换币
65
注册时间
2011-10-22
在线时间
472 小时
29#
发表于 2011-12-29 22:16:50 | 只看该作者
谢了
回复 支持 反对

使用道具 举报

1

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
威望
241
贡献
53
兑换币
0
注册时间
2011-10-9
在线时间
17 小时
28#
发表于 2011-11-18 13:00:57 | 只看该作者
看看新手学习
回复 支持 反对

使用道具 举报

1

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1532
威望
912
贡献
366
兑换币
114
注册时间
2011-8-3
在线时间
127 小时
27#
发表于 2011-9-24 10:50:27 | 只看该作者
不太理解
回复 支持 反对

使用道具 举报

13

主题

183

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1141

热心会员奖章活跃会员奖章优秀会员奖章

威望
666
贡献
335
兑换币
143
注册时间
2011-4-2
在线时间
70 小时
26#
发表于 2011-8-21 22:31:37 | 只看该作者
千千
回复 支持 反对

使用道具 举报

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
25#
 楼主| 发表于 2011-5-17 10:15:22 | 只看该作者
chiusir  
RTI 定时是怎么计算的呢?、?/、/??
tanfanqiong 发表于 2009-5-24 21:02



    结合晶振的频率和RTICTL寄存器就可以计算出定时时间了:
   RTICTL=0x77;   //8x2^16 =>32,75ms,30.5175Hz
回复 支持 反对

使用道具 举报

8

主题

187

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3683

论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章

威望
619
贡献
2776
兑换币
18
注册时间
2010-11-20
在线时间
144 小时
24#
发表于 2010-11-21 08:20:19 | 只看该作者
谢谢楼主分享
回复 支持 反对

使用道具 举报

3

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
529
QQ
威望
342
贡献
131
兑换币
0
注册时间
2010-11-13
在线时间
28 小时
23#
发表于 2010-11-13 00:39:32 | 只看该作者
回复 支持 反对

使用道具 举报

3

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
529
QQ
威望
342
贡献
131
兑换币
0
注册时间
2010-11-13
在线时间
28 小时
22#
发表于 2010-11-13 00:38:37 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 04:20 , Processed in 0.360877 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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