Autor Tema: A ver si alguien puede ayudarme  (Leído 2731 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado milton

  • PIC10
  • *
  • Mensajes: 7
A ver si alguien puede ayudarme
« en: 31 de Enero de 2007, 15:40:10 »
Wenas soy nuevo por aqui y tb con los PICs. Me han mandado a hacer una practica de programacion del 16f84 con ensamblador programado en MPLAB para el 16 de febrero. El problema es q el profesor lo q dio en clase fue solo los comandos y para q sirven y muy por encima y ahora nos manda a hacer un reloj  :shock:, increible. No os digo q me la resolvais sino q me guieis un poco xq es q estoy mu perdido.
Os dejo el enunciado:


El objetivo de la práctica es realizar ejercicios de programación de los recursos de Entrada/Salida en
un microcontrolador Pic16F84. Estos ejercicios se hacen en torno a un circuito propuesto que
implementa un reloj digital con alarma. La práctica se puede probar sobre el emulador MPLAB del
PIC, que es de libre disposición y se encuentra instalado también en las aulas de ordenadores.
Se trata de programar una rutina de servicio de interrupción cuyo objetivo sea actualizar
correctamente estas variables en memoria: Unidades y Decenas de Horas, Unidades y Decenas de
Minutos y Segundos. Para ello se usará el Timer0 del chip y se aprovechará su capacidad de provocar
interrupciones, como se detalla más abajo. Suponer que la frecuencia del reloj a la que funciona el
chip es de 10 MHz. Leer detenidamente el resumen de los recursos de E/S del PIC que aparece más
abajo para decidir cuáles usaremos y cómo programaremos las opciones que controlan esos recursos.
Pondremos código de inicialización de esos recursos en el programa principal y en la dirección 0004h
nuestra rutina de servicio de interrupción. Se usará la plantilla de código adjunta que ya hace parte del
trabajo y nos servirá de guía. El algoritmo es muy simple, se trata de incrementar en la rutina de
interrupción un contador (o mejor varios contadores, de forma anidada). Supongamos que
programamos la interrupción del timer para que interrumpa cada cierto período de tiempo fijo. En cada
interrupción, y después de incrementar nuestro primer contador, compararemos su valor con el número
de cuentas necesario para que pase un segundo, si es igual a esa cuenta, pondremos a cero ese primer
contador e incrementaremos nuestra variable dedicada a contar segundos, si es inferior, saldremos de
la rutina de interrupción. Después de incrementar los segundos, comprobaremos si dicha variable llega
a 60, momento en el que la pondremos a cero e incrementaremos nuestra variable de unidades de
minuto. Igual haremos para incrementar decenas de minutos y las horas a partir de las decenas de
minutos, y para pasar de las 24h a las 00h (comparación algo más difícil, porque involucra dos
dígitos).
En el programa principal, después de haber inicializado convenientemente los recursos de E/S
(programación del timer, habilitación de la interrupción, dirección de puertos…) nos quedaremos en
un bucle permanentemente, en el que iremos trasladando el contenido de las variables que se
actualizan en la rutina de interrupción a los puertos de salida que gobiernan el display. Opcionalmente
se podrá añadir cualquier elemento que acerque la práctica a su funcionamiento real (gestión de los
pulsadores, alarma, puntos de segundos,…)

Esta es la plantilla q tenemos q seguir

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


   list      p=16F84             ; directiva para definir el procesador
   #include <p16F84.inc>         ; fichero que incluye nombres de registros y bits




;***** DEFINICIONES DE VARIABLES

w_temp        EQU     0x0C        ; variable para preservar el acumulador durante las int.
status_temp   EQU     0x0D        ; igual para el registro de Status
                                  ; puede usarse la directiva CBLOCK para nuevas variables a
                                  ; partir de 0x0D

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

      ORG     0x000     ; El procesador empieza a ejecutar aqui al arranque o
                                  ; reset
        goto    main      ; ir a nuestro programa principal

;Rutina de Servicio de Interrupción

      ORG     0x004     ; Las interrupciones provocan la ejecucion de esta posición
      movwf   w_temp    ; guardar el registro W del programa interrumpido
      movf   STATUS,w  ; guardar ahora su registro de Status
      movwf   status_temp


; escribir aqui el cuerpo de la rutina de interrupción


      movf    status_temp,w ; recuperamos el valor del registro de Status
                                      ;guardado antes
      movwf   STATUS        ; y lo restauramos
      swapf   w_temp,f
      swapf   w_temp,w      ; restauramos registro acumulador W
      retfie                ; retorno de la interrupción

main

; escribir aqui el programa principal: inicializaciones de reg y bucle principal


      END                     ; directiva fin del programa




Saludos y gracias a todos
« Última modificación: 31 de Enero de 2007, 15:43:45 por milton »

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: A ver si alguien puede ayudarme
« Respuesta #1 en: 31 de Enero de 2007, 16:13:19 »
milton, solo 3 cositas:

1) " A ver si alguien puede ayudarme " es un titulo para un hilo que no dice nada. Para la próxima debes colocar en el titulo la ayuda que necesites, para que así sea mas fácil saber que es lo que quieres sin tener que leer la pagina completa que acabas de escribir.

