how to send command through UART using 8051 uC

Status
Not open for further replies.

kevin88

Junior Member level 1
Joined
Dec 30, 2010
Messages
16
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,462
Hi,

I have problem sending command through using uart. I could not seems like able to communicate with my gps. my code is below.

PHP:
#define SYSCLK       		99532800			// Output of PLL derived from (INTCLK*2)

#define BAUDRATE_0     		115200			// Baud rate of UART0 in bps

#define BAUDRATE_1     		9600//115200			// Baud rate of UART1 in bps
#define UART1_BR1				(SYSCLK / BAUDRATE_1 / 2)
#define UART1_BR2				(UART1_BR1 / 256)

#define INT_DEC      		256            // Integrate and decimate ratio
#define SAR_CLK      		2500000        // Desired SAR clock speed

#define	RX_BUFFER_SIZE	500

define adcs_data_segment 0x0000

char				xdata	g_c_rx0_buffer[500]						_at_ (adcs_data_segment + 0);
char				xdata	g_c_rx1_buffer[500]						_at_ (adcs_data_segment + 500);

//lsl : 05 Jan 2011 : 1854hrs
char				xdata	UART1_Buffer_P[100]							_at_ (adcs_data_segment + 1000);
char	*UART1_Buffer;

//char				xdata	*UART1_Buffer								_at_ (adcs_data_segment + 1000);
nsigned short xdata	g_us_rx0_ptr								_at_ (adcs_data_segment + 1200);
unsigned short xdata	g_us_tx0_ptr								_at_ (adcs_data_segment + 1202);
unsigned short xdata	g_us_rd0_ptr								_at_ (adcs_data_segment + 1204);

