Estoy intentando que el subsistema PWM funcione en un PIC16F887. He repasado esto varias veces y parece que no puedo encontrar mi problema.
Esto es parte de un programa más grande, pero por simplicidad reescribí solo la parte de PWM. Estoy utilizando la hoja de datos como mi guía para configurar el subsistema PWM, específicamente la página 131. no realmente preocupado por tener una frecuencia específica o ciclo de trabajo fuera. Solo estoy tratando de ver algún tipo de forma de onda fuera de los pines de PWM.
El código se compila bien, pero no obtengo salida de RC2.
Gracias por cualquier ayuda
No estoy seguro de por qué se dañó un poco la tabulación del código cuando se pegó en esta pregunta.
Placa: PIC16F887 c / w tarjeta de demostración de 44 pines (Microchip).
Programador: PICkit3
Compilador: gpasm
;*******************************************************
;Notes
;PWM is used on CCP1 which is P1A which is RC2
;********************************************************
INCLUDE registers.asm
__CONFIG 0X2EFF20E5
ORG 0x00
GOTO MAIN
;******************************************************
;Main Program Loop
;******************************************************
ORG 0X05
MAIN
CALL SETUP
CALL SETUP_PWM
wait
BTFSS PIR1,1 ;TEST TR2IF
GOTO wait
BSF STATUS,5 ;Select Bank1
CLRF TRISC ;START PWM
BCF STATUS,5 ;Select Bank0
BSF PORTD,0 ;ENTERING MAIN LOOP
main_loop
GOTO main_loop
;****************************************************************
;Setup Subroutine
;general setup
;****************************************************************
SETUP
BSF STATUS,6 ;SELECT BANK 3
BSF STATUS,5
MOVLW 0X00
MOVWF ANSELH ;CONFIGURE ALL PINS FOR DIGITAL IO
MOVWF ANSEL
BCF STATUS,6 ;SELECT BANK1
BSF OSCCON,4 ;OSCILLATOR TO LOW SPEED
BSF OSCCON,5
BSF OSCCON,6
MOVLW 0XFF
CLRF INTCON ;DISABLE INTERRUPTS
CLRF TRISD ;PORTD AS OUTPUT
BCF STATUS,5 ;SELECT BANK0
RETURN
;********************************************************
;SETUP PWM MODULE
;********************************************************
SETUP_PWM
BCF STATUS,6 ;SELECT BANK1
BSF STATUS,5
MOVLW 0XFF ;DEFINE PORT B AS INPUT
MOVWF TRISC ;PORT C INPUT
MOVWF PR2 ;SET PWM PERIOD TO 33ms
BCF STATUS,5 ;SELECT BANK0
MOVLW 0X0C ;SET FOR SINGLE OUTPUT ON P1A AND
MOVWF CCP1CON ;ACTIVE HIGH. LSBS OF DUTY =0
MOVLW 0X25
MOVWF CCPR1L ;SET HIGH BITS FOR DC=50% (Roughly)
BCF PIR1,1 ;CLEAR TMR2IF
BCF T2CON,0 ;SET TIMER2 PRESCALER TO 1
BCF T2CON,1
BSF T2CON,2 ;START TMR2
RETURN
END
Según lo solicitado, registers.asm
;*******************************************
;ANY BANK
;*******************************************
STATUS equ 0x03
INTCON equ 0x0B
;*******************************************
;Bank 0 Registers
;*******************************************
PORTB equ 0x06
PORTC equ 0x07
PORTD equ 0x08
PIR1 equ 0x0c
T2CON equ 0x12
CCPR1L equ 0x15
CCPR1H equ 0x16
CCP1CON equ 0x17
CCPR2L equ 0x1b
CCPR2H equ 0x1c
CCP2CON equ 0x1d
;*******************************************
;Bank 1 Registers
;*******************************************
OPTION_REG equ 0x81
TRISB equ 0x86
TRISC equ 0x87
TRISD equ 0x88
PIE1 equ 0x8c
OSCCON equ 0x8f
PR2 equ 0x92
WPUB equ 0x95
;*******************************************
;Bank 3 Registers
;*******************************************
ANSEL equ 0x0188
ANSELH equ 0x0189