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"> ;****************...») |
|||
(No se muestran 3 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. | ||
− | |||
− | |||
− | |||
<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 | ||
− | |||
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