本帖最后由 sunjd 于 2025-10-30 08:57 编辑
那试试这个Timer0计数 + Timer1定时采样
; 使用Timer1产生固定采样周期(如10ms)
INIT_TIMER1_SAMPLING:
; 配置Timer1为定时器模式,10ms中断
MOVLW B'00000000' ; 预分频1:2, Timer1振荡器关闭
MOVWF T1CON
; 设置Timer1重载值(根据系统时钟计算)
MOVLW 0xXX ; 高字节
MOVWF TMR1H
MOVLW 0xXX ; 低字节
MOVWF TMR1L
; 使能Timer1中断
BSF T1CR_AUXR, T1IE
BSF INTCON, GIE
RETURN
; Timer1中断服务程序
T1_INTERRUPT_SERVICE:
; 保护现场
MOVWF W_TEMP
SWAPF STATUS, W
MOVWF STATUS_TEMP
; 调用PWM检测函数
CALL CHECK_PWM_SIGNAL
; 清除Timer1中断标志
BCF T1CR_AUXR, T1IF
; 重载Timer1(如果需要)
MOVLW 0xXX
MOVWF TMR1H
MOVLW 0xXX
MOVWF TMR1L
; 恢复现场
SWAPF STATUS_TEMP, W
MOVWF STATUS
SWAPF W_TEMP, F
SWAPF W_TEMP, W
RETFIE
|