Advertisement
tmax

Untitled

May 10th, 2015
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.             INCLUDE 'derivative.inc'
  2.            
  3. ; Export symbols? NPI
  4.             XDEF        _Startup
  5.             ABSENTRY    _Startup
  6.            
  7. ; Variables y toda la cosa!
  8.             ORG     RAMStart        ; Insert your data definition here
  9. tableSize:  DS.B    1               ; 1 byte
  10. modoLEDS    DS.B    1        
  11.            
  12.             ORG    ROMStart
  13. TablaCounter:   DC.B    16, %00111111, %00000110, %01011011, %01001111, %01100110, %01101101, %01111101, %00000111, %01111111, %01101111, %01110111, %01111100, %00111001, %01011110, %01111001, %01110001
  14. ;                               0           1          2         3          4           5           6         7          8          9           A          b          C         d           E         F
  15. TablaShift:     DC.B    6, %10000001, %00000010, %10000100, %00001000, %10010000, %00100000
  16. TablaRShift:    DC.B    6, %10000001, %00100000, %10010000, %00001000, %10000100, %00000010
  17. TablaCross:     DC.B    2, %00110110, %01001001
  18. TablaRaro:      DC.B    2, %00011011, %01100100
  19. TablaShiftH:    DC.B    4, %00110111, %01110110, %00111110, %01110110
  20.  
  21.             INCLUDE 'MCUinit.inc'
  22.  
  23. ; Iniciamos!
  24. _Startup:
  25.             LDHX   #RAMEnd+1        ; Initialize the stack pointer
  26.             TXS
  27.             CLI                     ; Enable interrupts
  28.             JSR    MCU_init
  29.            
  30.             MOV     #$FF, PTEDD     ; Puerto E donde esta el 7-seg como salida
  31.             MOV     #$00, PTED      ; Puerto E todo a 0
  32.             BCLR    5,  PTFDD       ; Pongo a PTF5 como entrada (S18)
  33.          
  34.             JSR     clearModo  
  35.             MOV     #FF, PTED
  36.             JSR     delay
  37.             JSR     delay
  38.            
  39.             ;LDA        #LOW(TablaCounter)      ; LSB de la direccion al stack
  40.             ;PSHA
  41.             ;LDA        #HIGH(TablaCounter)     ; MSB de la direccion al stack
  42.             ;PSHA                          
  43.             ;PULH                               ; Acomodamos la direccion al registro indice
  44.             ;PULX
  45.  
  46. ; Aca empieza la verdad!
  47. testPulsador:
  48.             BRCLR   5, PTFD, pulsadorPresionado     ; Saltamos a pulsadorPresionado cuando sea 0 el pin PTF5
  49.             BRA     testModo
  50.            
  51. pulsadorPresionado:
  52.             BRCLR   5, PTFD, pulsadorPresionado     ; Esperamos a que se suelte el pulsador
  53.             INCA                        ; Siguiente modo
  54.             STA     modoLEDS
  55.             LDA     #6
  56.             CMP     modoLEDS
  57.             BNE     testModo            ; Si no llegamos al 6 (los modos van de 0 a 5) seguimos
  58.             JSR     clearModo           ; Sino reiniciamos el modo
  59.            
  60. testModo:  
  61.             LDA     modoLEDS            ; Cargo en A el modo
  62.            
  63.             CMP     #0                  ; Compara A con la memoria
  64.             BEQ     callModo0           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  65.             BRA     continue0
  66. callModo0:  LDHX    #TablaCounter
  67.             JSR     modo0
  68. continue0:
  69.  
  70.             CMP     #1                  ; Compara A con la memoria
  71.             BEQ     callModo1           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  72.             BRA     continue1
  73. callModo1:  LDHX    #TablaShift
  74.             JSR     modo0
  75. continue1
  76.  
  77.             CMP     #2                  ; Compara A con la memoria
  78.             BEQ     callModo2           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  79.             BRA     continue2
  80. callModo2:  LDHX    #TablaRShift
  81.             JSR     modo0
  82. continue2:
  83.  
  84.             CMP     #3                  ; Compara A con la memoria
  85.             BEQ     callModo3           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  86.             BRA     continue3
  87. callModo3:  LDHX    #TablaCross
  88.             JSR     modo0
  89. continue3:
  90.  
  91.             CMP     #4                  ; Compara A con la memoria
  92.             BEQ     callModo4           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  93.             BRA     continue4
  94. callModo4:  LDHX    #TablaRaro
  95.             JSR     modo0
  96. continue4:
  97.  
  98.             CMP     #5                  ; Compara A con la memoria
  99.             BEQ     callModo5           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  100.             BRA     continue5
  101. callModo5:  LDHX    #TablaShiftH
  102.             JSR     modo0
  103. continue5:
  104.                        
  105.             BRA     testPulsador
  106.            
  107. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  108. ;;; Mostramos todos los datos en la tabla en los 7 seg ;;;
  109. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  110. modo0:      PSHA           
  111.                
  112.             LDA     ,X                  ; La primera posicion indica la cantidad de bytes
  113.             STA     tableSize
  114.             AIX     #1                  ; La siguiente posicion ya es un dato
  115.             CLRA                        ; Usamos el acumulador como contador
  116.  
  117. modo0Cmp:   CMP     tableSize
  118.             BLO     modo0Go             ; Si A es menor que el tamano de la tabla seguimos
  119.             BRA     modo0Exit           ; Sino salimos
  120. modo0Go:    PSHA
  121.             LDA     ,X                  ; Cargo la posicion indicada por el registro indice H:X de la tabla
  122.             STA     PTED                ; Valor de la tabla al puerto
  123.             PULA
  124.             AIX     #1                  ; Siguiente posicion de la tabla
  125.             INCA                        ; Incremento el contador
  126.             BRCLR   5, PTFD, modo0Exit  ; Antes de entrar al delay, si se presiono el boton, salimos!
  127.             JSR     delay               ; Retardo para que se vea algo XD
  128.             BRA     modo0Cmp           
  129.  
  130. modo0Exit:  PULA
  131.             RTS
  132.  
  133. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  134. ;;;     Reiniciamos el modo de los LEDs      ;;;           
  135. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  136. clearModo:
  137.             PSHA
  138.             LDA     #$00
  139.             STA     modoLEDS
  140.             PULA
  141.             RTS
  142.  
  143. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  144. ;;;                  Delay                   ;;;
  145. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  146. delay:
  147.             PSHX
  148.             PSHH
  149.             PSHA
  150.            
  151.             LDA     #12         ; Cuantas veces contamos hasta FFFF
  152. reload:     LDHX    #$0000
  153.            
  154. loop_d:     AIX     #1
  155.             CPHX    #$FFFF
  156.             BNE     loop_d      ; Si HX no es igual a FFFF saltamos a loop_d
  157.             DBNZA   reload      ; Llegamos aca porque HX es FFFF, decrementamos el acumulador
  158.                                 ;  y verificamos, si es 0 salimos, si no lo es volvemos a cargar
  159.                                 ;  el registro HX y hacemos otro bucle tantas veces como el acumulador
  160.                                 ;  tenga cargado
  161.             PULA
  162.             PULH
  163.             PULX   
  164.             RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement