Autor Tema: PIC 16f877A ayuda con código en microcode  (Leído 6213 veces)

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

Desconectado manikuy

  • PIC10
  • *
  • Mensajes: 2
PIC 16f877A ayuda con código en microcode
« en: 07 de Mayo de 2012, 22:29:13 »
Saludos soy nuevo aquí me permito solicitar ayuda en un tema de suma importancia se trata de el código en el juego simón dice lo he logrado hasta cierto modo pero necesito que la secuencia este bien os adjunto la simulación en proteus y el código en microcode..... basicamente el el juego "SIMON DICE" o "simon says" pero con 8 leds y 8 pulsantes

La pregunta aqui es de como realizar la secuencia randomica de encendido de leds y captar dicha secuencia con los pulsantes

http://www.mediafire.com/?8o1kj5mrxndz5en

Código: [Seleccionar]
'****************************************************************
'*  Name    : Tesis Juego de Memoria V1.0                       *
'*  Author  : Marco Pelaez                                      *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 07/Abril/2012                                     *
'*  Version : 1.0                                               *
'*  Notes   : XTAL: 8 Mhz PIC16F877A                            *
'*          :                                                   *
'****************************************************************
ADCON1=7               ;Pines del Puerto A como DIGITALES.
                        ;Declaro los pines de Ingreso y los de salida
TRISA=%11000001         ;b7.b6.b5....b0
TRISB=%00000000
TRISC=%11111111
TRISD=%00000000

'---------------Configuro el Teclas opcion y mando del Juego---------------
p_Start       var porta.0          'Pulsante de Inicio de Juego
Led_Status    VAR porta.1
led_Ganador   var porta.2
led_Perdedor  var porta.3

p_L1 var portc.7         'Pulsante de Opcion de led pulsado
p_L2 var portc.6
p_L3 var portc.5
p_L4 var portc.4
p_L5 var portc.3
p_L6 var portc.2
p_L7 var portc.1
p_L8 var portc.0
'---------------   Configuro salida de los LEDS  ------------------------
l_L1 VAR portb.0
l_L2 VAR portb.1
l_L3 VAR portb.2
l_L4 VAR portb.3
l_L5 VAR portb.4
l_L6 VAR portb.5
l_L7 VAR portb.6
l_L8 VAR portb.7

'---------Variables declaradas usados en el  programa
 X var byte
 Y VAR BYTE
 Zrespaldo var byte
 Z VAR BYTE
 captura var byte
 Resultado var byte
 flag var bit
 repe var byte
 aleatorio var byte
 repe1   var bit[16]

'-----------Limpio Registros y variables para poder iniciar en condiciones cero
Clear_all:
        portb=0
        Z=0
        x=0
        Y=0
        Zrespaldo=0
        flag=0
        captura=0
        Resultado=0        
'---------------------------PROGRAMA-------------------------------------------
'--Animacion con leds -----
Inicio:
       gosub TEST
       high  l_L1
       high  l_L8
       GOSUB TEST
       high  l_L2
       HIGH  l_L7
       GOSUB TEST  
       high  l_L3
       HIGH  l_L6
       GOSUB TEST      
       high  l_L4
       HIGH  l_L5
       GOSUB TEST
       LOW   l_L5
       LOW   l_L4
       GOSUB TEST
       LOW   l_L6
       LOW   l_L3
       GOSUB TEST  
       LOW   l_L7
       LOW   l_L2      
       GOSUB TEST        
       LOW   l_L8
       LOW   l_L1
       GOSUB TEST
       portb=%11111111
       gosub TEST
       portb=0
       gosub  TEST
'...................Animacion        
'       LOW  l_L8
'       GOSUB TEST
'        LOW l_L7
'       GOSUB TEST  
'        LOW  l_L6
'       GOSUB TEST      
'        LOW l_L5
'       GOSUB TEST
'        LOW  l_L4
'       GOSUB TEST
'        LOW  l_L3
'       GOSUB TEST  
'        LOW  l_L2
'       GOSUB TEST        
'        LOW l_L1
'       GOSUB TEST                
goto Inicio      

TEST:

for x=0 to 100
     if p_Start=0 then
         HIGH Led_Status
         goto Inicio1
      ELSE    
         aleatorio=aleatorio-1
      endif
      pause 15
      IF aleatorio=0 then
         aleatorio=7
      endif
NEXT      
RETURN      
'########################### INICIO DE SECUENCIAS #################

Inicio1:                       'Ingresa a la subrutina de aleatorios
        HIGH Led_Status
        
        random repe1
        
        for repe=0 to repe1
            aleatorio=aleatorio-1      
            
            IF aleatorio=0 then
            aleatorio=7
            endif
        next
        
        LOW Led_Status        
GOTO Inicio12      
    
Inicio12:
            portb=%00000000   ; Limpiamos el puerto para que empiece el juego
            LOoKUP aleatorio,[70,14,28,7,134,73,176,56],Z   ;Y es el puntero y lo deposita
            

'....Secuencia #1 de Juego
            
            IF Z=70 then         'Dec 70 =     01000110   ..b7...b0
                      
            pause 1500           'Presenta la secuencia a Jugar
            high l_L7
            pause 1500
            low l_L7
            HIGH l_L3
            pause 1500
            low l_L3
            HIGH l_L2            
            pause 1500
            low l_L2
            PAUSE 1500
            goto TEST1

            endif

'....Secuencia #2 de Juego
            
            IF Z=14 then         'Dec 14 =     00001110   ..b7...b0
          
          
            pause 2500           'Presenta la secuencia a Jugar
            high l_L4
            pause 2500
            low l_L4
            HIGH l_L3
            pause 2500
            low l_L3
            HIGH l_L2            
            pause 2500
            low l_L2
            PAUSE 2500
            goto TEST1

            endif
'....Secuencia #3 de Juego    tiempo medio
            
            IF Z=28 then         'Dec 28 =     00011100   ..b7...b0
          
          
            pause 2000           'Presenta la secuencia a Jugar
            high l_L2
            pause 2000
            low l_L2
            HIGH l_L3
            pause 2000
            low l_L3
            HIGH l_L4            
            pause 2000
            low l_L4
            PAUSE 2000
            goto TEST1
            
            endif            
'....Secuencia #4 de Juego      tiempo lento
            
            IF Z=7 then         'Dec 7 =     00000111   ..b7...b0
          
          
            pause 2500           'Presenta la secuencia a Jugar
            high l_L3
            pause 2500
            low l_L3
            HIGH l_L2
            pause 2500
            low l_L2
            HIGH l_L1            
            pause 2500
            low l_L1
            PAUSE 2500
            goto TEST1

            endif            
'....Secuencia #5 de Juego      tiempo lento
            
            IF Z=134 then         'Dec 134 =     10000110   ..b7...b0
          
          
            pause 2500           'Presenta la secuencia a Jugar
            high l_L7
            pause 2500
            low l_L7
            HIGH l_L3
            pause 2500
            low l_L3
            HIGH l_L2            
            pause 2500
            low l_L2
            PAUSE 2500
            goto TEST1

            endif
'....Secuencia #6 de Juego      tiempo lento
            
            IF Z=73 then         'Dec 73 =     01001001   ..b7...b0
          
          
            pause 2500           'Presenta la secuencia a Jugar
            high l_L1
            pause 2500
            low l_L1
            HIGH l_L4
            pause 2500
            low l_L4
            HIGH l_L7            
            pause 2500
            low l_L7
            PAUSE 2500
            goto TEST1

            endif
'....Secuencia #7 de Juego       tiempo rapido
            
            IF Z=176 then         'Dec 176 =     10110000   ..b7...b0
          
          
            pause 1500           'Presenta la secuencia a Jugar
            high l_L8
            pause 1500
            low l_L8
            HIGH l_L6
            pause 1500
            low l_L6
            HIGH l_L5            
            pause 1500
            low l_L5
            PAUSE 1500
            goto TEST1

            endif

'....Secuencia #8 de Juego    tiempo medio
            
            IF Z=56 then         'Dec 56 =     00111000   ..b7...b0
          
          
            pause 2000           'Presenta la secuencia a Jugar
            high l_L4
            pause 2000
            low l_L4
            HIGH l_L5
            pause 2000
            low l_L5
            HIGH l_L6            
            pause 2000
            low l_L7
            PAUSE 2000
            goto TEST1

            endif

goto Inicio12    
    


'----Captura y deteccion de la Secuencia aleatoria detectada-------------------  
TEST1:
     captura=0
     X=0  
     high Led_Status

Ini:
FOR X=0 to 5
    for Y=0  to 90
    pause 10
    IF p_L1=0 then
    pause 10
    high l_L1
    captura=captura+1
    pause 10
    goto Ini
    endif

    IF p_L2=0 THEN
    pause 10
    high l_L2
    captura=captura+2
    pause 10
    goto Ini
    endif

    IF p_L3=0 THEN
    pause 10
    high l_L3
    captura=captura+4
    pause 10
    goto Ini
    endif
    
    IF p_L4=0 THEN
    pause 10
    high l_L4
    captura=captura+8
    pause 10
    goto Ini
    endif    
 
    
    IF p_L5=0 THEN
    pause 10
    high l_L5
    captura=captura+16
    pause 10
    goto Ini
    endif  
    
    IF p_L6=0 THEN
    pause 10
    high l_L6
    captura=captura+32
    pause 10
    goto Ini
    endif
    
    IF p_L7=0 THEN
    pause 10
    high l_L7
    captura=captura+64
    pause 10
    goto Ini
    endif
    
    IF p_L8=0 THEN
    pause 10
    high l_L8
    captura=captura+128
    pause 10
    goto Ini
    endif
    pause 10
    next
next

Respuesta:

    portb=0
    LOW Led_Status  
    
    captura=porta
    
    IF captura=Z then
    high led_Ganador
    else
    high led_Perdedor
    endif

goto Respuesta

end


'Inicio2:

'    pause 1500
'    low Led_Status
      
'    Resultado=captura-Z    
    
'    if Resultado=0 then
'    pause 200
'    portb=%111111111
'    ELSE
'    portb.3=1
'    endif
« Última modificación: 10 de Mayo de 2012, 02:00:51 por manikuy »

Desconectado kamisama

  • PIC16
  • ***
  • Mensajes: 151
Re: PIC 16f877A ayuda con código en microcode
« Respuesta #1 en: 08 de Mayo de 2012, 08:24:21 »
No me queda clara la pregunta. ¿hay pregunta?


 

anything