使用 CCP4 在 PIC18 上进行 PWM
PWM on a PIC18 using CCP4
我在 PIC18F45K22 上设置 PWM 时遇到问题。我可以使用 timer2 在 CCP1 上运行它,但我想使用 CCP4 和 timer4,因为我计划在其他地方使用 CCP1 和 timer2。
我正在用汇编代码 (mpasm v5.87)。我不确定为什么它不会在带有 timer4 的 CCP4 上使用,即使相同的代码适用于带有 timer2 的 CCP1。以下是我的代码,希望 PIC 天才能够发现我的错误。
; Set oscillator speed at 4 MHz
bsf OSCCON, IRCF0
bcf OSCCON, IRCF1
bsf OSCCON, IRCF2
; Initialize Port D
clrf PORTD
clrf LATD
bsf TRISD, CCP4
; Set up Timer 4
clrf T4CON
clrf TMR4
; Select timer4 for PWM
bcf CCPTMRS1, C4TSEL1
bsf CCPTMRS1, C4TSEL0
; Setup period of PWM
movlw .10
movwf PR4
; Configure CCP4CON for PWM
; CCP4M<3:0> = 11XX for PWM
movlw b'00001100'
movwf CCP4CON
; Set duty cycle at 50%
movlw .5
movwf CCPR4L
; Clear timer4 interrupt flag
bcf PIR5, TMR4IF
; Start timer4
bsf T4CON, TMR4ON
; RD1 as output
bcf TRISD, CCP4
我已经解决了这个问题。
我意识到 T4CON、TMR4、CCPTMRS1、PR4 和 CCPR4L 不在访问库中,而定时器 2 和 CCP1 的相应寄存器在访问库中。
我需要做的就是 select bank 15 和 MOVLB 0x0F
我在 PIC18F45K22 上设置 PWM 时遇到问题。我可以使用 timer2 在 CCP1 上运行它,但我想使用 CCP4 和 timer4,因为我计划在其他地方使用 CCP1 和 timer2。
我正在用汇编代码 (mpasm v5.87)。我不确定为什么它不会在带有 timer4 的 CCP4 上使用,即使相同的代码适用于带有 timer2 的 CCP1。以下是我的代码,希望 PIC 天才能够发现我的错误。
; Set oscillator speed at 4 MHz
bsf OSCCON, IRCF0
bcf OSCCON, IRCF1
bsf OSCCON, IRCF2
; Initialize Port D
clrf PORTD
clrf LATD
bsf TRISD, CCP4
; Set up Timer 4
clrf T4CON
clrf TMR4
; Select timer4 for PWM
bcf CCPTMRS1, C4TSEL1
bsf CCPTMRS1, C4TSEL0
; Setup period of PWM
movlw .10
movwf PR4
; Configure CCP4CON for PWM
; CCP4M<3:0> = 11XX for PWM
movlw b'00001100'
movwf CCP4CON
; Set duty cycle at 50%
movlw .5
movwf CCPR4L
; Clear timer4 interrupt flag
bcf PIR5, TMR4IF
; Start timer4
bsf T4CON, TMR4ON
; RD1 as output
bcf TRISD, CCP4
我已经解决了这个问题。
我意识到 T4CON、TMR4、CCPTMRS1、PR4 和 CCPR4L 不在访问库中,而定时器 2 和 CCP1 的相应寄存器在访问库中。
我需要做的就是 select bank 15 和 MOVLB 0x0F