tengo un programa de control de motor dc con pic 16f84a que funciona con finales de carera necesito agregarle control PWM les dejo el programa por si alguien puede ayudarme por favor es urgente.
list p=16F84a
include p16F84a.inc
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;---------------------DEFINIR VARIABLES------------------------------------------------
#define GirarAdelante PORTA,0 ; pulsador de partida de motor hacia adelante
#define LlegoAdelante PORTA,1 ; final de carrera de motor hacia adelante
#define GirarAtras PORTA,2 ; pulsador de partida de motor hacia atras
#define LlegoAtras PORTA,3 ; final de carrera de motor hacia atras
;--------------------RESET------------------------------------------------------------
org 0x00 ; cada vez que ocurra un reset el programa vuelve a esta direccion
;-------------------ASIGNACION DE PUERTOS---------------------------------------------
bsf STATUS,RP0 ; se raliza cambio del banco 0 al banco 1
movlw 0xFF ; se carga W con valor 255= 11111111
movwf TRISA ; carga el registro TRISA con 11111111 (RA0,RA1,RA2,RA3,RA4 como entradas)
movlw 0xE0 ; se carga W con valor 224 = 11100000
movwf TRISB ; carga el registro TRISB 11100000 (RB0,RB1,RB2,RB3,RB4 como salidas)
bcf STATUS,RP0 ; se realiza cambio de banco 1 al banco 0
clrf PORTB ; se borra el contenido del registro PORTB
;-----------------PROGRAMA------------------------------------------------------------
principal
btfss GirarAdelante ; SI RA0 es 0 la instruccion que sigue se ejecuta normalmente sino
goto revisar_1 ; la ignora y se produce un salto
goto Girar_Adelante
revisar_1
btfss LlegoAdelante ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
goto revisar_2 ; la ignora y se produce un salto
goto Parar
revisar_2
btfss GirarAtras ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
goto revisar_3 ; la ignora y se produce un salto
goto Girar_Atras
revisar_3
btfss LlegoAtras ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
goto principal ; la ignora y se produce un salto
goto Parar
goto principal
Girar_Adelante
movlw b'00001101' ; carga W con el numero binario 00001101
movwf PORTB ; mueve el valor de W al registro PORTB
goto principal ; salta a principal
Girar_Atras
movlw b'00010110' ; carga W con el valor binario 00010110
movwf PORTB ; mueve el valor de W a PORTB
goto principal ; salta a principal
Parar
bcf PORTB,2 ; pone a 0 RB2
bcf PORTB,3 ; pone a 0 RB3 cuando se detiene motor hacia adelante
bcf PORTB,4 ; pone a 0 RB4 cuando se detiene motor hacia atars
goto principal ; salta a principal
end