历史上的今天
今天是:2025年04月19日(星期六)
2021年04月19日 | MC9S12G定时器中断设置
2021-04-19 来源:eefocus
一、关闭定时器模块
时TSCR1的TEN位为0;
二、设定IOSx为输出比较引脚(以7为例)
TIOS_IOS7 = 1;
三、绑定输出比较引脚
TCTL1_OM7 = 0;
TCTL1_OL7 = 1;
四、设置计数器的比较值(在24Mhz的系统时间下,0xBB为1ms)中断周期:0x4926*128/24MHz = 100ms
TC7 = 0xBB;
五、设置定时器分频设置(以128分频为例)
TSCR2_PR = 0x7;
六、设置定时器比较成功后输出从而产生中断
TSCR2_TCRE = 1;
七、最后开启定时器
TSCR1_TEN = 1;
八、中断函数要写为
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt VectorNumber_Vtimch7 TIM7_ISR(void)
{
//并且每次中断后要清除标志位
TFLG1 =128U;
}
代码
void OutputCompare_Init(void)
{
TSCR1_TEN = 0; /* Disable Timer module before adjusting registers. */
TIOS_IOS7 = 1; /* Set Channel 0 as output compare. */
TCTL1_OM7 = 0; /* Set channel 0 to toggle when a Timer match occurs. */
TCTL1_OL7 = 1; /* Set channel 0 to toggle when a Timer match occurs. */
TC7 = 0xBB; /* Set a value for channel 0 timer compare. */
TIE_C7I = 1; /* Enable channel 0 interrupt, handled by function TIM0ISR. */
TSCR1_TSWAI = 1; /* Disables the timer module while in wait mode. */
TSCR1_TSFRZ = 1; /* Disables the timer counter while in freeze mode. */
TSCR2_PR = 0x7; /* Set prescaler to divide by 128 */
TSCR2_TCRE = 1;
TSCR1_TEN = 1; /* Timer Enable. */
//中断周期:0x4926*128/24MHz = 100ms
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt VectorNumber_Vtimch7 TIM7_ISR(void)
{
TFLG1 =TFLG1_C7F_MASK; /* Clear channel 0 flag. */
PORTB ^= bit4;
}
史海拾趣
|
最近正在做一个同时电压和电流的电路 。现在有个问题。 单独测量电压和电流都没有问题,只是不能同时测量,同时测量的话,电压正常,电流就不对了。 电流测量点是在VDD端,我估计可能是共模干扰的问题,但是不知道怎么解决。 请高手指点,不胜感 ...… 查看全部问答> |
|
C++: The Complete Reference, 3rd Edition Product DescriptionBest-selling genius Herb Schildt covers everything from keywords, syntax, and libraries, to advanced features such as overloading, inheritance, virtual functions, name ...… 查看全部问答> |
|
最近用到AD698来检测位移,用示波器发现698输出的直流电压有纹波,大约10mv,几十Hz,即使使用电池供电也照样存在!想用简单的阻容滤除,但电容加大到100uF才滤掉了纹波!但此时出现了一个非常讨厌的现象:   ...… 查看全部问答> |
|
版主,我用的是207R8,想使用串口1,如何配置寄存器,才能使它像普通单片机串口一样收发使用呢,寄存器配置太多,不知道如何使用了 使用库函数也行啊 我使用的是 stvp,外部时钟 22.1184… 查看全部问答> |




