Hola amigos hacia mucho que no entraba en el foro estoy retomado esto de programar PIC, el problema es el siguiente cuando se carga el valor de TMR0 se cambia el valor del registro OPTION_REG lo que hice fue que despues que cargo el valor del TMR0, recargo el valor del OPTION_REG, pero luego despues entonces cuando aplico clrf al puerto B entonces se modifica el TRISB, creia que era que el archivo se corrompia pues me ha pasado muchas veces y con esto se resolvia pero nada, reinstale MPLAB que es la version 8.92 por ultimo reinstale windows 7 y nada.......el problema persiste
abajo les muestro el codigo
;---------------Encabezado-------------
#include "p16f628a.inc"
LIST P=PIC16F628A
CBLOCK 0X20
Salto_A, Fase, Angulo, E1, Ret_E, W_Temp, S_Temp
ENDC
#DEFINE RB0_Sinc PORTB, 0 ;
#DEFINE G_Der PORTB, 1 ;
#DEFINE G_Izq PORTB, 2 ;
#DEFINE Temp_E E1, 0 ;
#DEFINE Sal_T E1, 1 ;
;-------Configuración de puertos-------
org 0x00
goto inicio
org 0X04 ;
btfss INTCON, T0IF ;
goto RB0_Int ;
bcf INTCON, T0IF ;
bsf INTCON, INTE
banksel OPTION_REG
bsf OPTION_REG, T0CS
goto Fin_Int
RB0_Int
bcf INTCON,INTF ;
bcf INTCON,INTE
banksel OPTION_REG
bcf OPTION_REG, T0CS
Fin_Int
bcf Sal_T
retfie ;
inicio
banksel OPTION_REG
MOVLW b'01100000' ;
MOVWF OPTION_REG ;
MOVLW b'10110000' ;
MOVWF INTCON ;
call TMR0_G
call Ret_G
CLRF PORTB ;
banksel TRISB ;
movlw b'00000001' ;
movwf TRISB ;
bsf Sal_T
goto Nada
Nada
nop
goto Nada ;
TMR0_G
movlw .6 ;
MOVWF TMR0
movwf Angulo
movlw .8 ;
MOVWF Salto_A
movlw .240 ;
MOVWF Fase
banksel OPTION_REG
MOVLW b'01100000' ;
MOVWF OPTION_REG ;
Return
Ret_G
movlw .50 ;
movwf Ret_E
Return
;------------------------------------------
END
;------------------------------------------
este es programa modificado si ven se configura el puerto b al final y se carga el OPTION_REG despues del TMR0
el programa lo que deberia hacer es que espera una interrupcion por el puerto RB,0 esta atiende la interrupcion y activa el TMR0 para hacer una temporizacion y desactiva la interrupcion por RB,0, luego de activar la interrupcion por el TMR0, se desactiva esa y si activa la interrupcion del RB,0
entiendo amigo pero se supone que la instruccion BANKSEL va al banco en que esta el registro y luego regresa en donde estamos.
entiendo amigo pero se supone que la instruccion BANKSEL va al banco en que esta el registro y luego regresa en donde estamos........y cuando cargo el valor de TMR0 no estoy cambiando de banco...............disculpenme si estoy equivocado....de hecho probe ir al banci 1 y luego al 0 con OPTION_REG y TRISB y nada todo empeoraba ocurrian mas errores en otras partes como que no se cargaban valores en W no se realizaban sumas o restas............osea el registro W quedaba inoperable
Message[302] R:\NEW2.ASM 28 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] R:\NEW2.ASM 36 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] R:\NEW2.ASM 46 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] R:\NEW2.ASM 56 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] R:\NEW2.ASM 76 : Register in operand not in bank 0. Ensure that bank bits are correct.
Ahí tenés las líneas de todos los registros que no están en bank0 --> les insertás antes un BANKSEL registro y después un BANKSEL 0 .