Autor Tema: Programar con PIC16F84A (MPLAB)  (Leído 4741 veces)

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

Desconectado adri_mele

  • PIC10
  • *
  • Mensajes: 1
Programar con PIC16F84A (MPLAB)
« en: 08 de Marzo de 2014, 21:06:16 »
Hola, desearía ayuda para programar el PIC 16F84A en el programa MPLAB IDE, y es que es un proyecto que tengo que hacer, pero estamos todos bastantes perdidos en clase y necesitamos entregar el proyecto pasado mañana. No pido que lo hagan, pero si que me den unas pautas por las cuales guiarme. El problema es este:

;Diseñar un circuito electrónico con microcontrolador  PIC 16F84A, donde en el puerto B se conectan 7 pulsadores que
corresponden a las 7 notas de la escala musical, DO=RB0, RE=RB1, MI=RB2, FA=RB3, SOL=RB4, LA=RB5, SI=RB6. Al activar
cualquiera de los pulsadores, en el pin RA0 del puerto A se debe generar la nota correspondiente al pulsador activado.
Si se activan varios pulsadores a la vez, en la salida se debe generar la frecuencia correspondiente al pulsador cuyo
número de orden sea mayor, por ejemplo, si se pulsan a la vez RB4 y RB6 de debe generar la frecuencia correspondiente
al pulsador que está conectado al pin RB6. (Do=261Hz, Re=293Hz, Mi=329Hz, Fa=349Hz, Sol=393Hz, La=440Hz y Si=493Hz).

Tengo el repertorio de instrucciones del PIC, y tengo los Hz de cada nota pasadas a 'ms' por la fórmula Temporización = Tcm x Prescaler x (256 - Carga TMR0). Pero mi problema es que me pierdo a la hora de configurar cada nota para que suene, llamar a las subrutinas y todo eso... Tengo configurado esto, pero me temo que va mal:

;ZONA DE CÓDIGOS*******************************************************************************************************

            ORG               0
            
            
            bsf               STATUS,RP0
            movlw            b'01111111'
            movwf            TRISB
            movlw            b'11110'
            movwf            TRISA
            movlw            b'00000010'
            movwf            OPTION_REG
            
            bcf               STATUS,RP0
            
Principal   
            btfsc            PORTB,6
            call            Nota_SI

            btfsc            PORTB,5
            call            Nota_LA

            btfsc            PORTB,4
            call            Nota_SOL

            btfsc            PORTB,3
            call            Nota_FA
   
            btfsc            PORTB,2
            call            Nota_MI

            btfsc            PORTB,1
            call            Nota_RE

            btfsc            PORTB,0
            call            Nota_DO
            
            goto            Principal
            
Nota_SI         movlw            TMR0_SI
            movwf            PORTA
            goto            Fin
            
Nota_LA         movlw            TMR0_LA
            movwf            PORTA
            goto            Fin
            
Nota_SOL      movlw            TMR0_SOL
            movwf            PORTA
            goto            Fin
            
Nota_FA         movlw            TMR0_FA
            movwf            PORTA
            goto            Fin
            
Nota_MI         movlw            TMR0_MI
            movwf            PORTA
            goto            Fin
            
Nota_RE         movlw            TMR0_RE
            movwf            PORTA
            goto            Fin
            
Nota_DO         movlw            TMR0_DO
            movwf            PORTA


Cualquier ayuda me vendrá de lujo! -.-'

Gracias y un saludo foreros! ;)

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: Programar con PIC16F84A (MPLAB)
« Respuesta #1 en: 09 de Marzo de 2014, 02:16:12 »
La verdad no he corrido tu programa pero asi como tienes ordenados los pulsadores resuelves el problema de que suene la nota correspondiente al pin mayor.

ahoraa en cuanto a la llamada de funciones cuando usas un call te llevara a una rutina y esta debe de terminar con un "return" para que regrese a donde te quedaste cuabdo la llamaste, ya que si lo dejas asi llenaras la pila de memoria y terminara por fallarte tu programa,

y en tu programa no generas ninguna frecuencia, lo que estas haciendo es mover un valor al puerto A

Saludos
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Programar con PIC16F84A (MPLAB)
« Respuesta #2 en: 09 de Marzo de 2014, 08:54:00 »
Lo que te comenta dolphin son cuestiones básicas de la programación en ASM, quizas es conveniente que hagas un programilla mas simple para entender como funciona la llamada a subrutina.

Con respecto a generar las notas, o sea la frecuencia en el RA0 creo que deberias trabajar con interrupciones por el timer, si no manejas bien el tema de subrutinas, cuando implementes las interrupciones se te va a complicar un poco.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Programar con PIC16F84A (MPLAB)
« Respuesta #3 en: 10 de Marzo de 2014, 06:23:05 »
Adri bienvenido al foro.

Como bien te dicen los compañeros no estas generando ninguna frecuencia, no terminas las subrutinas con "return" por lo que se te perdera el programa, ademas las subrutinas solo cargan el TIMER0 con un valor y despues lo pasas al PORTA??? No tiene ningun sentido.

Lo mejor es que empieces por este curso de asm, aqui:

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


 

anything