Advertisement
tmax

TP1

May 6th, 2015
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.             INCLUDE 'derivative.inc'
  2.            
  3. ; export symbols
  4.             XDEF _Startup
  5.             ABSENTRY _Startup
  6.            
  7. ; variable/data section
  8.             ORG     RAMStart        ; Insert your data definition here
  9. ModoLEDS:   DS.B    1               ; 1 byte
  10. TablaData:  DC.B    %00111111, %00000110, %01001111, %01100110, %01101101, %01111101, %00000111, %01111111, %01101111, %01110111, %01111100, %00111001, %01011110, %01111001, %01110001
  11. ;                       1           2          3          4         5           6         7          8          9           A          b          C         d           E         F
  12.             ORG    ROMStart
  13.             INCLUDE 'MCUinit.inc'
  14.  
  15. _Startup:
  16.             LDHX   #RAMEnd+1        ; Initialize the stack pointer
  17.             TXS
  18.             CLI                     ; Enable interrupts
  19.             ;JSR    MCU_init
  20.            
  21.             MOV     #$FF, PTEDD     ; Puerto E donde esta el 7-seg como salida
  22.             MOV     #$00, PTED      ; Puerto E todo a 0
  23.             BCLR    5,  PTFDD       ; Pongo a PTF5 como entrada (S18)
  24.          
  25.             LDA     #$00
  26.             STA     ModoLEDS       
  27.             MOV     #$FF, PTED
  28.  
  29. mainLoop:
  30.             BRCLR   5, PTFD, pulsadorPresionado     ; Saltamos a pulsadorPresionado cuando sea 0 el pin PTF5
  31.             BRA     mainLoop
  32.            
  33. pulsadorPresionado:
  34.             LDA     #5
  35.             CMP     ModoLEDS
  36.             BLE     clearModo           ; Saltamos a clearModo si el acumulador es menor a ModoLEDS. Si el acumulador es menor
  37.                                         ;  o igual a modo ModoLEDS, es decir, que ModoLEDS es mayor o igual a 5, reiniciamos
  38.                                         ;  ModoLEDS
  39. testModo:  
  40.             LDA     ModoLEDS            ; Cargo en A el modo
  41.             INCA                        ; Lo incremento, porque es el siguiente modo
  42.            
  43.             CMP     #1                  ; Compara A con la memoria
  44.             BEQ     callModo1           ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
  45.             BRA     continue1
  46. callModo1:  JSR     modo1
  47. continue1:
  48.  
  49.             CMP     #2
  50.             BEQ     callModo2
  51.             BRA     continue2
  52. callModo2:  JSR     modo2
  53. continue2:         
  54.                        
  55.             BSR     delay
  56.             BRA     mainLoop
  57.  
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  59. ;;;                  Modos                   ;;;
  60. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  61.  
  62. ; Modo 1 -> Cuenta de 0 a 9 y luego A,B,C,D,E,F hasta que se presione el pulsador
  63. modo1:
  64.             PSHA
  65.             PSHX                       
  66.             CLRX
  67.             LDA     #16
  68. modo1Cmp:   CMP     ,X
  69.             BGE     modo1Go             ; Si el acumulador es mayor o igual que X, seguimos, es decir que X no llego a 16
  70.             BRA     modo1Exit           ; Sino salimos
  71. modo1Go:    LDA     TablaData,x         ; Cargo la posicion indicada por X de la tabla
  72.             STA     PTED                ; Valor de la tabla al puerto
  73.             AIX     #1
  74.             BRA     modo1Cmp
  75. modo1Exit:  PULX
  76.             PULA
  77.             RTS
  78.            
  79. ; Modo 2           
  80. modo2:
  81.             RTS
  82.  
  83. clearModo:
  84.             LDA     #$00
  85.             STA     ModoLEDS
  86.             BRA     testModo
  87.  
  88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89. ;;;                  Delay                   ;;;
  90. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  91. delay:
  92.             PSHX
  93.             PSHH
  94.             PSHA
  95.            
  96.             LDA     #10
  97. reload:     LDHX    #$0000
  98.            
  99. loop_d:     AIX     #1
  100.             CPHX    #$FFFF
  101.             BNE     loop_d      ; Si HX no es igual a FFFF saltamos a loop_d
  102.             DBNZA   reload      ; Llegamos aca porque HX es FFFF, decrementamos el acumulador
  103.                                 ;  y verificamos, si es 0 salimos, si no lo es volvemos a cargar
  104.                                 ;  el registro HX y hacemos otro bucle tantas veces como el acumulador
  105.                                 ;  tenga cargado
  106.             PULA
  107.             PULH
  108.             PULX   
  109.             RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement