collapse

* Links de Robótica

* Posts Recentes

Recomendação de um opamp para um DAC r2r por jm_araujo
[Hoje às 10:48]


Feira de electricidade e eletrónica por beirao
[Hoje às 00:32]


RN42 e TP-Link MR3020 por doiga
[Ontem às 19:22]


Ajuda Projecto IR / RF por senso
[Ontem às 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]

Autor Tópico: UART PIC18F4550  (Lida 2616 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
UART PIC18F4550
« em: 02 de Agosto de 2010, 12:26 »
Pretendo programar a porta série do PIC 18F4450 em modo assíncrono de 8 bits, com baud rate de 9600 e com interrupções . Já segui a receita que consta no datasheet, no entanto continuo sem conseguir transmitir nada. O meu objectivo para já é configurar uma transmissão controlada de caracteres (isto é enviar por exemplo o caracter a). O código (Hi-tech) que estou a utilizar está abaixo. Dicas aceitam-se.

#include <pic18.h>
#include <stdio.h>
#include <htc.h>

void init_ps(void);
void enviar_ps (unsigned char enviar);

void main(void)
{
   unsigned char enviar='a';
   init_ps();
   enviar_ps(enviar);   
   while(1);
}

void init_ps(void)
{
TRISC=0xFF;
SPBRG=31;
BRGH=0;
BRG16=0;
SYNC=0;
SPEN=1;
TXIE=1;
TXEN=1;
GIE=1;
PEIE=1;
}

void enviar_ps (unsigned char enviar)
{
while(TXIF==0);
TXREG=enviar;
}

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: UART PIC18F4550
« Responder #1 em: 02 de Agosto de 2010, 12:51 »
Vê lá se isto ajuda ::

Código: [Seleccione]
#include <pic.h>
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#include "delay\delay.c"
#include "usart\usart.c"
#include <stdio.h>

#define BAUD 9600      //velocidade da porta série
#define FOSC 4000000L //velocidade de relógio


// Define os fusiveis do PIC
__CONFIG (INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS & DEBUGDIS);



//define uma estrutura de bits, dentro de um byte
struct {
unsigned teste:1;
} FLAGS;



//define macros
#define bitset(var, bitno) ((var) |= 1 << (bitno)) //activa bit em registo
#define bitclr(var, bitno) ((var) &= ~(1 << (bitno))) //limpa bit em registo

const char frase[] = "\rExperiencia PIC e USART\n\n"; //define frase a enviar



/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/* Programa principal
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/

void main (void)
{
char i; //define registo contador de 8-bit

PORTA = 0; //desliga todos os drivers de saida, previne picos de corrente
PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTE = 0;

//configura se pinos vão ser usados como Analógico ou Digital
ANSEL = 0; //todos os pinos como digitais
ANSELH = 0; //todos os pinos como digitais

TRISA = 0; //todos os pinos como saída
TRISB = 0; //configura pinos das portas, para entradas/saídas
TRISC = 0;
TRISD = 0;
TRISE = 0;

PORTA = 0; //desliga todos os pinos de saida
PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTE = 0;

init_comms(); //inicializa a porta série


/****************************************************************************/
/* Loop Principal
/****************************************************************************/

while (1) //ciclo infinito
{
printf(frase); //envia frase pela porta série

DelayMs(250); //espera 1 seg
DelayMs(250);
DelayMs(250);
DelayMs(250);
}

}

/****************************************************************************/
/* Main program - END
/****************************************************************************/




Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: UART PIC18F4550
« Responder #2 em: 02 de Agosto de 2010, 15:13 »
Não creio, até porque as rotinas não se encontram escritas, só é possível ver os seus protótipos e não o respectivo código. No entanto, obrigado, na mesma.

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: UART PIC18F4550
« Responder #3 em: 02 de Agosto de 2010, 15:19 »
Não estás a usar o HITECH? estão lá todas as bibliotecas a serem usadas. É questão de procurares.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: UART PIC18F4550
« Responder #4 em: 02 de Agosto de 2010, 15:41 »
Nunca trabalhei com as bibliotecas nem sei bem como é que isso se faz. Sempre que tento utilizar uma tenho  erros ao tentar gerar o ficheiro .hex. Talvez porque não o esteja a fazer da maneira mais correcta. Por isso é que tento desenvolver as minhas rotinas. 

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: UART PIC18F4550
« Responder #5 em: 02 de Agosto de 2010, 15:59 »
Vais ao directório onde está instalado o compilador :: C:\Program Files\HI-TECH Software\PICC\std\9.60\samples

Está lá tudo o que procuras, com exemplos também.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: UART PIC18F4550
« Responder #6 em: 02 de Agosto de 2010, 17:58 »
Não fazia ideia. Tive a ver o que estava lá sobre a porta serie (na pasta usart), mais propriamente para o ficheiro serial.c e reparo que existe alguma semelhança com o ficheiro acima. No entanto, ainda existem alguma coisas que não percebo, nomeadamente, como foi feita a programação da taxa de transmissão.