Tarde un poco en subir el nuevo código porque se me complico el tema de la interrupción, pero ya lo pude solucionar. El tema del multiplexado lo dejé así porque cuando lo cambie fallaba en el proteus, lo único que voy a hacer es agregarle un delay de 50 ms aproximadamente entre el apagado y el encendido del mismo cuando tenga que probarlo en el entrenador digital.
Ahora si el problema seria como recibir por usart un código ascii y apartir de que letra represente llamar a alguna rutina, por ejemplo si recibí una "s" el programa comienza a contar (s de start), yo tenia pensado mover RCREG a algun registro y ahi compararlo con h73 o h73, pero primero que nada debería lograr recibir los datos jajajajaj
;======================================================================================
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created: mar mar 17 2015
; Processor: PIC16F88
; Compiler: MPASM (MPLAB)
;====================================================================
;====================================================================
; DEFINITIONS
;====================================================================
#include p16f88.inc ; Include register definition file
__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _MCLR_OFF& _LVP_OFF & _INTRC_IO
;====================================================================
; VARIABLES
;====================================================================
cblock H'70'
d1
d2
uni
dec
cent
contint
DATIN
STATUS_TEMP
W_TEMP
PCLATH_TEMP
endc
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
ORG 0x00
goto Start
ORG 0x04
goto interrupcion
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
;---------------------puertos--------------------------------------------------
bsf STATUS, RP0
movlw b'00000111'
movwf TRISA
MOVLW B'00100100'
MOVWF TRISB
movlw 0x60
movwf OSCCON
clrf ANSEL
;---------------------timer----------------------------------------------------
bsf STATUS, RP0
movlw b'00000111'
movwf OPTION_REG
BANKSEL PORTA
movlw d'61'
movwf TMR0
;---------------------comunicacion serie----------------------------------------
banksel SPBRG
MOVLW D'25' ; 9600 BAUD @ 20 MHZ FOSC +0.16 ERR
MOVWF SPBRG
MOVLW B'00100100' ; BRGH = 1
MOVWF TXSTA ; ENABLE ASYNC TRANSMISSION, SET BRGH
BANKSEL RCSTA ; BANK0
MOVLW B'10010000'
MOVWF RCSTA ; ENABLE ASYNC RECEPTION
MOVF RCREG,W
MOVF RCREG,W
MOVF RCREG,W ; FLUSH RECEIVE BUFFER
;---------------------registros------------------------------------------------
call LCD_inicializa
clrf uni
clrf dec
clrf cent
clrf contint
;-----------------------PROGRAMAPRINCIPAL--------------------------------------
loop
call mostrar_dis
btfsc PORTA, 0
call reanudar
btfsc PORTA,1
call parar
btfsc PORTA,2
CALL resetear
goto loop
;-----------------------RUTINAS-----------------------------------------------
mostrar_dis
movf uni, w
swapf uni,w
movwf PORTA
bcf PORTB, 0
bsf PORTB,0
movf dec, w
swapf dec,w
movwf PORTA
bcf PORTB, 1
BSF PORTB,1
movf cent, w
swapf cent,w
movwf PORTA
bcf PORTB,3
BSF PORTB,3
return
;------------------------------------------------------------------------------
mostrar_lcd
call borra_display
movf cent, w
addlw d'48' ;pasaje decimal a ASCII , para que se muestre en LCD
call LCD_caracter
movf dec, w
addlw d'48' ;pasaje decimal a ASCII , para que se muestre en LCD
call LCD_caracter
movf uni, w
addlw d'48' ;pasaje decimal a ASCII , para que se muestre en LCD
call LCD_caracter
call Delay
return
;------------------------------------------------------------------------------
resetear
btfsc PORTA,2
GOTO resetear
clrf uni
clrf dec
clrf cent
BANKSEL TRISA
clrf INTCON
BANKSEL PORTA
return
;------------------------------------------------------------------------------
parar
btfsc PORTA,1
goto parar
BANKSEL TRISA
clrf INTCON
BANKSEL PORTA
return
;------------------------------------------------------------------------------
reanudar
btfsc PORTA,0
goto reanudar
BANKSEL TRISA
movlw b'10100000'
movwf INTCON
BANKSEL PORTA
return
;------------------------------------------------------------------------------
datos
BANKSEL PIR1
BTFSS PIR1,RCIF
RETURN
bsf PORTA,3
MOVF RCREG,W
return
;------------------------------------------------------------------------------
decrementar
btfsc PORTA, 3
goto decrementar
movlw d'61'
movwf TMR0
clrf contint
decf uni
movlw d'255'
subwf uni, w
btfsc STATUS, Z
call decdec
return
decdec
movlw d'9'
movwf uni
decf dec
movlw d'255'
subwf dec, w
btfsc STATUS, Z
call deccent
return
deccent
movlw d'9'
movwf dec
decf cent
movlw d'255'
subwf cent, w
btfsc STATUS, Z
call cargarcent
return
cargarcent
movlw d'9'
movwf cent
return
;------------------------------------------------------------------------------
incrementar
btfsc PORTA, 2
goto incrementar
inc MOVLW D'61'
movwf TMR0
clrf contint
incf uni
movlw d'10'
subwf uni, w
btfsc STATUS, Z
call incdec
return
incdec
clrf uni
incf dec
movlw d'10'
subwf dec, w
btfsc STATUS, Z
call inccent
return
inccent
incf cent
clrf dec
movlw d'10'
subwf cent, w
btfsc STATUS, Z
clrf cent
return
;------------------------------------------------------------------------------
;-------------------------RETARDOS----------------------------------------------
Delay
movlw 0x86
movwf d1
movlw 0x14
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay
goto $+1
nop
return
;-------------------------INTERRUPCIONES---------------------------------------
;interrupcion para 1 microsegundo(TMR0 EN 256 EN CONFIG)-----------------------
;call incint
;movlw d'256'
;movwf TMR0
;bcf INTCON,2
;RETFIE
;INTERRUPCION PARA 1 SEGUNDO(CAMBIANDO EL TMR0 A 61 EN CONFIG)------------------
interrupcion
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS, W ;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
MOVF PCLATH, W ;Only required if using page 1
MOVWF PCLATH_TEMP ;Save PCLATH into W
CLRF PCLATH ;Page zero, regardless of current page
BTFSC INTCON,2
GOTO Int_Tmr
BTFSC PIR1,RCIF
GOTO Int_Rcreg
Int_Rcreg
movf RCREG,W
GOTO salir
Int_Tmr
incf contint
movlw d'20'
subwf contint, w
btfss STATUS, Z
goto salir
MOVLW D'61'
movwf TMR0
clrf contint
incf uni
movlw d'10'
subwf uni, w
btfss STATUS, Z
goto salir
clrf uni
incf dec
movlw d'10'
subwf dec, w
btfss STATUS, Z
goto salir
incf cent
clrf dec
movlw d'10'
subwf cent, w
btfsc STATUS, Z
clrf cent
banksel TRISA
BCF INTCON,2
BANKSEL PORTA
goto salir
salir
BCF INTCON,2
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS, W ;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
MOVF PCLATH, W ;Only required if using page 1
MOVWF PCLATH_TEMP ;Save PCLATH into W
CLRF PCLATH ;Page zero, regardless of current page
RETFIE
#INCLUDE <LCD8BITS.INC>
;====================================================================
END