SparkFun Forums 

Where electronics enthusiasts find answers.

Discussions on how to get your MSP JTAG programmer up and running.
By sid_s
#61101
hi all,
I am working on sending data to MSP430FG4618 via serial port & display it on LCD. The data is transmitted & received in character format. After receiving the character i convert it into integer & when i use LCDMEM function to display it all the segments(a-h) of that LCDMEM are on. Can anyone tell me along with the character transmitted what is send to mark the end of string. How can i separate it from the data. Here is the code:
#include "msp430xG46x.h"
#include "LCD.h"



void main(void)
{
int i;
WDTCTL = WDTPW+WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps

do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0x47FF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?

// on experimenter's board P2.4 is UCA0TXD and P2.5 is UCA0RXD
P2SEL |= 0x030; // P2.5,4 = USCI_A0 RXD/TXD
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32k/9600 - 3.41
UCA0BR1 = 0x00;
UCA0MCTL = 0x06; // Modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt

_BIS_SR(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}



#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{

const int charseg[]=
{
LCD_A+LCD_B+LCD_C+LCD_D+LCD_E+LCD_F, // '0'
LCD_B+LCD_C, // '1'
LCD_A+LCD_B+LCD_D+LCD_E+LCD_G, // '2'
LCD_A+LCD_B+LCD_C+LCD_D+LCD_G, // '3'
LCD_B+LCD_C+LCD_F+LCD_G, // '4'
LCD_A+LCD_C+LCD_D+LCD_F+LCD_G, // '5'
LCD_A+LCD_C+LCD_D+LCD_E+LCD_F+LCD_G, // '6'
LCD_A+LCD_B+LCD_C, // '7'
LCD_A+LCD_B+LCD_C+LCD_D+LCD_E+LCD_F+LCD_G, // '8'
LCD_A+LCD_B+LCD_C+LCD_F+LCD_G // '9'
};
char x,z;
int y,i;
P5SEL = 0x1C; // P5.2/3/4 = LCD COM lines

for (i = 19; i > 0; i--) LCDMEM = 0; // Clear LCD

LCDACTL = LCDON + LCD4MUX + LCDFREQ_128; // 4mux LCD, ACLK/128
LCDAPCTL0 = 0x7E;
x=UCA0RXBUF-0x30;
y=(int)x;

LCDMEM[4]=charseg[y];

}
By OldCow
#61192
There is no law or rule for what can be sent (and consequently received) via serial port. If someone or something is sending ASCII digits, the likely terminating code could be 0x20 (ASCII <space>), 0x09 (<HT>), 0x00 (<NUL>), 0x0A (<LF>), 0x0D (<CR>), 0x2C (,). It is also possible that it sends nothing at all. You can easily determine what it sends by just looking at what is received.
By sid_s
#61232
i am done with this. Now the problem i am facing is when i send 1 digit it is displayed fine. but when i send a 2 digit number say '45', only 5 is displayed. How can i handle this?
By OldCow
#61252
I do not know what LCD you are using nor what LCDMEM[] are for. But I think if you put the first digit in LCDMEM[4] and later put the second digit also in LCDMEM[4], the second digit will probably obliterate the first digit there. You should put the second digit in LCDMEM[5] instead.