Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INCLUDE 'derivative.inc'
- ; Export symbols? NPI
- XDEF _Startup
- ABSENTRY _Startup
- ; Variables y toda la cosa!
- ORG RAMStart ; Insert your data definition here
- tableSize: DS.B 1 ; 1 byte
- modoLEDS DS.B 1
- ORG ROMStart
- TablaCounter: DC.B 16, %00111111, %00000110, %01011011, %01001111, %01100110, %01101101, %01111101, %00000111, %01111111, %01101111, %01110111, %01111100, %00111001, %01011110, %01111001, %01110001
- ; 0 1 2 3 4 5 6 7 8 9 A b C d E F
- TablaShift: DC.B 6, %10000001, %00000010, %10000100, %00001000, %10010000, %00100000
- TablaRShift: DC.B 6, %10000001, %00100000, %10010000, %00001000, %10000100, %00000010
- TablaCross: DC.B 2, %00110110, %01001001
- TablaRaro: DC.B 2, %00011011, %01100100
- TablaShiftH: DC.B 4, %00110111, %01110110, %00111110, %01110110
- INCLUDE 'MCUinit.inc'
- ; Iniciamos!
- _Startup:
- LDHX #RAMEnd+1 ; Initialize the stack pointer
- TXS
- CLI ; Enable interrupts
- JSR MCU_init
- MOV #$FF, PTEDD ; Puerto E donde esta el 7-seg como salida
- MOV #$00, PTED ; Puerto E todo a 0
- BCLR 5, PTFDD ; Pongo a PTF5 como entrada (S18)
- JSR clearModo
- MOV #FF, PTED
- JSR delay
- JSR delay
- ;LDA #LOW(TablaCounter) ; LSB de la direccion al stack
- ;PSHA
- ;LDA #HIGH(TablaCounter) ; MSB de la direccion al stack
- ;PSHA
- ;PULH ; Acomodamos la direccion al registro indice
- ;PULX
- ; Aca empieza la verdad!
- testPulsador:
- BRCLR 5, PTFD, pulsadorPresionado ; Saltamos a pulsadorPresionado cuando sea 0 el pin PTF5
- BRA testModo
- pulsadorPresionado:
- BRCLR 5, PTFD, pulsadorPresionado ; Esperamos a que se suelte el pulsador
- INCA ; Siguiente modo
- STA modoLEDS
- LDA #6
- CMP modoLEDS
- BNE testModo ; Si no llegamos al 6 (los modos van de 0 a 5) seguimos
- JSR clearModo ; Sino reiniciamos el modo
- testModo:
- LDA modoLEDS ; Cargo en A el modo
- CMP #0 ; Compara A con la memoria
- BEQ callModo0 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue0
- callModo0: LDHX #TablaCounter
- JSR modo0
- continue0:
- CMP #1 ; Compara A con la memoria
- BEQ callModo1 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue1
- callModo1: LDHX #TablaShift
- JSR modo0
- continue1:
- CMP #2 ; Compara A con la memoria
- BEQ callModo2 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue2
- callModo2: LDHX #TablaRShift
- JSR modo0
- continue2:
- CMP #3 ; Compara A con la memoria
- BEQ callModo3 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue3
- callModo3: LDHX #TablaCross
- JSR modo0
- continue3:
- CMP #4 ; Compara A con la memoria
- BEQ callModo4 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue4
- callModo4: LDHX #TablaRaro
- JSR modo0
- continue4:
- CMP #5 ; Compara A con la memoria
- BEQ callModo5 ; Saltamos si el acumulador es igual a 1 (testeando bit Z)
- BRA continue5
- callModo5: LDHX #TablaShiftH
- JSR modo0
- continue5:
- BRA testPulsador
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Mostramos todos los datos en la tabla en los 7 seg ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- modo0: PSHA
- LDA ,X ; La primera posicion indica la cantidad de bytes
- STA tableSize
- AIX #1 ; La siguiente posicion ya es un dato
- CLRA ; Usamos el acumulador como contador
- modo0Cmp: CMP tableSize
- BLO modo0Go ; Si A es menor que el tamano de la tabla seguimos
- BRA modo0Exit ; Sino salimos
- modo0Go: PSHA
- LDA ,X ; Cargo la posicion indicada por el registro indice H:X de la tabla
- STA PTED ; Valor de la tabla al puerto
- PULA
- AIX #1 ; Siguiente posicion de la tabla
- INCA ; Incremento el contador
- BRCLR 5, PTFD, modo0Exit ; Antes de entrar al delay, si se presiono el boton, salimos!
- JSR delay ; Retardo para que se vea algo XD
- BRA modo0Cmp
- modo0Exit: PULA
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Reiniciamos el modo de los LEDs ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- clearModo:
- PSHA
- LDA #$00
- STA modoLEDS
- PULA
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Delay ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- delay:
- PSHX
- PSHH
- PSHA
- LDA #12 ; Cuantas veces contamos hasta FFFF
- reload: LDHX #$0000
- loop_d: AIX #1
- CPHX #$FFFF
- BNE loop_d ; Si HX no es igual a FFFF saltamos a loop_d
- DBNZA reload ; Llegamos aca porque HX es FFFF, decrementamos el acumulador
- ; y verificamos, si es 0 salimos, si no lo es volvemos a cargar
- ; el registro HX y hacemos otro bucle tantas veces como el acumulador
- ; tenga cargado
- PULA
- PULH
- PULX
- RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement