智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 25064|回复: 73
打印 上一主题 下一主题

9S12XS128中断寄存器PIT完全讲解

  [复制链接]

13

主题

67

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4438

论坛元老奖章优秀会员奖章

威望
428
贡献
3852
兑换币
34
注册时间
2010-9-2
在线时间
79 小时
跳转到指定楼层
1#
发表于 2011-3-19 21:17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MC9S12XS128的中断在飞思卡尔智能车重视离不开的,需要的可以去下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
396
威望
327
贡献
43
兑换币
0
注册时间
2010-9-22
在线时间
13 小时
2#
发表于 2011-3-19 22:14:48 | 只看该作者
dx
回复 支持 反对

使用道具 举报

13

主题

67

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4438

论坛元老奖章优秀会员奖章

威望
428
贡献
3852
兑换币
34
注册时间
2010-9-2
在线时间
79 小时
3#
 楼主| 发表于 2011-3-19 22:44:59 | 只看该作者
PIT说明:
    S12PIT24B4CV1是一个模数递减计数器。首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。因为总线周期是已知的,即可以通过计数器自减实现定时。
    在XS128PIT模块中,需要用到得是如下几个寄存器。
    1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)
    该寄存器用于PIT模块的使能设置和工作方式设置。通常设置该寄存器中的PITE为即可,即PITCFLMT_PITE=1,使PIT使能。
    2)、PIT Channel Enable Register(PITCE)
    该寄存器用于对PIT模块中的4个通道使能进行设置。如果使用某个通道时,对对应位进行置一即可,即PITCE_PCEx=1,其中x代表通道序号,为0~3。
    3)、PIT Micro Timer Load Register 0 to 1 (PITMTLD0-1)
    该寄存器用于设置PIT模块中的8位计数器初值,以实现24位的计数。设定值为0到255范围。
    4)、PIT Load Register 0 to 3(PITLD0-3)
    该寄存器用于设置PIT模块中的16位计数器初值,和8位计数器配合而成24位计数器。设定值范围0-65535。
    5)、PIT Multiplex Register(PITMUX)
    该寄存器对定时器通道的8位时基进行选择。因为8位计数器只有两个,所以在将8位计数器和16位计数器连接时,可以选择不同的8位时基。
    当设置为0时,对应通道选择时基0;置一时,对应通道选择时基1。
    如PITMUX_PMUX0=1为通道0选择时基1。
    6)、PIT Interrupt Enable Register(PITINTE)
    该寄存器为中断使能寄存器,为不同的PIT通道中断使能。设定为0时,相应通道中断禁止。置一时,相应通道使能。
    如PITINTE_PINTE0=1时,PIT通道0定时中断使能,当计数器递减溢出时,申请中断。
    7)、PIT Time-Out Flag Register(PITTF)
    该寄存器为溢出标志位,当某一通道的8位计数器和16位计数器递减到0时,该位置一。给改位写1则清除该标志位。
    可以通过查询该位来判断定时是否完成。

CODE:
#include <hidef.h>      
#include <MC9S12XS128.h>   
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define PITTIME  5000//设定为50MS定时
unsigned int vTmpPIT=0;

void pllclk(void)//24MHz,外部时钟为16MHz
{
    REFDV=1;               //总线时钟=48/2=24MHz
    SYNR=2;
    while(!(CRGFLG&0x08));
    CLKSEL=0x80;
}
void initIOBoutput(void)//IO口初始化,B口为输出
{
    DDRA=0XFF;
    PORTA=0XFF;
}
void initPIT(void)//定时中断初始化函数 50MS定时中断设置
{
    PITCFLMT_PITE=0; //定时中断通道0关
    PITCE_PCE0=1;//定时器通道0使能
    PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即
10us.
    PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}

void main(void)
{
  pllclk();
  initIOBoutput();
  initPIT();
  EnableInterrupts;
  for(;;) {}
  
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
    vTmpPIT++;
    if(vTmpPIT==10)
    {  
         PORTA=~PORTA;//输出取反
         vTmpPIT=0;
    }
     PITTF_PTF0=1;//清中断标志位
}
回复 支持 反对

使用道具 举报

6

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
623
威望
288
贡献
293
兑换币
0
注册时间
2011-3-17
在线时间
21 小时
4#
发表于 2011-3-23 20:57:18 | 只看该作者
谢谢了  好东西
回复 支持 反对

使用道具 举报

8

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1896
威望
857
贡献
621
兑换币
30
注册时间
2011-2-11
在线时间
209 小时
5#
发表于 2011-3-26 08:31:01 | 只看该作者
不错
回复 支持 反对

使用道具 举报

1

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
QQ
威望
296
贡献
92
兑换币
0
注册时间
2011-2-20
在线时间
15 小时
6#
发表于 2011-4-1 20:26:17 | 只看该作者
谢谢  学习中、、、
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
235
贡献
33
兑换币
0
注册时间
2010-12-30
在线时间
13 小时
7#
发表于 2011-4-4 11:05:01 | 只看该作者
谢了,哈哈
回复 支持 反对

使用道具 举报

1

主题

75

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1239
威望
738
贡献
331
兑换币
261
注册时间
2010-12-4
在线时间
85 小时
8#
发表于 2011-4-4 14:37:19 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

4

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
605
威望
351
贡献
92
兑换币
0
注册时间
2011-3-26
在线时间
81 小时
9#
发表于 2011-4-4 16:04:52 | 只看该作者
需要~
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1301
QQ
威望
540
贡献
609
兑换币
28
注册时间
2010-3-8
在线时间
76 小时
10#
发表于 2011-4-5 12:26:07 | 只看该作者
谢谢,学习中
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 02:39 , Processed in 0.141144 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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