Ejemplo SCI Recepción por encuesta
De Wikitronica
Revisión del 13:22 5 mar 2013 de Racuna (Discusión | contribuciones) (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 Trans...»)
El siguiente es un ejemplo de Transmisión de una Tabla de caractares ASCII por puerto Serial para la tarjeta DEMOQE128.
;*******************************************************************
;* Ejemplo de recepción serial por encuesta
;* Se pregunta contiuamente por la bandera de recepción
;* y 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
BSR InitGPIO
BSR InitSerial
CLI ; enable interrupts
mainLoop:
; Insert your code here
BSR RecepcionSerial
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 #%00000100
STA SCI1C2 ;/*Habilita solo el receptor sin interrupciones*/
RTS
;**************************************************************
;* Rutina de recepción serial por encuesta *
;**************************************************************
RecepcionSerial:
BRCLR SCI1S1_RDRF,SCI1S1,* ;Revisamos si se levanta la bandera de recepcion
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.
RTS ;Se sale de la sub rutina y vuelve al PC+1 de donde fue Llamada.
;**************************************************************
;* 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.
;**************************************************************
;* 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 $FFFA
DC.W spurious ;
DC.W spurious ; SWI
DC.W _Startup ; Reset