Hola de nuevo, ya conseguí más o menos solucionar el problema anterior mediante el uso del timer0.
Ahora planteo otra duda que espero también resolver en breve. Es sobre el conversor A/D. Se supone que recibo por RA0 una tensión proveniente de un potenciómetro y de acuerdo con esta señal tendré que hacer que el circuito (led + contador) parpadeen a una determinada frecuencia (dependiendo de la posición del potenciómetro). Ahora bien, mi duda es como transformar los 10 bits del conversor (0-1023) en un número decimal con el que poder trabajar usando registros de 8 bits. Lo que se me había ocurrido era decrementar el total recibido en la conversión por el factor que diferencia a un estado de otro (suponiendo, por ejemplo, 15 posibles posiciones del potenciómetro) e incrementar una variable que sería la velocidad con la que actuaría el sistema.
Conversor_AD
movlw 0xA
movwf cont_pot
bsf ADCON0,GO ;Comenzamos la conversión A/D
Espera
btfsc ADCON0,GO ;Esperamos a que se complete la
goto Espera ;conversión, para ello preguntamos
;por el estado del bit GO
movf ADRESL,W ;Cogemos la parte baja de la direccíón
;
movwf Potencia ;LEDs
; Potencia será un valor entre 0 y 1023, dependiendo de la tensión que entre
; por la puerta RA0 y, por tanto, de la situación de nuestro potenciómetro.
; Como no tenemos registros de 10 bits cogemos la parte baja del resultado
; que comprenderá valores de 0 - 255.
; Como no nos interesa más que un múltiplo de dicho valor dividiremos el
; resultado entre 15, los posibles estados de nuestro sistema y nos dará
; el valor de cada intervalo, 17
movlw D"17"
movwf incremento
suma
btfss STATUS,0 ; Mientras se active el flag de acarreo (borrow)
; tendremos un número mayor y seguimos restando
return
movfw incremento
subwf Potencia,0 ;Vamos decrementando a la cantidad obtenida
; del potenciómetro
movwf Potencia ; el valor base con el que dividimos la frecuencia de
; parpadeo
incf cont_pot ; e incrementamos el contador de frecuencia
goto suma
Muchas gracias por leer el ladrillo. Un saludo.