Ir ao conteúdo
  • Cadastre-se

Nelson_nst

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

posts postados por Nelson_nst

  1. Bom dia Galera, sou novo por aqui e necessito da ajuda de vocês para resolver um problema com comunicação serial.

    Estou usando um 16F887 para receber uma informação via serial, porém o programa fica preso na interrupção serial ( int_rda ),mesmo que eu não envie nenhum comando, e não executa as instruções que esta dentro do While.

    Aguardo ajuda obrigado.

    Segue o código

    #include <16F887.h> 
    #FUSES NOWDT //No Watch Dog Timer
    #FUSES INTRC_IO // habilitando o clock interno
    #FUSES IESO //Internal External Switch Over mode enabled
    #FUSES NOPUT //No Power Up Timer
    #FUSES NOMCLR //Master Clear pin enabled
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NOCPD //No EE protection
    #FUSES NOBROWNOUT //No Reset when brownout detected
    #FUSES FCMEN //Fail-safe clock monitor enabled
    #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
    #FUSES NODEBUG //No Debug mode for ICD
    #use delay(clock = 8000000)
    #use rs232(baud=9600, uart, bits=8, Parity=N, Stop=1)

    //******************************************************************************
    //
    // Declarações de Hardware
    //
    //******************************************************************************

    #define led_1 PIN_A0
    #define led_2 PIN_A1
    #define led_3 PIN_A2
    #define led_4 PIN_A3
    #define led_5 PIN_A4
    #define led_6 PIN_A5

    #define led_7 PIN_E0
    #define led_8 PIN_E1
    #define led_9 PIN_E2

    #define led_10 PIN_C0

    #define botao_1 PIN_C1
    #define botao_2 PIN_C2
    #define bota0_3 PIN_C3
    #define botao_4 PIN_D0


    #use fast_io(A)
    #use fast_io(
    #use fast_io(C)
    #use fast_io(D)
    #use fast_io(E)


    //******************************************************************************
    //
    // Variáveis do Sistema
    //
    //******************************************************************************
    unsigned char IMG[7]={0xAA, 0xD0, 0xcc, 0x33, 0xc3, 0x3c};
    unsigned char str1[4];

    //******************************************************************************
    //
    // decalração de funções do Sistema
    //
    //******************************************************************************
    // Enviar um comando
    void send_str(unsigned char *p, unsigned char s)
    {
    unsigned char m;
    for(m=0; m<s; m++)
    {putc(*p);
    p++;}
    }

    // Receber um comando
    void receber(){

    int8 k;
    str1[0]=getchar();
    while(str1[0]!= 0xAA){
    str1[0]=getchar();}
    for(k=1;k<8;k++)
    {str1[k]=getchar();}
    str1[0]=0x00;

    }

    //******************************************************************************
    //
    // Funções de Controle de Interrupções
    //
    //******************************************************************************

    #int_RDA
    RDA_isr(){

    disable_interrupts(INT_RDA);

    receber();

    if(str1[3] == 0x01){
    delay_ms(200);
    output_toggle(led_1);}

    if(str1[3] == 0x02){
    delay_ms(200);
    output_toggle(led_2);}

    if(str1[3] == 0x03){
    delay_ms(200);
    output_toggle(led_3);}

    if(str1[3] == 0x04){
    delay_ms(200);
    output_toggle(led_4);}

    enable_interrupts(INT_RDA);
    }

    //******************************************************************************
    //
    // Função Main()
    //
    //******************************************************************************

    void main( void )
    {
    int k = 0;

    set_tris_a(0b00000000);
    set_tris_b(0b00000000);
    set_tris_c(0b00001110);
    set_tris_d(0b00000001);
    set_tris_e(0b00000000);


    setup_adc_ports(NO_ANALOGS|VSS_VDD); // desabilita todas as portas analógicas
    setup_adc(ADC_OFF); // desabilita todos os comparadores
    setup_spi(FALSE); // desabilita cominicação spi
    // frequencia interna do pic é a frequencia do oscilador externo dividido por 4
    setup_timer_0( RTCC_INTERNAL | RTCC_DIV_64 );// frequncia do clock dividida por 64
    setup_timer_1( T1_INTERNAL | T1_DIV_BY_1 ); // frequencia do clock 1M dividido por 1 para timer 1
    setup_timer_2( T2_DIV_BY_4, 0x65, 1 ); // frequencia do clock 1M divido por 1
    enable_interrupts( INT_TIMER0 ); // habilita as interrupções geradas pelo timer0
    enable_interrupts( INT_TIMER1 ); // habilita as interrupções geradas pelo timer1
    enable_interrupts( GLOBAL ); // habilita as interrupções geradas pelo global
    enable_interrupts( INT_RDA ); // habilita as interrupções geradas pelo global
    // setup_ccp1( CCP_PWM ); // configura ccp1 ( pino c2 como pwm )
    // setup_ccp2( CCP_PWM ); // configura ccp2 ( pino c1 como pwm )
    setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
    setup_oscillator(OSC_8MHZ);
    // set_pwm1_duty(0); // configura percentual do ciclo ativo do pwm
    // set_pwm2_duty(0); // configura percentual do ciclo ativo do pwm

    output_low(led_1);
    output_low(led_2);
    output_low(led_3);
    output_low(led_4);
    output_low(led_5);
    output_low(led_6);
    output_low(led_7);
    output_low(led_8);
    output_low(led_9);


    while( true ){ // laço principal laço principal

    output_high(led_5);
    delay_ms(100);
    output_low(led_5);

    output_high(led_6);
    delay_ms(100);
    output_low(led_6);

    output_high(led_7);
    delay_ms(100);
    output_low(led_7);

    output_high(led_8);
    delay_ms(100);
    output_low(led_8);


    //! output_toggle(pin_d4); //moitorando chegada de dados

    }// fim do laço while
    }// fim da função main

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!