2) No creo que este foro sea un lugar en el cual se le hagan los trabajos a alguien. Este es un espacio en el cual compartes información, ofreces ayudas y pues te dan ayudas, pero después de leer lo que escribiste lo único que se puede concluir es que quieres que te hagan un trabajo de la U.  :? COMPLICADO. Antes debemos ver que has intentado, tus pruebas, ver esfuerzo. No es tan fácil como decir háganme este trabajo y YA.

3) Veo que eres usuario nuevo, por lo que te recomiendo te pases por las reglas del foro, dentro de las cuales encontraras que debes usar el buscador antes de abrir un nuevo hilo, ya que creo sin temor a equivocarme que encontraras que antes de ti ya hay personas que preguntaron lo mismo y se les ayudo.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: A ver si alguien puede ayudarme
« Respuesta #2 en: 31 de Enero de 2007, 18:45:30 »
Que tal milton,

Estoy de acuerdo con PICmouse, aqui en el foro hay mucha infor con respecto a lo que buscas y hasta los hay ya hechos. Claro que tu tendras que modificarlos si es necesario. Por el momento lo que puedo hacer por ti es pasarte una nota de aplicacion de microchip el cual es un reloj de tiempo real, este usa un PIC16C54 con un cristal de 4MHz, ya tu lo puedes modificar a tus necesidades. Esto ya es el 90% de lo que necesitas el otro 10% corre por tu cuenta.

La nota de aplicacion es la AN590 y el link es:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011031

Saludos y no te sientas ofendido, son simplemente reglas y sentido comun.

Elreypic.

PD. Tambien te recomiendo que te empapes del datasheet del microcontrolado asi como visitar la web de microchip, en ella encontraras bastante info de los PIC (y que mejor que del fabricante).

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: A ver si alguien puede ayudarme
« Respuesta #3 en: 01 de Febrero de 2007, 04:36:01 »
Una búsqueda dentro del foro te arrojará lo que necesitas.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado milton

  • PIC10
  • *
  • Mensajes: 7
Re: A ver si alguien puede ayudarme
« Respuesta #4 en: 01 de Febrero de 2007, 06:28:00 »
De acuerdo PICmouse para la proxima pondre un nombre mas explicativo, disculpa. En el mensaje digo q no me resolvais la practica ,de hecho no me interesa xq tengo q explicarsela al profesor y si me la haceis dificilmente pueda comprenderla bien. Les puse el enunciado para daros una informacion mas concreta y q podais decirme pues, vete a esta pagina, descargate este manual..., mi intencion era esa sinceramente, lamento haberme explicado mal llevado quizá por ser una practica que hay q hacerla cuando supuestamente tenemos q estudiar para los examenes, lo q me hizo buscar algo a la desesperada.

Pido mil disculpas a todo el q se pudo sentir ofendido

Un saludo.


Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: A ver si alguien puede ayudarme
« Respuesta #5 en: 01 de Febrero de 2007, 10:29:29 »
Milton, no hay razón por la que nos debamos sentir ofendido, es solo que sabemos que eres nuevo en el foro, y es por ello, que siempre debes conocer las reglas de un lugar al que visitas. De resto no es más. Es de caballeros disculparse y pues para la próxima, después de haber leído las reglas, con mucho gusto te podremos ayudar, siempre y cuando nuestro trabajo y tiempo nos lo permita.

Mira un ejemplo esta en que usando el buscador en el Subforo "ALMACEN DEL ASSEMBLER" y la palabra "reloj" aparece esto.

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

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

Suerte en el proyecto.

Desconectado milton

  • PIC10
  • *
  • Mensajes: 7
Re: A ver si alguien puede ayudarme
« Respuesta #6 en: 01 de Febrero de 2007, 11:19:00 »
Gracias a todos por vuestra aportacion me han servido de mucho antes estaba perdido ahora por lo menos tengo una brujula.

Saludos.


 

anything