Hola a todos, soy nuevo en el foro y en el tema de los pics, he hecho mi primer programa aprendiendo cosas aquí y allá y en algunos tutoriales. El objetivo es hacer un marcador con 2 contadores independientes y sacarlos a sus respectivos displays de 2 digitos, la cuenta inicia en 20.Se han puesto 2 74ls47 que son decodificadores BCD a display. El programa funciona perfectamente pero se lo he mostrado a un amigo que entiende de esto más que yo y me ha dicho que es una chapuza. Puede ser porque conozco pocos comandos, si alguien me puede decir algo sobre como se puede hacer de otra manera... No me critiqueis, me ha costado mucho trabajo. Está hecho con el pic simulator ide. Por cierto el pic es el 16f84a
AllDigital
TRISA = %11111111
TRISB = %00000000
PORTA = 0
PORTB = 0
Dim cuenta1 As Byte 'valor para el display 1
Dim cuenta2 As Byte 'valor para el display 2
Dim a As Byte 'variable para el antirebote
Dim b As Byte 'variable para ajustar el tiempo de antirebote
cuenta1 = 32 '20 en BCD
cuenta2 = 32 '20 en BCD
a = 0
b = 0
loop:
For a = b To 0 Step -1 'temporizador antirebote, se ha puesto así en vez de wait por lo de refrescar los displays
PORTB.6 = 0
PORTB.7 = 1
PORTB.0 = cuenta1.0 'todo esto es para refrescar los displays
PORTB.1 = cuenta1.1 'si no lo hiciese así los portb.6 y .7
PORTB.2 = cuenta1.2 'cogerían el valor de la cuenta.
PORTB.3 = cuenta1.3 'Estos son lo que apagan y encienden los displays
PORTB.4 = cuenta1.4
PORTB.5 = cuenta1.5
WaitMs 10
PORTB.6 = 1
PORTB.7 = 0
PORTB.0 = cuenta2.0
PORTB.1 = cuenta2.1
PORTB.2 = cuenta2.2
PORTB.3 = cuenta2.3
PORTB.4 = cuenta2.4
PORTB.5 = cuenta2.5
WaitMs 10
Next a
b = 0
If PORTA.0 = 1 Then Goto adelante1
If PORTA.2 = 1 Then Goto adelante2
If PORTA.1 = 1 Then Goto atras1
If PORTA.3 = 1 Then Goto atras2
Goto loop
adelante1:
If cuenta1 = 57 Then Goto loop
cuenta1 = cuenta1 + 1
If cuenta1 = 10 Then cuenta1 = cuenta1 + 6 'Esto es un conversor manual de binario a BCD
If cuenta1 = 26 Then cuenta1 = cuenta1 + 6
If cuenta1 = 42 Then cuenta1 = cuenta1 + 6
PORTB.6 = 1
PORTB.7 = 1
b = 25 'Aqui se le pone el tiempo de antirebote
Goto loop
atras1:
If cuenta1 = 0 Then Goto loop
cuenta1 = cuenta1 - 1
If cuenta1 = 63 Then cuenta1 = cuenta1 - 6
If cuenta1 = 47 Then cuenta1 = cuenta1 - 6
If cuenta1 = 31 Then cuenta1 = cuenta1 - 6
If cuenta1 = 15 Then cuenta1 = cuenta1 - 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop
adelante2:
If cuenta2 = 57 Then Goto loop
cuenta2 = cuenta2 + 1
If cuenta2 = 10 Then cuenta2 = cuenta2 + 6
If cuenta2 = 26 Then cuenta2 = cuenta2 + 6
If cuenta2 = 42 Then cuenta2 = cuenta2 + 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop
atras2:
If cuenta2 = 0 Then Goto loop
cuenta2 = cuenta2 - 1
If cuenta2 = 63 Then cuenta2 = cuenta2 - 6
If cuenta2 = 47 Then cuenta2 = cuenta2 - 6
If cuenta2 = 31 Then cuenta2 = cuenta2 - 6
If cuenta2 = 15 Then cuenta2 = cuenta2 - 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop