智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2158|回复: 2
打印 上一主题 下一主题

PIT原理 设定程序通过PB口输出方波

[复制链接]

2

主题

60

帖子

0

精华

元老在此

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
89249
威望
72740
贡献
16109
兑换币
18
注册时间
2011-10-30
在线时间
200 小时
跳转到指定楼层
1#
发表于 2011-11-4 15:32:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本帖子中包含更多资源

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

x

2

主题

60

帖子

0

精华

元老在此

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
89249
威望
72740
贡献
16109
兑换币
18
注册时间
2011-10-30
在线时间
200 小时
2#
 楼主| 发表于 2011-11-4 19:05:16 | 只看该作者
有6个定时器模块,Micro Timer 0、MicroTimer 1、Timer 0、Timer 1、Timer 2、Timer 3,这是PIT 的核心部件,其中前两个是8位的,后两个是16位的。
从图中看出PIT 是一总线时钟(BusClock)为基准时钟的,总线时钟通过8位Micro Timer 0和Micro Timer 1倍频形成两个基时钟,即Micro Timer Base0 和Micro TimerBase1,这两个基时钟通过16位Timer 给PIT 提供时钟(这里面涉及到一个连接复合的问题,16位定时器和基时钟怎么连接,通过寄存器PITMUX 设置)。

1、PIT控制寄存器及强制载入微定时器寄存器PITCFLMT
PITEIT 模块使能位
0 禁止PIT
1 使能PIT
PITSWAIT:等待模式PIT 停止控制位
0 在等待模式下PIT 正常运行
1 在等待模式下PIT 时钟产生器停止
PITFRZ: 冻结模式PIT 计数器冻结控制位
0 在冻结模式下PIT 正常运行
1 在冻结模式下PIT 计数器失去作用
PFLMT[1..0]:PIT 强制载入微定时器模数值控制位
1 相应的8 位微定时器模数值被载入8 位微定时器递减计数器中
0 强制载入无效
2、PIT强制载入定时器寄存器PITFLT
PFLT[3..0]:PIT 强制载入定时器模数值控制位
1 相应的16 位定时器模数值被载入16 位定时器递减计数器中
0 强制载入无效
3、PIT通道使能寄存器PITCE
PCE[ 3..0]:PIT 使能控制位。该寄存器使能PIT 四个通道,如果PCE 写0,PIT 通道将被禁止,在PITTF 中相应的标志位也将被清除;如果PCE 写1,PIT 通道使能, 16 位定时器计数器被载入起始值并开始计数。
0 通道禁止
1 通道使能
4、PIT定时器复合寄存器PITMUX
PMUX[ 3..0]:PTI 定时器复合寄存器控制位。该寄存器控制16 位定时器与8 位微定时器时基0 或者时基1 连接复合。
0 相应16 位定时器与微时基0 连接
1 相应16 位定时器与微时基1 连接
5、PIT中断使能寄存器PITINTE
PINTE[ 3..0]:PIT 定时器溢出中断使能控制位。
0 PIT 相应通道溢出中断禁止
1 PIT 相应通道溢出中断使能
6、PIT溢出标志寄存器
PIF[3..0]:PIT 通道溢出标志位。当16 位定时器计数器和相复合的8 位微定时器计数器递减到0 后,相应位的标志位被置位。写1 后清除标志位,写0 无效。
0 PIT 相应通道没有发生溢出中断
1 PIT 相应通道发生了溢出中断
7、PIT微定时器装载寄存器PITMTLD0/PITMTLD1
PMTLD[7..0]:PIT 微定时器初值载入位。该寄存器用于设置PIT 模块中的8位计数器初值,以实现24位的计数。设定值为0到255范围。递减计数器减至0后会自动重载。
8、PIT定时器装载寄存器PITLD0/PITLD1/PITLD2/PITLD3
PLD[15..0]:同上原理。
9、PIT通道计数器PITCNT[0..4]
PCNT[15..0]:该寄存器存放16 位递减计数器值。

TIME= (PITMTLD + 1) * (PITLD + 1) / F_BUS
其中PITMTLD 是Micro Timer 初值,PITLD 是Timer 初值

PIT 溢出后进入中断后,中断服务就好写了,记住PIT 中断号是66,
记住中断中写1清除标志位,就可以了

程序实例
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define PITTIME 5000//设定为50MS 定时
void pllclk(void)//24MHz,外部时钟为16MHz
{
CLKSEL=0X00;
PLLCTL=0xe1;
SYNR=2;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
REFDV=1;
PLLCTL=0X60;
asm NOP;
asm NOP;
asm NOP;
while((CRGFLG&0X08)==0);//时钟校正同步
CLKSEL=0X80;}
void initIOBoutput(void)//IO 口初始化,B 口为输出
{
DDRB=0XFF;
PORTB=0XFF;}
void initPIT(void)//定时中断初始化函数50MS 定时中断设置
{
PITCFLMT_PITE=0; //定时中断通道0 关
PITCE_PCE0=1;//定时器通道0 使能
PITMTLD0=240-1;//8 位定时器初值设定。240 分频,在24M 下,为0.1M即10us.
PITLD0=PITTIME-1;//16 位定时器初值设定。PITTIME*0.01MS
PITINTE_PINTE0=1;//定时器中断通道0 中断使能
PITCFLMT_PITE=1;//定时器通道0 使能}
void main(void)
{
pllclk();
initIOBoutput();
initPIT();
EnableInterrupts;
for(;;) {_FEED_COP();} /* wait forever */
/* please make sure that you never leave this function */}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
PORTB=~PORTB;//输出取反
PITTF_PTF0=1;//清中断标志位
}
回复 支持 反对

使用道具 举报

1

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
639
威望
387
贡献
106
兑换币
25
注册时间
2012-2-6
在线时间
73 小时
毕业学校
hitwh
3#
发表于 2012-3-3 07:56:19 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 04:17 , Processed in 0.176398 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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