Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Blackmore em 10 de Março de 2009, 10:56
-
Pessoal, bom dia.
Gostaria de saber dos mais conhecedores em pic, como fazer a rotina (ou protocolo) para comunicação RS232 e RS485 através de software, ou seja, quero fazer com que um devido PIC que não tenha USART envie e receba informações por serial.
A idéia é enviar um sinal do AD de um PIC12F675 para um host qualquer.
Pode ser em Assembly ou C, depois farei os devidos testes.
Agradeço qualquer ajuda neste assunto!
abrax!
-
O CCS faz isso automaticamente
Syntax:
#use rs232 (options)
FORCE_SW
Will generate software serial I/O routines even when the UART pins are specified.
Edson
-
EDSONCAN
essa função não seria para se utilizar um PIC que tenha USART?
Vou procurar no livro de programação mas acho que seria apenas para utilizar em um PIC que tenha serial.
abrax!
-
Essa função e para qualquer pic, com ou sem usart.
Edson
-
Oi Blackmore,
Veja se esse exemplo serve para você, está em assembly.
Já fiz alguns códigos baseados nesse e funcionou legal.
Abraço!
-
obrigado pelas postagens! :D
abrax!
-
Código em C.
#include <12F675.h>
#device ADC=8
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
//xmit => TX ; rcv => RX
#use rs232(baud=9600, xmit=PIN_A5, rcv=PIN_A4)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#ROM 0x3ff = {0x3420} //USAR VALOR DE FÁBRICA PARA O OSCILADOR INTERNO
void main()
{
unsigned int temp=0;
char n;
disable_interrupts(GLOBAL);
//DEFINIÇÃO DE PORTAS ANALÓGICAS/////////////////////////////////////////////
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(sAN0); //Define GP0 analógica
/////////////////////////////////////////////////////////////////////////////
// PRINTF
// \r retorno de linha
//\n nova linha
// \f manda limpar o terminal
printf("\f\r\nExemplo de Serial + ADC 8 bits\n\n");
printf("\r\nDigite \"R\" para ler voltagem\n");
set_adc_channel(0);
while(1)
{
if (kbhit())
{ // se recebeu um dado, devolve
n=getc();
if(n == 'R')
{
temp = read_adc();
delay_ms(1000);
printf("\rLeitura ADC em bits= %d\n",temp);
}
else
{
printf("\r\nLetra\n = %c",n);
}
}
}
}
-
kaoalex
isso é que é ser direto hein? ;D muito obrigado! :D
abrax!
-
Caro blackmore
Nesse link há uma porção de arquivos, bibliotecas prontas para uso em C com microcontroladores PIC.
http://www.editoraerica.com.br/download.asp?cod=9352&editora=Microcontroladores
Há duas rotinas rs232.c e usart.c, vc acrescenta no diretório do CCS e depois chama essas funções no cabeçalho do programa.
Eu usei isso no PIC 12F.... não lebro agora o restante, mas que possui apenas 8 pinos e funcionou perfeitamente.
Espero ter ajudado.
Att.