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"> ;****************...») |
(Sin diferencias)
|
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