TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: nandez en 10 de Diciembre de 2011, 14:35:17

Título: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 10 de Diciembre de 2011, 14:35:17
Holaaa necesito ayuda para realizar este ejercico que me an mandado os dejo el enunciado y el hadware exo con proteuss os lo agradeceria muchoo si me indicais como podria realizarloo.. Un saludooo Y GRACIAS
Un único pulsador de ON/OFF (cuando esta activada se enciende un led),, además tiene 4 sensores  (volumétricos, interruptores de puerta, cristales etc)  que detectan la entrada de un intruso cuando se activan proporcionan un ‘1’ en reposo ‘0’. Y como elementos de señalización tiene una bocina que se activa con ‘1’ y una lámpara estroboscópica  que se activa con un tren de pulsos de periodo 0,1 seg.

Funcionamiento:

Cuando se pulsador   ON se enciende indicador de ON y se pone todo en funcionamiento
* Encendido del led de ON
*Espera de 20 segundos para salir del coche
* Rastreo de sensores
* En el caso que algún sensor se active  esperar 20 segundos y activa bocina  y lámpara durante  2 minutos
* Si el sensor sigue activado, repetir la bocina y lámpara durante otros 2 minutos
*Para apagar la alarma o desactivarla mantener pulsado  OFF durante 10 segundos.
*Se queda en espera para empezar de nuevo.

 
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: AngelGris en 10 de Diciembre de 2011, 14:57:56
  Podrías subir el código que tengas hecho o como planteas hacer y así se te podrá ayudar brindando consejos de que es lo más conveniente. Ahora, si lo que quieres es el código hecho y funcional, creo que vas por mal camino.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 10 de Diciembre de 2011, 16:58:13
No no es lo que quiero el codigo exo.. lo que necesito sobre todo la cuenta de los 20 segundo que nose por donde meterle mano... lo estoi haciendo con interrupciones para el led on del encendido e utilizado la interrupcion externa y ahora estoy haciendo para el rastreo de los sensores por cambio de estado en algunos de los r4 al r7 del puerto b pero no me funciona... aki os dejo lo que llevo realizaaa porfavor exarmee una manooo!!!

;************************************************************
;PLANTILLA
;************************************************************

           LIST         P=16F84A      ; Tipo de PIC
         INCLUDE         "P16F84A.INC"   ; Definiciones de los registros internos
         ORG            0X00         ; Directiva que indica donde está el
         GOTO         CONFIPUERTOS   ; Salta hasta INICIO
         ORG            05h            ; Salva vector de interrupción
         GOTO         INT_EXT
         GOTO            SENSORES
;*************************************************************
;CONFIGURACION DE LOS PUERTOS
;*************************************************************

CONFIPUERTOS:
         
         BSF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 1
         BCF            TRISA,0         ;BIT 0 COMO SALIDA PUERTOA
         BCF            TRISA,1         ;BIT 1 COMO SALIDA PUERTOA
         BCF            TRISA,2         ;BIT 2 COMO SALIDA PUERTOA
         
         BSF            TRISB,0         ;BIT 0 COMO ENTRADA PUERTOB
         BSF            TRISB,4         ;BIT 4 COMO ENTRADA PUERTOB
         BSF            TRISB,5         ;BIT 5 COMO ENTRADA PUERTOB
         BSF            TRISB,6         ;BIT 6 COMO ENTRADA PUERTOB
         BSF            TRISB,7         ;BIT 7 COMO ENTRADA PUERTOB
         BCF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 0
         CLRF         PORTA
;*********************************************************************
;ENCENDIDO CON 0N/OFF
;*********************************************************************
         MOVLW         0X90
         MOVWF         INTCON
         BCF            INTCON,T0IF
         

INT_EXT:
ENCENDIDO:
         BTFSS         PORTB,0
         GOTO         ENCENDIDO   
         BSF            PORTA,0
         RETFIE         
         

   

         MOVLW         0X88
         MOVWF         INTCON
         BCF            INTCON,RBIF
SENSORES:         
         BSF            PORTA,1
         BSF            PORTA,2
         RETFIE
         END


como veiss ya e configurado los puertosss para sus fundioness y el led de encendidooo me funcioo bien... pero estoi liado con el rastreoo por que nunca e untilizado la interubcion rbie un saludoo y esperando respuestas...GRACIAS
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: AngelGris en 10 de Diciembre de 2011, 17:41:12
  Por lo que veo en tu código, cada vez que se produzca una interrupción, sea cual fuere, vas a ir a parar primeramente al bloque INT_EXT y te vas a quedar allí hasta que RB0 sea 1. Eso no sería correcto.

  Hasta de hacer algún proceso en el vector de interrupciones, debes evaluar cual fue la que se ejecutó...

