void main(void) {
char c2JR3;
char variable2[3];
int i;
union
{
char byte;
struct
{
unsigned B0:1;
unsigned B1:1;
unsigned B2:1;
unsigned B3:1;
unsigned B4:1;
unsigned B5:1;
unsigned B6:1;
unsigned B7:1;
};
}JR3bits;
union
{
short word;
struct
{
unsigned B0:1;
unsigned B1:1;
unsigned B2:1;
unsigned B3:1;
unsigned B4:1;
unsigned B5:1;
unsigned B6:1;
unsigned B7:1;
unsigned B8:1;
unsigned B9:1;
unsigned B10:1;
unsigned B11:1;
unsigned B12:1;
unsigned B13:1;
unsigned B14:1;
unsigned B15:1;
};
}fxbits;
union
{
short long tres_bytes;
struct
{
unsigned B0:1;
unsigned B1:1;
unsigned B2:1;
unsigned B3:1;
unsigned B4:1;
unsigned B5:1;
unsigned B6:1;
unsigned B7:1;
unsigned B8:1;
unsigned B9:1;
unsigned B10:1;
unsigned B11:1;
unsigned B12:1;
unsigned B13:1;
unsigned B14:1;
unsigned B15:1;
unsigned B16:1;
unsigned B17:1;
unsigned B18:1;
unsigned B19:1;
unsigned B20:1;
unsigned B21:1;
unsigned B22:1;
unsigned B23:1;
};
}variablebits;
//char JR3;
TRISB=0x00; // puerto B configurado de salida
TRISAbits.TRISA3 = 0; //pin conectado al led cofig como salida
PORTAbits.RA3 = 0;
RCSTAbits.SPEN=1; // Configuro RX/DT y TX/CK como pines del puerto serie
BAUDCONbits.SCKP=1; // Modo síncrono: Estado de reposo para reloj a nivel alto.
//********************PWM******************************************
TRISCbits.TRISC2 = 0; //el pin CCP1 como salida
OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
OpenPWM1(0x01); // configuramos período/frecuencia de la señal PWM a 2 Mhz, he puesto 2 pero es 2,5.
SetDCPWM1(4);
//while(1){
//Delay10TCYx(1);//2us
//SetDCPWM1(16); // elegimos ciclo de trabajo de la señal PWM al 100%
//}
//******************************************************************
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_SYNCH_MODE &
USART_SYNC_MASTER &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
86 ); // 57600 baud, 8n1, Modo sincrono con recepción continua
// programa principal
while (1) {
while ( !DataRdyUSART() ); // Espera a que haya un dato listo
// PORTAbits.RA3 = 0;
//PORTAbits.RA3 = 0;
//Delay10KTCYx(100);//1 seg
JR3bits.byte=getcUSART();
//c2JR3 = getcUSART(); // Lee el caracter nuevo
//PORTAbits.RA3 = 1;
//getsUSART(c2JR3,1);
//c2JR3 = c2JR3 - 0x01;
//JR3bits.byte = ~c2JR3; //Binary number
// Cambia el estado del LED
// JR3 = ~c2JR3;
//if((c2JR3 & 11110000)==01010000){
if(JR3bits.B7==0 & JR3bits.B6==1 & JR3bits.B5==1 & JR3bits.B4==1){
PORTAbits.RA3 = 1;
for(i=0;i<3;i++){
//variable2[i]=c2JR3;
variable2[i]=JR3bits.byte;
//variablebits.tres_bytes[i]=c2JR3;
//c2JR3 = getcUSART();
JR3bits.byte=getcUSART();
}
variablebits.tres_bytes=(short long)variable2;
fxbits.B0=variablebits.B4;
fxbits.B1=variablebits.B5;
fxbits.B2=variablebits.B6;
fxbits.B3=variablebits.B7;
fxbits.B4=variablebits.B8;
fxbits.B5=variablebits.B9;
fxbits.B6=variablebits.B10;
fxbits.B7=variablebits.B11;
fxbits.B8=variablebits.B12;
fxbits.B9=variablebits.B13;
fxbits.B10=variablebits.B14;
fxbits.B11=variablebits.B15;
fxbits.B12=variablebits.B16;
fxbits.B13=variablebits.B17;
fxbits.B14=variablebits.B18;
fxbits.B15=variablebits.B19;
}
}
}