Autor Tema: Escala Musical  (Leído 2884 veces)

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

Desconectado esgrimae

  • PIC10
  • *
  • Mensajes: 5
Escala Musical
« en: 24 de Julio de 2009, 13:36:29 »
Me comentarn que aqui podia recibir ayuda.......

He tratado de hacer en PicBasic el programa que me de la escala musical en cada una de las patas del micro 16f84a  (en total 12 notas) es decir una nota en cada pin, pero no he podido, por la lentitud en que se generan en cada una de las patas, la idea es que esten ahi generandose continuamente en cada una de ellas, Encontre por ahi  el siguiente codigo pero es para un micro descontinuado, lo compile y cargue en elpIC16f84a y no funciona  alguien que me pueda ayudar
Gracias

Este es el c digo que encontre y que no fiunciona


;
;  Octave synthesizer PIC program series
;
;  OCT54ALL.ASM copyright (c) by Scott Rider 1997, all rights reserved
;
;  Octave tone source:12 equally-tempered semitones in parallel.
;   Waveform is 50% duty (square) pulse for each pitch.
;  PIC uses 16MHz crystal, so use a fast PIC. ^^
;
;   12__
;   \/2 = 1.059463094
;
;  The top octave of frequencies:
;
;  C=/239 = 4186.01, B=/253 = 3951.07, A#=/268 = 3729.31, A=/284 = 3520.00
;  G#=/301 = 3322.44, G=/319 = 3135.96, F#=/338 = 2959.96, F=/358 = 2793.83,
;  E=/379 = 2637.02, D#=/402 = 2489.02, D=/426 = 2349.32, C#=/451 = 2217.46
;  (C=/478 = 2093.00)
;
;  This program generates the scale down 4 octaves:
;
;  C3 (middle C) = 261.62Hz, B2 = 246.94Hz, A#2 = 233.08Hz
;  A2 = 220.00Hz, G#2 = 207.65Hz, G2 = 196.00, F#2 = 185.00Hz
;  F2 = 174.61Hz, E2 = 164.81Hz, D#2 = 155.56Hz, D2 = 146.83Hz
;  C#2 = 138.59Hz, (C2 = 130.81Hz)
;
;
;  The PIC16C54 as an octave divider looks like this:
;
;                     ________  ________
;                    |        \/        |
;               B2 --+ RA2          RA1 +-- A#2
;                    |                  |
;               C3 --+ RA3          RA0 +-- A2
;                    |                  |
;              N/C --+ RTCC     CLKI/X1 +--  \
;                    |                  |     16MHz crystal w/33pF caps
;       Tie to Vdd --+ !MCLR    CLKO/X2 +--  /  or 16MHz clock to CLKI
;                    |                  |
;              GND --+ Vss          Vdd +-- +5V
;                    |                  |
;              C#2 --+ RB0          RB7 +-- G#2
;                    |                  |
;               D2 --+ RB1          RB6 +-- G2
;                    |                  |
;              D#2 --+ RB2          RB5 +-- F#2
;                    |                  |
;               E2 --+ RB3          RB4 +-- F2
;                    |__________________|
;
;
   list    p=16c54
   radix   dec
   include "p16c5x.inc"

   __FUSES _CP_OFF & _WDT_OFF & _HS_OSC

C3      equ     60      ;31250 / 60 / 2 = 260.42 (261.62, -1.21) 0.46%
B2      equ     63      ;31250 / 63 / 2 = 248.02 (246.94, +1.08) 0.43%
AS2     equ     67      ;31250 / 67 / 2 = 233.21 (233.08, +0.13) 0.06%
A2      equ     71      ;31250 / 71 / 2 = 220.07 (220.00, +0.07) 0.03%       
GS2     equ     75      ;31250 / 75 / 2 = 208.34 (207.65, +0.69) 0.33%
G2      equ     80      ;31250 / 80 / 2 = 195.32 (196.00, -0.68) 0.35%

