Hola a todos . Les pido una disculpa por el retraso. Por alguna razon muchas veces me ha salido un letrero de "Service Unavailable" cada vez que quiero entrar al foro y por eso no habia podido publicar mas.
Gracias por sus respuestas y en especial a Firepic , por que tenias toda la razon con la interrupcion. Parte del problema fue que comente el timer 1 y por eso no se refrescaba el perro guardian.
Ya arregle eso ,ahora estoy seguro que se generan interrupciones por que puedo ver que cuando presiono el boton se agregan nuevos datos de "Nul" a los datos que recibe mi maquina. El problema es que siguen siendo puros datos "Nul" en lugar del dato que mando.
Este es mi codigo:
Primero la parte principal
;PRINCIPAL.ASM
INCLUDE<P16F88.INC>
ERRORLEVEL - 302
ERRORLEVEL - 305
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO INTERRUPCION
INCLUDE<INICIALIZAR.INC>
INCLUDE<CONFIGURACION.INC>
INCLUDE<INTERRUPCION.INC>
INCLUDE<EVENTOS.INC>
CUENTA_T1 EQU 0X20
CUENTA_AR1 EQU 0X21
CUENTA_AR2 EQU 0X22
CUENTA_AR3 EQU 0X23
W_TEMP EQU 0X70
STATUS_TEMP EQU 0X71
PCLATH_TEMP EQU 0X72
INICIO
;{;
CALL INICIALIZAR
CALL CONFIGURAR_IO
CALL CONFIGURAR_WDT
CALL CONFIGURAR_AUSART
CALL CONFIGURAR_RB0
CALL CONFIGURAR_T1
;};
GOTO $
END
Luego la inicializacion de los puertos
;INICIALIZAR.INC
INICIALIZAR
;{;
BSF STATUS,RP0 ;BANCO 1
CLRF ANSEL ;TODAS LOS PINES EN MODO DIGITAL
CLRF TRISA ;TODO EL PUERTO A COMO SALIDA (RA5/MCLR NO PUEDE SER SALIDA)
CLRF TRISB ;TODO EL PUERTO B COMO SALIDA
BCF STATUS,RP0 ;BANCO 0
MOVLW .99 ;VALOR PARA TENER TOGGLE CADA SEGUNDO
MOVWF CUENTA_T1 ;CONFIGURA LA CUENTA DE 1 SEGUNDO
CLRF PORTA ;TODO EL PUERTO A APAGADO
CLRF PORTB ;TODO EL PUERTO B APAGADO
;};
RETURN
Luego la configuracion de los modulos
;CONFIGURACION.INC
CONFIGURAR_IO
;{;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'11111111' ;TODO EL PUERTO A COMO ENTRADA
MOVWF TRISA ;CONFIGURAR IO PUERTO A
MOVLW B'11010111' ;RA3(LED)RA5(TX)COMO SALIDA
MOVWF TRISB ;CONFIGURAR IO PUERTO B
BCF STATUS,RP0
BCF PORTB,5
;};
RETURN
CONFIGURAR_WDT
;{;
BANKSEL WDTCON ;BANCO 2
CLRF WDTCON ;WDT SE DESBORDA CADA 2.62 CS
BCF STATUS,RP1 ;BANCO 0
;};
RETURN
CONFIGURAR_RB0
;{;
BCF STATUS,RP0 ;BANCO 0
;BTFSC PORTB,0 ;PRUEBA CUAL ES EL VALOR ACTUAL DE RB0
GOTO CONFIGURAR_RB0_D ;SI ESTA EN 1 CONFIGURA RB0 DECENDENTE
GOTO CONFIGURAR_RB0_A ;SI ESTA EN 0 CONFIGURA RB0 ASCENDENTE
CONFIGURAR_RB0_D
BSF STATUS,RP0 ;BANCO 1
BCF OPTION_REG,INTEDG ;CONFIGURA LAS INTERRUPCIONES RB0 EN FLANCO DE BAJADA
GOTO TERMINA_CONF_RB0 ;VE A TERMINA_CONF_RB0
CONFIGURAR_RB0_A
BSF STATUS,RP0 ;BANCO 1
BSF OPTION_REG,INTEDG ;CONFIGURA LAS INTERRUPCIONES RB0 EN FLANCO DE SUBIDA
TERMINA_CONF_RB0
BCF STATUS,RP0 ;BANCO 0
BCF INTCON,INTF ;LIMPIA LA BANDERA DE INTERRUPCION RB0
BSF INTCON,INTE ;HABILITA INTERRUPCIONES PUERTO RB0
BSF INTCON,GIE ;HABILITA INTERRUPCIONES GLOBALES
;};
RETURN
CONFIGURAR_AUSART
;{;
BSF STATUS,RP0 ;BANCO 1
MOVLW .25 ;LITERAL A W
MOVWF SPBRG ;CONFIGURA EL BAUDRATE GENERATOR 9600
BSF TXSTA,BRGH ;CONFIGURA EL BAUDRATE ALTO
BCF TXSTA,SYNC ;MODO ASINCRONO
BSF TXSTA,TXEN ;HABILITA LA TRANMISION DE DATOS
BCF STATUS,RP0 ;BANCO 0
;};
RETURN
CONFIGURAR_T1
;{;
BCF STATUS,RP0 ;BANCO 0
BCF PIR1,TMR1IF ;LIMPIA BANDERA DE INTERRUPCION POR TIMER1
;(USAR CRISTAL 4MHZ)
MOVLW B'11011000' ;NUMERO ALTO DE CONFIGURACION T1 PARA TENER DESBORDES DE 1CS
MOVWF TMR1H ;CONFIGURA T1H
;(USAR CRISTAL 4MHZ)
MOVLW B'11110001' ;NUMERO BAJO DE CONFIGURACION T1 PARA TENER DESBORDES DE 1CS
MOVWF TMR1L ;CONFIGURA T1L
MOVLW B'00000101' ;RELOJ FOSC/4
MOVWF T1CON ;CONFIGURA T1
BSF STATUS,RP0 ;BANCO 1
BSF INTCON,GIE ;HABILITA INTERRUPCIONES GLOBALES
BSF INTCON,PEIE ;HABILITA INTERRUPCIONES POR PERIFERICOS 1
BSF PIE1,TMR1IE ;HABILITA INTERRUPCIONES POR TIMER 1
;};
RETURN
Luego lo que hacen las interrupciones
;INTERRUPCION.INC
;---------------------------------------------------------------------------------------------
INTERRUPCION
;{;
INICIA_INT
CALL SALVA_ENTORNO
CALL IDENTIFICA_INT
FINALIZA_INT
CALL RESTAURA_ENTORNO
;};
RETURN
;---------------------------------------------------------------------------------------------
SALVA_ENTORNO
;{;
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
;};
RETURN
RESTAURA_ENTORNO
;{;
MOVF PCLATH_TEMP, W ;Restore PCLATH
MOVWF PCLATH ;Move W into PCLATH
SWAPF STATUS_TEMP, W ;Swap STATUS_TEMP register into W
;(sets bank to original state)
MOVWF STATUS ;Move W into STATUS register
SWAPF W_TEMP, F ;Swap W_TEMP
SWAPF W_TEMP, W ;Swap W_TEMP into W
;};
RETURN
IDENTIFICA_INT
;{;
BCF STATUS,RP0 ;BANCO 0
BTFSC PIR1,TMR1IF ;VE SI ESTA EN 1 LA BANDERA DE TIMER 1
GOTO DESBORDE_TIMER_1 ;EJECUTA EL DESBORDE DE TIMER1
BTFSC INTCON,INTF ;REVISA SI ESTA EN 1 LA BANDERA DE RBO
GOTO CAMBIO_RB0 ;EJECUTA EL CAMBIO EN RB0
;};
RETURN
;----------------------------------------------------------------------------------------------
DESBORDE_TIMER_1
;{;
BCF STATUS,RP0 ;BANCO 0
CLRWDT ;LIMPIA EL PERRO GUARDIAN
CALL CONFIGURAR_T1 ;CONFIGURA EL TIMER 1
BCF STATUS,RP0 ;BANCO 0 (EL BANCO CAMBIO EN CONFIGURAR_T1)
DECFSZ CUENTA_T1 ;DECREMENTA CUENTA_T1
GOTO FINALIZA_INT ;FINALIZA LA INTERRUPCION SI LA CUENTA NO HA LLEGADO A 0
COMF PORTA ;COMPLEMENTA PUERTO A
;COMF PORTB ;COMPLEMENTA PUERTO B
MOVLW .99 ;VALOR PARA TENER TOGGLE CADA SEGUNDO
MOVWF CUENTA_T1 ;CONFIGURA LA CUENTA DE 1 SEGUNDO
CALL CONFIGURAR_T1 ;RECONFIGURA LA INTERRUPCION DE T1
;};
GOTO FINALIZA_INT
CAMBIO_RB0
;{;
ANTIRREBOTE
;{;
BCF STATUS,RP0 ;BANCO 0
MOVLW .50 ;LITERAL A W
MOVWF CUENTA_AR3 ;CARGA LA CUENTA DE 50ms
MOVLW .4 ;LITERAL A W
MOVWF CUENTA_AR2 ;CARGA LA CUENTA DE 1ms
CICLO_AR1
MOVLW .250 ;LITERAL A W 250
MOVWF CUENTA_AR1 ;CARGALE 250 A CUENTA AR1
DECFSZ CUENTA_AR1 ;DECREMENTA DE 250 A 0 AR1
GOTO $-1 ;REGRESA AL CICLO
CICLO_AR2
DECFSZ CUENTA_AR2 ;DECREMENTA 1 DE LA CUENTA DE 4 PASADAS DE 250
GOTO CICLO_AR1 ;REGRESA A DAR OTRA PASADA DE 250
CICLO_AR3
MOVLW .4 ;LITERAL A W
MOVWF CUENTA_AR2 ;RECARGA EL 4 DE LA SEGUNDA CUENTA
DECFSZ CUENTA_AR3 ;DECREMENTA LA CUENTA DE 50 PASADAS (DE 4 PASADAS (DE 250))
GOTO CICLO_AR1 ;REGRESA AL CICLO INICIAL
;};
BCF STATUS,RP0 ;BANCO 0
CLRWDT ;LIMPIA EL PERRO GUARDIAN
CALL CONFIGURAR_RB0 ;RECONFIGURA RB0
CALL EVENTO_TRANSMITIR
;};
GOTO FINALIZA_INT
Por ultimo otros eventos
;EVENTOS.INC
EVENTO_TRANSMITIR
;{;
BSF STATUS,RP0
; BSF TXSTA,TXEN ;HABILITA LA TRANMISION DE DATOS
BCF STATUS,RP0
MOVLW .65
MOVWF TXREG
; BSF STATUS,RP0
; BCF TXSTA,TXEN ;HABILITA LA TRANMISION DE DATOS
; BSF PORTB,3
; BCF STATUS,RP0
;};
RETURN
El problema con el watchdog timer ya lo arregle ,con lo que consegui que se quedara estatico en lugar de mandar muchos caracteres "nul" , y cuando genero la interrupcion se sigue mandando ese mismo caracter enlugar de mi dato decimal 65 que segun una tabla que tengo corresponde al caracter ascii A.
Bueno sin mas por el momento , muchas gracias por cualquier sugerencia que puedan darme