- UID
- 343945
- 性别
- 男
|
我用ms9s12dg128b的模数向下计数器来实现定时发生中断的功能,系统时钟和ECT模块时钟都保持默认值,产生中断时,让PT0口输出一个脉冲.程序中将MCCNT=200时,用示波器观察每25us产生一次中断,MCCNT=100时每12.5us产生一次中断,MCCNT=50时每6.2us产生一次中断.
可是当我把MCCNT的值设定到20、10、5等时,中断间隔的时间却始终都在2.9us~3.5us左右,我不知道为什么计数器MCCNT设定的值成比例的减小,而中断的时间却不变.如果我想获得1us多一点的定时中断时间,我该怎么设定呢??
这个问题困扰了我很久
请各位高手指教啊,谢谢!!!
下面是我的程序:
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
//unsigned int time_count=28;
void PIM_Init(void)
{
DDRT|=0x01; //T口设置为输出
}
void main(void)
{
/* put your own code here */
PIM_Init();
PEAR_NECLK=1;
MCFLG_MCZF=1;
MCCTL|=0xC4;
MCCTL&=0xFC;
//COPCTL_RSBCK=0;
//PWMCTL_PSWAI=0;
//PWMCTL_PFRZ=0;
//TSCR1_TSWAI=0;
//TSCR1_TSFRZ=0;
ICSYS=0x00;
MCCNT=10; //MCCNT设置为10
MCCTL_FLMC=1;
INTCR_IRQEN = 0;
EnableInterrupts;
for(;;) {} /* wait forever */
}
///////////////////////////////////////////////////////////////////////////
/////中断函数///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
#pragma CODE_SEG NON_BANKED
void interrupt underflow(void)
{
MCFLG_MCZF=1; //清MCZF的中断
PTT|=0x01; //PT0输出高电平
PTT&=0xFE; //PT0输出低电平
}
#pragma CODE_SEG DEFAULT |
|