TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: DIAZ_D_A en 12 de Mayo de 2010, 10:45:07
-
Yo realice este trabajo en donde tengo q enviar un dato a unmedio compartido, lo q teniaq lograr es q si el medio ocupado espere, pero aca esta el problema no me interrumpe el timer?
que esta mal? lo reviso y reviso y no se que mas hacerle.
soy nueva en esto del a programación
agradeceria su ayuda
;*********************************************************************************
; Este programa simula el envío de un dato de un byte a un medio compartido, en donde si el medio esta
; disponible se realiza una espera para realizar nuevamente el traslado del dato.
;****** CABECERA DEL PROGRAMA ******************************************************************************
LIST P=PIC18F4620 ;LIST = Directiva que define el procesador.
#include <p18f4620.inc> ;Definición de variables específicas del procesador, evita el uso de EQUs.
;************************************************************************************************************
;****** DEFINICIÒN DE VARIABLES ****************************************************************************
tiempo EQU 13h
;
;****** PROGRAMA PRINCIPAL ********************************************************************************* ORG 00h
ORG 00h
GOTO INICIO
ORG 08h
;*******RUTINA DE SERVICIO**********************************************************************************
bcf INTCON, INT0IF
clrf tiempo
RETFIE
INICIO
;******INICIALIZACION****************************************************************************************
movlw 0Fh ;carga w con 0Fh
movwf ADCON1 ;configura los 4bits bajos del puerto A como digitales
clrf TRISB ;pone en 0 el TRISB y lo configura como salida
setf TRISA ;pone en 1 el TRISA y lo configura como entrada
bsf INTCON,GIE ;habilito las nterrupciones globales
bsf INTCON,TMR0IE ;habilito las interrupciones por desbordamiento del timer0
;******CARGO TABLA DE DATOS EN MEMORIA*************************************************************************
LFSR FSR0,15h ;cargo el registro FSR0 con la direccion 15h, y vamos cargando en memoria
movlw 81h ;hasta la posición 1Ch la tabla de datos
movwf POSTINC0 ;
movlw 88h ;
movwf POSTINC0 ;
movlw 83h ;
movwf POSTINC0 ;
movlw 86h ;
movwf POSTINC0 ;
movlw 82h ;
movwf POSTINC0 ;
movlw 85h ;
movwf POSTINC0 ;
movlw 89h ;
movwf POSTINC0 ;
movlw 83h ;
movwf INDF0 ;
lfsr FSR0,15h ;
;*******ACCESO AL MEDIO************************************************************************************
testea btfss PORTA, 0 ;si el bit 0 del Puerto A esta en 0
goto DATOS ;salta a DATOS
;PRIMERA ESPERA
movlw b'10011111' ;sino configuramos el T0CON
movwf T0CON ;Activamos el Timer0
movlw d'156' ;
movwf TMR0L ;largamos el Timer con 156
movlw 90h ;carga el valor 90h en portB
movwf PORTB ;para indicar q el medio esta OCUPADO y prende 1 led indicando 1ra espera
setf tiempo
goto nada
btfss PORTA, 0 ;si el bit 0 del Puerto A esta en 0
goto DATOS ;salta a DATOS
;SEGUNDA ESPERA
movlw b'10010100' ;sino configuramos el T0CON
movwf T0CON ;Activamos el Timer0 usando el Prescaler
movlw 0A0h ;carga el valor A0h en portB
movwf PORTB ;para indicar q el medio esta OCUPADO y prende 1 led indicando 2da espera
setf tiempo
;goto nada
; bcf T0CON, TMR0ON ; PARAMOS EL TIMER O SOLO SE RE - CONFIGURA?????????
btfss PORTA, 0 ;si el bit 0 del Puerto A esta en 0
goto DATOS ;salta a DATOS
;TERCERA ESPERA
movlw b'10010101' ;sino configura el T0CON
movwf T0CON ;Activamos el Timer0 usando el Prescaler
movlw 0C0h ;carga el valor C0h en portB
movwf PORTB ;para indicar q el medio esta OCUPADO y prende 1 led indicando 3ra espera
setf tiempo
;goto nada
otra_vez ;bcf T0CON, TMR0ON ;PARAMOS EL TIMER O SOLO SE RE - CONFIGURA?????????
btfss PORTA, 0 ;si el bit 0 del Puerto A esta en 0
goto DATOS ;salta a DATOS
;CUARTA Y SIG ESPERA
movlw b'10010110' ;sino configura el T0CON
movwf T0CON ;Activamos el Timer0 usando el Prescaler
movlw 0F0h ;carga el valor F0h en portB
movwf PORTB ;para indicar q el medio esta OCUPADO y prende 3 led indicando 4ta y sig espera
setf tiempo
;goto nada
goto otra_vez ;salta a otra_vez para testear x 5ta vez si el medio esta disponible
DATOS
movf POSTINC0,0 ;cargamos en el puerto B
movwf PORTB ;el dato apuntado por FSR0 y se incrementa el mismo
goto testea ;vuelve a testear
;ver xq NO interrumpe!!!!!!
;hacemos una espera o queda ahi???
nada
nop
goto nada
; DONDE PONEMOS "NUESTRA" ETIQUETA DE DESBORDE???????
;HACE FALTA?????
END