最小化测试代码:仅保留定时器配置和周期修改逻辑,排除其他代码干扰。
// 定时器初始化
T1CON = 0x8000; // 使能定时器,预分频1:1
PR1 = 0xFFFF; // 初始周期最大值
_T1IF = 0; // 清除中断标志
_T1IE = 1; // 使能定时器中断
// 主循环中修改周期
while(1) {
if (需要修改周期) {
__builtin_disable_interrupts();
T1CONbits.TON = 0; // 停止定时器
TMR1 = 0; // 重置计数器
PR1 = new_PR1; // 写入新周期
T1CONbits.TON = 1; // 重启定时器
__builtin_enable_interrupts();
}
}
|