FS2     equ     84      ;31250 / 84 / 2 = 186.01 (185.00, +1.01) 0.54%
F2      equ     89      ;31250 / 89 / 2 = 175.56 (174.61, +0.95) 0.54%
E2      equ     95      ;31250 / 93 / 2 = 164.48 (164.81, -0.73) 0.21%
DS2     equ     101     ;31250 / 101 / 2 = 154.71 (155.56, -0.54) 0.55%
D2      equ     107     ;31250 / 107 / 2 = 146.03 (146.83, -0.50) 0.54%
CS2     equ     113     ;31250 / 113 / 2 = 138.28 (138.59, -0.31) 0.22%

C3mask  equ     b'00001000'
B2mask  equ     b'00000100'
AS2mask equ     b'00000010'
A2mask  equ     b'00000001'
GS2mask equ     b'10000000'
G2mask  equ     b'01000000'
FS2mask equ     b'00100000'
F2mask  equ     b'00010000'
E2mask  equ     b'00001000'
DS2mask equ     b'00000100'
D2mask  equ     b'00000010'
CS2mask equ     b'00000001'

tonesA  equ     PORTA
tonesB  equ     PORTB

   cblock  0x08
      C3reg
      B2reg
      AS2reg
      A2reg
      GS2reg
      G2reg
      FS2reg
      F2reg
      E2reg
      DS2reg
      D2reg
      CS2reg
      temp
   endc
;
;
;   Main code area
;
;
   org     0x100

start   movlw   b'00000110'     ;TMR0 clock = 1:128 of Fosc/4
   option                  ;31.25KHz TMR0 @ xtal=16MHz

   movlw   b'00000000'     ;Clear tone bits
   movwf   tonesA          ; /
   movwf   tonesB          ;/
   tris    tonesA          ;Tone bits are outputs
   tris    tonesB          ;/

   movlw   C3              ;Load tone period counters
   movwf   C3reg
   movlw   B2
   movwf   B2reg
   movlw   AS2
   movwf   AS2reg
   movlw   A2
   movwf   A2reg
   movlw   GS2
   movwf   GS2reg
   movlw   G2
   movwf   G2reg
   movlw   FS2
   movwf   FS2reg
   movlw   F2
   movwf   F2reg
   movlw   E2
   movwf   E2reg
   movlw   DS2
   movwf   DS2reg
   movlw   D2
   movwf   D2reg
   movlw   CS2
   movwf   CS2reg
;
;   Main loop.  TMR0 is set for 32us intervals (31,250Hz).  128 instruction
; cycles are available between successive ticks of TMR0 to check tone
; counters and toggle tone outputs.  Higher pitches are possible; the
; tradeoff being fewer tones can be implemented per PIC.  See other
; versions of the PIC octave divider in this series.
;
main    movf    TMR0,W          ;wait for clock tick
   movwf   temp

tick    movf    TMR0,W
   xorwf   temp,W
   btfsc   STATUS,Z
   goto    tick            ;/

m_c3    decfsz  C3reg,F         ;Check each tone counter...
   goto    m_b2
;
;  C3 ready to toggle
;
   movf    tonesA,W
   xorlw   C3mask          ;toggle C3 tone pin
   movwf   tonesA
   movlw   C3
   movwf   C3reg

m_b2    decfsz  B2reg,F
   goto    m_as2
;
;  B2 ready to toggle
;
   movf    tonesA,W
   xorlw   B2mask          ;toggle B2 tone pin
   movwf   tonesA
   movlw   B2
   movwf   B2reg

m_as2   decfsz  AS2reg,F
   goto    m_a2
;
;  A sharp 2 ready to toggle
;
   movf    tonesA,W
   xorlw   AS2mask         ;toggle AS2 tone pin
   movwf   tonesA
   movlw   AS2
   movwf   AS2reg

m_a2    decfsz  A2reg,F
   goto    m_gs2
;
;  A2 ready to toggle
;
   movf    tonesA,W
   xorlw   A2mask          ;toggle A2 tone pin
   movwf   tonesA
   movlw   A2
   movwf   A2reg

m_gs2   decfsz  GS2reg,F
   goto    m_g2
;
;  G sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   GS2mask         ;toggle GS2 tone pin
   movwf   tonesB
   movlw   GS2
   movwf   GS2reg

m_g2    decfsz  G2reg,F
   goto    m_fs2
