Ir ao conteúdo

Posts recomendados

Postado

Ola, estou tentando fazer um programa para transmitir um determinado dado apos uma interrupção. A interrrupção é externa, um botão quando precionado liga um led e trasmite, via porta RB2/TX, a letra 'g'. O problema é que há algo de errado, ja que o compilador está mostrando um erro, mas como sou leigo em MPLABX com compilador XC8, não estou entendendo o que há de errado, se puderem ajudar ficaria muito grato

 

Meu codigo:


// PIC16F628A Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#define _XTAL_FREQ 4000000

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//configurações basicas
void basic_config(void){
    CMCON = 0b00000111;
    TRISAbits.TRISA1 = 1;
    TRISAbits.TRISA0 = 0;
    TRISAbits.TRISA7 = 0;
    
}
//escrevendo caracter
void write_RS232(unsigned char letra){
    while(TXSTAbits.TRMT == 0){
        TXREG = letra;
    }
}

//inicialização da UART
void Initialized_RS232(void){
    TRISBbits.TRISB1 = 1; //RX configurado como entrada
    TRISBbits.TRISB2 = 1; //TX configurado como entrada 
    //↑ configurados conforme o datasheet ↑
    SPBRG = 25; //configura a velocida de transmissão, no caso 9600 bps a 4MHz, em auta velocidade
    TXSTAbits.BRGH = 1;
    TXSTAbits.SYNC = 0;
    RCSTAbits.SPEN = 1;
    TXSTAbits.TX9 = 0;
    TXSTAbits.TXEN = 0;
    TXSTAbits.TX9D = 0;
    write_RS232('b');
}

//configurando interrupção
void Init_Interrupt(void){
    INTCONbits.GIE 1;
    INTCONbits.PEIE = 0;
    INTCONbits.INTE = 1;
    INTCONbits.INTF = 0;
    OPTION_REGbits.INTEDG = 1;  
}

//função de interrupção
void interrupt transmited(void){
    if(INTCONbits.INTF == 1){
        PORTAbits.RA2 = 1;
        write_RS232('g');
        INTCONbits.INTF = 0;
    }
}

void main(void) {
    basic_config();
    Init_Interrupt();
    Initialized_RS232();
    while(1){
        transmited();
    }
    return;
}

 

O erro gerado:

 

