**********************************
*PROGRAMA DE EJEMPLO
**********************************
PACTL EQU $1026
PACNT EQU $1027
ADCTL EQU $1030
ADR1 EQU $1031
ADR2 EQU $1032
ADR3 EQU $1033
ADR4 EQU $1034
OPTION EQU $1039
PORTA EQU $1000
PORTD EQU $1008
PORTE EQU $100A
PORTG EQU $1002
DDRA EQU $1001
DDRD EQU $1009
DDRG EQU $1003
TMSK2 EQU $1024
TFLG2 EQU $1025
SCDR EQU $102F
SCCR2 EQU $102D
SCSR EQU $102E
SCCR1 EQU $102C
BAUD EQU $102B
HPRIO EQU $103C
SPCR EQU $1028
CSCTL EQU $105D
OPT2 EQU $1038
* VARIABLES *********************
ORDEN EQU $000C
SEG EQU $000D
U1 EQU $000E
U2 EQU $000F
U3 EQU $0010
U4 EQU $0011
U5 EQU $0012
V1 EQU $0013
V2 EQU $0014
BAS_H EQU $0015
BAS_L EQU $0016
V5 EQU $0017
TEMPO EQU $0018
ALTO EQU $0019
BAJO EQU $001A
BASE_H EQU $001B
BASE_L EQU $001C
V3 EQU $001D
V4 EQU $001E
EXTRA EQU $001F
**********************************
*CONFIGURA REGISTROS
**********************************
ORG $8000 * DIR DE INICIO
LDS #$03FF * APUNTADOR DE STAK
LDAA #$00 * CONFIG TODO EL PUERTO A COMO ENTRADAS
STAA DDRA * EL PUERTO A
LDAA #$FF * CONFIG TODO EL PUERTO G COMO SALIDAS
STAA DDRG * EL PUERTO G
LDAA #$00 * SE PONE PUERTO G EN CEROS
STAA PORTG
LDD #$302C * CONFIGURA PUERTO SERIAL
STAA BAUD * BAUD 9600 para cristal de 8MHz
STAB SCCR2 * HABILITA RX Y TX PERO INTERRUPCN SOLO RX
LDAA #$00
STAA SCCR1 * 8 BITS
LDAA #$FE * CONFIG PUERTO D COMO SALIDAS (EXCEPTO PD0)
STAA DDRD * SEA ENABLE DEL DISPLAY PD4 Y RS PD3
LDAA #$04
STAA HPRIO
LDAA #$00
TAP
**********************************
*PROGRAMA PRINCIPAL
**********************************
MAIN
INICIO
JSR INICIA
CLR U1
CLR U2
CLR U3
CLR U4
ENCICLATE
LDAA #$3F
STAA ORDEN
CICLO
LDAA ORDEN
CMPA #$3F
BEQ CICLO
LDAB U1
BNE CHECA_U2
COMPARA
CMPA #'S
BNE ENCICLATE
LDAA #'S
STAA U1
JMP ENCICLATE
CHECA_U2
LDAB U2
BNE CHECA_U3
CMPA #'T
BNE NO_ES_T
LDAA #'T
STAA U2
JMP ENCICLATE
NO_ES_T
CLR U1
JMP COMPARA
CHECA_U3
LDAB U3
BNE CHECA_U4
CMPA #'A
BNE NO_ES_A
LDAA #'A
STAA U3
JMP ENCICLATE
NO_ES_A
CLR U2
JMP NO_ES_T
CHECA_U4
LDAB U4
BNE SALTE
CMPA #'R
BNE NO_ES_R
LDAA #'R
STAA U4
JMP ENCICLATE
NO_ES_R
CLR U3
JMP NO_ES_A
SALTE
CMPA #'T
BNE NO_FUE_T
JMP SUBRUTINA
NO_FUE_T
CLR U4
JMP NO_ES_R
SUBRUTINA
CLR U1
CLR EXTRA
LDX #EJECUTA
LOOP
LDAA EXTRA
BEQ LOOP
CLR EXTRA
LDAA ORDEN
CMPA #'E
BEQ FUE_E
CLR U1
GUARDA
STAA $00,X
INX
JMP LOOP
FUE_E
INC U1
LDAB U1
CMPB #$04
BEQ EJECUTALO
JMP GUARDA
EJECUTALO
JMP EJECUTA
***********************************
* INICIA
***********************************
INICIA
CLR SEG
CLR PORTG
LDAA #$F4
STAA TEMPO * TEMPO ES VARIABLE PARA CONTAR 244 CICLOS
LDX #TMSK2
BSET $00,X,#$40 * HABILITA INTERRUPCION TIMER T-REAL
CLI
LDX #PACTL
BSET $00,X,#$50 * HABILITA PAEN -ACUMULADOR PULSOS ALTOS-
CLR PACNT * BORRA ACUMULADOR DE PULSOS
LDAA #$10
STAA BASE_H * PONE UN #1060 COMO DIRECCION BASE INICIAL
LDAA #$60
STAA BASE_L
LDY #$1060
LDAA #$16
STAA BAS_H * PONE UN #1653 NUMERO TOTAL DE JUEGO DE MUESTRAS
LDAA #$53
STAA BAS_L
CLR ALTO * INICIA INDICE MUESTRA EN 0
CLR BAJO
RTS
***********************************
* SACA
***********************************
SACA
LDAA ALTO * INDICE DE MUESTRA (SEGUNDO)
LDAB BAJO
XGDY
INY
XGDY
JSR BINBCD
JSR DISPLAY
JSR COMA
LDAA BASE_H * INDICE DE MUESTRA (PARTICULAR)
LDAB BASE_L
XGDY
INY
CLRA
LDAB $00,Y
JSR BNBCD
JSR DSPLY
JSR COMA
INY
CLRA
LDAB $00,Y
JSR BNBCD
JSR DSPLY
JSR COMA
INY
CLRA
LDAB $00,Y
JSR BNBCD
JSR DSPLY
JSR COMA
INY
CLRA
LDAB $00,Y
JSR BNBCD
JSR DSPLY
JSR COMA
INY
CLRA
LDAB $00,Y
JSR BNBCD
JSR DSPLY
XGDY
STAA BASE_H
STAB BASE_L
JSR CRYTRN
RTS
***********************************
* COMA
***********************************
COMA
LDX #SCSR
LDAA SCSR
LDAA #$2C * COMA
STAA SCDR
C1
BRCLR $00,X,#$80 C1
RTS
***********************************
* DESPLIEGA
***********************************
DISPLAY
LDX #SCSR
LDAA SCSR
LDAA U1 * U1
ADDA #$30
STAA SCDR
T1
BRCLR $00,X,#$80 T1
LDAA SCSR
LDAA U2 * U2
ADDA #$30
STAA SCDR
T2
BRCLR $00,X,#$80 T2
DSPLY
LDX #SCSR
LDAA SCSR
LDAA U3 * U3
ADDA #$30
STAA SCDR
T3
BRCLR $00,X,#$80 T3
LDAA SCSR
LDAA U4 * U4
ADDA #$30
STAA SCDR
T4
BRCLR $00,X,#$80 T4
LDAA SCSR
LDAA U5 * U5
ADDA #$30
STAA SCDR
T5
BRCLR $00,X,#$80 T5
RTS
***********************************
* CARRY RETURN
***********************************
CRYTRN
LDX #SCSR
LDAA SCSR
LDAA #$0A * NEW LINE
STAA SCDR
CR1
BRCLR $00,X,#$80 CR1
LDAA SCSR
LDAA #$0D * CARRY RETURN
STAA SCDR
CR2
BRCLR $00,X,#$80 CR2
RTS
***********************************
* DESPLIEGUE DE DATO RECIBIDO
***********************************
DATARX
LDX #SCSR
LDAA SCSR
LDAA ORDEN * NEW LINE
STAA SCDR
DT1
BRCLR $00,X,#$80 DT1
LDAA SCSR
LDAA #$3A * DOS PUNTOS
STAA SCDR
DT2
BRCLR $00,X,#$80 DT2
RTS
***********************************
* voltimetro
***********************************
VOLTA
LDX #ADCTL
LDAA #$80
STAA OPTION * PONE EN MARCHA EL ADC
LDAA #$10
STAA ADCTL * ENTRADA MULTIPLE SELECCIONA CANAL 0
E1
BRCLR $00,X,#$80 E1
LDAB ADR1
STAB V1
LDAA #$80
STAA OPTION * PONE EN MARCHA EL ADC
LDAA #$11
STAA ADCTL * ENTRADA MULTIPLE SELECCIONA CANAL 1
E2
BRCLR $00,X,#$80 E2
LDAB ADR2
STAB V2
LDAA #$12
STAA ADCTL * ENTRADA MULTIPLE SELECCIONA CANAL 2
E3
BRCLR $00,X,#$80 E3
LDAB ADR3
STAB V3
LDAA #$13
STAA ADCTL * ENTRADA MULTIPLE SELECCIONA CANAL 3
E4
BRCLR $00,X,#$80 E4
LDAB ADR4
STAB V4
RTS
***********************************
* CONVIERTE A BCD
***********************************
BINBCD
LDX #$2710
IDIV
XGDX
STAB U1
XGDX
LDX #$3E8
IDIV
XGDX
STAB U2
XGDX
BNBCD
LDX #$64
IDIV
XGDX
STAB U3
XGDX
LDX #$A
IDIV
XGDX
STAB U4
XGDX
STAB U5
RTS
***********************************
* ATENCION A INTERRUPCION SERIAL
***********************************
ORG $F100
PSHA
LDAA SCSR
LDAA SCDR
STAA ORDEN
DEC EXTRA
PULA
RTI
***********************************
* ATENCION A INTERRUPCION REAL TIME
***********************************
ORG $F110
PSHA
PSHX
LDX #TFLG2
BSET $00,X,#$40 * BORRA BANDERA INTERRUPCION
DEC TEMPO
BEQ SEGUNDO
PULA
PULX
RTI
SEGUNDO
LDAA #$FF
STAA SEG * SEG ES UNA BANDERA DE SEGUNDO
LDAA #$F4
STAA TEMPO * TEMPO ES VARIABLE PARA CONTAR 244 CICLOS
INC PORTG
PULA
PULX
RTI
***********************************
* VECTOR INTERRUPCION SERIAL
***********************************
ORG $FFD6
FCB $F1,$00
***********************************
* VECTOR INTERRUPCION REAL TIME
***********************************
ORG $FFF0
FCB $F1,$10
***********************************
*RESET
***********************************
ORG $FFFE
RESET FCB $80,$00
***********************************
END $8000
No hay comentarios:
Publicar un comentario