You are on page 1of 4

Ol pessoal, Estou querendo transmitir um endereo de 8 bits via modulo RF 433,92 MHz, com um microcontrolador PIC, onde ser

configurado o endereo atravs de um chave tipo DIP-SWITCH. Quero ler a porta do PIC e enviar via serial fiz o cdigo abaixo, mas no funcionaou.

#include <16F876A.h> #device adc=8 #use delay(clock=4000000) #fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8) char c; short int x; void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0b00000001); //Configura o pin RA0 como entrada. set_tris_b(0b11111111); //Configura toda porta B como entrada port_b_pullups(false); //Quando a chave estiver desativada aterra o pino x = input(pin_a0); x = 0; if(x = 1) c = input_b(); // L a port_b e atribui varivel 'c'. putc(c); // Envia o dado armazenado na varivel 'c' pela sada serial . } Felipe_Eletronic 17/08/2009, 16:31 H

No, no, tem coisa errada ai, no simplesmente ler a porta e usar o putc para enviar via serial! sugesto faa a transmisso usando o modulo USART do seu PIC, tomando cuidado de configurar o baud rate igual para receptor e transmissor! abs. Angelo Eletronic 17/08/2009, 18:25 H x = input(pin_a0); x = 0; Como vc define uma entrada com 0? ab Felipe_Eletronic 17/08/2009, 22:56 H x = input(pin_a0); x = 0; No, no... o comando input serve para ler o estado do pino, para definir como entrada e saida usamos o SET_TRIS_X (onde X trisA, trisB, etc) abs. Andre Mathias 11/09/2009, 11:03 H se vc ainda tiver interesse... //************************************************* //*USART.C * //* * //*Bibiloteca de manipulao da USART * //*Suporta o moda assncrono * //* * //*Autor:Fbio Pereira * //* * //*************************************************

char usart_tx, usart_rx, txreg, rcreg, spbrg; struct rcsta_reg { int rx9d : 1; int oerr : 1; int ferr : 1; int adden : 1; int cren : 1; int sren : 1;

int rx9 : 1; int spen : 1; } rcsta; struct txsta_reg { int tx9d : 1; int trmt : 1; int brgh : 1; int xxx : 1; int sync : 1; int txen : 1; int tx9 : 1; int csrc : 1; } txsta; //define o endereo das variveis #locate rcsta = 0x18 #locate txreg = 0x19 #locate rxreg = 0x1a #locate txsta = 0x98 #locate spbrg = 0x99 #byte r_pir1 = 0x0c //define o registrador r_pir1 #bit flag_rc = r_pir1.5 // define o flag_rc //definies utilizadas nas funes void usart_inicializa (int vel, boolean brgh) /* O valor dos parametros vel e brgh deve ser retirado a partir das tabelas de baud rate fornecidas pela Microchip ou no livro: Microcontroadores PIC:Tcnicas avnadas. */ { txsta = brgh; //seleciona o modo de gerador de baud rate spbrg = vel //configura o gerador de baud rate //configura os pinos da USART como entradas ! #if__device__==628 input (pin_b1); input (pin_b2); #endif #if__device__==877 input (pin_c7); input (pin_c6); #endif txsta.sync = 0; //seleciona o modo assncrono rcsta.spen = 1; //habilita a usart txsta.tx9 = 0; //seleciona o modo de transmisso de 8 bits

txsta.txen = 1; // ativa o transmissor da usart rcsta.cren = 1; //modo de recepo contnua rcsta.rx9 = 0; //modo de recepo de 8 bits void usart_transmite (char dado) { while (!txsta.trmt); //aguarda o buffer de transmisso esvaziar txreg = dado; //coloca o novo caractere para transmisso } char usart_recebe (void) { while (!flag_rc); //aguarda a recepo de caracteres return rxreg; //retorna o caractere recebido

vc pode dar uma olhada no datasheet do seu pic para ver o pq das configuraes dos registradores!

You might also like