Vous êtes sur la page 1sur 3

#include <string.

h>
#include <stdio.h>

/*Definitions*/
#define BUFFER_MAX_SIZE 16
#define MAX_RANK 3
#define USARTC PORTC //AGR

/* Variables */

static char txBuff [BUFFER_MAX_SIZE];


static uint8_t txhead = 0;
static uint8_t txsize = 0;

static char rxBuff [BUFFER_MAX_SIZE];


static uint8_t rxhead = 0;
static uint8_t rxsize = 0;

static char x;
static char mensaje[]={'D','i','g','i','t','e','-','n','o','m','b','r','e'}
static char * charReceived;

static int pos1 = 0;


static char name1[3];
static int pos2 = 0;
static char name2[3];
static int pos3 = 0;
static char name3[3];
static int game;
static uint8_t time;
static uint8_t time2;
uint8_t puntuacion;
uint8_t aux;
uint8_t auxt;
uint8_t var;
uint8_t v;
uint8_t uno=1;
uint8_t cero=0;
uint8_t resta;

void SerialInit(){
USARTC.DIRSET = 0x08;
USARTC.DIRCLR = 0x04;
USARTC0.CTRLC = 0x03;
USARTC0.BAUDCTRLB = 0;
USARTC0.BAUDCTRLA = 12;
USARTC0.CTRLB |= 0x08;
USARTC0.CTRLB |= 0x10;

PORTA.DIRSET=0xFF;
PORTA.DIRCLR=0xFF;

TCC0.PER = 0x1E84; //El periodo establece el valor TOP para el TIMER. Qu? tan
lejos va a contar.
TCC0.CTRLA = 0x06;
}
//Cuabtas cosas hay dentro del vector rx :v
uint8_t SerialAvailable(){
return rxsize;
}

// Inserta en el Buffer de Tx el string recibido como parametro


void SerialWrite(char * x){
for(int i=0; i<strlen(x);i++){
if((txBuff[(txhead+txsize)%BUFFER_MAX_SIZE]) == 0x00){
txBuff[(txhead+txsize)%BUFFER_MAX_SIZE] = x[i];
txsize++;
}
}
}

//Si hay un valor disponible en el buffer de Rx retorna el caracter


char SerialRead(){
if(rxsize > 0){
x = rxBuff[rxhead];
rxBuff[rxhead] = 0;
rxsize--;
if(rxhead < (BUFFER_MAX_SIZE-1)){
rxhead++;
}else{
rxhead = 0;
}
return x;
}
}

//Revisa si la USART esta disponible para tx y si lo esta, transmite el siguiente


valor del buffer de Tx
// a su vez si encuentra que en el USART se recibio un dato, lo carga en el buffer
de Rx
void SerialFlush(){

if ((USARTC0.STATUS & 0x80) != 0){


if(rxsize < BUFFER_MAX_SIZE){
rxBuff[(rxhead+rxsize)%BUFFER_MAX_SIZE]=USARTC0.DATA;
rxsize++;
recibio=1;
}
}
if((USARTC0.STATUS & 0x20) != 0){
if(txsize > 0){
USARTC0.DATA=txBuff[txhead];
txBuff[txhead] = 0;
txsize--;
if(txhead < (BUFFER_MAX_SIZE-1)){
txhead++;
}else{
txhead = 0;
}
}
}
}
void pedir_nombre(){

SerialWrite(mensaje)

do{

if ((USARTC0.STATUS & 0x80) != 0){


if(rxsize < BUFFER_MAX_SIZE){
rxBuff[(rxhead+rxsize)%BUFFER_MAX_SIZE]=USARTC0.DATA;
rxsize++;
recibio=1;
}
}
}while(recibio<=3)
recibio=0;
}

void ranking(){