Ir ao conteúdo
  • Cadastre-se

Como transmitir um vetor de um pic para outros com RS 232?


Posts recomendados

Estou fazendo meu TCC em microcontroladores, e estou a muito tempo sem estuda-los, portanto, esqueci de muita coisa.

Estou recebendo quatro variáveis de um teclado e tenho que coloca-las em uma "rede" com 8 outros PICs. Estou conseguindo pegar as variáveis ok e montar um vetor para transmiti-lo, porém estou fazendo algo errado, pois quando ligo o Virtual Terminal de Protheus no pino TX, ele não mostra nada.

 

 

Código principal.

Obs.: As teclas "*" e "#", indicam, respectivamente, inicio e fim de transmissão

#include <master02.h> // Clica botão direito, configurações Rs232#include <LCD.C>#include "KBD.C"#int_EXT#use rs232(baud=9600,parity=N,xmit=PIN_C6,bits=8,stream=PORT1)Unsigned char tecla;Unsigned char tran[4];Unsigned int a=0;Unsigned int flag_a;void transmitir();void  EXT_isr(void) {}void main(){   port_B_pullups(0xFF);   lcd_init();   kbd_init();   transmitir();   disable_interrupts(INT_EXT);   disable_interrupts(GLOBAL);   lcd_gotoxy(1,1);   lcd_putc("TCC-Arthr Barros");   while(TRUE)   {      tecla = kbd_getc();      if (tecla != '\0') {         if(tecla == '*'){            tran[0]=tecla;            lcd_gotoxy(1,2);            lcd_putc(tecla);         }else{            if(tecla >= '1' && tecla <= '5'){               tran[1]=tecla;               lcd_gotoxy(2,2);               lcd_putc(tecla);                           } else {                           } if(tecla>='7'&&tecla<='9'){                      tran[2]=tecla;                     lcd_gotoxy(3,2);                     lcd_putc(tecla);                             } else{                   if(tecla == '#'){                      tran[3]=tecla;                     lcd_gotoxy(4,2);                     lcd_putc(tecla);                     transmitir();                                      }                  }                  }            }   }}void transmitir(){   a=0;   while(a!=4){      printf(tran[a]);      a++;   }}

As configurações do PIC

#include <16F877A.h>#device adc=16#FUSES NOWDT                    //No Watch Dog Timer#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOBROWNOUT               //No brownout reset#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#use delay(clock=5000000)#use FIXED_IO( C_outputs=PIN_C6 )#use FIXED_IO( D_outputs=PIN_D7,PIN_D6,PIN_D5,PIN_D4,PIN_D3,PIN_D2,PIN_D1,PIN_D0 )#define TX   PIN_C6

Estou usando o CCS pic C Compiler para fazer o trabalho.

 

Se puderem me clarear a mente, eu agradeço, meu tempo está acabando e ainda tenho muitos PICs para programar, alguns com PWM, e todos ainda tem que receber esse vetor de 4 posições. 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

to com preguiça de analisar seu cod. Verifique se baud rate = coerentes.

-Verifique se ligou corretamente os sinais

-Verifique se clock ou cristal está coerente com baudrate

-coloque terminal no modo hex (se tiver como)

-Faça 1 teste simples

for (; printf("teste..."); ou até mesmofor (; printf(kbd_getc()); // + ' ' .... ?

pra ver se o problema está com seus if´s

-etc

-abç

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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