EJN°2: Codificacion AMI de un mensaje

Dependencies:   mbed

main.cpp

Committer:
JAgustinOtero
Date:
2018-06-05
Revision:
0:ef66ab16c9c3

File content as of revision 0:ef66ab16c9c3:

#include "mbed.h"
#define bps 9600
#define V 1/9600
#define BSTOP 2
#define CBITS 8
DigitalOut LEDR(LED1);
DigitalOut LEDV(LED2);
DigitalOut VposTx(PTB0);
DigitalOut VnegTx(PTB1);
DigitalOut DatoO(PTB2);
AnalogOut OUT (PTE30);

unsigned char var_aux=0;
unsigned char var_pol=0;
unsigned char dato[12]= {'T','R','A','N','S','M','I','S','I','O','N','\0'};
unsigned char i=0,n=0,hab=1;

void transmisionAMI(unsigned char dato[]);
//void recepcionAMI(unsigned char dato[]);
void TxAMI(void);
void Hab (void);
Ticker Tx;
enum{UnoPositivo,UnoNegativo,Cero};
enum{Positivo,Negativo};
unsigned char ME_Polaridad_estado=0;
unsigned char ME_Dato_estado=0;
void ME_Polaridad(void);
void Dato(void);
int main()
{
    Tx.attach(&TxAMI,V);
    while(1) {
    }
}

void TxAMI(void)
{
    transmisionAMI(dato);
}
void transmisionAMI(unsigned char dato[])
{
        if(i < 12) {
            var_aux = (dato[i] >> n) & 1;
            DatoO = var_aux;
            ME_Polaridad();//esta funcion se encarga de variar la polaridad de los "1" logicos
            Dato();//esta funcion se encarga de variar la salida en funcion a la polaridad que determina la funcion anterior y a una variable que depende de el estado logico de cada bit del mensaje original
            n++;
            if(n==CBITS) {
                n=0;
                i++;
            }
        } else if(i>=12){
            n=0;
            i=0;
        }
    
}
void ME_Polaridad(){
    switch(ME_Polaridad_estado){
        case Positivo:
                    var_pol = 1;
            ME_Polaridad_estado=Negativo;
        case Negativo:
                    var_pol = 0;
            ME_Polaridad_estado=Positivo;
}
}

void Dato(){
    switch(ME_Dato_estado){
            case UnoPositivo:
                
        if(var_aux==0){ 
            ME_Dato_estado=Cero;
            OUT=0.5;}
        if(var_aux==1 && var_pol == 0){ 
            ME_Dato_estado=UnoNegativo;
            OUT=0;}
            case UnoNegativo:
        if(var_aux==0){ 
            ME_Dato_estado=Cero;
            OUT=0.5;}
        if(var_aux==1 && var_pol == 1){ 
            ME_Dato_estado=UnoPositivo;
            OUT=1;}
            case Cero:
                OUT=0.5;
        if(var_aux==1 && var_pol == 1){ 
            ME_Dato_estado=UnoPositivo;
            OUT=1;}
        if(var_aux==1 && var_pol == 0){ 
            ME_Dato_estado=UnoNegativo;
            OUT=0;}
            }
}