hola a todos, tengo un pequeño problema, e estado trabajando con el pic16f877 y con su convertidor analogo digital, hice un programa para chekar deacuerdo a una cierta cantidad de voltaje, mostrar ese voltaje en un display de 7 segmentos. Trabajando con el bit carry ya me salio y trabaja sin broncas, pero lo intente hacer con el bit z, y aun no entiendo por que no me sale!, ya lo revise y no tiene errores, pero no funciona, no entiendo en que estoy mal, les dejo el programa gracias de antemano por el tiempo.
Código:
list p=16f877
include <p16f877.inc>
__CONFIG _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF & _XT_OSC
cblock 0x20
regl
v0
v1
v2
v3
v4
v5
vg
endc
org 0x00
bcf STATUS,RP1
bsf STATUS,RP0
movlw b'00000000'
movwf TRISD
movwf TRISC
movlw b'11111111'
movwf TRISB
movlw b'00000000' ;se configuran los puertos de entrada analogos, en este ;caso todos, ADEMAS
movwf ADCON1 ; SE CONFIGURA EL FORMATO DE CONVERSION OSEA LO DEL ADRESH, Y ADRESL, EN ESTE CASO TODO SERA LEIDO EN EL ADRESH
bcf STATUS,RP0 ; ME REGRESO AL BANCO 1
movlw b'01000001' ;SE SELECCIONA LA FRECUENCIA Y EL CANAL PARA LEER LA ENTRADA ANALOGA DIGITAL
movwf ADCON0
movlw d'0'
movwf regl
movwf vg ;VARIABLE GENERAL QUE HARA SE INCREMENTARA PARA COMPARARSE CON LAS OTRAS VARIABLES
movwf v0
movlw d'50'
movwf v1
movlw d'100'
movwf v2
movlw d'150';PONGO CADA VARIABLE CON SU CORRESPONDIENTE VALOR, PARA CADA VOLTAJE
movwf v3
movlw d'200'
movwf v4
movlw d'250'
movwf v5
clrf PORTC
clrf PORTD
iniciob bsf ADCON0,2 ;INICIO LA LECTURA DEL CONVERTIDOR
espera btfss ADCON0,2
goto espera
goto mover
mover movfw ADRESH ;MUEVE EL VALOR DEL ADRESH HACIA LA V1
movwf regl
call chek1
call chek2
call chek3
call chek4
call chek5
goto iniciob
chek1 incf vg,f ;AQUI HAGO EL INCREMENTO DE LA VARIABLE GENERAL, PARA ASI AUMENTAR ESTA VARIABLE HASTA 50,, Y ME HAGA EL PROGRAMA
movfw vg ;50 COMPARACIONES PARA 1 VOLT
subwf v1,w ;EL RESULTADO DE LA RESTA SE GUARDA EN W
btfss STATUS,Z ; SI EL RESULTADO DE LA RESTA ES IGUAL A 0, TONS EL BIT Z SE PONE EN 1, POR LO TANTO EL CICLO SE HIZO 50 VECES Y YA SE REVISO EL CONVERSOR ANALOGO DIGITAL LAS 50 PRIMERAS VECES
goto n1 ;AQUI SE VA A ESTA ETIQUETA PARA COMPARAR SI ES REALMENTE 1 VOLT
return ;cuando se haga 50 veces tons se va a regresar a la etiqueta de "mover"
n1 movfw vg ;AQUI SE MUEVE LA VARIABLE vg QUE TIENE EL NUMERO DEL 1 AL 50
subwf regl,w ;SE RESTA ESTA VARIABLE DEL REGISTRO DEL ADRESL
btfss STATUS,Z ;SI Z ES IGUAL A 0 (QUE LA RESTA DA UN NUMERO DIFERENTE, OSEA LAS DOS VARIABLES NO SON IGUALES) SE VA A INCREMENTAR LA VARIABLE Y A COMPARAR
goto chek1
movlw b'00000110' ;SI NO SACA EL NUMERO DEL VOLTAJE QUE LE CORRESPONDE.
movwf PORTC
movwf PORTD
goto chek1
chek2 incf vg,f ;AQUI HAGO EL INCREMENTO DE LA VARIABLE GENERAL, PARA ASI AUMENTAR ESTA VARIABLE HASTA 50,, Y ME HAGA EL PROGRAMA
movfw vg ;50 COMPARACIONES PARA 2 VOLT
subwf v2,w ;EL RESULTADO DE LA RESTA SE GUARDA EN W
btfss STATUS,Z ; SI EL RESULTADO DE LA RESTA ES IGUAL A 0, TONS EL BIT Z SE PONE EN 1, POR LO TANTO EL CICLO SE HIZO 50 VECES Y YA SE REVISO EL CONVERSOR ANALOGO DIGITAL LAS 50 PRIMERAS VECES
goto n1 ;AQUI SE VA A ESTA ETIQUETA PARA COMPARAR SI ES REALMENTE 1 VOLT
return
n2 movfw vg ;AQUI SE MUEVE LA VARIABLE vg QUE TIENE EL NUMERO DEL 1 AL 50
subwf regl,w ;SE RESTA ESTA VARIABLE DEL REGISTRO DEL ADRESL
btfss STATUS,Z ;SI Z ES IGUAL A 0 (QUE LA RESTA DA UN NUMERO DIFERENTE, OSEA LAS DOS VARIABLES NO SON IGUALES) SE VA A INCREMENTAR LA VARIABLE Y A COMPARAR
goto chek2
movlw b'01011011' ;SI NO SACA EL NUMERO DEL VOLTAJE QUE LE CORRESPONDE.
movwf PORTC
movwf PORTD
goto chek2
chek3 incf vg,f ;AQUI HAGO EL INCREMENTO DE LA VARIABLE GENERAL, PARA ASI AUMENTAR ESTA VARIABLE HASTA 50,, Y ME HAGA EL PROGRAMA
movfw vg ;50 COMPARACIONES PARA 2 VOLT
subwf v3,w ;EL RESULTADO DE LA RESTA SE GUARDA EN W
btfss STATUS,Z ; SI EL RESULTADO DE LA RESTA ES IGUAL A 0, TONS EL BIT Z SE PONE EN 1, POR LO TANTO EL CICLO SE HIZO 50 VECES Y YA SE REVISO EL CONVERSOR ANALOGO DIGITAL LAS 50 PRIMERAS VECES
goto n1 ;AQUI SE VA A ESTA ETIQUETA PARA COMPARAR SI ES REALMENTE 1 VOLT
return
n3 movfw vg ;AQUI SE MUEVE LA VARIABLE vg QUE TIENE EL NUMERO DEL 1 AL 50
subwf regl,w ;SE RESTA ESTA VARIABLE DEL REGISTRO DEL ADRESL
btfss STATUS,Z ;SI Z ES IGUAL A 0 (QUE LA RESTA DA UN NUMERO DIFERENTE, OSEA LAS DOS VARIABLES NO SON IGUALES) SE VA A INCREMENTAR LA VARIABLE Y A COMPARAR
goto chek3
movlw b'01011011' ;SI NO SACA EL NUMERO DEL VOLTAJE QUE LE CORRESPONDE.
movwf PORTC
movwf PORTD
goto chek3
chek4 incf vg,f ;AQUI HAGO EL INCREMENTO DE LA VARIABLE GENERAL, PARA ASI AUMENTAR ESTA VARIABLE HASTA 50,, Y ME HAGA EL PROGRAMA
movfw vg ;50 COMPARACIONES PARA 2 VOLT
subwf v4,w ;EL RESULTADO DE LA RESTA SE GUARDA EN W
btfss STATUS,Z ; SI EL RESULTADO DE LA RESTA ES IGUAL A 0, TONS EL BIT Z SE PONE EN 1, POR LO TANTO EL CICLO SE HIZO 50 VECES Y YA SE REVISO EL CONVERSOR ANALOGO DIGITAL LAS 50 PRIMERAS VECES
goto n1 ;AQUI SE VA A ESTA ETIQUETA PARA COMPARAR SI ES REALMENTE 1 VOLT
return
n4 movfw vg ;AQUI SE MUEVE LA VARIABLE vg QUE TIENE EL NUMERO DEL 1 AL 50
subwf regl,w ;SE RESTA ESTA VARIABLE DEL REGISTRO DEL ADRESL
btfss STATUS,Z ;SI Z ES IGUAL A 0 (QUE LA RESTA DA UN NUMERO DIFERENTE, OSEA LAS DOS VARIABLES NO SON IGUALES) SE VA A INCREMENTAR LA VARIABLE Y A COMPARAR
goto chek4
movlw b'01100110' ;SI NO SACA EL NUMERO DEL VOLTAJE QUE LE CORRESPONDE.
movwf PORTC
movwf PORTD
goto chek4
chek5 incf vg,f ;AQUI HAGO EL INCREMENTO DE LA VARIABLE GENERAL, PARA ASI AUMENTAR ESTA VARIABLE HASTA 50,, Y ME HAGA EL PROGRAMA
movfw vg ;50 COMPARACIONES PARA 2 VOLT
subwf v5,w ;EL RESULTADO DE LA RESTA SE GUARDA EN W
btfss STATUS,Z ; SI EL RESULTADO DE LA RESTA ES IGUAL A 0, TONS EL BIT Z SE PONE EN 1, POR LO TANTO EL CICLO SE HIZO 50 VECES Y YA SE REVISO EL CONVERSOR ANALOGO DIGITAL LAS 50 PRIMERAS VECES
goto n1 ;AQUI SE VA A ESTA ETIQUETA PARA COMPARAR SI ES REALMENTE 1 VOLT
return
n5 movfw vg ;AQUI SE MUEVE LA VARIABLE vg QUE TIENE EL NUMERO DEL 1 AL 50
subwf regl,w ;SE RESTA ESTA VARIABLE DEL REGISTRO DEL ADRESL
btfss STATUS,Z ;SI Z ES IGUAL A 0 (QUE LA RESTA DA UN NUMERO DIFERENTE, OSEA LAS DOS VARIABLES NO SON IGUALES) SE VA A INCREMENTAR LA VARIABLE Y A COMPARAR
goto chek5
movlw b'01101101' ;SI NO SACA EL NUMERO DEL VOLTAJE QUE LE CORRESPONDE.
movwf PORTC
movwf PORTD
goto chek5
end