Código: ASM
  1. interrupciones
  2.   bcf INTCON,GIE ; deshabilitar las interrupciones
  3.   btfss INTCONT,INTF ; testeo el bit de interrupcion externa
  4.   goto otra
  5.  
  6. interrupcion_externa
  7.   bsf PORTA,0 ; suponiendo que allí está conectado el led, lo encendemos
  8.   bcf INTCON,INTF ; borro el flag de interrupcion
  9.   retfie
  10.  
  11. otra
  12.   btfss INTCON,RBIF
  13.   retfie
  14.  
  15.   ;aca se hace el proceso de la interrupción por RB4-RB7
  16.  
  17.   movf PORTB,W ; se lee el puerto para que no exista mas la condicion de cambio de estado
  18.   bcf INTCON,RBIF ; se borra el flag
  19.   retfie
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 11 de Diciembre de 2011, 01:33:04
NO SI LA DE INTERRUPCION EXTERNA LO TENGO SOLUCIONADO PERO LUEGO KIERO COMPROBARLO QUE HAY EN UN CAMBIO DEL PUERTO B  DE LA PUERTOB 4/7 ÀRA ACTIVAD DOS LED QEIS SERIAN SEMAFORO Y BOCINA... ESE SERIA ELPOREBLEM QUE TENDRIA QUE LA INT_EXT LA TENDRIA SOLUCIONADA.... Y Y A LUGO A APERTE NECESITO LA CUAESTA DE 20 SEG Y 2 MINUTOS PARA REALIZAR  LA CUENTA DE SOS CONTADORES PARA SOLUCIONAR EL PORGRAMA NOSE SI HACERLO CON SUBRUTINAS O TIMER... QUE SERIA LO MEJOR HACERLO POR DESPBORDAMIENTOOO UNSALUDO Y GRACIAS..
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: stk500 en 11 de Diciembre de 2011, 03:03:24
Hola Nandez! ante de que siga escribiendo mensaje te recomiendo que lea la Regla del foros.
gracias
Saludos
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: martincnc en 12 de Diciembre de 2011, 00:14:29
Hola nandez. Sin ofender, cuesta mucho entender lo que queres decir si escribís de esa manera, no solo para mi sino para los que participan y no participan del foro. Por favor tenelo en cuenta para la próxima.

Con respecto a tu problema, para activar el temporizador TMR0 debes poner en alto el bit T0IE del registro INTCON, habiendo cargando previamente en el registro TMR0 el valor a partir del cual comenzara la cuenta y también habiendo configurado previamente el prescalador modificando el valor de los bits PS0, PS1 y PS2 del registro OPTION (OPTION_REG para el compilador).

Para determinar si la interrupción ha ocurrido debido a un desborde de TMR0 debes comprobar si la bandera de interrupción de la misma se encuentra en estado alto, para esto debes  verificar si el bit T0IF del registro INTCON se encuentra en alto, en caso afirmativo, hacer lo que sea necesario

Por otro lado, para activar las interrupciones por cambio de estado del los pines RB4 al RB7, debes poner en estado alto el bit RBIE del registro INTCON, y para verificar si la interrupción ha ocurrido debido a un cambio de estado en estos pines, debes verificar si el bit RBIF del registro INTCON se encuentra en alto, de nuevo, en caso afirmativo hacer lo que sea necesario

Un ejemplo de la subrutina del servicio de interrupción podría se la siguiente:
Código: ASM
  1. interrupcion       ;vector de interrupciones
  2.  
  3.        btfsc       INTCON, T0IF
  4.        call         T0IE_INT
  5.        btfsc       INTCON, INTF
  6.        call         RB0_INT
  7.        btfsc       INTCON, RBIF
  8.        call         RBIE_INT
  9.        retfie
  10.  
  11. T0IE_INT                               ;subrutina de interrupción por desborde de TMR0
  12.        bcf       INTCON, T0IF       ;en esta subrutina se debe cargar el valor de TMR0 nuevamente
  13.        ....
  14.        ....
  15.        return
  16.  
  17. RB0_INT                            ;subrutina de interrupción externa
  18.        bcf       INTCON, INTF
  19.        ....
  20.        ....
  21.        return
  22.  
  23. RBIE_INT                            ;subrutina de interrupción por cambio de estado de RB7:RB4
  24.        bcf       INTCON, RBIF
  25.        ....                            ;para saber cual es el pin provoco la interrupción, verificar el estado de cada uno de ellos
  26.        ....
  27.        return

Bueno, espero que te sirva, Saludos

pd: edito detalle en el código
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 12 de Diciembre de 2011, 10:49:05
Muchas gracias.. ya tengo configurado las interrupciones para la inte_ext y para el cambio de estado del puertob ahora lo que nose realizar es la subrutinaa para el tiempo de 20segundo y 2 minutos... me gustara hacerlo con call para realizar los retardos para la realizacion de los tiempo y luego con return volver al programa principal.. espero que me entiendas.. para alguna duda en el pirmer mensaje tengo el enunciado del problema. aquei os dejo lo que tengo realizado hasta el momento un saludo y gracias!!

;DESCRIPCION:Un único pulsador de ON/OFF (cuando esta activada se enciende un led),,
;además tiene 4 sensores  (volumétricos, interruptores de puerta, cristales etc) 
;que detectan la entrada de un intruso cuando se activan proporcionan un ‘1’ en reposo ‘0’
;. Y como elementos de señalización tiene una bocina que se activa con ‘1’ y una lámpara estroboscópica  que se activa con un tren de pulsos de periodo 0,1 seg.

