Hola, soy nuevo en el foro, el tema expresado ya lo eh buscado, eh encontrado parecidos pero no los comprendo del todo, quisiera me ayuden orienten.
Tengo que realizar un contador 00-99 por interrupciones en RA4 utilizando el timer0, tengo el programa que cuenta al 9 y no logro hacer contar las decenas solo muestra el 0 (en decenas). Les muestro el ASM y espero me puedan ayudar y me aclaren en donde me equivoque, si tienen otro modo de escribir este programa, también lo agradecería.
Es con el pic 16f877a
#include <p16f877a.inc>
CONF_ADCON1 equ b'00000110' ;PA entrada digital
CONF_OPT equ 0xF8 ;Valor al TMR0
LIMITE equ 0x0A ;Limite de display
TEMP equ 0x21 ;Variable
TEMP2 equ 0x22
conta equ 0x23
org 00
nop
nop
ini bsf STATUS,RP0
bcf STATUS,RP1
movlw CONF_ADCON1 ;PA como entrada digital
movwf ADCON1
movlw 0xFF
movwf TRISA ;PA entrada
clrf TRISC ;PD salida
clrf TRISD ;PC salida
movlw CONF_OPT
movwf OPTION_REG ;Configuracion del TMRO
bcf STATUS,RP0
bcf STATUS,RP1
clrf TMR0
clrf conta
bucle movf TMR0,W
movwf TEMP
movlw LIMITE
xorwf TEMP,W
btfss STATUS,Z
goto sigue
goto dece
sigue movf TEMP,W
call tabla ;Decodifica el valor de DISPLAY
movwf PORTC ;Escribe el valor en PORTC
goto bucle ;Salta a la etiqueta bucle
dece clrf TMR0
clrf TEMP
movf conta,W
movwf TEMP2
incf TEMP2,W
movlw LIMITE
xorwf TEMP2,W ;W XOR TEMP
btfss STATUS,Z ;EL resultado de la anterior instruccion es 0?
goto sigue2 ;Z=0, NO es diferente de 0, TMRO = 0,1,2,3,4,5,6,7,8,9
clrf TMR0 ;Z=1, SI vale 10, TMRO > 9, TMR0=0
clrf TEMP ;Temp=0
sigue2 movf TEMP,W
call tabla ;Decodifica el valor de DISPLAY
movwf PORTD ;Escribe el valor en PORTD
goto bucle ;Salta a la etiqueta bucle
tabla addwf PCL,f
retlw 3Fh ;0
retlw 06h ;1
retlw 5Bh ;2
retlw 4Fh ;3
retlw 66h ;4
retlw 6Dh ;5
retlw 7Dh ;6
retlw 07h ;7
retlw 7Fh ;8
retlw 67h ;9
end
el programa es de:
http://www.alos.5u.com/pic16f877/Modulo2.html