Diferencia entre revisiones de «Ejemplo SCI Transmisión por Interrupciones»
De Wikitronica
(No se muestran 2 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
+ | [[Categoría: EC2721 - Arquitectura del Computador 1]] | ||
+ | [[Categoría: EC3731 - Arquitectura del Computador 2]] | ||
+ | [[Categoría:MC9S08QE128]] | ||
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. | ||
Línea 7: | Línea 10: | ||
; Include derivative-specific definitions | ; Include derivative-specific definitions | ||
− | |||
INCLUDE 'derivative.inc' | INCLUDE 'derivative.inc' | ||
− | |||
; | ; | ||
− | |||
; export symbols | ; export symbols | ||
− | |||
; | ; | ||
− | |||
XDEF _Startup | XDEF _Startup | ||
− | |||
ABSENTRY _Startup | ABSENTRY _Startup | ||
− | |||
ROMTable: EQU $3000 ;Lugar donde definimos la Tabla | ROMTable: EQU $3000 ;Lugar donde definimos la Tabla | ||
− | |||
; | ; | ||
− | |||
; variable/data section | ; variable/data section | ||
− | |||
; | ; | ||
− | |||
ORG RAMStart ; Insert your data definition here | ORG RAMStart ; Insert your data definition here | ||
− | |||
Apuntador: DS.B 1 ; Apuntador al Byte que se va a mandar | Apuntador: DS.B 1 ; Apuntador al Byte que se va a mandar | ||
− | |||
; | ; | ||
− | |||
; code section | ; code section | ||
− | |||
; | ; | ||
− | |||
ORG ROMStart | ORG ROMStart | ||
− | |||
_Startup: | _Startup: | ||
− | |||
LDHX #RAMEnd+1 ; initialize the stack pointer | LDHX #RAMEnd+1 ; initialize the stack pointer | ||
− | |||
TXS | TXS | ||
− | |||
LDA #$00 | LDA #$00 | ||
− | |||
STA SCI1BDH ;/* Tasa alta de transmisión deshabilitada (Baud high disabled)*/ | 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)*/ | LDA #$1A ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/ | ||
− | |||
STA SCI1BDL ;/*Baud Rate = 9600bps*/ | STA SCI1BDL ;/*Baud Rate = 9600bps*/ | ||
− | |||
LDA #$00 | LDA #$00 | ||
− | |||
STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/ | STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/ | ||
− | |||
LDA #$AC | LDA #$AC | ||
− | |||
STA SCI1C2 ;/*Habilita transmisor y receptor y habilita interrupciones*/ | STA SCI1C2 ;/*Habilita transmisor y receptor y habilita interrupciones*/ | ||
− | |||
LDHX #$0 | LDHX #$0 | ||
− | |||
LDA #$0 | LDA #$0 | ||
− | |||
STA Apuntador ;Apuntador a la Tabla | STA Apuntador ;Apuntador a la Tabla | ||
− | |||
CLI ; enable interrupts | CLI ; enable interrupts | ||
− | |||
− | |||
mainLoop: | mainLoop: | ||
− | |||
; Insert your code here | ; Insert your code here | ||
− | |||
NOP | NOP | ||
− | |||
feed_watchdog | feed_watchdog | ||
− | |||
BRA mainLoop | BRA mainLoop | ||
− | |||
;************************************************************** | ;************************************************************** | ||
− | |||
;* spurious - Spurious Interrupt Service Routine. * | ;* spurious - Spurious Interrupt Service Routine. * | ||
− | |||
;* (unwanted interrupt) * | ;* (unwanted interrupt) * | ||
− | |||
;************************************************************** | ;************************************************************** | ||
spurious: ; placed here so that security value | spurious: ; placed here so that security value | ||
− | |||
NOP ; does not change all the time. | NOP ; does not change all the time. | ||
− | |||
RTI | RTI | ||
Transmite: PSHH ; La interrupción no guarda H (la guardamos nosotros) | Transmite: PSHH ; La interrupción no guarda H (la guardamos nosotros) | ||
− | + | LDA SCI1S1 ; Se baja la bandera de transmisión | |
− | LDA SCI1S1 ; Se baja la bandera de transmisión | + | |
− | + | ||
− | + | ||
− | + | ||
CLRH | CLRH | ||
− | |||
LDX Apuntador | LDX Apuntador | ||
− | |||
LDA Tabla,X | LDA Tabla,X | ||
− | |||
CMP #$0 ;Comparamos si llegamos al final de la tabla | CMP #$0 ;Comparamos si llegamos al final de la tabla | ||
− | |||
BEQ FinTrans ;Si es el final apagamos el SCI | BEQ FinTrans ;Si es el final apagamos el SCI | ||
− | |||
− | |||
STA SCI1D ;Mandamos el siguiente valor de la tabla | STA SCI1D ;Mandamos el siguiente valor de la tabla | ||
− | |||
− | |||
LDA Apuntador ;Incrementamos el Apuntador | LDA Apuntador ;Incrementamos el Apuntador | ||
− | |||
INCA | INCA | ||
− | |||
STA Apuntador | STA Apuntador | ||
− | |||
PULH ; Retornamos H | PULH ; Retornamos H | ||
− | |||
RTI | RTI | ||
− | |||
− | |||
FinTrans: MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI | FinTrans: MOV #$00, SCI1C2 ; Deshabilitamos completamente el SCI | ||
− | |||
PULH ; Retornamos H | PULH ; Retornamos H | ||
− | |||
RTI | RTI | ||
− | |||
;************************************************************** | ;************************************************************** | ||
− | |||
;* Tabla en ROM * | ;* Tabla en ROM * | ||
− | |||
;************************************************************** | ;************************************************************** | ||
− | |||
ORG ROMTable | ORG ROMTable | ||
− | |||
Tabla: DC.B 'H' | Tabla: DC.B 'H' | ||
− | |||
DC.B 'O' | DC.B 'O' | ||
− | |||
DC.B 'L' | DC.B 'L' | ||
− | |||
DC.B 'A' | DC.B 'A' | ||
− | |||
DC.B 0 | DC.B 0 | ||
− | |||
;************************************************************** | ;************************************************************** | ||
− | |||
;* Interrupt Vectors * | ;* Interrupt Vectors * | ||
− | |||
;************************************************************** | ;************************************************************** | ||
− | |||
ORG $FFDE ; Posición en memoria donde se encuentra el vector de interrupción | ORG $FFDE ; Posición en memoria donde se encuentra el vector de interrupción | ||
− | |||
DC.W Transmite ; Rutina de Transmisión | DC.W Transmite ; Rutina de Transmisión | ||
− | |||
− | |||
ORG $FFFA | ORG $FFFA | ||
− | |||
DC.W spurious ; | DC.W spurious ; | ||
− | |||
DC.W spurious ; SWI | DC.W spurious ; SWI | ||
− | |||
DC.W _Startup ; Reset | DC.W _Startup ; Reset | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> |
Revisión actual del 01:18 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