;
;  G2 ready to toggle
;
   movf    tonesB,W
   xorlw   G2mask          ;toggle G2 tone pin
   movwf   tonesB
   movlw   G2
   movwf   G2reg

m_fs2   decfsz  FS2reg,F
   goto    m_f2
;
;  F sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   FS2mask         ;toggle FS3 tone pin
   movwf   tonesB
   movlw   FS2
   movwf   FS2reg

m_f2    decfsz  F2reg,F
   goto    m_e2
;
;  F2 ready to toggle
;
   movf    tonesB,W
   xorlw   F2mask          ;toggle F2 tone pin
   movwf   tonesB
   movlw   F2
   movwf   F2reg

m_e2    decfsz  E2reg,F
   goto    m_ds2
;
;  E2 ready to toggle
;
   movf    tonesB,W
   xorlw   E2mask          ;toggle E2 tone pin
   movwf   tonesB
   movlw   E2
   movwf   E2reg

m_ds2   decfsz  DS2reg,F
   goto    m_d2
;
;  D sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   DS2mask         ;toggle DS2 tone pin
   movwf   tonesB
   movlw   DS2
   movwf   DS2reg

m_d2    decfsz  D2reg,F
   goto    m_cs2
;
;  D2 ready to toggle
;
   movf    tonesB,W
   xorlw   D2mask          ;toggle D2 tone pin
   movwf   tonesB
   movlw   D2
   movwf   D2reg

m_cs2   decfsz  CS2reg,F
   goto    main
;
;  C sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   CS2mask         ;toggle CS2 tone pin
   movwf   tonesB
   movlw   CS2
   movwf   CS2reg

   goto    main            ;Worst case=86 cycles
;
;  Reset vector, 0x1FF
;
   org     0x1FF

   goto    start

   end

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Escala Musical
« Respuesta #1 en: 24 de Julio de 2009, 16:37:31 »
.

La verdad, no revisé muy bien el código, pero pude encontrar 2 errores importantes:
- Si decís que el programa es para un 16F84A, en el inicio del código debería decir list p=16F84A, en lugar de list p=16c54.
- En las últimas líneas aparece:  org     0x1FF
                                               goto    start

Deberías sustituir el número 0x1FF por 0x00 (que es donde se encuentra el vector de reset en el 16F84A, no se en dónde estará en el 16C54).
Por último no se si es válida la sentencia __FUSES, yo siempre uso __CONFIG, aunque esto no tiene mucha importancia, porque al final podés poner lo que quieras en el programa grabador.

Saludos.
When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: Escala Musical
« Respuesta #2 en: 24 de Julio de 2009, 22:39:53 »
aqui hay algo que encontre  a ver si te sirve usa el puerto b utilizando las resistencias pull up y ra0 como salida..saludos

DEFINITIONS

Speaker VAR PORTA.0 ‘ Speaker is connected to RA0
Notes VAR Word[9] ‘ Frequencies of musical notes
Key VAR Byte
Key_pressed VAR Byte ‘ Key pressed

‘ Define the frequencies of musical notes

Notes[1] = 262 : Notes[2] = 294 : Notes[3] = 330 : Notes[4] = 349
Notes[5] = 392 : Notes[6] = 440 : Notes[7] = 494 : Notes[8] = 524

‘ Configure PORT directions

TRISB = %11111111 ‘ PORTB is input (keys)
TRISA = 0 ‘ PORTA (RA0) is output
OPTION_REG.7 = 0 ‘ Enable internal PORTB pull-ups
CMCON = 7 ‘ Make RA0 digital I/0

‘ Check if any key is pressed, and if so, find the musical note corresponding
‘ to the pressed key and send the frequency of this note to the speaker.

Loop:
IF PORTB <> 255 THEN ‘ Check if any key pressed
Key = PORTB ‘ Invert key pattern
Key_pressed = NCD Key ‘ Get key pressed
FREQOUT Speaker,5,Notes[Key_pressed] ‘ Send note to speaker
ENDIF
GOTO Loop ‘ Repeat
END ‘ End of program
« Última modificación: 24 de Julio de 2009, 22:44:04 por Chrisbaf »

