Define CONF_WORD = 0x3f09 'configuracion de bit
Define CLOCK_FREQUENCY = 4 'frecuencia de trabajo
'************* Adaptado by COS para PSI *************************
'******** Juego: Quien pulsa la tecla más rapido ****************
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : KARINA RICO *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 08/09/2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'device = 16f628a
'reminders = False
'Config intrc_osc_noclkout, _ 'Internal Oscillator
'wdt_off, _ 'Enable watch dog timer
'pwrte_on, _ 'Enable power up timer
'mclre_off, _ 'Enable MCLR pin
'boden_off, _ 'Enable brown out detect
'lvp_off, _ 'Disable Low voltage programming mode
'data_cp_off, _ 'Disable data code protect
'cp_off 'Disable code protect
'reminders = True
'watchdog = off
'xtal = 4
'---------------
'Define SIMULATION_WAITMS_VALUE = 1 'Ignora los valores de WaitmS
'---------------
AllDigital 'los pin como I/O digitales
TRISA = %00010110 'configura puerto A
TRISB = 0 'configura puerto B
PORTA = 0 'Estado pin de puerto A
PORTB = 0 'Estado pin puerto B
'---------------
Dim i As Byte 'contador luces de progreso de juego
Dim pausa As Word 'establece el tiempo de pausa
Dim x As Byte 'contador parpadeo luces de fin de juego
Dim tecla_off As Bit 'anula/permite lectura de teclas durante la pausa
Dim blink_off As Bit 'anula/permite parpadeo de led fin tiempo del juego
'---------------
Symbol prof = PORTA.4 'renombra el puerto
Symbol alu1 = PORTA.1 'renombra el puerto
Symbol alu2 = PORTA.2 'renombra el puerto
'---------------
main:
tecla_off = 1 'activa lectura de teclas durante las pausas
blink_off = 1 'activa el parpadeo de fin de juego
If prof = 1 And alu1 = 0 And alu2 = 0 Then Gosub cont 'activa partida
Goto main
End
'----Subrutinas---
'-----------------
cont: 'control trayectoria del juego
i = 0
PORTA = 0 'apaga luces de proceso de tiempo del juego
PORTB = 0 'apaga luces de proceso de tiempo del juego
pausa = 2000 'determina una pausa en mSeg.
Gosub m_pause 'hace la pausa anterior, salto con retorno
While i < 10 'bucle, se repite mientras i es menor que 10
Select Case i 'segun el valor de i, se toma una acción
Case 0
PORTA.3 = 1 'enciende led menos significativo tiempo juego
Case 1
PORTA.0 = 1
Case 2
PORTB.0 = 1
Case 3
PORTB.1 = 1
Case 4
PORTB.2 = 1
Case 5
PORTB.3 = 1
Case 6
PORTB.4 = 1
Case 7
PORTB.5 = 1
Case 8
PORTB.6 = 1
Case 9
PORTB.7 = 1 'enciende led más significativo tiempo de juego
EndSelect 'acota select case
pausa = 2000 'carga el tiempo a contar en el timer
Gosub m_pause 'hace pausa, salto con retorno
If alu1 = 1 Then Gosub eexit1 'pulsó jugador 1
If alu2 = 1 Then Gosub eexit2 'pulsó jugador 2
If i = 9 And blink_off = 1 Then Gosub blink 'si llegamos al ultimo case sin pulsar
i = i + 1 'contador control case y bucle
If blink_off = 0 Then i = 10 'termina bucle while
Wend 'acota bucle While i
Return
'-----------------
eexit1: 'al pulsar jugador 1
PORTA.6 = 1 'activa led jugador 1
tecla_off = 0 'anular lectura de teclas durante la pausa
blink_off = 0 'anula blink
pausa = 2000 'determina el tiempo de pausa
Gosub m_pause 'hace pausa, salto con retorno
Return
'-----------------
eexit2: 'al pulsar jugador 2
PORTA.7 = 1 'activa led jugador 2
tecla_off = 0 'anular la lectura de teclas durate la pausa
blink_off = 0 'anula blink
pausa = 2000 'determina la pausa
Gosub m_pause 'hace la pausa, salto con retorno
Return
'-----------------
blink: 'parpadeo led por fin del case, se agoto el tiempo de juego
tecla_off = 0 'anular lectura de teclas durante la pausa
For x = 0 To 10 'cabecera bucle
PORTB = 255 'luces indicadoras de tiempo de juego a on
PORTA = 9 'lices indicadoras dde tiempo de juego a on
pausa = 200 'determina una pausa
Gosub m_pause 'hace la pausa, salto con retorno
PORTB = 0 'luces indicadoras de tiempo de juego a off
PORTA = 0 'luces indicadoras de tiempo de jeugo a off
pausa = 200 'determina una pausa en mSeg.
Gosub m_pause 'hace la pausa, salto con tenorno
Next x 'acota for x
Return
'-----------------
m_pause: 'rutina de pausa especial, timer por soft + teclas
'pausa = 1 'acorta el tiempo de la simulacion
While pausa > 0 'mientras se de la comparacion, bucle
WaitMs 1 'delayms 1 'pausa, base de tiempos de referencia 1mSeg.
pausa = pausa - 1 'incrementa contador, lleva el tiempo
If tecla_off = 1 Then 'controla la lectura de teclas durante la pausa
If alu1 = 1 Or alu2 = 1 Then pausa = 0 'si es cierto termina while
Endif 'fin del if anterior
Wend 'acota el while
Return 'retorna al programa
'Fin