;Funcionamiento:

;Cuando se pulsador   ON se enciende indicador de ON y se pone todo en funcionamiento
;* Encendido del led de ON
;*Espera de 20 segundos para salir del coche
;* Rastreo de sensores
;* En el caso que algún sensor se active  esperar 20 segundos y activa bocina  y lámpara durante  2 minutos
;* Si el sensor sigue activado, repetir la bocina y lámpara durante otros 2 minutos
;*Para apagar la alarma o desactivarla mantener pulsado  OFF durante 10 segundos.
;*Se queda en espera para empezar de nuevo.
;**************************************************************
;CONTADORES
;**************************************************************


;************************************************************
;PLANTILLA
;************************************************************

           LIST         P=16F84A      ; Tipo de PIC
         INCLUDE         "P16F84A.INC"   ; Definiciones de los registros internos
         ORG            0X00         ; Directiva que indica donde está el
         GOTO         CONFIPUERTOS   ; Salta hasta INICIO
         ORG            05h            ; Salva vector de interrupción
         GOTO         INICIO
         
;*************************************************************
;CONFIGURACION DE LOS PUERTOS
;*************************************************************

CONFIPUERTOS:
         
         BSF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 1
         BCF            TRISA,0         ;BIT 0 COMO SALIDA PUERTOA
         BCF            TRISA,1         ;BIT 1 COMO SALIDA PUERTOA
         BCF            TRISA,2         ;BIT 2 COMO SALIDA PUERTOA
         
         BSF            TRISB,0         ;BIT 0 COMO ENTRADA PUERTOB
         BSF            TRISB,4         ;BIT 4 COMO ENTRADA PUERTOB
         BSF            TRISB,5         ;BIT 5 COMO ENTRADA PUERTOB
         BSF            TRISB,6         ;BIT 6 COMO ENTRADA PUERTOB
         BSF            TRISB,7         ;BIT 7 COMO ENTRADA PUERTOB
         BCF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 0
         CLRF         PORTA
;*********************************************************************
;CONFIGURACION DEL INTCON
;*********************************************************************
         MOVLW         0X9C         ;ACTIVACION DE INTERRUPCIONES
         MOVWF         INTCON         
         BCF            INTCON,T0IF      ;BANDERA INT_EXT PUESTA A CERO
         BCF            INTCON,RBIF      ;BANDERA CAMBIO DE ESTADO PUERTO B A CERO
         
;**************************************************
;ENCENDIDO DEL LED ON
;****************************************************


INICIO:


ENCENDIDO:
         BTFSS         PORTB,0         ;SI HAY UN 1 EN EL PURTOB,0 ENCENDIDO DEL LED ON
         GOTO         ENCENDIDO   
         BSF            PORTA,0         ;ENCENDIDO DEL LED ON
         
         

SENSOR1:                        
         BTFSS         INTCON,RBIF      ;SI ESTA ACTIVADO EL FLAG DE CAMBIO DE ESTADO EN EL PUERTOB,4-7
                                 ;SE ACTIVAN LA BOCINA Y LAMPARA
         GOTO         SENSOR1
         BSF            PORTA,1         ;ACTIVACION BOCINA
         BSF            PORTA,2         ;ACTIVACION LAMPARA
         RETFIE                     ;RETORNO DE INTERRUPCION
         
         END
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: martincnc en 13 de Diciembre de 2011, 14:05:53
Hola nandez.

Para lograr retardos largos va a ser necesario que uses uno o mas registros auxiliares además del temporizador TMR0. En pocas palabras, el temporizador configurado con el prescalador en 1:256 y comenzando la cuenta desde cero solo es posible alcanzar como máximo unos 65536 ciclos de instrucción (256*256 ciclos de instrucción = 65.536uS) entre cada interrupción.

El segmento de código para lograr un retardo de 2 minutos con una frecuencia de reloj de 4MHz (1MIPS) seria el siguiente (256 prescalador * 256 TMR0 * 256 aux1 * 7 aux2 = 117.440.512 uS ~ 2 minutos):

Código: ASM
  1. ;**** En el programa principal: ****
  2.  
  3.         bcf         STATUS, RP1
  4.         bsf         STATUS, RP0          ;banco 1
  5.  
  6.         ....
  7.         ....
  8.         movlw     b'10000111'
  9.         movwf     OPTION_REG         ;pull-up's desactivadas, prescalador para TMR0 en 1:256
  10.  
  11.         bcf         STATUS, RP0          ;banco 0
  12.  
  13.         movlw     d'255'
  14.         movwf     aux1                    ;aux1 en d'255'
  15.  
  16.         movlw     d'7'
  17.         movwf     aux2                    ;aux2 en d'7'
  18.  
  19.         clrf         TMR0                   ;TMR0 en d'0'
  20.  
  21.         ....
  22.         ....
  23.  
  24.         bsf         INTCON, GIE         ;habilitar interrupciones globales
  25.         bsf         INTCON, T0IE        ;habilitar interrupciones por TMR0
  26.  
  27. bucle
  28.         goto        bucle
  29.  
  30. ;*************************************************
  31.  
  32. ;**** En la subrutina de interrupción por TMR0: ****
  33.  
  34.         bcf         INTCON, T0IF
  35.  
  36.         decfsz     aux1, 1
  37.         retfie
  38.  
  39.         movlw     d'255'
  40.         movwf     aux1                    ;aux1 en d'255'
  41.  
  42.         decfsz     aux2, 1
  43.         retfie
  44.  
  45.         movlw     d'7'
  46.         movwf     aux2                    ;aux2 en d'7'
  47.  
  48.         ....                                    ;**** acción que se desea realizar ****
  49.         ....                                    ;**** acción que se desea realizar ****
  50.  
  51.         retfie
  52.  
  53. ;************************************************

Con este ejemplo ya estarías a un paso de terminar con tu proyecto, espero que te sirva, Saludos!
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 13 de Diciembre de 2011, 14:41:47
Leyendo este hilo desaparecen, como por arte de magia, casi todas las dudas que tu tienes:

http://www.todopic.com.ar/foros/index.php?topic=24720.0

Fijate por ejemplo esta.

Citar
ahora lo que nose realizar es la subrutinaa para el tiempo de 20segundo y 2 minutos...

Dentro de ese hilo la tienes aqui, aunque seria mejor que lo leyeras entero.

http://www.todopic.com.ar/foros/index.php?topic=24720.msg201407#msg201407

Con ese ejemplito y unos cambios pequeños, listo. Te tendras que currar un poco la interrupcion porque tu tienes varias y tendras que chequear los flags para saber cual fue la que salto.

Leete eso, intenta hacerlo y si tienes dudas, despues pregunta.

Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 04:33:29
Muchassss Graciass voi a probarlooo y a intentar hacer el ejerciciooo que me traee malooo ejejej ya os preguntare algoo si necesitoooo gracias y un saludo..
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 05:36:19
Martin gracias por la subrutina realizada por el desbordamiento del tmr0... pero ahora quiero realizar que una vez que pase los 2minutos  poner bcf porta,1 y porta,2 pero si siguen activos alguno de los estados del puertob que vuelva a contar los 2 minuto... lo e probado preguntando por el estado de la bandera del tmr0 pero no m funcionaa si me lo podriais explicar lo agradeceriaa que lo tengo que entregar entre esta seman y la que viene y supongo que lo que me queda es facil...en resumen necesito que una vez pasado los 2 minutos se ponga a cero el porta,1 y el porta,2 si no hay un 1 en el portb4 a la portb de la 7 si sigue habiendo un 1 se vuelve a realizar lo 2 minutos... muchass gracias y sigoo porbandoooo GRACIASS!!!!! UN SALUDOOO
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 14 de Diciembre de 2011, 08:19:41
Citar
...en resumen necesito que una vez pasado los 2 minutos se ponga a cero el porta,1 y el porta,2 si no hay un 1 en el portb4 a la portb de la 7 si sigue habiendo un 1 se vuelve a realizar lo 2 minutos... muchass gracias y sigoo porbandoooo GRACIASS!!!!! UN SALUDOOO

Si lo tienes por interrupcion en RB4-RB7 basta que cuando empieza a hacer las temporizaciones desactives INTCON,RBIE al acabar de hacer las temporizaciones activas de nuevo el  INTCON,RBIE y si hay cambio ya salta, pero es posible que mientras estaban desactivadas se pusiera a 1 alguna entonces:

   movlw 0X0F  ;mascara para poner a 0 nibble bajo
   andwf  PORTB,0  ;aqui quedara nibble bajo a 0 y el alto que es el que quieres leer
                            ;quedara con su valor
   btfss   STATUS,Z  ;miramos si es 0 o es otro valor
   goto    NO_ES_CERO  ;hay alguno activado, volvera a temporizacion
   goto    ES_CERO        ;va a apagar RA1 y RA2


Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 15:03:48
Graciass tapii... pero tambien podria ralizarlooo  preguntando por la bandera si esta a 1 ej ;btfss intcon,rbif?? auque claro me faltaba ese detalle de cojer y bajar la bandera antes de que se porduzca la temporizacion.. y luego activar la interrupcion y pregunto si esta activa la bandera no??? es lo que yo kiero auque estado porbando la temporizacion de los 2 minutos y no m funciona nose si lo escrito mal..a qui os dejo como lo exo y ya m decis que aspectos tengo que cambirrr Muchisimass Graciasss!!!!!!!

;**************************************************************
;CONTADORES
;**************************************************************
CONTA_1      EQU         0X20
CONTA_2      EQU         0X21

;************************************************************
;PLANTILLA
;************************************************************

           LIST         P=16F84A      ; Tipo de PIC
         INCLUDE         "P16F84A.INC"   ; Definiciones de los registros internos
         ORG            0X00         ; Directiva que indica donde está el
         GOTO         CONFIPUERTOS   ; Salta hasta INICIO
         ORG            05h            ; Salva vector de interrupción
         GOTO         INICIO
         
;*************************************************************
;CONFIGURACION DE LOS PUERTOS
;*************************************************************

CONFIPUERTOS:
         
         BSF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 1
         BCF            TRISA,0         ;BIT 0 COMO SALIDA PUERTOA
         BCF            TRISA,1         ;BIT 1 COMO SALIDA PUERTOA
         BCF            TRISA,2         ;BIT 2 COMO SALIDA PUERTOA
         
         BSF            TRISB,0         ;BIT 0 COMO ENTRADA PUERTOB
         BSF            TRISB,4         ;BIT 4 COMO ENTRADA PUERTOB
         BSF            TRISB,5         ;BIT 5 COMO ENTRADA PUERTOB
         BSF            TRISB,6         ;BIT 6 COMO ENTRADA PUERTOB
         BSF            TRISB,7         ;BIT 7 COMO ENTRADA PUERTOB
         BCF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 0
         CLRF         PORTA
;*********************************************************************
;CONFIGURACION DEL INTCON
;*********************************************************************
         MOVLW         0X9C         ;ACTIVACION DE INTERRUPCIONES
         MOVWF         INTCON         
         BCF            INTCON,T0IF      ;BANDERA INT_EXT PUESTA A CERO
         BCF            INTCON,RBIF      ;BANDERA CAMBIO DE ESTADO PUERTO B A CERO
         
;**************************************************
;ENCENDIDO DEL LED ON
;****************************************************


INICIO:


ENCENDIDO:
         BTFSS         PORTB,0         ;SI HAY UN 1 EN EL PURTOB,0 ENCENDIDO DEL LED ON
         GOTO         ENCENDIDO   
         BSF            PORTA,0         ;ENCENDIDO DEL LED ON
         
SENSORES:         

SENSOR1:                        
         BTFSS         INTCON,RBIF      ;SI ESTA ACTIVADO EL FLAG DE CAMBIO DE ESTADO EN EL PUERTOB,4-7
                                 ;SE ACTIVAN LA BOCINA Y LAMPARA
         GOTO         SENSOR1
         
         BSF            PORTA,1         ;ACTIVACION BOCINA
         BSF            PORTA,2         ;ACTIVACION LAMPARA
         
         CALL         DOSMINUTOS
         RETFIE                     ;RETORNO DE INTERRUPCION
         
         
;*****************************************************************************
;CONGIGURACION DEL OPTION
;****************************************************************************           
DOSMINUTOS:         
ESPERA:      

         BSF             STATUS, RP0        ;banco 1       
             MOVLW           B'10000111'
             MOVWF           OPTION_REG         ;pull-up's desactivadas, prescalador para TMR0 en 1:256
 
             BCF             STATUS, RP0        ;banco 0
          BCF            INTCON,RBIE
             MOVLW           d'255'
             MOVWF           CONTA_1            ;aux1 en d'255'
 
             MOVLW           d'7'
             MOVWF           CONTA_2            ;aux2 en d'7'
 
             CLRF            TMR0               ;TMR0 en d'0'
 
     
 
             BSF             INTCON, GIE         ;habilitar interrupciones globales
             BSF             INTCON, T0IE        ;habilitar interrupciones por TMR0
 
BUCLE:
             GOTO            BUCLE
 
;*************************************************
 
;**** En la subrutina de interrupción por TMR0: ****
 
             BCF            INTCON, T0IF
 
             DECFSZ         CONTA_1,1
             RETFIE
         MOVLW          d'255'
             MOVWF          CONTA_1                    ;CONTA_1 en d'255'
          DECFSZ         CONTA_2,1
             RETFIE
          MOVLW          d'7'
             MOVWF          CONTA_2                    ;CONTA_2 en d'7'
          BSF            INTCON,RBIE
         BTFSS         INTCON,RBIF
         GOTO         APAGADO
         GOTO         ESPERA


APAGADO:

         BCF            PORTA,1
         BCF            PORTA,2
         
         RETFIE
         RETURN
         END
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 15:15:09
perdon por la intromision,

pero el la tutina de 2minutos al final tienes puesto.

bucle
goto bucle

Con esto noo va aslir nunca de esa rutina. Deberias de sustituir ambas por la instruccion "Return"

Espero no tener osxidado mi ASM ;-) :D :mrgreen: :oops: :)
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 15:30:38
Graciass tio no pasa nada por la intromisionn ni muchoo menos entonces  eliminoo ese bucle.. ya m parecia raro a mi esoo.. entonces lo cambio por return y vuelve a la llamada y sigue con la decrementacion de los Conta_1 y conta_2 no??? Graciass ;)
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 15:32:54
Tu rutina deberia de quedar asi:

