最小化测试代码:仅保留定时器配置和周期修改逻辑,排除其他代码干扰。
- // 定时器初始化
- 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();
- }
- }
|