示例#1
0
void main(void) {
    clock_int_48MHz();
        while (1) {
        nivel_alto(vermelho_pedestre);
        nivel_baixo(vermelho_carro);

        nivel_alto(verde_carro);
        tempo(10000);
        nivel_baixo(verde_carro);

        if (flag_pedestre) {
            nivel_alto(amarelo_carro);
            tempo_ms(1000);
            nivel_baixo(amarelo_carro);

            nivel_alto(vermelho_carro);
            nivel_baixo(vermelho_pedestre);

            nivel_alto(verde_pedestre);
            tempo_ms(5000);
            nivel_baixo(verde_pedestre);
            flag_pedestre = 0;
        }
    }
}
void Semaforo3_verde(void * self) {
    Semaforo3 * semaforo = (Semaforo3*) self;

    nivel_baixo(semaforo->pino_amarelo);
    nivel_baixo(semaforo->pino_vermelho);

    nivel_alto(semaforo->pino_verde);
}
void Semaforo3_init(Semaforo3* semaforo, unsigned int vermelho, unsigned int amarelo, unsigned int verde) {
    semaforo->pino_vermelho = vermelho;
    semaforo->pino_amarelo = amarelo;
    semaforo->pino_verde = verde;

    semaforo->vermelho = &Semaforo3_vermelho;
    semaforo->amarelo = &Semaforo3_amarelo;
    semaforo->verde = &Semaforo3_verde;
    
    nivel_baixo(semaforo->pino_vermelho);
    nivel_baixo(semaforo->pino_amarelo);
    nivel_baixo(semaforo->pino_verde);
}
void Task_3(void)
{
    while(1)
    {
        nivel_baixo(pin_a1);
        nivel_alto(pin_a0);
        PORTB = set_seg_2[i/10];
        OS_Delay(5);
        nivel_alto(pin_a1);
        nivel_baixo(pin_a0);
        PORTB = set_seg_2[i%10];
        OS_Delay(5);
    }
}
void main (void)
{
clock_int_4MHz();

while (1)
{
   nivel_alto(pin_b6); 
   tempo_ms(500);
   nivel_baixo(pin_b6);
   tempo_ms(500);
   nivel_alto(pin_b7); 
   tempo_ms(500);
   nivel_baixo(pin_b7);
   tempo_ms(500);
}
}
void interrupcao()
{
 if (serial_interrompeu)  {
     serial_interrompeu=0;
     comando = le_serial();

         switch (comando){
             case '1':
              PORTB = 0b110000; 
             break;

             case '2':
              PORTB = 0b11101101; 
             break;

             case '3':
              PORTB = 0b11111001; 
             break;

             case '4':
              PORTB = 0b10110011; 
             break;

             case '5':
              PORTB = 0b11011011; 
             break;

             case '6':
              PORTB = 0b11011111; 
             break;

             case '7':
              PORTB = 0b11110000; 
             break;

             case '8':
              PORTB = 0b11111111; 
             break;

             case '9':
              PORTB = 0b11111011; 
             break;

             case '0':
              PORTB = 0b11111110; 
             break;

             case 'D':
             pisca=0; nivel_baixo(pin_b7);
             break;

             case 'P':
             pisca=1;nivel_alto(pin_b7);
             break;
         }
   }
}
示例#7
0
//#pragma interrupt interrupcao
void interrupt interrupcao(){

    if (INTCONbits.TMR0IF)     {  //espera o estouro do timer0 -> TMR0L=0
    INTCONbits.TMR0IF = 0;        //limpa a flag de interrupção
    i++; if(i>255){i=0;}
    if(i>=comand[1]){nivel_alto(pinored);} else {nivel_baixo(pinored);}
    if(i>=comand[2]){nivel_alto(pinogreen);} else {nivel_baixo(pinogreen);}
    if(i>=comand[3]){nivel_alto(pinoblue);} else {nivel_baixo(pinoblue);}

    TMR0L = TMR0L + 16; // load time before plus 240us/12(48MHz) = 10us x 4 (prescaler 001) = 80us -> T = 80us * 255 =~  20ms
                                }

if (serial_interrompeu)  { INTCONbits.TMR0IE = 0;//Desabilita interupção timer 0
     serial_interrompeu=0;
     comando[n] = le_serial();
     if (comando[n]==79) {flagb=1;n=0;}

         if (m>13 && comando[0]==65) {m=n; flag=1;}

         if (comando[n]=='R'){n=0;comando[0] = 'R';} //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06, 23, 15, etc.

         if (n>=3 && comando[0]=='R')  {
                         comand[1]= comando[1]; //Led RGB anodo comum//
                         comand[2]= comando[2];
                         comand[3]= comando[3];
                         n=0;  comando[0] = 32;
                         inverte_saida(pin_b7); INTCONbits.TMR0IE = 1;
                                        }
            ++n; m=n; if(n>=29){n=0;}

            switch (comando[0]){
            case  79 : {flag=0; chegou=1;m=0;}

            case 'L' : {flag=0; n=0; c=1; nivel_alto(pin_b7); envia=1;} //habilita envio online via APK SanUSBLE
            break;
            case 'D' : {flag=0; n=0; nivel_baixo(pin_b7); envia=0;} //Desabilita envio
            break;
            case 'P': { flag=0; n=0; nivel_alto(pin_b7);envia=0;} //Desabilita envio
            break;
            case 'T': {flag=0; n=0; inverte_saida(pin_b7); envia=0;} //Desabilita envio
            break;
                               }
                            }
}
示例#8
0
void main(void) {
    clock_int_48MHz();
    TRISB = 0b00000000;
    TRISA = 0b000000;
    TRISC = 0b000;
    nivel_baixo(amarelo_carro);
    nivel_baixo(verde_carro);
    nivel_baixo(verde_pedestre);

    while (1) {
        nivel_alto(vermelho_pedestre);
        nivel_baixo(vermelho_carro);
        nivel_alto(verde_carro);
        tempo(5000);
        nivel_baixo(verde_carro);

        if (flag_pedestre) {
            nivel_alto(amarelo_carro);
            tempo_ms(1000);
            nivel_baixo(amarelo_carro);
            nivel_alto(vermelho_carro);
            nivel_baixo(vermelho_pedestre);
            nivel_alto(verde_pedestre);

            for (i = 20; i >= 0; i--) {
                for (z = 0; z < 100; z++) {
                    dezena = i / 10;
                    unidade = i % 10;
                    nivel_baixo(pin_dezena);
                    nivel_alto(pin_unidade);
                    PORTB = seg[dezena];
                    tempo_ms(5);
                    nivel_baixo(pin_unidade);
                    nivel_alto(pin_dezena);
                    PORTB = seg[unidade];
                    tempo_ms(5);
                }
            }
            nivel_baixo(verde_pedestre);
            PORTB = apagado;
            flag_pedestre = 0;
        }
    }
}
void Task_1(void)
{
    while(1)
    {
        if (flag == 0){
            nivel_alto(pin_c0);
            OS_Delay(5000);
            nivel_baixo(pin_c0);
            nivel_alto(pin_c1);
            OS_Delay(5000);
            nivel_baixo(pin_c1);
            flag = 1;
        }else{
            nivel_alto(pin_c2);
            OS_Delay(1000);
            nivel_baixo(pin_c2);
            OS_Delay(1000);
        }
    }
}
void interrupcao() {
    unsigned char c;

    if (serial_interrompeu) {
        serial_interrompeu = 0;
        c = le_serial();
        // if (c >= '0' && c<= '9')
        {
            switch (c) {
                case 'L':
                    nivel_alto(pin_d7);
                    break;
                case 'B':
                    nivel_baixo(pin_d7);
                    break;

            }
        }
    }
}
示例#11
0
//#pragma interrupt interrupcao
void interrupt interrupcao(){

if (serial_interrompeu)  {
     serial_interrompeu=0;
     comando[n] = le_serial(); 
     if (comando[n]==79) {flagb=1;}
     switch (comando[n]){
            case 'L' : { nivel_alto(pin_b7);}
            break;
            case 'D' : { nivel_baixo(pin_b7);} //Desabilita envio
            break;
            case 'P': {inverte_saida(pin_b7);} //Desabilita envio
            break;
            case 'T': {inverte_saida(pin_b7);} //Desabilita envio
            break;
                        }
     //////////FUNCAO 4: CONFIGURA RELÓGIO////////////////////Ex: Digitar A4H09 (Hora = 09) , A4D15 (Dia = 15).
     if (comando[n]=='A'){n=0;comando[0] = 'A';} //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06, 23, 15, etc.

         if ( comando[1]== '4' && comando[2]== 'H' && n==2) { endereco=2;} //Escreve o endereco das horas
         if ( comando[1]== '4' && comando[2]== 'M' && n==2) { endereco=1;} //Escreve o endereco dos minutos
         if ( comando[1]== '4' && comando[2]== 'S' && n==2) { endereco=0;} //Escreve o endereco dos segundos
         if ( comando[1]== '4' && comando[2]== 'D' && n==2) { endereco=4;} //Escreve o endereco do dia
         if ( comando[1]== '4' && comando[2]== 'N' && n==2) { endereco=5;} //Escreve o endereco do mes
         if ( comando[1]== '4' && comando[2]== 'Y' && n==2) { endereco=6;} //Escreve o endereco do ano
         
         if ( comando[1]== '4' && comando[3]>='0'&&comando[3]<='9'&& n==3) {numquant=(comando[3]-0x30);}
         if ( comando[1]== '4' && comando[4]>='0'&&comando[4]<='9'&& n==4) {numquant=numquant*10+(comando[4]-0x30);                                                                         
                                                                            flagA4=1;
                                                                            }

     //////////////*////////FUNCAO 5: LÊ RELÓGIO////////////////////////////Ex: A5- Lê o relógio e o calendário
         if (comando[1]== '5' && n==1){flagA5=1;}

         ++n; if(n>=5){n=0;}
   }
}
示例#12
0
void main(){
clock_int_4MHz();
taxa_serial(19200);

while(1)
{
if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação

    if(PIR1bits.RCIF)         //Flag que indica byte na USART - Serial_avaliable()
                        {
            PIR1bits.RCIF = 0;   //reset flag
                                   switch(RCREG)// byte recebido 
                                            {
                                            case 'L': nivel_alto(pin_b7); 
                                             break;//Chega L acende o led

                                             case 'D' : nivel_baixo(pin_b7);
                                             break;//Chega D apaga o led

                                             }

                           }
  }
}
void main()       {
clock_int_4MHz();

habilita_interrupcao(recep_serial);
taxa_serial(9600);

  while (1) {
  if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação

    nivel_alto(pin_b7);
    tempo_ms(1000);
    nivel_baixo(pin_b7);
    tempo_ms(1000);
    
    //tempo_ms(2000);
     ultoa(d,str); // convert to string and print d - importante para sensores
     putsUSART(str);
     tempo_ms(200);// o tempo para envio de mais de um caractere

    // escreve_serial('A'); //while (envia_byte());// escreve só um byte
     
   //------------Transmissão Serial ----------------------------------------------------------------
    putsUSART((char *) Txdata); // transmite the string   

    if (avisa_interrompeu == 1)  //foi inserido um caracter?
    {
        if(inputstr[str_pos - 1] == 'K') //0x0D o último caracter foi o ENTER?
        {avisa_interrompeu = 0;
 //   printf("Comando digitado %s\r", inputstr);
    str_pos = 0; //reset da posição na string de buffer
    
        }
    } 
     
  }
}
void interrupcao()
{
if (serial_interrompeu)  {  serial_interrompeu=0; avisa_interrompeu=1;

    inputstr[str_pos] = getcUSART(); //ou le_serial - vai buscar a inputstr à porta série caracter a caracter (em cada iterada)
    str_pos++;//incrementa a posição de escrita na string de destino
    if(str_pos == 30){str_pos = 0;}  //verifica se a string de 80 caracteres
   //está cheia e caso o esteja faz reset da posição de escrita na string a 0
 
//comando = le_serial();//apenas um byte

    switch (inputstr[0]) //teste da comunicacao serial no Terminal
      {
case 'L' : {pisca=0; nivel_alto(pin_b7);putrsUSART ( (const far rom char *) " Ligado\r\n");while (envia_byte());} //Recebe A e Transmite byte B para teste
break;
case 'D' : {pisca=0; nivel_baixo(pin_b7);putrsUSART ( (const far rom char *) " Desligado");while (envia_byte());}
break;
case 'P' : {pisca=1;  printf_text(Txdata); printf_data(10);
           }
break;
     }

                            }
}
void main(){
    TRISA = 0x00;
    TRISB = 0x00;
    TRISC = 0x00;
    PORTB = 0x7F;
    clock_int_48MHz();
    habilita_interrupcao(recep_serial);
    taxa_serial(19200);
    //T0CON BITS = TMR0ON , T08BIT(0=16bits OR 1=8bits), T0CS , T0SE , PSA , T0PS2 T0PS1 T0PS0.
    //Defaull 1 in all bits.
    T0CON =0B11000001; //TMR0ON, 8 bits, Prescaler 1:4 (001 - see datasheet)
    TMR0L = 6; //conta 250us antes de estourar x 4 = 1ms
    nivel_baixo(pin_c1);
    nivel_baixo(pin_c2);
    while(1){
        if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação
        inverte_saida(pin_b7);
        tempo_ms(500);
        n=0;
        flag = 0;
        if(dia >=0 && dia <=9 && hora >=0 && hora <=23 && minuto >=0 && minuto <=59 && segundo >=0 && segundo <=59){
            nivel_baixo(pin_b7);
            if(dia!=0 || hora!=0 || minuto!=0 || segundo!=0){
                nivel_alto(pin_c1);
                nivel_alto(pin_c2);
                for(i=dia;i>=0;i--){
                    for(j=hora;j>=0;j--){
                        dezhora=j/10;
                        undhora=j%10;
                        for(w=minuto;w>=0;w--){
                            dezmin=w/10;
                            undmin=w%10;
                            for(x=segundo;x>=0;x--){
                                if(flag != 1){
                                    dezseg=x/10;
                                    undseg=x%10;
                                    for(y=0;y<71;y++){           //71 * 14 = 994 ms
                                        TMR0L = 0;
                                        nivel_alto(pin_c0);
                                        nivel_baixo(pin_a5);
                                        nivel_baixo(pin_a4);
                                        nivel_baixo(pin_a3);
                                        nivel_baixo(pin_a2);
                                        nivel_baixo(pin_a1);
                                        nivel_baixo(pin_a0);
                                        PORTB=set_segC[i];
                                        timer0_ms(2);

                                        nivel_baixo(pin_c0);
                                        nivel_alto(pin_a5);
                                        PORTB=set_segC[dezhora];
                                        timer0_ms(2);

                                        nivel_baixo(pin_a5);
                                        nivel_alto(pin_a4);
                                        PORTB=set_segC[undhora];
                                        timer0_ms(2);

                                        nivel_baixo(pin_a4);
                                        nivel_alto(pin_a3);
                                        PORTB=set_segC[dezmin];
                                        timer0_ms(2);

                                        nivel_baixo(pin_a3);
                                        nivel_alto(pin_a2);
                                        PORTB=set_segC[undmin];
                                        timer0_ms(2);

                                        nivel_baixo(pin_a2);
                                        nivel_alto(pin_a1);
                                        PORTB=set_segC[dezseg];
                                        timer0_ms(2);

                                        nivel_baixo(pin_a1);
                                        nivel_alto(pin_a0);
                                        PORTB=set_segC[undseg];
                                        timer0_ms(2);
                                    }
                                    if (flag == 1){
                                        nivel_baixo(pin_a0);
                                    }
                                }
                            }segundo=59;
                        }minuto=59;
                    }hora=23;
                }
                nivel_baixo(pin_a0);
                nivel_baixo(pin_c1);
                nivel_baixo(pin_c2);
                flag = 0;
            }
            for(a=0;a<2;a++){
                for(b=0;b<3;b++){
                    for(c=0;c<50;c++){
                        nivel_alto(pin_c0);
                        nivel_baixo(pin_a5);
                        nivel_baixo(pin_a4);
                        nivel_baixo(pin_a3);
                        nivel_baixo(pin_a2);
                        nivel_baixo(pin_a1);
                        nivel_baixo(pin_a0);
                        PORTB=set_theend[5];
                        tempo_ms(3);

                        nivel_baixo(pin_c0);
                        nivel_alto(pin_a5);
                        PORTB=set_theend[4];
                        tempo_ms(3);

                        nivel_baixo(pin_a5);
                        nivel_alto(pin_a4);
                        PORTB=set_theend[3];
                        tempo_ms(3);

                        nivel_baixo(pin_a4);
                        nivel_alto(pin_a2);
                        PORTB=set_theend[2];
                        tempo_ms(3);

                        nivel_baixo(pin_a2);
                        nivel_alto(pin_a1);
                        PORTB=set_theend[1];
                        tempo_ms(3);

                        nivel_baixo(pin_a1);
                        nivel_alto(pin_a0);
                        PORTB=set_theend[0];
                        tempo_ms(3);
                    }
                    PORTB=0x7F;
                    tempo_ms(time);
                }
                time=900;
            }
            PORTB = 0x7F;
            dia = -1;
            hora = -1;
            minuto = -1;
            segundo = -1;
        }
    }
}
示例#16
0
void interrupcao(){
if (serial_interrompeu)  {
     serial_interrompeu=0;
     comando[n] = le_serial(); m=n; //comand[m]=comando[n];

         switch (comando[n]){

             case 'C':
             AT1=1;
             break;

             case 'I':
             AT2=1;
             break;

             case 'A':
             AT1=1;
             break;

             case 'S':
             AT1=1;
             break;

             case '*':
             AT1=1;
             break;
           case 'Y':
             {n=0;comando[0] = 'Y';}
              break;
         }
 //***************possibility 1->character***********************
                            if (comando[0]== 'Y' && n==1){comando[0]== 32;
                                       switch(RCREG)
                                                  {
                                                case 'L':  nivel_alto(pin_b7); //type in browser address bar: 192.168.1.195/YL
                                                           flagsw=1;
                                                break;

                                                case 'D': nivel_baixo(pin_b7); //type in browser address bar: 192.168.1.195/YD
                                                break;

                                                case 'P':  nivel_alto(pin_b7); //type in browser address bar: 192.168.1.195/YP
                                                break;

                                                case 'T': inverte_saida(pin_b7); //type in browser address bar: 192.168.1.195/YT to toggle Led and open a HTML page
                                                          flagsw=1;
                                                break;

                                                 }
                                                         }
//***************possibility 2-> word**************************
                            if ( comando[1]== 'O' && comando[2]== 'N')
                                                {
                                                 nivel_alto(pin_b7);  // ON
                                                }

                            if ( comando[1]== 'O' && comando[2]== 'F' && comando[3]== 'F')
                                                {

                                                 nivel_baixo(pin_b7); // OFF
                                                }
         ++n; if(n>=64){n=0;}
   }

                   }
void Semaforo2_verde(void * self) {
    Semaforo2 * semaforo = (Semaforo2*) self;

    nivel_baixo(semaforo->pino_vermelho);
    nivel_alto(semaforo->pino_verde);
}