TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: itzeannet en 05 de Junio de 2019, 03:22:54
-
hola, tengo un problema con mi contador, no logra aparecer las decenas, estoy trabajando por medio de interrupciones con tmr0 y por RB0 con el PIC16F648. El programa va contando del 0 al 99 hasta que se aprieta un botón este se reinicia. aquí les dejo el programa, espero y puedan ayudarme.
__CONFIG 0X3F50
STATUS EQU 0X03
PORTA equ 0x05
TRISA EQU 0X85
PORTB EQU 0X06
TRISB EQU 0X86
INTCON EQU 0X0B
OPT_REG EQU 0X81
TMR0 EQU 0X01
PCL EQU 0X02
REPETICION EQU 0X21
UNIDAD EQU 0X22
DECENA EQU 0X23
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO SUB_INTER
INICIO
BSF STATUS,5
MOVLW 0X01
MOVWF TRISB
CLRF TRISA
MOVLW 0X44
MOVWF OPT_REG
BCF STATUS,5
MOVLW 0XB0
MOVWF INTCON
MOVLW 0X63
MOVWF TMR0
CLRF DECENA
CLRF UNIDAD
CLRF REPETICION
UN
NOP
NOP
GOTO UN
NUMERO
ADDWF PCL,1
RETLW 0X7E
RETLW 0X0C
RETLW 0XB6
RETLW 0X9E
RETLW 0XCC
RETLW 0XDA
RETLW 0XFA
RETLW 0X0E
RETLW 0XFE
RETLW 0XCE
SUB_INTER
BTFSC INTCON,1
GOTO INT_RB0
GOTO INT_TM
INT_TM
MOVLW 0X63
MOVWF TMR0
BCF INTCON,2
; BTFSS PORTA,0
GOTO DECENA_1
GOTO UNIDAD_1
UNIDAD_1
MOVLW 0X02
MOVWF PORTA
MOVF UNIDAD,0
CALL NUMERO
MOVWF PORTB
GOTO OTRO
DECENA_1
MOVLW 0X01
MOVWF PORTA
MOVF DECENA,0
CALL NUMERO
MOVWF PORTB
OTRO
INCF REPETICION
MOVF REPETICION,0
SUBLW 0XC8
BTFSS STATUS,2
RETFIE
CLRF REPETICION
INCF UNIDAD, 1
MOVF UNIDAD,0
SUBLW 0X0A
BTFSS STATUS,2
RETFIE
CLRF UNIDAD
INCF DECENA,1
MOVF DECENA,0
SUBLW 0X0A
BTFSS STATUS,2
RETFIE
CLRF DECENA
RETFIE
INT_RB0
BCF INTCON,1
CLRF UNIDAD
CLRF DECENA
CLRF REPETICION
RETFIE
END
-
Que tal itzeannet,
Tu problema radica en que necesitas apagar los comparadores del puerto A , es decir definirlo como digital, ya que en este microcontrolador en particular el puerto A está definido como analógico por default. Lo que tienes que hacer es agregar la siguiente instrucción:
MOVLW 0X07
MOVWF CMCON
Yo te recomiendo usar el archivo de definicones propio del MPASM para que no tengas que definir cada registro manualmente como lo estas haciendo. Lo que tu haces es esto:
STATUS EQU 0X03
PORTA equ 0x05
TRISA EQU 0X85
PORTB EQU 0X06
TRISB EQU 0X86
INTCON EQU 0X0B
OPT_REG EQU 0X81
TMR0 EQU 0X01
PCL EQU 0X02
pero eso se puede evitar incluyendo el archivo .inc correspondiente, de la siguiente manera:
LIST P=16F648A
INCLUDE "P16F648A.INC"
Esto lo agreagas al mero comienzo de tu código.
elreypic.