Código: [Seleccionar]
;*****************************************************************************
;CONGIGURACION DEL OPTION
;****************************************************************************          
DOSMINUTOS:        
ESPERA:      

         BSF             STATUS, RP0        ;banco 1      
             MOVLW           B'10000111'
             MOVWF           OPTION_REG         ;pull-up's desactivadas, prescalador para TMR0 en 1:256
 
             BCF             STATUS, RP0        ;banco 0
          BCF            INTCON,RBIE
             MOVLW           d'255'
             MOVWF           CONTA_1            ;aux1 en d'255'
 
             MOVLW           d'7'
             MOVWF           CONTA_2            ;aux2 en d'7'
 
             CLRF            TMR0               ;TMR0 en d'0'
 
      
 
             BSF             INTCON, GIE         ;habilitar interrupciones globales
             BSF             INTCON, T0IE        ;habilitar interrupciones por TMR0
 

           Return

;*************************************************

Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 15:38:38
Ok asin es como la e dejado pero sigue sin funcionarmee y creo que puede ser por el final del programa que vuelto a poner return y retfie... aver si puedes aconsejarme y ya lo depuro el porgramaa que me traee de cabezaaa ejejeje... Muchimass Graciass desde almeriaa ejejej
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 15:48:03
A ver si no me equivoco y si es asi que otro me corrija. ;-)
Nandez:

En tu programa dentro de la rutina INICIO, yo quitaria el ultimo RETFIE y lo sustituira por END

Creo que antes del org 05
debe de ir  la instrucion ORG 04 para que te funcione la interrupcion

En la rutina de interupcion me parece que debes de ponerla una etiqueta, para que pueda ser llamada cuando salte la interrupcion y sepa a donde debe de ir. Ademas debes de quitar el ultimo Return y el END.

De todas formas creo que no has leido los post que te mencionan al principio, ya que alli tienes ejemplos de lo que quieres y sobre todo de como realizar y escribir tu programa.

F.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 15:52:00
Fijate en en el ejemplo de aqui:http://www.todopic.com.ar/foros/index.php?topic=24720.msg201407#msg201407

En el modo contador.

Respecto a mi ultimo post falta que una vez que hayas puesto el nombre de la rutina de interrupcion debes de colocar tambiem depues del org o4, goto "nombre de la interrupcion y justito antes del END colocar un= goto inicio para que tu programa se repita de forma indefinida, sino solo lo hace una vez.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 14 de Diciembre de 2011, 15:53:20
Citar
perdon por la intromision,

pero el la tutina de 2minutos al final tienes puesto.

bucle
goto bucle

Con esto noo va aslir nunca de esa rutina. Deberias de sustituir ambas por la instruccion "Return"

Espero no tener osxidado mi ASM

Nandez esto esta en el ejemplo, porque al ser un ejemplo de como se usa no tiene programa principal y le pone un bucle infinito para que se quede ahi sin hacer nada, hasta que salta la interrupcion.  :lol: :lol:

Pon el programa que tienes hecho hasta ahora y lo vemos, el que ya has corregido, con lo que te dijo Fer.

Aunque es muy facil para que te tengamos que ayudar, como ande tu profe por aqui nos va a suspender a todos  :lol: :lol:

Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 16:11:53
Ok.. voi a porbarlo aver... :
mira yo ahora mimos simulandolo en porteus me funciona...

Una vez que le doi al pulsador de encendido se enciendo el led on:realizado con la int_ext del rbo
una vez que hace el reastreo de los sensores si se modifica el puerto b del 4 a 7 se activa la bocina y la lampara:realizado con el cambio de estado del RB4 al RB7
y ahora pasarian 2 minutos.. y se apagaria la bocina y la lampara... pero si sigue activado algun sensor del puerto b RB4 al RB7 seguiria otros dos minutos...(ESO ES LO QUE NO M FUNCIONA..) y es necesario realizarloo asi y cre que estoi cerca entre mis apuntes y los vuestros que me habeis aconsejado...seguro que me falla algun detalle... mejor para explicarte copia y pega mi porgrama y lo modificas y me enseñas lo que as modificadoooo.... TIOO MUCHASS GRACIASS OS LO AGRADEZCO ENORMEmente QUE PERDAIS EL TIEMPO EN MI PROBLEMAAA uN SALUDOOOOO!!!
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 16:20:59
A ver Nandez:

No se que debes estar probando, pero una de dos o no nas puesto el programa completo o no ter funciona pues no veo que hayas excrito nada ni del tratamiento de la interrupcion de RBo, ni del cambio de estado de RB4 a RB7


Dentro del nombre de la interrupcion debes comprobar primero cual es el motivo de la interrupcion:

Interrupcion:
1º Compruebas si es por cambio de RB0, si es asi realizas lo que quieras y si no
2º Compruebas si es por el TMRO y realizas lo que creas oportuno y si no es por TMR0
2 Compruebas si es por el cambio en RB4 -RB7 y si no sales de la interrupcion.

F.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 16:24:54
Fijate en la parte del codigo que te pusieron en el post numero 6, alli ves como colocar el codgo para saber que interrupcion se ha producido.


F.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 16:29:31
;**************************************************************
;CONTADORES
;**************************************************************
CONTA_1      EQU         0X20
CONTA_2      EQU         0X21

;************************************************************
;PLANTILLA
;************************************************************

           LIST         P=16F84A      ; Tipo de PIC
         INCLUDE         "P16F84A.INC"   ; Definiciones de los registros internos
         ORG            0X00         ; Directiva que indica donde está el
         GOTO         CONFIPUERTOS   ; Salta hasta INICIO
         ORG            05h            ; Salva vector de interrupción
         GOTO         INICIO
         
;*************************************************************
;CONFIGURACION DE LOS PUERTOS
;*************************************************************

CONFIPUERTOS:
         
         BSF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 1
         BCF            TRISA,0         ;BIT 0 COMO SALIDA PUERTOA
         BCF            TRISA,1         ;BIT 1 COMO SALIDA PUERTOA
         BCF            TRISA,2         ;BIT 2 COMO SALIDA PUERTOA
         
         BSF            TRISB,0         ;BIT 0 COMO ENTRADA PUERTOB
         BSF            TRISB,4         ;BIT 4 COMO ENTRADA PUERTOB
         BSF            TRISB,5         ;BIT 5 COMO ENTRADA PUERTOB
         BSF            TRISB,6         ;BIT 6 COMO ENTRADA PUERTOB
         BSF            TRISB,7         ;BIT 7 COMO ENTRADA PUERTOB
         BCF            STATUS,RP0      ;SELECCIONAMOS EL BANCO 0
         CLRF         PORTA
;*********************************************************************
;CONFIGURACION DEL INTCON
;*********************************************************************
         MOVLW         0X9C         ;ACTIVACION DE INTERRUPCIONES
         MOVWF         INTCON         
         BCF            INTCON,T0IF      ;BANDERA INT_EXT PUESTA A CERO
         BCF            INTCON,RBIF      ;BANDERA CAMBIO DE ESTADO PUERTO B A CERO
         
;**************************************************
;ENCENDIDO DEL LED ON
;****************************************************


INICIO:


ENCENDIDO:
         BTFSS         PORTB,0         ;SI HAY UN 1 EN EL PURTOB,0 ENCENDIDO DEL LED ON
         GOTO         ENCENDIDO   
         BSF            PORTA,0         ;ENCENDIDO DEL LED ON
         
SENSORES:         

SENSOR1:                        
         BTFSS         INTCON,RBIF      ;SI ESTA ACTIVADO EL FLAG DE CAMBIO DE ESTADO EN EL PUERTOB,4-7
                                 ;SE ACTIVAN LA BOCINA Y LAMPARA
         GOTO         SENSOR1
         
         BSF            PORTA,1         ;ACTIVACION BOCINA
         BSF            PORTA,2         ;ACTIVACION LAMPARA
         RETFIE         
         
         CALL         DOSMINUTOS
         
         
         
;*****************************************************************************
;CONGIGURACION DEL OPTION
;****************************************************************************           
DOSMINUTOS:         
ESPERA:      

         BSF             STATUS, RP0        ;banco 1       
             MOVLW           B'10000111'
             MOVWF           OPTION_REG         ;pull-up's desactivadas, prescalador para TMR0 en 1:256
 
             BCF             STATUS, RP0        ;banco 0
          BCF            INTCON,RBIE
             MOVLW           d'255'
             MOVWF           CONTA_1            ;aux1 en d'255'
 
             MOVLW           d'7'
             MOVWF           CONTA_2            ;aux2 en d'7'
 
             CLRF            TMR0               ;TMR0 en d'0'
 
     
 
             BSF             INTCON, GIE         ;habilitar interrupciones globales
             BSF             INTCON, T0IE        ;habilitar interrupciones por TMR0
 
         RETURN
 
;*************************************************
 
;**** En la subrutina de interrupción por TMR0: ****
 
             BCF            INTCON, T0IF
 
             DECFSZ         CONTA_1,1
             RETFIE
         MOVLW          d'255'
             MOVWF          CONTA_1                    ;CONTA_1 en d'255'
          DECFSZ         CONTA_2,1
             RETFIE
          MOVLW          d'7'
             MOVWF          CONTA_2                    ;CONTA_2 en d'7'
          BSF            INTCON,RBIE
         BTFSS         INTCON,RBIF
         GOTO         APAGADO
         GOTO         ESPERA


APAGADO:

         BCF            PORTA,1
         BCF            PORTA,2
         
         GOTO         INICIO
         
         END


Este es mi porgrama realizadoo y con la simulacion en porteus me funciona.. pero no consigo que a los 2 minutos se apague la bocina y la lampara... pero todo lo demas si me funcionaa perfectamente.... es soloo eso....
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 16:35:25
Nandez:

Me remito a mis ultimos post.

Ahora voy a cenar y si puedo me conecto despues, sino mañana en la mañana te digo mas.
Pero por favor  haz caso:
NO se que puedes estar probando, bajo mi punto de vista con ese codigo NO te puede ni funcionar la interrupcion por cambio de estado en RB0 ni en RB4a RB7.
Ademas te falta habilitar el salto al vector de interrupciones con el:
ORG 04
goto ISR_INT(por ejemplo)
ORG05
......
......