CLEAN SUCCESSFUL (total time: 13ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X'
make  -f nbproject/Makefile-default.mk dist/default/production/USART_PIC16f628a-TX_For_Me.X.production.hex
make[2]: Entering directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X'
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=16F628A -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8"  -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto     -o build/default/production/TX_For_Me.p1 TX_For_Me.c 
::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries
TX_For_Me.c:65:6: error: variable has incomplete type 'void'
void interrupt transmited(void){
     ^
TX_For_Me.c:65:15: error: expected ';' after top level declarator
void interrupt transmited(void){
              ^
              ;
2 errors generated.
make[2]: *** [build/default/production/TX_For_Me.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
(908) exit status = 1
nbproject/Makefile-default.mk:107: recipe for target 'build/default/production/TX_For_Me.p1' failed
make[2]: Leaving directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X'
nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed

BUILD FAILED (exit value 2, total time: 671ms)

 

  • Membro VIP
Postado

Nunca usei tal compilador. Dicas genéricas:

1-pegue um exemplo pronto, analise e adapte

2-em outros compiladores ou mc tem-se que definir o vetor (endereço onde está) a interrupção. No seu caso deve ser a interrupt de mudança de estado do pino. Apesar que este mc só tem 1 vetor... então na interrupt avalie se foi o bit de mudança que a gerou.

3-você chama a interrupt dentro do loop. Não precisa e errado

4-google isso...clique

5 horas atrás, Gregorio Leão disse:

expected ';' after top level declarator

5-de novo e importante... leia o item 1 😁

Postado

@.if Eu achei varios exemplos na internet e tentei usa-los, porém todos deram problemas e então decidi fazer o meu codigo com base no datasheet e na analise de alguns codigos. Fiz dois codigos, o de cima para a transmissão e um outro para a recepção. No codigo de recepção o que estava dando problema era o comando de desvio de fluxo, goto, apaguei, nos dois codigos e a IDE não mostrou problemas, isso no codgio de recepção. Ja no codigo de transmissão, apaguei o comando goto e mesmo assim apresentou problemas, conclui pela logica que o problema era a interrupção. Isso tudo que relatei acima foi pouco depois de eu ter postado o topico aqui kkkk

 

Mas a minha pergunta é, como faço pra resolver o problema da interrupção se esse for mesmo o erro? Meu codigo esta errado?

 

Muito obrigado pela ajuda até aqui @.if

  • Membro VIP
Postado

A sintaxe da interru pt é aquela mesma? Parece que o compilador não gostou...

18 horas atrás, Gregorio Leão disse:

varios exemplos na internet

Google sintaxe interrupt mplabx

https://www.microchip.com/forums/m1058706.aspx

 

18 horas atrás, Gregorio Leão disse:

o problema da interrupção se esse for mesmo o erro? Meu codigo esta errado?

O conceito de interrupção é que ela se faz 'por fora'. No seu caso você a está causando o tempo todo no loop também. Isso deve gerar confusão na cabecinha do mc. Dá uma refletida nisso

 

 

2 horas atrás, oleoarruda disse:

usar a sintaxe para a interrupção:

void __interrupt () transmited() {

...

https://www.microforum.cc/topic/38-help-with-this-error-error-variable-has-incomplete-type-void/

😁👍🏻

Postado

@oleoarruda @.if  dei uma olhada no manual do xc8 na parte de interrupções e dizia que a sintaxe da função de interrpção era void __interrupt(high_priority ou  low_priority) nome da função(void){}. Então fiz um codigo de teste, para não embolar o codigo do projeto.


#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

void Basic_Configurators(void){
    CMCON = 0b00000111;
    TRISAbits.TRISA2 = 0;
}

void Init_Interrupt(void){
    INTCONbits.GIE = 1; //habilita todas as interrupções
    INTCONbits.PEIE = 0; //desabilita interrupção periférica
    INTCONbits.INTE = 1; //habilita interrupção externa
    INTCONbits.INTF = 0; //limpa o sinalizador de interrupção externa
    OPTION_REGbits.INTEDG = 1;  //borda de subida, transição de '0' para '1' configura uma interrupção
    INTCONbits.T0IF = 0; // desabilita sinalizador de interrrupção Overflow
    INTCONbits.RBIF = 0; // desabilita sinalizador de interrupção por alteração na porta B
}


void __interrupt() interrupcao(void){
    //se o sinalizador estiver em nivel logico alto, ativa  a porta RA2, trasmite a letra 'g' e zera o sinalizador
    if(INTCONbits.INTF == 1){
        PORTAbits.RA2 = 1; 
        __delay_ms(1000);
        PORTAbits.RA2 = 0;
        INTCONbits.INTF = 0;
    }
}

void main(void) {
    Basic_Configurators();
    Init_Interrupt();
    while(1){
        interrupcao();
    }
    return;
}

 

 

Dessa vez o erro apresentado foi esse:

 

CLEAN SUCCESSFUL (total time: 6ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X'
make  -f nbproject/Makefile-default.mk dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex
make[2]: Entering directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X'
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=16F628A -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8"  -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -mext=cci -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mc90lib   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto     -o build/default/production/InterrupcaoExterna.p1 InterrupcaoExterna.c 
InterrupcaoExterna.c:18:13: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]
    CMCON = 0b00000111;
            ^
1 warning generated.
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=16F628A -Wl,-Map=dist/default/production/ExperimentandoPIC16f628a9.0.X.production.map  -DXPRJ_default=default  -Wl,--defsym=__MPLAB_BUILD=1   -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8"  -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -mext=cci -Wa,-a -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mc90lib -std=c99 -gdwarf-3 -mstack=compiled:auto:auto      -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/ExperimentandoPIC16f628a9.0.X.production.elf  build/default/production/InterrupcaoExterna.p1     
InterrupcaoExterna.c:33:: advisory: (1510) non-reentrant function "_interrupcao" appears in multiple call graphs and has been duplicated by the compiler
C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8\pic\include\proc\pic16f628a.h:1838:: error: (845) symbol "interrupt_function" defined more than once
InterrupcaoExterna.c:33:: error: (800) undefined symbol "??i1_interrupcao"
(908) exit status = 1
nbproject/Makefile-default.mk:138: recipe for target 'dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex' failed
make[2]: Leaving directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X'
nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X'
make[2]: *** [dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed

BUILD FAILED (exit value 2, total time: 1s)

 

 

Um detalhe é que se eu coloco o argumento "high_priority" ou "low_priority" o compilador manda eu ignorar o argumento na função void __interrupt(argumento)

 

  • Curtir 1
  • Membro VIP
Postado
12 horas atrás, Gregorio Leão disse:

CMCON = 0b00000111;

Ele está chiando com binário. Coloque 7 decimal mesmo.

 

12 horas atrás, Gregorio Leão disse:

InterrupcaoExterna.c:33:: advisory: (1510) non-reentrant function "_interrupcao" appears in multiple call graphs and has been duplicated by the compiler

É aquilo que te falei lá em cima querido. A interrupt é chamada pelo hw e pelo sw e pode embolar tudo. Imagine ela sendo interrompida pra executar .. ela mesma! Tire-a do loop meu fíi. E pra quê return no final da main()..? vai retornar pra onde? 🤔

 

12 horas atrás, Gregorio Leão disse:

InterrupcaoExterna.c:33:: error: (800) undefined symbol "??i1_interrupcao"

Isso é fácil localizar. Ele mesmo mostra que tá na linha 33 do arquivo InterrupcaoExterna.c. Préstenção.

 

12 horas atrás, Gregorio Leão disse:

INTCONbits.PEIE = 0; //desabilita interrupção periférica

Acho que tem que habilitar. .. depois de corrigir os erros, claro.

 

12 horas atrás, Gregorio Leão disse:

o argumento "high_priority" ou "low_priority" o compilador manda eu ignorar o argumento na função void __interrupt(argumento)

Algo me diz que este mc não tem este lance de prioridades

"Priorize as prioridades" 😁.

  • Curtir 1
  • Amei 1
  • Membro VIP
Postado
8 horas atrás, oleoarruda disse:

deve ser pela falta da biblioteca stdint

Talvez. Mas geralmente a aceitação da notação binária é inata do compilador. Mas de fato têm alguns em que há esta ausência. Pra estes casos, "não contavam com minha astúcia!"...:

#define B8__(x) ((x&0x0000000fLU)?1:0) \
+((x&0x000000f0LU)?2:0) \
+((x&0x00000f00LU)?4:0) \
+((x&0x0000f000LU)?8:0) \
+((x&0x000f0000LU)?16:0) \
+((x&0x00f00000LU)?32:0) \
+((x&0x0f000000LU)?64:0) \
+((x&0xf0000000LU)?128:0)
#define HEX__(n) 0x##n##LU
#define b8(d) ((unsigned char)B8__(HEX__(d)))
/* for upto 16-bit binary constants, MSB first */
#define b16(dmsb,dlsb) (((unsigned short)b8(dmsb)<< \
+ b8(dlsb))
/* for upto 32-bit binary constants, MSB first */
#define b32(dmsb,db2,db3,dlsb) (((unsigned long)b8(dmsb)<<24) \
+ ((unsigned long)b8(db2)<<16) \
+ ((unsigned long)b8(db3)<< \
+ b8(dlsb))
/* Sample usage:
b8(01010101) = 85
b16(10101010,01010101) = 43605
b32(10000000,11111111,10101010,01010101) = 2164238933

😁

Postado

@.if consegui fazer funcionar, o unico problema é um atraso após preciosar o botão. Quando eu aperto o botão a primeira vez o mc liga o led, da um atraso de 1 segundo e desliga o led, ate ai tudo como planejado. O problema é que em algum momento, quando eu pressiono o botão o led não liga ou se eu apertar o botão, o mc cumpre a rotina, porém, se eu apertar o botão de novo assim que o led desligar, o led não liga de novo no mesmo instante. Não tem problema porque provavelmente é um problema de mal contato do botão, estou deduzindo isso porque o problema estava acontecendo com mais frequencia, mas eu troquei o botão e o problema apareceu com menos frequencia. Muito obrigado pela ajuda ai @.if @oleoarruda  

@oleoarruda na verdade esse não é o problema ja que eu havia feito a mesma coisa em codigos anteriores, creio que seja algum erro de compilação

  • Membro VIP
Postado
55 minutos atrás, Gregorio Leão disse:

é que em algum momento, quando eu pressiono o botão o led não liga ou se eu apertar o botão, o mc cumpre a rotina, porém, se eu apertar o botão de novo assim que o led desligar, o led não liga de novo no mesmo instante

Se me permite... você prestou atenção?

Em 17/12/2020 às 07:49, .if disse:

. Préstenção.

Em 15/12/2020 às 06:25, .if disse:

interrupção é que ela se faz 'por fora'. No seu caso você a está causando o tempo todo no loop também. Isso deve gerar confusão na cabecinha do mc.

Em 17/12/2020 às 07:49, .if disse:

É aquilo que te falei lá em cima querido. A interrupt é chamada pelo hw e pelo sw e pode embolar tudo. Imagine ela sendo interrompida pra executar .. ela mesma! Tire-a do loop meu fíi.

tirou a chamada da rotina do loop principal? Sabe o que é isso?

Digamos que sim, você entendeu e corrigiu isso. Bacana.

 

55 minutos atrás, Gregorio Leão disse:

consegui fazer funcionar,

Que bom que conseguiu sozinho. Mas faltou você dizer o que fez pra funcionar. É pra "uso futuro", entende?

 

55 minutos atrás, Gregorio Leão disse:

se eu apertar o botão de novo assim que o led desligar, o led não liga de novo no mesmo instante

Também deve fazer uma auto análise do seu fonte... assim que você aperta ele acende e entra no delay. E se dentro do delay você apertar ele vai querer entrar no delay que ele já estava. P.ex. se você usar a função delay fora da interrupt, seu compilador deve chiar pois ela pode ser chamada enquanto é executada e .. afff... além da confusão do mc pode causar um paradoxo infinito no universo! Por isso é bom analisar direitin bit a bit o que quer que seu sistema faça.

 

55 minutos atrás, Gregorio Leão disse:

um problema de mal contato do botão,

de fato a nível de eletrons todo e qualquer botão tem "mal contato". Ele ocorre pois há micro repiques mecânicos. Seja bem vindo ao momento pra você ser apresentado à questão do debouncing - clique.

 

Legal.

 

4 minutos atrás, Gregorio Leão disse:

desabilitei as resistencias pull-up da PORTB e setei a porta RB0/INT como entrada.

Nada contra mas você colocou pullup externo né? NÉ?! Senão é outro motivo - agora hard - pra confusão.

 

Editei pra minha publicação não ser a última kk

Postado

@.if eu fiz o que você recomendou, tirei a interrupção do loop e funcionou. Tambem desabilitei as resistencias pull-up da PORTB e setei a porta RB0/INT como entrada. Exclui a função de interrupção e usei o codigo na função principal. funcionou 🤓

 

o codigo:


#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

void Basic_Configurators(void){
    CMCON = 0x07;
    TRISAbits.TRISA2 = 0;
    TRISBbits.TRISB0 = 1;
}

void Init_Interrupt(void){
    INTCONbits.GIE = 1; //habilita todas as interrupções
    INTCONbits.PEIE = 0; //habilita interrupção periférica
    INTCONbits.INTE = 1; //habilita interrupção externa
    INTCONbits.INTF = 0; //limpa o sinalizador de interrupção externa
    OPTION_REGbits.INTEDG = 1;  //borda de subida, transição de '0' para '1' configura uma interrupção
    INTCONbits.T0IF = 0; // desabilita sinalizador de interrrupção Overflow
    INTCONbits.RBIF = 0; // desabilita sinalizador de interrupção por alteração na porta B
    OPTION_REGbits.nRBPU = 1; //desabilita resistencia pull-up do PORTB
}

void main(void) {
    Basic_Configurators();
    Init_Interrupt();
    if(INTCONbits.INTF == 1){
        PORTAbits.RA2 = 1; 
        __delay_ms(1000);
        PORTAbits.RA2 = 0;
        __delay_ms(100);
        INTCONbits.INTF = 0;
    }
    
}

 

  • Membro VIP
Postado

Puts... vi agora... ou melhor, 'não vi agora' sua função de interrupção fora do main() - que é como tem que ser.

A interrupt não precisa ser chamada pelo processo principal. Quem a chama é algum evento externo a ele, tendeu?

 

Uma maneira fofa (e pessoal) de se interpretar a interrupção é que ela é como um coprocessador ou um co-processo de um sistema multitarefas. Mas sim é normal a gente fazer confusões com o lance do co processamento com "cocô processos mentais" kk. Ainda lhe falta um pouco de noção pra "visualizar" a coisa toda e seu sistema funcionando. Mas sim, você está caminhando bem.

 

 

A essência é

rotina de interupção () //não lembro a sintaxe
{
if(INTCONbits.INTF == 1)
	{
	PORTAbits.RA2 = 1; 
	__delay_ms(1000); //"matou" a __delay();
	PORTAbits.RA2 = 0;
	__delay_ms(100); //não a use em lugar nenhum mais!!
	INTCONbits.INTF = 0;
	}
}

void main(void) {
Basic_Configurators();
Init_Interrupt();
for (;;)  //faz + nada mas se tiver algo pra fazer...
	{
	//faça aqui
	}
    
}

 

Aproveito e faço do "jeito certo" kk

1 hora atrás, .if disse:

Legal.

 

1 hora atrás, Gregorio Leão disse:

desabilitei as resistencias pull-up da PORTB e setei a porta RB0/INT como entrada.

Nada contra mas você colocou pullup externo né? NÉ?! Senão é outro motivo - agora hard - pra confusão.

 

Postado

@.if Acho que o problema todo é, no caso se eu estivesse utilizando a função, é a sintaxe que deve estar errada. Na verdade coloquei pull-down externo no botão, funcionou kkkk

 

Agora vou voltar para o meu projeto e verificar se há algum problema com a UART, assim que eu acabar ou se eu tiver alguma duvida posto aqui. Seria legal, mesmo depois que eu acabar o projeto, postar aqui, quem sabe alguem me da uma dica para melhorar o codigo kkkk 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...