Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top