Diferencia entre revisiones de «Ejemplo SCI Recepción por Interrupciones»
De Wikitronica
(Página creada con «Categoría: EC2721 - Arquitectura del Computador 1 Categoría: EC3731 - Arquitectura del Computador 2 Categoría:MC9S08QE128 El siguiente es un ejemplo de Recep...») |
(Sin diferencias)
|
Revisión del 13:36 5 mar 2013
El siguiente es un ejemplo de Recepción de datos por puerto serial utilizando interrupciones. Los datos recibidos son mostrados por los LEDS de la tarjeta de desarrollo DEMOQE128.
;*******************************************************************
;* Ejemplo de recepción serial por interrupciones
;* Se muestra el dato recibido por los LEDS del DEMOQE128
;*******************************************************************
; Include derivative-specific definitions
INCLUDE 'derivative.inc'
;
; export symbols
;
XDEF _Startup
ABSENTRY _Startup
;
; variable/data section
;
ORG RAMStart ; Insert your data definition here
DatoSerial: DS.B 1
;
; code section
;
ORG ROMStart
_Startup:
LDHX #RAMEnd+1 ; initialize the stack pointer
TXS
LDA #%00000011
STA SOPT1 ;Disable Watch Dog, Enable BKGND debugging
LDA #$0
STA DatoSerial ;inicialización de la variable
BSR InitGPIO
BSR InitSerial
CLI ; enable interrupts
mainLoop:
; Insert your code here
BSR MostrarDato
BRA mainLoop
;**************************************************************
;* Rutinas de inicializacion *
;**************************************************************
InitGPIO: ;Se configuran los LEDS del DEMOQE como salida
LDA #$3F ;Pines 0:5 del Puerto C y 6:7 del Puerto E como salida
STA PTCDD
STA PTCD
LDA #$C0
STA PTEDD
STA PTED
RTS
InitSerial:
LDA #$00
STA SCI1BDH
LDA #$1A ;/* Pre-escaler ajustado: [SBR12:SBR0] = 4Mhz/(16*9600) =~ 26,04d= 1A (hex)*/
STA SCI1BDL ;/*Baud Rate = 9600bps para un clock de 4MHZ*/
LDA #$00
STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/
LDA #%00100100
STA SCI1C2 ;/*Habilita solo el receptor CON interrupciones*/
RTS
;**************************************************************
;* Rutina para mostrar el dato por el puerto *
;**************************************************************
MostrarDato:
LDA DatoSerial
;Mostramos los pines 0:5 del PTC
LDA #%00111111 ;Mascara de bits
AND DatoSerial
COMA ;Logica negada en los leds
STA PTCD
;Mostramos los pines 6:7 del PTE
LDA #%11000000 ;Mascara de bits superiores
AND DatoSerial
COMA ;Logica negada en los leds
STA PTED
RTS ;Se sale de la sub rutina y vuelve al PC+1 de donde fue Llamada.
;**************************************************************
;* Rutina de interrupción serial para recepción *
;**************************************************************
RecepcionSerial:
LDA SCI1S1 ;Primer paso para limpiar la bandera
LDA SCI1D ;Segundo paso para limpiar la bandera. Se lee el dato recibido
STA DatoSerial ;Se coloca el valor del acumulador en la variable DatoSerial.
RTI ;Se sale de la sub rutina y vuelve al PC+1 de donde fue Llamada.
;**************************************************************
;* spurious - Spurious Interrupt Service Routine. *
;* (unwanted interrupt) *
;**************************************************************
spurious: ; placed here so that security value
NOP ; does not change all the time.
RTI
;**************************************************************
;* Interrupt Vectors *
;**************************************************************
ORG $FFE0 ; Posición en memoria del vector de interrupción Serial para recibir
DC.W RecepcionSerial ; Rutina de recepción
ORG $FFFA
DC.W spurious ;
DC.W spurious ; SWI
DC.W _Startup ; Reset