Práctica Simple 06 - La línea serie asincrónica (SCI). con 9S08SH8
Práctica Simple 06 - La línea serie asincrónica (SCI).
Siguiendo con la serie de ejercicios prácticos vamos a comenzar a ensayar el uso de la línea serie asincrónica (SCI). Esta vez utilizaremos para esta práctica el MC9S08SH8.
Para el ejemplo se colocaron 2 leds denominados dentro del programa como LED1 (PTB6) y LED2 (PTB7). Luego de cargado el programa en el chip conectaremos la línea serie a la PC en la cual correremos cualquier programa emulación de terminal a 9600,8,n,1.
Si presionamos las teclas A o B se encenderán los leds, si presionamos la tecla R se apagaran los leds y si presionamos la tecla T el chip enviará a la terminal el texto "Ejemplo de prueba” mas los caracteres de control \r (retorno de carro) y \n (nueva línea).
#include <hidef.h>
#include "derivative.h"
#define LED1 0x40 // PTB6
#define LED2 0x80 // PTB7
void Put_SCI(char);
const char Text[]={"Ejemplo de prueba\n\r"};
#pragma DATA_SEG SHORT _DATA_ZEROPAGE
byte dato;
char n;
void main(void) {
SOPT1 = 0x02;
SCIC1 = 0x00;
SCIC3 = 0x00;
SCIC2 = 0x2C;
SCIBDH = 0x00;
SCIBDL = 0x34;
PTBDD = 0xC0;
EnableInterrupts;
for(;;) {
switch(dato){
case 'A':
case 'a':
PTBD |= LED1; // Encendemos el Led 1
dato = 0;
break;
case 'B':
case 'b':
PTBD |= LED2; // Encendemos el Led 2
dato = 0;
break;
case 'R':
case 'r':
PTBD &= ~(LED1 | LED2); // Apagamdos los 2 Leds
dato = 0;
break;
case 'T':
case 't':
n = 0;
while(Text[n]) Put_SCI(Text[n++]);
dato = 0;
break;
}
}
}
void Put_SCI(char dato){
while(!(SCIS1 & 0x80));
SCID = dato;
}
//====================================================
#pragma TRAP_PROC
interrupt void isrSCI_rx(void){
(void)SCIS1;
dato = SCID;
}
//============= Interrupt Vector Table ===============
extern void _Startup(void);
void (*const _vectab[])(void) @0xFFC0 = {
_Startup, // FFC0 - Reserved
_Startup, // FFC2 - Vacmp Vector
_Startup, // FFC4 - Reserved
_Startup, // FFC6 - Reserved
_Startup, // FFC8 - Reserved
_Startup, // FFCA - Vmtim Vector
_Startup, // FFCC - Vrtc Vector
_Startup, // FFCE - Viic Vector
_Startup, // FFD0 - User Atd Vector
_Startup, // FFD2 - Reserved
_Startup, // FFD4 - Vportb Vector
_Startup, // FFD6 - Vporta Vector
_Startup, // FFD8 - Reserved
_Startup, // FFDA - VScitx Vector
isrSCI_rx, // FFDC - VScirx Vector
_Startup, // FFDE - VScierr Vector
_Startup, // FFE0 - VSpi Vector
_Startup, // FFE2 - Tpm2ovf Vector
_Startup, // FFE4 - Tpm2ch1 Vector
_Startup, // FFE6 - Tpm2ch0 Vector
_Startup, // FFE8 - Tpm1ovf Vector
_Startup, // FFEA - Reserved
_Startup, // FFEC - Reserved
_Startup, // FFEE - Reserved
_Startup, // FFF0 - Reserved
_Startup, // FFF2 - Tpm1ch1 Vector
_Startup, // FFF4 - Tpm1ch0 Vector
_Startup, // FFF6 * monitor optionally uses Icg ints
_Startup, // FFF8 - Lvd Vector
_Startup, // FFFA - Irq Vector
_Startup, // FFFC - SWI is dedicated to monitor
_Startup, // FFFE - Reset Starting Point
};








