Diferencia entre revisiones de «Ejemplo SCI Transmisión por Interrupciones»
De Wikitronica
(Página creada con «El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128. <syntaxhighlight lang="asm"> ;****************...») |
|||
Línea 1: | Línea 1: | ||
El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128. | El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128. | ||
− | |||
− | |||
− | |||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
− | |||
;******************************************************************* | ;******************************************************************* | ||
− | |||
;Ejemplo de Transmision Serial de una tabla por interrupciones * | ;Ejemplo de Transmision Serial de una tabla por interrupciones * | ||
− | |||
;******************************************************************* | ;******************************************************************* | ||
− | |||
− | |||
; Include derivative-specific definitions | ; Include derivative-specific definitions | ||
Línea 27: | Línea 19: | ||
ABSENTRY _Startup | ABSENTRY _Startup | ||
− | |||
− | |||
− | |||
− | |||
ROMTable: EQU $3000 ;Lugar donde definimos la Tabla | ROMTable: EQU $3000 ;Lugar donde definimos la Tabla | ||
Línea 43: | Línea 31: | ||
Apuntador: DS.B 1 ; Apuntador al Byte que se va a mandar | Apuntador: DS.B 1 ; Apuntador al Byte que se va a mandar | ||
− | |||
− | |||
; | ; | ||
Línea 53: | Línea 39: | ||
ORG ROMStart | ORG ROMStart | ||
− | |||
− | |||
_Startup: | _Startup: | ||
Línea 87: | Línea 71: | ||
− | |||
− | |||
mainLoop: | mainLoop: | ||
Línea 95: | Línea 77: | ||
NOP | NOP | ||
− | |||
− | |||
feed_watchdog | feed_watchdog | ||
BRA mainLoop | BRA mainLoop | ||
− | |||
− | |||
;************************************************************** | ;************************************************************** | ||
Línea 117: | Línea 95: | ||
RTI | RTI | ||
− | |||
− | |||
Transmite: PSHH ; La interrupción no guarda H (la guardamos nosotros) | Transmite: PSHH ; La interrupción no guarda H (la guardamos nosotros) | ||
Línea 159: | Línea 135: | ||
RTI | RTI | ||
− | |||
− | |||
− | |||
− | |||
;************************************************************** | ;************************************************************** | ||
Línea 169: | Línea 141: | ||
;************************************************************** | ;************************************************************** | ||
− | |||
− | |||
ORG ROMTable | ORG ROMTable | ||
Línea 183: | Línea 153: | ||
DC.B 0 | DC.B 0 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
;************************************************************** | ;************************************************************** | ||
Línea 209: | Línea 173: | ||
DC.W _Startup ; Reset | DC.W _Startup ; Reset | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> |
Revisión del 01:13 27 feb 2013
El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128.
;*******************************************************************
;Ejemplo de Transmision Serial de una tabla por interrupciones *
;*******************************************************************
; Include derivative-specific definitions
INCLUDE 'derivative.inc'
;
; export symbols
;
XDEF _Startup
ABSENTRY _Startup
ROMTable: EQU $3000 ;Lugar donde definimos la Tabla
;
; variable/data section
;
ORG RAMStart ; Insert your data definition here
Apuntador: DS.B 1 ; Apuntador al Byte que se va a mandar
;
; code section
;
ORG ROMStart
_Startup:
LDHX #RAMEnd+1 ; initialize the stack pointer
TXS
LDA #$00
STA SCI1BDH ;/* Tasa alta de transmisión deshabilitada (Baud high disabled)*/
LDA #$1A ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/
STA SCI1BDL ;/*Baud Rate = 9600bps*/
LDA #$00
STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/
LDA #$AC
STA SCI1C2 ;/*Habilita transmisor y receptor y habilita interrupciones*/
LDHX #$0
LDA #$0
STA Apuntador ;Apuntador a la Tabla
CLI ; enable interrupts
mainLoop:
; Insert your code here
NOP
feed_watchdog
BRA mainLoop
;**************************************************************
;* spurious - Spurious Interrupt Service Routine. *
;* (unwanted interrupt) *
;**************************************************************
spurious: ; placed here so that security value
NOP ; does not change all the time.
RTI
Transmite: PSHH ; La interrupción no guarda H (la guardamos nosotros)
LDA SCI1S1 ; Se baja la bandera de transmisión
CLRH
LDX Apuntador
LDA Tabla,X
CMP #$0 ;Comparamos si llegamos al final de la tabla
BEQ FinTrans ;Si es el final apagamos el SCI
STA SCI1D ;Mandamos el siguiente valor de la tabla
LDA Apuntador ;Incrementamos el Apuntador
INCA
STA Apuntador
PULH ; Retornamos H
RTI
FinTrans: MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI
PULH ; Retornamos H
RTI
;**************************************************************
;* Tabla en ROM *
;**************************************************************
ORG ROMTable
Tabla: DC.B 'H'
DC.B 'O'
DC.B 'L'
DC.B 'A'
DC.B 0
;**************************************************************
;* Interrupt Vectors *
;**************************************************************
ORG $FFDE ; Posición en memoria donde se encuentra el vector de interrupción
DC.W Transmite ; Rutina de Transmisión
ORG $FFFA
DC.W spurious ;
DC.W spurious ; SWI
DC.W _Startup ; Reset