智能车制作
标题:
pit定时
[打印本页]
作者:
lanshh
时间:
2010-5-9 22:28
标题:
pit定时
很难找的哦
PIT
中断定时使用说明
PIT
说明:
S12PIT24B4CV1
是一个模数递减计数器。首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。因为总线周期是已知的,即可以通过计数器自减实现定时。
在
XS128PIT
模块中,需要用到得是如下几个寄存器。
1)
、
PIT Contorl and forceLad Micro Timer Register(PITCFLMT)
该寄存器用于
PIT
模块的使能设置和工作方式设置。通常设置该寄存器中的
PITE
为即可,即
PITCFLMT_PITE=1
,使
PIT
使能。
2)
、
PIT Channel EnableRegister(PITCE)
该寄存器用于对
PIT
模块中的
4
个通道使能进行设置。如果使用某个通道时,对对应位进行置一即可,即
PITCE_PCEx=1
,其中
x
代表通道序号,为
0~3
。
3)
、
PIT Micro Timer LoadRegister 0 to 1 (PITMTLD0-1)
该寄存器用于设置
PIT
模块中的
8
位计数器初值,以实现
24
位的计数。设定值为
0
到
255
范围。
4)
、
PIT Load Register 0 to3(PITLD0-3)
该寄存器用于设置
PIT
模块中的
16
位计数器初值,和
8
位计数器配合而成
24
位计数器。设定值范围
0-65535
。
5)
、
PIT MultiplexRegister(PITMUX)
该寄存器对定时器通道的
8
位时基进行选择。因为
8
位计数器只有两个,所以在将
8
位计数器和
16
位计数器连接时,可以选择不同的
8
位时基。
当设置为
0
时,对应通道选择时基
0
;置一时,对应通道选择时基
1
。
如
PITMUX_PMUX0=1
为通道
0
选择时基
1
。
6)
、
PIT Interrupt EnableRegister(PITINTE)
该寄存器为中断使能寄存器,为不同的
PIT
通道中断使能。设定为
0
时,相应通道中断禁止。置一时,相应通道使能。
如
PITINTE_PINTE0=1
时,
PIT
通道
0
定时中断使能,当计数器递减溢出时,申请中断。
7)
、
PIT Time-Out FlagRegister(PITTF)
该寄存器为溢出标志位,当某一通道的
8
位计数器和
16
位计数器递减到
0
时,该位置一。给改位写
1
则清除该标志位。
可以通过查询该位来判断定时是否完成。
作者:
懂懂
时间:
2010-5-14 12:24
总结的太好了!谢谢!
作者:
yyuuxxii2
时间:
2010-5-22 22:22
太好了
作者:
武当奇人
时间:
2010-5-28 21:09
再加一段代码
CODE:
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
//==================================================
//定时中断函数
//定时中断0实现500MS定时
//==================================================
#define PITTIME 5000//设定为50MS定时
unsigned int vTmpPIT=0;
//锁相环部分
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关 PIT使能端
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(;;) {} /* wait forever */
/* please make sure that you never leave this function */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
vTmpPIT++;
if(vTmpPIT==10)
{
PORTB=~PORTB;//输出取反
vTmpPIT=0;
}
PITTF_PTF0=1;//清中断标志位
}
作者:
zhangjiarui
时间:
2010-11-29 09:28
好
作者:
990610
时间:
2010-12-7 21:33
如果将 PORTB=~PORTB;//输出取反的 ~PORTB改成其他数,怎么不好使,一直没有闪烁?
作者:
990610
时间:
2010-12-7 21:34
如果将 PORTB=~PORTB;//输出取反的 ~PORTB改成其他数,怎么不好使,一直没有闪烁?
作者:
pangkang
时间:
2010-12-7 22:16
如果中断里程序执行时间大于定时时间会怎么样?这样允许吗/
作者:
LYL0707
时间:
2011-1-13 15:08
不错,PIT很难找,书上也查不到
作者:
李晓琪
时间:
2011-1-14 10:06
谢谢大虾!
作者:
lovechezu
时间:
2011-1-18 21:12
呵呵~~谢了!
作者:
败类爪爪
时间:
2011-3-6 19:03
回复
4#
武当奇人
PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
请问这句什么意思,不是8位定时器已经设定了吗,为什么还要设16位的,而且PITTIME-1什么意思也不懂,拜托高手帮忙回答下我。
作者:
一桶浆糊
时间:
2011-3-9 21:55
xiela
作者:
CCGOGO
时间:
2011-4-2 16:13
xiexie 学习学习
作者:
Rblyun027
时间:
2011-5-11 20:28
PIT是有四个中断吗??
PIT0 PIT1有什么区别???
主要是这句
void interrupt 66 PIT0(void)
作者:
sb030706
时间:
2011-5-28 09:32
回复
15#
Rblyun027
有中断向量表啊,查查就知道了
[attach]7614[/attach]
[attach]7613[/attach]
作者:
wys839348916
时间:
2011-6-1 22:16
给力,谢谢~
回复
4#
武当奇人
作者:
wys839348916
时间:
2011-6-1 22:17
向楼主学习。。。
作者:
晚安
时间:
2011-9-3 14:04
大虾!
作者:
晚安
时间:
2011-9-3 16:49
使力……
作者:
RusonLuo
时间:
2011-9-29 23:20
受教了
作者:
whut_RY
时间:
2011-10-20 20:14
可以!
作者:
人车合一
时间:
2012-2-2 15:57
收获~~
作者:
yzf
时间:
2012-2-3 19:50
谢谢各位大侠
作者:
NNG95
时间:
2012-4-4 10:50
很感谢
作者:
oooooo
时间:
2012-4-29 09:36
顶他一大个
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2