Hola Angel
Para inicializar el SCI digamos a 9600 baudios 8bit s/p
/*******************************************************/
/* CONFIGURACION DEL PUERTO SCI */
/*******************************************************/
void Configurar_SCI(void){
SCBR = 0X21; /*Configura SCI a 9600,8,N,1*/
SCC1 = 0X40; /*Habilita el SCI*/
SCC2 = 0X28; /*Habilita inte del receptor y habil. el Trans.*/
SCC3 = 0; /*Borra bit 8 (no utilizado)*/
SCS1; /*Borra las banderas SCTE y TC del registro SCS1*/
}
//******************************************************
El tema del receptor en un JK1 es mas complicado en C, es mas te diría que una de las cosas mas engorrosas es hacer que los tiempos en bucles for, while, do while, etc se comporten como con la exactitud del assembler.
Te sugiero usar el timer uno para fijar los tiempos del bit, te posteo un transmisor para un jk1 que trabaja de esta forma.
/*******************************************************/
/* Subrutina que maneja el Tranmisor */
/*******************************************************/
void Transmitir_Caracter(void){
bit =0;
PTD_PTD6 = 0; //Pongo el bit de inicio
bandera_Baudio = 1;
T1SC ^= 0X20; /*Start Timer*/
while((bandera_Baudio & 0x01) == 0x01);
do {
if(Caracter & 0x01 == 0x01) {
PTD_PTD6 = 1; //Pongo TX en 1
bandera_Baudio = 1;
T1SC ^= 0X20; /*Start Timer*/
while((bandera_Baudio & 0x01) == 0x01);
}
else
{
PTD_PTD6 = 0; //Pongo TX en 0
bandera_Baudio = 1;
T1SC ^= 0X20; /*Start Timer*/
while((bandera_Baudio & 0x01) == 0x01);
}
Caracter = Caracter >>1; //Roto para pasar los 8 bits
bit++;
} while(bit <=7);
PTD_PTD6 = 1; //Pongo el bit de Stop
bandera_Baudio = 1;
T1SC ^= 0X20; /*Start Timer*/
while((bandera_Baudio & 0x01) == 0x01);
}
/*******************************************************/
/* ISR DEL DESBORDE DEL TIMER (CRISTAL DE 20 MHZ) */
/*******************************************************/
#pragma TRAP_PROC
void TIMER(){
T1SC = 0X70;
T1SC ^= 0X10;
bandera_Baudio = 0;
T1SC ^= 0X80;
}
/*******************************************************/
/* CONFIGURACION DEL TIMER POR DESBORDE */
/*******************************************************/
void Configurar_Timer(void){
T1SC = 0X70;
T1SC0 = 0;
T1SC1 = 0;
T1MODH = 0x07;
T1MODL = 0x7F;
}
Cualquier cosa a tus órdenes.
Saludos
Daniel