F.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 14 de Diciembre de 2011, 16:37:49
Citar
 MOVLW         0X9C         ;ACTIVACION DE INTERRUPCIONES
         MOVWF         INTCON        
         BCF            INTCON,T0IF      ;BANDERA INT_EXT PUESTA A CERO
         BCF            INTCON,RBIF      ;BANDERA CAMBIO DE ESTADO PUERTO B A CERO

No estas activando la interrupcion por TIMER0, ES EL BIT T0IE, y activas el T0IF y despues lo borras.

En vez de 0x09 seria 0xB8.

¿COMO ESTAN CONFIGURADOS LOS fuses?
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 14 de Diciembre de 2011, 16:41:31
¿COMO ESTAN CONFIGURADOS LOS fuses?

Ademas falta eso, que es conveniente colocarlo en programa aunque hay algunos grabadores que no lo necesitan-

me reitero. Si lees el hilo que te indicaron, aunque pierdas un poco de tiempo, seguro que ahora no tendrias estos problemillas.

F.
P.D.. hasta mañana.....................
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 14 de Diciembre de 2011, 17:00:03
Citar
Ademas falta eso, que es conveniente colocarlo en programa aunque hay algunos grabadores que no lo necesitan-

me reitero. Si lees el hilo que te indicaron, aunque pierdas un poco de tiempo, seguro que ahora no tendrias estos problemillas.

F.
P.D.. hasta mañana.....................

Si, es cierto.

Tienes un tinglado montao de cojones.


Citar
Ahora voy a cenar y si puedo me conecto despues, sino mañana en la mañana te digo mas.
Pero por favor  haz caso:
NO se que puedes estar probando, bajo mi punto de vista con ese codigo NO te puede ni funcionar la interrupcion por cambio de estado en RB0 ni en RB4a RB7.
Ademas te falta habilitar el salto al vector de interrupciones con el:
ORG 04
goto ISR_INT(por ejemplo)
ORG05

Esto tambienes cierto.
Se que tienes prisa por entregarlo, pero se trata de que lo hagas tu, tu profe seguro que anda por aqui y se esta escojonando.

Lo mire en MPLAB y lo primero ya salta el WDT, por es tienes que poner los FUSES. Por ejemplo asi:

LIST   P=16F84A,            ; usar PIC 16F84A
   #include <p16f84A.inc>

   __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC

Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 14 de Diciembre de 2011, 18:30:25
Tio no puedo tener tanto lio por que l porfesor esta viendo lo que estoi haciendoo y ma so mens esta bien.. los demas de clase los an exo algunos con retardos.. que es mas facil pero mas largo tb y no creo que ande por aki... lo mismoo siii ejejej weno de todas formas muchas graciass ;)
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: Fer_TACA en 15 de Diciembre de 2011, 02:59:07
Amigo, pues si tu profe te dice que lo llevas bien, me paree que no es muy buen profesor. Y sobre todo haznos un poquito de aso si lo que realmnete quieres aprender y no que te realizaemos el programa.
Insisto pierde un poquito de tiempo leyendo el post entero que te indicamos, que una vez comprendido NO vas a necesitar que te aclaremos casi nada.

Trataria de ordenar el programa y volver a empezar a provechando ,lo que ya tienes pero colocandolo de la manera adecuada:

1ºCon:
 LIST         P=16F84A      ; Tipo de PIC
         INCLUDE         "P16F84A.INC"   ; Definiciones de los registros internos
         ORG            0X00         ; Directiva que indica donde está el
         GOTO         CONFIPUERTOS   ; Salta hasta INICIO
         ORG            05h            ; Salva vector de interrupción
         GOTO         INICIO
Aqui debes de colocar las instruciones que faltan como son las del Org 4 y el goto a la rutina de interrupcion y la configuracion de los fuses que aunque no son necesarios para simular enproteus y para algunos grabadores, SI es util el colocarlos con Config.......

2ºSeguiria con la declaracion de las variables y puertos  previamente encabezados por la etiqueta inicio
3º A continuacion tu programa principal
4º Terminar con las rutinas de emporizacion y la de interrupcion.


F.
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: nandez en 09 de Enero de 2012, 08:56:59
Muchass Gracias gentee por vuestra ayuda al final termine de hacer el poryecto y aprobe !

Ahora quiero realizar un poryecto con el pic 16f84a o con el 87 que sea util y sencillo que me recomendaiss?? Un saludooo
Título: Re: Necesito ayuda Urgente Programa con el Pic16f84a mplab
Publicado por: tapi8 en 16 de Enero de 2012, 15:30:31
Pues me alegro que aprobaras.  :-/ :-/

Yo te recomiendo la serie 16f88x es la que sustituye a la 87x y es mas barata y tiene bastantes mejoras, tienes 5 micros con diferentes capacidades de memoria desde 2K hata 8K y 28 pines y 40 pines.

Para cosas mas pequeñas de 18 pines tienes el 16f628 y el 16f648 de 2 y 4K respectivamente.

Donde el espacio sea importante tiene la serie 12fxxx con varias opciones de memoria y otras cosas en 8 pines.

Con esto haras casi todo lo que se puede hacer.