Diferencia entre revisiones de «SCI (Interfaz de Comunicación Serial) - MC9S08QE128»
(→En Assembler) |
(→En Assembler) |
||
Línea 214: | Línea 214: | ||
==== '' En Assembler'' ==== | ==== '' En Assembler'' ==== | ||
− | + | En assembler hay que definir el vector de interrupción de recepción de la siguiente manera | |
− | + | <pre> | |
+ | ;************************************************************** | ||
+ | ;* Interrupt Vectors * | ||
+ | ;************************************************************** | ||
+ | ORG $FFE0 ; espacio en memoria donde se encuentra la interrupción | ||
+ | |||
+ | DC.W Recibe ; Rutina de Recepción | ||
</pre> | </pre> | ||
+ | Un ejemplo para recibir por serial es el siguiente | ||
+ | <pre> | ||
+ | Recibe: bclr SCI1S1_RDRF,SCI1S1 ;pasa a la siguiente linea de código cuando el registro SCI1S1_RDRF es distinto de cero | ||
+ | lda SCI1D ;guarda en el acumulador el dato recibido por serial | ||
+ | sta dato ; se guarda el dato | ||
+ | lda SCI1S1 ; se baja la bandera de recepción | ||
+ | mov #$8C, SCI1C2 ; se modfica el registro SCI1C2 para entrar a un vector de transmision si es necesario, de lo contrario | ||
+ | ; borrar la linea de codigo | ||
+ | RTI | ||
+ | |||
+ | </pre> | ||
==== '' En Lenguaje C '' ==== | ==== '' En Lenguaje C '' ==== |
Revisión del 17:15 14 nov 2012
Uso y Configuración para la recepción / transmisión serial para el MC9S08QE128
Texto---------------------------Imagen En construcción
Contenido
Características Generales del SCI
Características del módulo SCI incluyen:[Ref. Reference Manual]
- Formato Full-duplex, estándar sin retorno a cero (NRZ).
- Doble buffer de transmisión y el recepción con habilitadores separados.
- Tasas de baudios programables (13-bits).
- Opera por Interrupciones o por encuesta las siguientes actividades:
- Transmisión registro de datos y registros completos.
- Recepción de registros de datos completos.
- Recepción de desbordamiento(carry) , error de paridad, error de framing y error de ruido.
- Recepción de inactividad.
- Pin receptor de flanco activo.
- Detección de banderas.
- Hardware de generación y comprobación de paridad.
- Programable a 8-bits o 9-bits de caracteres de longitud.
- Receptor de activación por línea libre o marca de dirección.
- Opcionales: Generación de salto de carácter de 13-bit / Detección de saltos de carácter de 11-bit.
- Transmisor de polaridad de salida seleccionable.
Inicializaciones Generales del SCI
En Assembler
;Configuración mas utilizada para transmitir y recibir por encuesta LDA 0x00 STA SCI1BDH LDA 0X1A STA SCI1BDL ;/*Baud Rate = 9600bps*/ LDA 0X00 STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/ LDA 0X0C STA SCI1C2 ;/*Habilita transmisor y receptor*/
;Configuración mas utilizada para transmitir y recibir por interrupción del SCI LDA 0x00 STA SCI1BDH LDA 0X1A STA SCI1BDL ;/*Baud Rate = 9600bps*/ LDA 0X00 STA SCI1C1 ;/*Transmisión y recepción normal de 8 bits sin paridad*/ LDA 0X2C STA SCI1C2 ;/*Habilita transmisor y receptor*/
En Lenguaje C
//Configuración mas utilizada para transmitir y recibir por encuesta // Inicializaciones para trabajar con SCI SCI1BDH = 0x00; SCI1BDL = 0x1A; /*Baud Rate = 9600bps*/ SCI1C1 = 0x00; /*Transmisión y recepción normal de 8 bits sin paridad*/ SCI1C2 = 0x0C; /*Habilita transmisor y receptor*/
//Configuración mas utilizada para transmitir y recibir por interrucpcion del SCI // Inicializaciones para trabajar con SCI SCI1BDH = 0x00; SCI1BDL = 0x1A; /*Baud Rate = 9600bps*/ SCI1C1 = 0x00; /*Transmisión y recepción normal de 8 bits sin paridad*/ SCI1C2 = 0x2C; /*Habilita transmisor y receptor*/
Guía Rápida de los Módulos de Inicialización
Registros SCI
Los Registros del SCI son de 8-bits. Cada registro tiene características para la configuración del puerto serial dependiendo de cómo se desea trabajar con él.
Texto---------------------------TABLAS
SCIxBDH
SCIxBDL
SCIxC1
SCIxC2
SCIxS1
SCIxS2
7 6 5 4 ¦ 3 2 1 0 |
LBKDIF | RXEDGIF | /////// | RXINV | RWUID | BRK13 | LBKDE | RAF |
---|
Configura las opciones de soporte LIN y supervisa la actividad del receptor.
SCIxC3
7 6 5 4 ¦ 3 2 1 0 |
R8 | T8 | TXDIR | TXINV | ORIE | NEIE | FEIE | PEIE |
---|
SCIxD
El registro SCIxD se utiliza para recibir o transmitir un dato por el puerto serial. Para más detalles ver la sección de Inicializaciones Generales del SCI de este mismo artículo.
7 6 5 4 ¦ 3 2 1 0 |
R7/T7 | R6/T6 | R5/T5 | R4/T4 | R3/T3 | R2/T2 | R1/T1 | R0/T0 |
---|
Escribe: Recepción (Rx) de dato; Escribe: Transmisión (Rx) de dato.
Serial por Interrupciones
Antes de usar transmisión y recepción por interrupción se debe de usar la inicialización adecuada
Transmisión
En Assembler
En assembler hay que definer el vector de interrupción de la siguiente manera
;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFDE ; Posición en memoria donde se encuentra el vector de interrupción DC.W Transmite ; Rutina de Transmisión
Un ejemplo para transmitir por serial es el siguiente:
Transmite: bclr SCI1S1_RDRF, SCI1S1; salta si el registro SCI1S1_RDRF es distinto de cero lda dato ;se carga a el acumulador el dato deseado sta SCI1D ;se transmite el dato por el puerto serial lda SCI1S1 ;se baja la bandera de transmisión para poder volverla usar mov #$2C, SCI1C2 ; se modifica el registro SCI1S1 para que interrumpa el programa cuando se reciba un dato RTI
En Lenguaje C
Prueba
Recepción
En Assembler
En assembler hay que definir el vector de interrupción de recepción de la siguiente manera
;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFE0 ; espacio en memoria donde se encuentra la interrupción DC.W Recibe ; Rutina de Recepción
Un ejemplo para recibir por serial es el siguiente
Recibe: bclr SCI1S1_RDRF,SCI1S1 ;pasa a la siguiente linea de código cuando el registro SCI1S1_RDRF es distinto de cero lda SCI1D ;guarda en el acumulador el dato recibido por serial sta dato ; se guarda el dato lda SCI1S1 ; se baja la bandera de recepción mov #$8C, SCI1C2 ; se modfica el registro SCI1C2 para entrar a un vector de transmision si es necesario, de lo contrario ; borrar la linea de codigo RTI
En Lenguaje C
Prueba
Serial por Encuesta
Texto---------------------------Imagen
Transmisión
Se en carga de ejecutar la transmisión de dato por encuesta, es decir se queda esperando hasta que transmita un dato, para luego salir del ciclo, enviar por el puerto el dato y finalmente limpiar la bandera, para volver a transmitir.
En Assembler
Prueba
En Lenguaje C
void Transmitir_dato(byte dato) // Se ejecuta la transmisión de dato por encuesta { byte bandera; while (SCI1S1_TDRE == 0); /* No finaliza ciclo hasta que esté libre el registro en el que se guardará el dato que se enviará*/ bandera= SCI1S1; // Aclara la bandera SCI1D = dato; // Enviando dato }
Recepción
Se en carga de ejecutar la recepción de dato por encuesta, es decir se queda esperando hasta que reciba un dato, para luego salir del ciclo, enviar el dato por el puerto y finalmente limpiar las banderas, para volver a recibir.
En Assembler
Prueba
En Lenguaje C
<source lang = "C"> byte Recibir_dato(void) //Se ejecuta la recepcion de dato por encuesta { byte dato_R; byte bandera; while (SCI1S1_RDRF == 0); // No finaliza ciclo hasta que esté listo el dato bandera= SCI1S1; // Aclara la bandera dato_R = SCI1D; // Se Salva el dato return dato_R; // Retorna dato } </source>
Referencias
Bibliografía
Texto
Ángel Diaz y Rhayza Rodríguez