Você está na página 1de 4

#include <pic.

h> // pic specific identifiers


#define _XTAL_FREQ 4000000 // Xtal speed
__CONFIG(0x2130); // Config bits

#define RED RA0


#define GREEN RA1
#define BLUE RA2
#define TX RB2
#define RX RB1
#define DELAY 100

#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))


#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))

void initialize();
void clear_usart_errors_inline();
void loadTXREG(int);
int receiveTransmission();
void triptastic(void);
void pulseRed(void);
void pulseGreen(void);
void pulseBlue(void);
int dummy;
int index;
unsigned char text1[] = {"Puuuuuurty "};

int red=1;
int blue=1;
int green=1;
int holder;
main()
{

initialize();
index = 0;
while(text1[index] != 0) // while text1[index] is'nt zero
loadTXREG(text1[index++]); // write message 1
__delay_ms(100);
while(1){
triptastic();
}
}

void triptastic(){
for(int r = 0; r < red; r++)
pulseRed();
for(int r = 0; r < green; r++)
pulseGreen();
for(int r = 0; r < blue; r++)
pulseBlue();
}

void pulseRed(){
RED=1;
__delay_us(DELAY);
RED=0;
__delay_us(DELAY);
}
void pulseGreen(){
GREEN=1;
__delay_us(DELAY);
GREEN=0;
__delay_us(DELAY);
}
void pulseBlue(){
BLUE=1;
__delay_us(DELAY);
BLUE=0;
__delay_us(DELAY);
}
void initialize (){
TRISA=0b00000000;
TRISB=0b00000110; //TRISB<1> and TRISB<2> should both be
set as inputs
INTCON=0b01000000;
RCIF=0;
TXIF=0;
PIE1=0b00100000;

INTE = 0; // enable the external interrupt


GIE = 1; // Global interrupt enable
INTEDG = 0;

PORTA=0x00;
PORTB=0x00;

TXSTA = 0b00000110;//setting USART


RCSTA = 0b10010000;//setting USART
SPBRG = 25;
TXEN=1;

CMCON = 0x7; // comparators off


__delay_ms(100);
}

void loadTXREG(int c){

while(!TXIF) //set when register is empty


{
clear_usart_errors_inline;
CLRWDT();
}
TXREG=c;

int receiveTransmission(){
while(!RCIF)
{
CLRWDT();
clear_usart_errors_inline();
}
return RCREG;
}

void clear_usart_errors_inline(){
if (OERR)
{
TXEN=0;
TXEN=1;
CREN=0;
CREN=1;
}
if (FERR)
{
dummy=RCREG;
TXEN=0;
TXEN=1;
}
}

static void interrupt


isr(void) // Here be interrupt function - the name is unimportant.
{

if(RCIF){

dummy = RCREG;

if(dummy==52 ) //r
red++;
else if(dummy == 53) // b
green++;
else if (dummy == 54)
blue++;

else if(dummy == 49 && red >= 1)


red--;
else if(dummy == 50 && green >= 1)
green--;
else if(dummy == 51&& blue >= 1)
blue--;

else if(dummy == 32){


red = 1;
blue =1;
green = 1;
}

//r holder = colors[dummy];


// red = holder>>8 & 0x0f;
// green = holder>>4 & 0x0f;
//blue = holder & 0x0f;
RCIF=0;
}
}

Você também pode gostar