jueves, 17 de mayo de 2012

[CÓMPUTO INTEGRADO] Proyecto PIC

Para mi proyecto, hice un contador de números de 0 a 999 que ademas dice si el número mostrado es par o si es primo. Por problemas con el algoritmo mostrare el funcionamiento en el simulador y en el pic aparte, ya que por alguna razón no funciona la parte donde decide que el número es o no primo.

El material que utilizé:

  • 2 leds
  • 2 resistencias de 330 ohms
  • 3 displays 7 segmentos anodo común
  • 1 decodificador 7447
  • 1 pic16f628a
  • muchos cables
  • 1 protoboard

El circuito esta de la siguiente manera:


El código utilizado para el pic:

program reloj
  symbol display1 = PORTB.4
  symbol display2 = PORTB.5
  symbol display3 = PORTB.6
  symbol led_par = PORTA.1
  symbol led_prim = PORTA.0

  const numeros as byte[10] = (%00000000, %00000001, %00000010,
  %00000011, %00000100, %00000101, %00000110, %00000111, %00001000,
  %00001001)
  dim centenas as byte
  dim decenas as byte
  dim unidad as byte
  dim i as integer
  dim j as integer
  dim auxi as integer
  dim prim2 as integer
  dim prim3 as integer
  dim prim5 as integer
  dim prim7 as integer
  dim par as integer

 sub procedure parprim
     if auxi = 0 then
        goto final
     end if
     if auxi = 1 then
        goto final
     end if
     if auxi = 2 then
        led_prim = 1
        goto salto
     end if
     if auxi = 3 then
        led_prim = 1
        goto salto
     end if
     if auxi = 5 then
        led_prim = 1
        goto salto
     end if
     if auxi = 7 then
        led_prim = 1
        goto salto
     end if
     led_prim = 0
     led_par = 0
     prim2 = auxi mod 2
     prim3 = auxi mod 3
     prim5 = auxi mod 5
     prim7 = auxi mod 7
     if prim2 <> 0 then
        if prim3 <> 0 then
           if prim5 <> 0 then
              if prim7 <> 0 then
                 led_prim = 1
              end if
           end if
        end if
     end if
     'auxi2 = auxi-1
     'while auxi2 > 1
     '    prim = auxi mod auxi2
     '    if prim <> 0 then
     '       auxi2 = auxi2-1
     '    end if
     '    if prim = 0 then
     '       goto salto
     '    end if
     '    led_prim = 1
     'wend
     salto:
     par = auxi mod 2
     if par = 0 then
        led_par = 1
     end if
     final:
 end sub

 sub procedure multiplexar
     PORTB = numeros[centenas]
     display1 = 1
     delay_ms(2)
     PORTB = numeros[decenas]
     display1 = 0
     display2 = 1
     delay_ms(2)
     PORTB = numeros[unidad]
     display2 = 0
     display3 = 1
     delay_ms(2)
     INC(i)
     parprim
  end sub

main:
  'entrada
  CMCON = 0x07
  TRISB = %00000000
  TRISA = %00000000
  centenas = 0
  decenas = 0
  unidad = 0
  display1 = 0
  display2 = 0
  display3 = 0
  i = 0
  while True
        multiplexar
        if i = 200 then
        i=0
          unidad = unidad + 1
          auxi = auxi + 1
          if unidad > 9 then
             unidad = 0
             decenas = decenas + 1
             if decenas > 9 then
                   decenas = 0
                   centenas = centenas + 1
                   if centenas > 9 then
                      auxi = 0
                      unidad = 0
                      decenas = 0
                      centenas = 0
                   end if
             end if
          end if
        end if

  wend

end.

No hay comentarios.:

Publicar un comentario