Ejemplo SCI Transmisión por Interrupciones
De Wikitronica
Revisión del 01:17 27 feb 2013 de Racuna (Discusión | contribuciones)
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