miércoles, 27 de octubre de 2010

programa Lunes no class

**********************************
*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