Ir ao conteúdo
  • Cadastre-se

PIC UART com PIC16f628a - Protocolo RS232


Posts recomendados

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)

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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 😁

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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/

😁👍🏻

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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

😁

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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

Link para o comentário
Compartilhar em outros sites

@.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;
    }
    
}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

 

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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