Desconectado esgrimae

  • PIC10
  • *
  • Mensajes: 5
Re: Escala Musical
« Respuesta #3 en: 25 de Julio de 2009, 16:02:01 »
  TODOPIC
  Microcontroladores PIC
  Almacén del Assembler (Moderadores: maunix, MGLSOFT, PAOLA09)
  Escala Musical esgrimae y 0 Visitantes están viendo este tema. « anterior próximo » 
Páginas: [1]       
 
 Autor  Tema: Escala Musical  (Leído 40 veces) 

esgrimae
Nuevo Usuario

 Conectado

 Mexico

Mensajes: 3


     Escala Musical
« : 24 de Julio de 2009, 01:36:29 pm »   

--------------------------------------------------------------------------------
Me comentarn que aqui podia recibir ayuda.......

He tratado de hacer en PicBasic el programa que me de la escala musical en cada una de las patas del micro 16f84a  (en total 12 notas) es decir una nota en cada pin, pero no he podido, por la lentitud en que se generan en cada una de las patas, la idea es que esten ahi generandose continuamente en cada una de ellas, Encontre por ahi  el siguiente codigo pero es para un micro descontinuado, lo compile y cargue en elpIC16f84a y no funciona  alguien que me pueda ayudar
Gracias

Este es el c digo que encontre y que no fiunciona


;
;  Octave synthesizer PIC program series
;
;  OCT54ALL.ASM copyright (c) by Scott Rider 1997, all rights reserved
;
;  Octave tone source:12 equally-tempered semitones in parallel.
;   Waveform is 50% duty (square) pulse for each pitch.
;  PIC uses 16MHz crystal, so use a fast PIC. ^^
;
;   12__
;   \/2 = 1.059463094
;
;  The top octave of frequencies:
;
;  C=/239 = 4186.01, B=/253 = 3951.07, A#=/268 = 3729.31, A=/284 = 3520.00
;  G#=/301 = 3322.44, G=/319 = 3135.96, F#=/338 = 2959.96, F=/358 = 2793.83,
;  E=/379 = 2637.02, D#=/402 = 2489.02, D=/426 = 2349.32, C#=/451 = 2217.46
;  (C=/478 = 2093.00)
;
;  This program generates the scale down 4 octaves:
;
;  C3 (middle C) = 261.62Hz, B2 = 246.94Hz, A#2 = 233.08Hz
;  A2 = 220.00Hz, G#2 = 207.65Hz, G2 = 196.00, F#2 = 185.00Hz
;  F2 = 174.61Hz, E2 = 164.81Hz, D#2 = 155.56Hz, D2 = 146.83Hz
;  C#2 = 138.59Hz, (C2 = 130.81Hz)
;
;
;  The PIC16C54 as an octave divider looks like this:
;
;                     ________  ________
;                    |        \/        |
;               B2 --+ RA2          RA1 +-- A#2
;                    |                  |
;               C3 --+ RA3          RA0 +-- A2
;                    |                  |
;              N/C --+ RTCC     CLKI/X1 +--  \
;                    |                  |     16MHz crystal w/33pF caps
;       Tie to Vdd --+ !MCLR    CLKO/X2 +--  /  or 16MHz clock to CLKI
;                    |                  |
;              GND --+ Vss          Vdd +-- +5V
;                    |                  |
;              C#2 --+ RB0          RB7 +-- G#2
;                    |                  |
;               D2 --+ RB1          RB6 +-- G2
;                    |                  |
;              D#2 --+ RB2          RB5 +-- F#2
;                    |                  |
;               E2 --+ RB3          RB4 +-- F2
;                    |__________________|
;
;
   list    p=16c54
   radix   dec
   include "p16c5x.inc"

   __FUSES _CP_OFF & _WDT_OFF & _HS_OSC

C3      equ     60      ;31250 / 60 / 2 = 260.42 (261.62, -1.21) 0.46%
B2      equ     63      ;31250 / 63 / 2 = 248.02 (246.94, +1.08) 0.43%
AS2     equ     67      ;31250 / 67 / 2 = 233.21 (233.08, +0.13) 0.06%
A2      equ     71      ;31250 / 71 / 2 = 220.07 (220.00, +0.07) 0.03%       
GS2     equ     75      ;31250 / 75 / 2 = 208.34 (207.65, +0.69) 0.33%
G2      equ     80      ;31250 / 80 / 2 = 195.32 (196.00, -0.68) 0.35%

