Buenas. Estoy haciendo un código sencillo donde:
1. Se asigna un valor a un DIP-SW
2. Se debe activar un pulsador NA
3. Se deben mostrar los valores asignados en 2 diplays 7 segmentos.
Al activar el pulsador 1 o 2 veces se deben mostrar los valores en los display la tercera vez, se debe borrar todo.
Mi problema está en que pregunto por el estado del pulsador, y luego asigno .3 a un contador que decremento hasta que llegue a 0 y borre todo, pero no está llegando a cero.
¿Alguna idea? Estoy empezado con esto de la programación en ensamblador, así que su ayuda será de gran utilidad.
Estoy trabajando con el PIC16F887
Más o menos así es lo que tengo:
1. Se asigna un valor a un DIP-SW
2. Se debe activar un pulsador NA
3. Se deben mostrar los valores asignados en 2 diplays 7 segmentos.
Al activar el pulsador 1 o 2 veces se deben mostrar los valores en los display la tercera vez, se debe borrar todo.
Mi problema está en que pregunto por el estado del pulsador, y luego asigno .3 a un contador que decremento hasta que llegue a 0 y borre todo, pero no está llegando a cero.
¿Alguna idea? Estoy empezado con esto de la programación en ensamblador, así que su ayuda será de gran utilidad.
Estoy trabajando con el PIC16F887
Más o menos así es lo que tengo:
PHP:
list P=16F887
#include p16f887.inc
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
CBLOCK 20H
VALOR
VALOR1
CONTNA
CONT1
CONT2
ENDC
ORG 0
BANKSEL ANSEL
CLRF ANSEL
CLRF ANSELH
BANKSEL TRISA
MOVLW B'11111111'
MOVWF TRISA
MOVWF TRISB
CLRF TRISC
CLRF TRISD
BANKSEL PORTA
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
INICIO
BTFSS PORTB,0
GOTO INICIO
MOVLW .3
MOVWF CONTNA
DECFSZ CONTNA
GOTO MOSTRAR
GOTO BORRAR
;SI SE PULSO NA
MOSTRAR
MOVFW PORTA ;MANDAR BITS DEL DIPS8 A LOS PINES
ANDLW 0x0F ;PARA SOLO USAR LOS 4BITS MAS BAJOS(CONTROLAR DISPLAY1)
CALL TABLA ;ASIGNAR VALORES SEGUN LA ENTRADA DE 4BITS
MOVWF PORTC ;MOVER AL DISPLAY 1
MOVFW PORTA ;MANDAR BITS DEL DIPS8 A LOS PINES
ANDLW 0xF0 ;PARA SOLO USAR LOS 4BITS MAS ALTOS(CONTROLAR DISPLAY2)
MOVWF VALOR ;GUARDO EL VALOR DE LA ENTRADA
SWAPF VALOR,W ;INTERCAMBIO VALORES DE LOS BITS DE ALTA Y LOS DE BAJA
CALL TABLA ;SELECCIONAR NUMERO
MOVWF PORTD ;MOVER AL DISPLAY 2
GOTO INICIO
BORRAR
CLRF PORTA
CLRF PORTC
CLRF PORTD
GOTO INICIO
TABLA
ADDWF PCL,F
RETLW B'00111111' ; 0 3F
RETLW B'00000110' ; 1 06
RETLW B'01011011' ; 2 5B
RETLW B'01001111' ; 3 4F
RETLW B'01100110' ; 4 66
RETLW B'01101101' ; 5 6D
RETLW B'01111101' ; 6 7D
RETLW B'00000111' ; 7 07
RETLW B'01111111' ; 8 7F
RETLW B'01100111' ; 9 67
RETLW B'01110111' ; A 77
RETLW B'01111100' ; B 7C
RETLW B'00111001' ; C 39
RETLW B'01011110' ; D 5E
RETLW B'01111001' ; E 79
RETLW B'01110001' ; F 71
END
Adjuntos
Última edición por un moderador: