Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all articles
Browse latest Browse all 21975

rtc

$
0
0

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.


Viewing all articles
Browse latest Browse all 21975

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>