Hi,
I'm trying to run rtc on msp430f5520 and trying to display it on lcd.
but my rtc is not running,garbage value of hours,min and sec are getting displayed.
here is my code.
#include <msp430.h>
#include <in430.h>
/*
* main.c
*/
void init_lcd();
void cmd_wr(unsigned char ch);
void data_wr(unsigned char dat);
void delay(int Ms);
void enable();
unsigned char hour,min,sec;
unsigned char const ascii[]={'0','1','2','3','4','5','6','7','8','9'};
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1DIR = 0x1c;
P2DIR = 0xF0;
//P1DIR |= BIT2+ BIT3+ BIT4;
//P2DIR |= BIT4+ BIT5+ BIT6+ BIT7;
delay(100);
init_lcd();
delay(50);
RTCCTL1 |= RTCMODE; //| RTCMODE; // RTC enable BCD mode, RTC hold
RTCCTL1 |= RTCHOLD;
RTCHOUR = 0x22; // Hour = 0x12
RTCMIN = 0x10;
RTCSEC = 0x03; // Seconds = 0x36
RTCCTL1 &= ~(RTCHOLD); // Start RTC calendar mode
__bis_SR_register(GIE); // Enter LPM3 w/ interrupts
while(1)
{
cmd_wr(0x80);
sec = RTCTIM0_L;
min = RTCTIM0_H;
hour = RTCTIM1_L;
hour=hour&0xf0;
hour=hour>>4;
hour=ascii[hour];
data_wr(hour);
delay(5);
hour=hour&0x0f;
hour=ascii[hour];
data_wr(hour);
delay(5);
data_wr(':');
sec=sec&0xf0;
sec=sec>>4;
sec=ascii[sec];
data_wr(sec);
delay(5);
sec=sec&0x0f;
sec=ascii[sec];
data_wr(sec);
delay(5);
data_wr(':');
min=min&0xf0;
min=min>>4;
min=ascii[min];
data_wr(min);
delay(5);
min=min&0x0f;
min=ascii[min];
data_wr(min);
delay(5);
}
}
void init_lcd()
{
//delay(15);
cmd_wr(0x33);
cmd_wr(0x22);
cmd_wr(0x22);
cmd_wr(0x22);
cmd_wr(0x28);
cmd_wr(0x0C);
cmd_wr(0x06);
cmd_wr(0x01);
}
void cmd_wr(unsigned char ch)
{
P1OUT &= ~(BIT2); // RS=0
P1OUT &= ~(BIT3); // RW=0
P2OUT = ch;
P1OUT |= BIT4; // En = 1;
P1OUT &= ~(BIT4); // En = 0;
ch = (ch<<4) & 0xF0;
P2OUT = ch;
P1OUT |= BIT4; // En = 1;
P1OUT &= ~(BIT4); // En = 0;
delay(3);
}
void data_wr(unsigned char dat)
{
P1OUT |= BIT2; // RW=0,RS=1
P1OUT &= ~(BIT3);
P2OUT = dat;
P1OUT |= BIT4; // En = 1;
P1OUT &= ~(BIT4); // En = 0;
dat = (dat<<4) & 0xF0;
P2OUT = dat;
P1OUT |= BIT4; // En = 1;
P1OUT &= ~(BIT4); // En = 0;
delay(3);
}
void delay(int Ms)
{
volatile int i;
while(Ms>0)
{
for(i=0;i<1000;i++);
Ms--;
}
}
void enable()
{
P1OUT |= BIT4; // En = 1;
P1OUT &= ~(BIT4); // En = 0;
}
plz guide me.
Regards,
Neha.