FS2     equ     84      ;31250 / 84 / 2 = 186.01 (185.00, +1.01) 0.54%
F2      equ     89      ;31250 / 89 / 2 = 175.56 (174.61, +0.95) 0.54%
E2      equ     95      ;31250 / 93 / 2 = 164.48 (164.81, -0.73) 0.21%
DS2     equ     101     ;31250 / 101 / 2 = 154.71 (155.56, -0.54) 0.55%
D2      equ     107     ;31250 / 107 / 2 = 146.03 (146.83, -0.50) 0.54%
CS2     equ     113     ;31250 / 113 / 2 = 138.28 (138.59, -0.31) 0.22%

C3mask  equ     b'00001000'
B2mask  equ     b'00000100'
AS2mask equ     b'00000010'
A2mask  equ     b'00000001'
GS2mask equ     b'10000000'
G2mask  equ     b'01000000'
FS2mask equ     b'00100000'
F2mask  equ     b'00010000'
E2mask  equ     b'00001000'
DS2mask equ     b'00000100'
D2mask  equ     b'00000010'
CS2mask equ     b'00000001'

tonesA  equ     PORTA
tonesB  equ     PORTB

   cblock  0x08
      C3reg
      B2reg
      AS2reg
      A2reg
      GS2reg
      G2reg
      FS2reg
      F2reg
      E2reg
      DS2reg
      D2reg
      CS2reg
      temp
   endc
;
;
;   Main code area
;
;
   org     0x100

start   movlw   b'00000110'     ;TMR0 clock = 1:128 of Fosc/4
   option                  ;31.25KHz TMR0 @ xtal=16MHz

   movlw   b'00000000'     ;Clear tone bits
   movwf   tonesA          ; /
   movwf   tonesB          ;/
   tris    tonesA          ;Tone bits are outputs
   tris    tonesB          ;/

   movlw   C3              ;Load tone period counters
   movwf   C3reg
   movlw   B2
   movwf   B2reg
   movlw   AS2
   movwf   AS2reg
   movlw   A2
   movwf   A2reg
   movlw   GS2
   movwf   GS2reg
   movlw   G2
   movwf   G2reg
   movlw   FS2
   movwf   FS2reg
   movlw   F2
   movwf   F2reg
   movlw   E2
   movwf   E2reg
   movlw   DS2
   movwf   DS2reg
   movlw   D2
   movwf   D2reg
   movlw   CS2
   movwf   CS2reg
;
;   Main loop.  TMR0 is set for 32us intervals (31,250Hz).  128 instruction
; cycles are available between successive ticks of TMR0 to check tone
; counters and toggle tone outputs.  Higher pitches are possible; the
; tradeoff being fewer tones can be implemented per PIC.  See other
; versions of the PIC octave divider in this series.
;
main    movf    TMR0,W          ;wait for clock tick
   movwf   temp

tick    movf    TMR0,W
   xorwf   temp,W
   btfsc   STATUS,Z
   goto    tick            ;/

m_c3    decfsz  C3reg,F         ;Check each tone counter...
   goto    m_b2
;
;  C3 ready to toggle
;
   movf    tonesA,W
   xorlw   C3mask          ;toggle C3 tone pin
   movwf   tonesA
   movlw   C3
   movwf   C3reg

m_b2    decfsz  B2reg,F
   goto    m_as2
;
;  B2 ready to toggle
;
   movf    tonesA,W
   xorlw   B2mask          ;toggle B2 tone pin
   movwf   tonesA
   movlw   B2
   movwf   B2reg

m_as2   decfsz  AS2reg,F
   goto    m_a2
;
;  A sharp 2 ready to toggle
;
   movf    tonesA,W
   xorlw   AS2mask         ;toggle AS2 tone pin
   movwf   tonesA
   movlw   AS2
   movwf   AS2reg

