Saludos a todos.
Vengo de nuevo a matar un poco más mi ignorancia acerca de los pic y assembler.
Bueno, sucede que quería hacer un programa que me hiciera la conversión de analógico a digital del pin RA0 del 16f877; en fin, lo hice siguiendo los pasos de la hoja de datos, pero no veo ningún resultado en ADRESH:ADRESL, los dos siempre están en cero. Bueno, tal vez estoy haciendo mal la simulación en MPLAB, porque no sé como hacer una simulación de una entrada analógica. Sin embargo, el MPLAB no me da ningún mensaje de error. Pero hay algo que no está funcionando bien con el programa que hice.
En dicho programa tengo una rutina llamada conversión, la cual e:
Conversión
btfsc adcon0,2
goto Conversión
call delay_2Tad
goto Principal
Sucede que el bit 2 del registro adcon0 se pone en cero cuando estoy en la linea 'goto Conversión' y presiono F7 para el step into, pero aquí el programa no funciona a como debería. Al presionar F7 no se me ejecuta la instrucción 'goto Conversión', sino que el programa hace un salto a la linea numero 5 de la rutina Principal, y de ahí vuelve a comenzar el programa. Bueno, ese salto lo hace después de algunas evaluaciones de la instrucción btfsc, a como debería. La lógica de la secuencia es que al estar en la linea de 'goto Conversión' y al presionar F7, el programa debería hacer otra evaluación del bit 2 del registro adcon0 y luego saltar a la linea call delay_2Tad, pero no lo hace. Realmente no sé lo que esté mal. Aquí pongo todo el programa para que lo chequeen, y si hay algún comentario o sugerencia, se los agradeceré.
PD: El tirsB y el portB realmente no hacen ninguna función en el programa, ignorenlos.
Vengo de nuevo a matar un poco más mi ignorancia acerca de los pic y assembler.
Bueno, sucede que quería hacer un programa que me hiciera la conversión de analógico a digital del pin RA0 del 16f877; en fin, lo hice siguiendo los pasos de la hoja de datos, pero no veo ningún resultado en ADRESH:ADRESL, los dos siempre están en cero. Bueno, tal vez estoy haciendo mal la simulación en MPLAB, porque no sé como hacer una simulación de una entrada analógica. Sin embargo, el MPLAB no me da ningún mensaje de error. Pero hay algo que no está funcionando bien con el programa que hice.
En dicho programa tengo una rutina llamada conversión, la cual e:
Conversión
btfsc adcon0,2
goto Conversión
call delay_2Tad
goto Principal
Sucede que el bit 2 del registro adcon0 se pone en cero cuando estoy en la linea 'goto Conversión' y presiono F7 para el step into, pero aquí el programa no funciona a como debería. Al presionar F7 no se me ejecuta la instrucción 'goto Conversión', sino que el programa hace un salto a la linea numero 5 de la rutina Principal, y de ahí vuelve a comenzar el programa. Bueno, ese salto lo hace después de algunas evaluaciones de la instrucción btfsc, a como debería. La lógica de la secuencia es que al estar en la linea de 'goto Conversión' y al presionar F7, el programa debería hacer otra evaluación del bit 2 del registro adcon0 y luego saltar a la linea call delay_2Tad, pero no lo hace. Realmente no sé lo que esté mal. Aquí pongo todo el programa para que lo chequeen, y si hay algún comentario o sugerencia, se los agradeceré.
Código:
list p=16f877
processor "16f877.inc"
;***Comienzo a definir variables***
estado equ 0x03
trisA equ 0x85
trisB equ 0x86
portA equ 0x05
portB equ 0x06
adresh equ 0x1e
adresl equ 0x9e
adcon0 equ 0x1f
adcon1 equ 0x9f
;***Configuración del módulo A/D
;y puertos de entrada y salida***
Inicio
movlw b'00100000'
movwf estado
movlw 0x03 ;Cargo W=b'00011'
movwf trisA ;y lo paso a trisA.
movlw 0xff ;Cargo W=b'11111111'
movwf trisB ;y lo paso a trisB.
movlw b'10000100' ;Cargo W=b'0100' y lo paso a adcon1
movwf adcon1 ;para configurar las entradas analógicas.
Principal
bcf estado,5 ;Acceso al banco0.
movlw b'01000001' ;Selecciono el canal de entrada
movwf adcon0 ;y el clk de conversión para el A/D.
bcf 0ch,6 ;Pongo a cero el bit ADIF de PIR1.
bsf 0bh,7 ;Activo los bit GIE
bsf 0bh,6 ;y PEIE del registro INTCON.
bsf estado,5 ;Acceso al banco1.
bsf 8ch,6 ;Activo el bit ADIE del registro PIE1.
bcf estado,5 ;Acceso al banco0.
call Espera
bsf adcon0,2
Conversión
btfsc adcon0,2
goto Conversión
call delay_2Tad
goto Principal
Espera
movlw 0x1f
movwf 20h
loop
decfsz 20h,1
goto loop
return
delay_2Tad
movlw 0x15
movwf 20h
loop1
decfsz 20h,1
goto loop1
return
end
PD: El tirsB y el portB realmente no hacen ninguna función en el programa, ignorenlos.