unsigned short xdata	g_us_rx1_ptr								_at_ (adcs_data_segment + 1220);
unsigned short xdata	g_us_tx1_ptr								_at_ (adcs_data_segment + 1222);
unsigned short xdata	g_us_rd1_ptr								_at_ (adcs_data_segment + 1224);
unsigned short xdata	g_us_tx1_cmd_length						_at_ (adcs_data_segment + 1226);
void main(void) 
{
	//char	*array1 = "1234";
	unsigned short	l_us_temp;


	UART1_Buffer = UART1_Buffer_P;

	//array1 = string1;

	//Disable watchdog timer
	WDTCN = 0xDE;
   WDTCN = 0xAD;

	ExtCrystalOsc_Init();

	//Initialise crossbar and GPIO
 	Port_Init();

	EMIF_Init();

	//Initialise Timer 0
	Timer0_Init();

	//Initialise Timer 2
	Timer2_Init();

	//Initialise Timer 4
	Timer4_Init();

	//Initialise UART0
 	UART0_Init();

	//Initialise UART1
 	UART1_Init();

	//Initialise ADC
  	ADC0_Init();

	//Initialise DAC
	DAC0_Init();
	DAC1_Init();

	//Initialise PCA0
	PCA0_Init();

	//Initialise INT0_N & INT1_N
	Ext_Interrupt_Init();

//lsl : 04 Jan 2011 : 0852hrs : disable Watchdog timer temporarily
	//Initialise Watchdog Timer
//	Watchdog_Init();

	//Initialise SPI0
	SPI0_Init();

	//------------------------
	//Reset IMU-A, IMU-B & GPS

   SFRPAGE = CONFIG_PAGE;

	IMU_A_CS = 1;
	IMU_B_CS = 1;

	IMU_A_RST = 0;
	IMU_B_RST = 0;

	GPS_RST = 0;

	delay_ms(1);

	IMU_A_RST = 1;
	IMU_B_RST = 1;

	GPS_RST = 1;

	delay_ms(1);

	//---------------------------------------------------------
	//lsl : 31 Dec 2010 : 1046hrs: Initialise variables : begin

	g_us_rx0_ptr = 0;
	g_us_tx0_ptr = 0;
	g_us_rd0_ptr = 0;

	for (l_us_temp = 0 ; l_us_temp < RX_BUFFER_SIZE ; l_us_temp++)
	{
		g_c_rx0_buffer[l_us_temp] = 0;
	}

	g_us_rx1_ptr = 0;
	g_us_tx1_ptr = 0;
	g_us_rd1_ptr = 0;

	for (l_us_temp = 0 ; l_us_temp < RX_BUFFER_SIZE ; l_us_temp++)
	{
		g_c_rx1_buffer[l_us_temp] = 0;
	}

	/*
	UART1_Buffer[0] = 'l';
	UART1_Buffer[1] = 'o';
	UART1_Buffer[2] = 'g';
	UART1_Buffer[3] = 0x20;
	UART1_Buffer[4] = 'v';
	UART1_Buffer[5] = 'e';
	UART1_Buffer[6] = 'r';
	UART1_Buffer[7] = 's';
	UART1_Buffer[8] = 'i';
	UART1_Buffer[9] = 'o';
	UART1_Buffer[10] = 'n';
	UART1_Buffer[11] = 0x0D;
	UART1_Buffer[12] = 0x0A;
	g_us_tx1_cmd_length = 13;
	*/

	*UART1_Buffer = "log version\r\n";
	g_us_tx1_cmd_length = 13;

	delay_ms(1);

	g_uc_gps_init = 0;

	//lsl : 31 Dec 2010 : 1046hrs: Initialise variables : end
	//---------------------------------------------------------

//	g_uc_uart = 0;
//	printf("ADCS Firmware Date/Version - %s/%s\r\n", FW_DATE, FW_VER);

	//Enable global interrupts
	EA = 1;

	//-----------------------------------------------------------------------------
	// Start of WHILE LOOP
	//-----------------------------------------------------------------------------

   while (1)
	{
		//Toggle LED_1 & LED_2
	   SFRPAGE = CONFIG_PAGE;
		LED_1 ^= 1;
		LED_2 ^= 1;
}

void Port_Init(void)
{
	//Save current SFR page
	char SFRPAGE_SAVE = SFRPAGE;
	// Set SFR page
	SFRPAGE = CONFIG_PAGE;

	P1MDIN    = 0xFC;

	P0MDOUT   = 0x35;

	P1MDOUT   = 0x14;

	P2MDOUT   = 0xBA;

	P3MDOUT   = 0x20;

	//Set P4.[7..0] to open-drain outputs
	P4MDOUT   = 0x00;

	P6MDOUT   = 0xFF;

	P7MDOUT   = 0x3F;

	XBR0      = 0xF7; 

	XBR1      = 0xFF;

	XBR2      = 0x7D;
	
	CLKSEL |= 0x32;	

	//Restore SFR page
  	SFRPAGE = SFRPAGE_SAVE;
}
void UART1_Init(void)
{
	//Save current SFR page
   char SFRPAGE_SAVE = SFRPAGE;

	//Switch to UART1
   SFRPAGE = UART1_PAGE;
void UART1_Init(void)
{
	//Save current SFR page
   char SFRPAGE_SAVE = SFRPAGE;

	//Switch to UART1
   SFRPAGE = UART1_PAGE;
SFRPAGE = TIMER01_PAGE;

   TMOD &= 0x0F;
   TMOD |= 0x20;

   if (UART1_BR2 < 1)
	{
      TH1 = -(UART1_BR1);
      CKCON |= 0x10;                   // T1M = 1; SCA1:0 = xx
   }
	else if (UART1_BR2 < 4)
	{
      TH1 = -(UART1_BR1 / 4);
      CKCON &= ~0x13;                  // Clear all T1-related bits
      CKCON |=  0x01;                  // T1M = 0; SCA1:0 = 01
   }
	else if (UART1_BR2 < 12)
	{
      TH1 = -(UART1_BR1 / 12);
      CKCON &= ~0x13;                  // T1M = 0; SCA1:0 = 00
   }
	else
	{
      TH1 = -(UART1_BR1 / 48);
      CKCON &= ~0x13;                  // Clear all T1-related bits
      CKCON |=  0x02;                  // T1M = 0; SCA1:0 = 10
   }

	//Initialize Timer 1
   TL1 = TH1;

	//Start Timer 1
   TR1 = 1;

   SFRPAGE = UART1_PAGE;

	//Indicate TX1 ready
   TI1 = 1;

	//PS1 = 1 -> to set UART1 interrupt to high-priority
	EIP2 |= 0x40;

	//Restore SFR page
   SFRPAGE = SFRPAGE_SAVE;
}
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…