m_a2    decfsz  A2reg,F
   goto    m_gs2
;
;  A2 ready to toggle
;
   movf    tonesA,W
   xorlw   A2mask          ;toggle A2 tone pin
   movwf   tonesA
   movlw   A2
   movwf   A2reg

m_gs2   decfsz  GS2reg,F
   goto    m_g2
;
;  G sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   GS2mask         ;toggle GS2 tone pin
   movwf   tonesB
   movlw   GS2
   movwf   GS2reg

m_g2    decfsz  G2reg,F
   goto    m_fs2
;
;  G2 ready to toggle
;
   movf    tonesB,W
   xorlw   G2mask          ;toggle G2 tone pin
   movwf   tonesB
   movlw   G2
   movwf   G2reg

m_fs2   decfsz  FS2reg,F
   goto    m_f2
;
;  F sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   FS2mask         ;toggle FS3 tone pin
   movwf   tonesB
   movlw   FS2
   movwf   FS2reg

m_f2    decfsz  F2reg,F
   goto    m_e2
;
;  F2 ready to toggle
;
   movf    tonesB,W
   xorlw   F2mask          ;toggle F2 tone pin
   movwf   tonesB
   movlw   F2
   movwf   F2reg

m_e2    decfsz  E2reg,F
   goto    m_ds2
;
;  E2 ready to toggle
;
   movf    tonesB,W
   xorlw   E2mask          ;toggle E2 tone pin
   movwf   tonesB
   movlw   E2
   movwf   E2reg

m_ds2   decfsz  DS2reg,F
   goto    m_d2
;
;  D sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   DS2mask         ;toggle DS2 tone pin
   movwf   tonesB
   movlw   DS2
   movwf   DS2reg

m_d2    decfsz  D2reg,F
   goto    m_cs2
;
;  D2 ready to toggle
;
   movf    tonesB,W
   xorlw   D2mask          ;toggle D2 tone pin
   movwf   tonesB
   movlw   D2
   movwf   D2reg

m_cs2   decfsz  CS2reg,F
   goto    main
;
;  C sharp 2 ready to toggle
;
   movf    tonesB,W
   xorlw   CS2mask         ;toggle CS2 tone pin
   movwf   tonesB
   movlw   CS2
   movwf   CS2reg

   goto    main            ;Worst case=86 cycles
;
;  Reset vector, 0x1FF
;
   org     0x1FF

   goto    start

   end
 
 
 Reportar al moderador    189.187.92.217 
 
 
 
mtristan
Nuevo Usuario

 Desconectado

 Argentina

Mensajes: 7



    Re: Escala Musical
« Respuesta #1 : 24 de Julio de 2009, 04:37:31 pm »   

--------------------------------------------------------------------------------
.

La verdad, no revisé muy bien el código, pero pude encontrar 2 errores importantes:
- Si decís que el programa es para un 16F84A, en el inicio del código debería decir list p=16F84A, en lugar de list p=16c54.
- En las últimas líneas aparece:  org     0x1FF
                                               goto    start
Deberías sustituir el número 0x1FF por 0x00 (que es donde se encuentra el vector de reset en el 16F84A, no se en dónde estará en el 16C54).
Por último no se si es válida la sentencia __FUSES, yo siempre uso __CONFIG, aunque esto no tiene mucha importancia, porque al final podés poner lo que quieras en el programa grabador.

Saludos.
 
 Reportar al moderador    En línea 
 
 
 
Chrisbaf  si muchas gracias por el codigo, pero ya lo habia visto, el problema que solo hay un pin de salida  con la una nota musical que elige  yo necesito que cada nota salga pou un pin continuamente sin interrupciones y al mismo tiempo

gracias
 
 
 

Desconectado esgrimae

  • PIC10
  • *
  • Mensajes: 5
Re: Escala Musical
« Respuesta #4 en: 02 de Febrero de 2010, 14:26:18 »
Muhas graias por  su ayda...  Hice este otro codigo para las  notas musicales, pero no se como obtener  frecuencias  mayores  no se usar el TMRO  ni el OTION_REG ni el INTCOM  para obtener mayor  rapidez  en la generaion  de las  frecuencias en cada pin  del PIC.  Alguien que pueda ayudarme a revisar  el codigo y darme algun  tip.  Con FREQOUT  solo  genera una nota en  un  pin y no genera  todas las notas al mismo tiempo en cada pata del pin.




