TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jorge_cbax en 27 de Diciembre de 2010, 20:28:35
-
hola Gente del foro tengo aca mi codigo de prueba sobre este pic y no hay forma de que me envie los datos correctos por la uart.. ya no se donde meter mano..
les dejo los fuentes. Estoy simulando en proteus y envia los datos pero yo mando un caracter que es la letra A y sale cualquier cosa....
Fuente principal
//////////////////////////////////////////////////////////
// PRENDER Y APAGAR UN LED EN EL PUERTO RD0
// CON UN SWITCH EN RB0 y enviar dato por UART
//////////////////////////////////////////////////////////
#include"p24FJ64GA002.h"
#define XTFREQ 8000000 //On-board Crystal frequency
#define FCY XTFREQ/2 //Instruction Cycle Frequency
#define BAUDRATE 9600 //Designamos rango de baudios
#define BRGVAL ((FCY/(BAUDRATE*16))-1) //Formula para registro U1BRG, obtenida del manual
//_CONFIG2(FNOSC_PRI & POSCMOD_XT); //PIC24 en fisico
_CONFIG2(FNOSC_FRC & POSCMOD_NONE); //simulador
int main(void)
{
AD1PCFG = 0xFFFF; // Configuro todos los pines como digitales
TRISAbits.TRISA0=0; // Seteo el bit0 del puerto A como salida (led conectado en RD0)
LATAbits.LATA0=0; // Pongo un 0 en la salida RA0(apago el led)
INTCON2bits.INT0EP = 0; // detecto la polaridad del flanco de entrada con 0 fl positivo
TRISBbits.TRISB0 = 1; // Configuramos RB0 como entrada.
//CONFIGURACION DEL PUERTO SERIE //
RPOR1bits.RP3R = 3; //UART1 transmit set to RB3
UART1Init(BRGVAL); //Initiate UART1 to 9600 at 8MHz OSCI
while(1)
{
//send data back on UART TX line
UART1PutChar('A');
UART1PutChar('\n');
/* if(PORTBbits.RB0==1) //Si el RB0 tiene un 1
{LATAbits.LATA0=0; //apago el led sino lo prendo
}
else
{LATAbits.LATA0=1;
}*/
}
}Funciones de UART
#include"p24FJ64GA002.h"
//Funcion de inicializacion, el parametro BAUDRATEREG1 determina el baud speed
void UART1Init(int BAUDRATEREG1)
{
//Set up registers
U1BRG = BAUDRATEREG1; //set baud speed
U1MODEbits.UEN0 = 0;
U1MODEbits.UEN1 = 0;
U1MODEbits.BRGH = 0;
U1STAbits.UTXISEL1 = 0;
U1STAbits.UTXISEL0 = 0;
U1STAbits.UTXEN = 1;
U1STAbits.URXISEL1 = 0;
U1STAbits.URXISEL0 = 0;
U1MODEbits.PDSEL1 = 0;
U1MODEbits.PDSEL0 = 0;
U1STAbits.ADDEN = 0;
U1MODEbits.UARTEN = 1 ;
}
//UART transmit function, parameter Ch is the character to send
void UART1PutChar(char Ch)
{
//transmit ONLY if TX buffer is empty
while(U1STAbits.UTXBF == 1);
U1TXREG = Ch;
//reset RX interrupt flag
IFS0bits.U1RXIF = 0;
}
//UART receive function, returns the value received.
char UART1GetChar()
{
char Temp;
//wait for buffer to fill up, wait for interrupt
while(IFS0bits.U1RXIF == 0);
Temp = U1RXREG;
//reset interrupt
IFS0bits.U1RXIF = 0;
//return my received byte
return Temp;
}
el header
/*
Engscope
UART
April 16, 2008
Author: JL
*/
//prototypes
//Initiation
extern void UART1Init(int BAUDRATEREG1);
//UART transmit function
extern void UART1PutChar(char Ch);
//UART receive function
extern char UART1GetChar();muchas gracias !!!!!
-
No repitas temas por favor.
http://www.todopic.com.ar/foros/index.php?topic=33313.msg278481#msg278481