Diferencia entre revisiones de «Ejemplo SCI Transmisión por Interrupciones»

De Wikitronica
Saltar a: navegación, buscar
(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"> ;****************...»)
 
Línea 1: Línea 1:
 
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
Línea 27: Línea 19:
  
 
             ABSENTRY _Startup
 
             ABSENTRY _Startup
 
 
 
 
  
 
ROMTable:      EQU    $3000  ;Lugar donde definimos la Tabla
 
ROMTable:      EQU    $3000  ;Lugar donde definimos la Tabla
Línea 43: Línea 31:
  
 
Apuntador: DS.B  1                ; Apuntador al Byte que se va a mandar
 
Apuntador: DS.B  1                ; Apuntador al Byte que se va a mandar
 
 
  
 
;
 
;
Línea 53: Línea 39:
  
 
             ORG    ROMStart
 
             ORG    ROMStart
 
 
  
 
_Startup:
 
_Startup:
Línea 87: Línea 71:
  
 
              
 
              
 
 
  
 
mainLoop:
 
mainLoop:
Línea 95: Línea 77:
  
 
             NOP
 
             NOP
 
 
  
 
             feed_watchdog
 
             feed_watchdog
  
 
             BRA    mainLoop
 
             BRA    mainLoop
 
 
  
 
;**************************************************************
 
;**************************************************************
Línea 117: Línea 95:
  
 
             RTI
 
             RTI
 
 
  
 
Transmite: PSHH          ; La interrupción no guarda H (la guardamos nosotros)
 
Transmite: PSHH          ; La interrupción no guarda H (la guardamos nosotros)
Línea 159: Línea 135:
  
 
           RTI           
 
           RTI           
 
 
 
 
  
 
;**************************************************************
 
;**************************************************************
Línea 169: Línea 141:
  
 
;**************************************************************
 
;**************************************************************
 
 
  
 
       ORG    ROMTable
 
       ORG    ROMTable
Línea 183: Línea 153:
  
 
       DC.B    0
 
       DC.B    0
 
 
 
 
 
 
  
 
;**************************************************************
 
;**************************************************************
Línea 209: Línea 173:
  
 
             DC.W  _Startup          ; Reset
 
             DC.W  _Startup          ; Reset
 
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>

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

Contributors

Racuna