@ DEVICE HS_OSC
;@ DEVICE WDT_OFF
DEFINE OSC 20
;CMCON = 7 ;para el pic 16f628a
ADCON1 = 7 ;para el pic 16f819

;OPTION_REG=%10100000     ; 1:2    20.000KHz TMR0 @ xtal=16MHz
;INTCON=%10100000      ;HABILITA TMRO INTERUPCION INTERNA

     
;DATO VAR BYTE
A   VAR       byte
B   VAR      byte
C   VAR      byte
D   VAR      byte           
E   VAR      byte
F   VAR       byte
G   VAR      byte
H   VAR      byte
I   VAR      byte
J   VAR      byte
K   VAR      byte
L   VAR      byte

A2   VAR   byte
B2   VAR   byte
C2   VAR   byte
D2   VAR   byte
E2   VAR   byte
F2   VAR   byte
G2   VAR   byte
H2   VAR   byte
I2   VAR   byte
J2   VAR   byte
K2   VAR   byte
L2   VAR   byte

trisa=0
trisb=0
;         Pic16f819  option reg =0  ; 1:2                  
;         Cristal  20 mhz    1:2                  ;TMR0 clock = 1:2 of Fosc/4
;C3       equ   60   2500000   /   133   /   2   =   9398.496241
;B2       equ   63   2500000   /   141   /   2   =   8865.248227
;AS2   equ   67   2500000   /   149   /   2   =   8389.261745
;A2       equ   71   2500000   /   158   /   2   =   7911.392405
;GS2   equ   75   2500000   /   167   /   2   =   7485.02994
;G2       equ   80   2500000   /   177   /   2   =   7062.146893
                           
;FS2   equ   84   2500000   /   188   /   2   =   6648.93617
;F2       equ   89   2500000   /   199   /   2   =   6281.407035
;E2       equ   95   2500000   /   211   /   2   =   5924.170616
;DS2   equ   101   2500000   /   223   /   2   =   5605.381166
;D2       equ   107   2500000   /   236   /   2   =   5296.610169
;CS2   equ   113   2500000   /   251   /   2   =   4980.079681

A   =   133
B   =   141
C   =   149
D   =   158
E   =   167
F   =   177

G   =   188
H   =   199
I   =   211
J   =   223
K   =   236
L   =   251
 

INICIO:
   
 A2=A2+1
 IF A2=A THEN
 TOGGLE  PORTA.0
 A2=0
 ENDIF
 
 B2=B2+1
 IF B2=B THEN
 TOGGLE  PORTA.1
 B2=0
 ENDIF
 
 C2=C2+1
 IF C2=C THEN
 TOGGLE  PORTA.2
 C2=0
 ENDIF
 
 
 D2=D2+1
 IF D2=D THEN
 TOGGLE  PORTA.3
 D2=0
 ENDIF
 
 E2=E2+1
 IF E2=E THEN
 TOGGLE  PORTb.0
 E2=0
 ENDIF
 
 F2=F2+1
 IF F2=F THEN
 TOGGLE  PORTB.1
 F2=0
 ENDIF
 
 G2=G2+1
 IF G2=G THEN
 TOGGLE  PORTB.2
 G2=0
 ENDIF
 
 H2=H2+1
 IF H2=H THEN
 TOGGLE  PORTB.3
 H2=0
 ENDIF
 
 I2=I2+1
 IF I2=I THEN
 TOGGLE  PORTB.4
 I2=0
 ENDIF
 
 J2=J2+1
 IF J2=J THEN
 TOGGLE  PORTB.5
 J2=0
 ENDIF
 
 K2=K2+1
 IF K2=K THEN
 TOGGLE  PORTB.6
 K2=0
 ENDIF
 
 
 L2=L2+1
 IF L2=L THEN
 TOGGLE  PORTB.7
 L2=0
 ENDIF


GOTO INICIO

 end
 


 

anything