定时器初始化程序 void TIMER_Init(void) { //系统定时器初始化 TIM4_IER = 0x00; //禁止中断 TIM4_PSCR = 0x01; //计数时钟=主时钟的2分频,即1MHZ TIM4_ARR = 0x9C; //自动重装值156,约每100微秒产生一次中断 TIM4_CNTR = 0x9C... 定时器初始化程序
void TIMER_Init(void)
{
//系统定时器初始化
TIM4_IER = 0x00; //禁止中断
TIM4_PSCR = 0x01; //计数时钟=主时钟的2分频,即1MHZ
TIM4_ARR = 0x9C; //自动重装值156,约每100微秒产生一次中断
TIM4_CNTR = 0x9C; //
TIM4_IER = 0x01; //计数器中断开启
TIM4_EGR = 0x01; //允许产生更新事件
TIM4_CR1 = 0x81; //开启计数器
return;
}
定时中断
@far @interrupt void Timer4IRQHandler(void)
{
TIM4_SR =0x00; //清除更新标志
i++;
if(i<10000)
return;
i=0;
PD_ODR = PD_ODR ^ 0x08; //端口设置
return;
}
系统时钟使用内部RC振荡器,16M,默认8分频为2M,
请教 大侠,无论我怎么改变TIM4_ARR = 0x9C后面的数字,
LED闪烁变化不大,约为亮0.4秒,灭0.4秒
将
if(i<10000)
为
if(i<60000)
LED闪烁速度变化相当大,亮约2.6秒,灭约2.6秒
而按手册所讲,为60000时,应该亮6秒,灭6秒。
请问一下,我的问题出在哪,
不动脑筋的复制粘贴党滚远点!
// TIM4测试程序,编译器为IAR,硬件为STM8S003
#include
#include
uint16_t xms;
void t4_init()
{
TIM4_PSCR = 0x03; // 预分频值为8,4uS计数时间
TIM4_ARR = 0xF9; // 自动装载值,4us*(249+1)=1mS更新一次
TIM4_CNTR = 0x00; // 计数器值
TIM4_IER = 0x01; // 允许T4更新中断
TIM4_CR1 = 0x81; // 预装载T4,开计数器
}
void main( void )
{
PD_DDR = 0x08; // PD3设置为输出
PD_CR1 = 0x08; // PD3设置为推挽输出
t4_init(); // TIM4初始化
asm("rim"); // 开总中断
while(1);
}
#pragma vector=25
__interrupt void TIM4_IRQ(void)// T4中断函数,每1mS进入一次
{
TIM4_SR = 0; // 清除中断标志
++xms;
if(xms==1000) // 计数1000mS
{
xms = 0;
PD_ODR_ODR3 = !PD_ODR_ODR3; // 翻转PD3
}
}