Upload
wellinton-marcio
View
214
Download
1
Embed Size (px)
DESCRIPTION
Código em linguagem C para leitura de um relógio calendário RTC utilizando o PIC 18f4550.
Citation preview
#include
#include
#include
#include
#include
#include
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PWRT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#define RS PORTEbits.RE0
#define EN PORTEbits.RE1
unsigned char horario[7],ah, al, mesh,mesl, dh,dl, diasemanah, diasemanal, hh,hl, mh, ml,
sh,sl,dados[],i;
char domingo[] = "dom";
char segunda[] = "seg";
char terca[] = "ter";
char quarta[] = "qua";
char quinta[] = "qui";
char sexta[] = "sex";
char sabado[] = "sab";
void dado(unsigned char x)
{
RS = 1;
EN = 1;
PORTD = x;
Delay1KTCYx(10);
EN = 0;
}
void comando(unsigned char x)
{
RS = 0;
EN = 1;
PORTD = x;
Delay1KTCYx(10);
EN = 0;
}
void configura_lcd()
{
comando(0x38);
comando(0x0C);
comando(0x06);
comando(0x01);
}
void escrever(char dia[3])
{
for (i=0;i>4;
sl = (horario[1]&0x0F);
mh = (horario[2]&0xF0)>>4;
ml = (horario[2]&0x0F);
hh = (horario[3]&0xF0)>>4;
hl = (horario[3]&0x0F);
ah = (horario[0]&0xF0)>>4;
al = (horario[0]&0x0F);
mesh = (horario[6]&0xF0)>>4;
mesl = (horario[6]&0x0F);
dh = (horario[5]&0xF0)>>4;
dl = (horario[5]&0x0F);
diasemanah = (horario[4]&0xF0)>>4;
diasemanal = (horario[4]&0x0F);
btoa(hh,dados);
dado(dados[0]);
btoa(hl,dados);
dado(dados[0]);
dado(':');
btoa(mh,dados);
dado(dados[0]);
btoa(ml,dados);
dado(dados[0]);
dado(':');
btoa(sh,dados);
dado(dados[0]);
btoa(sl,dados);
dado(dados[0]);
comando(0xC0);
btoa(dh,dados);
dado(dados[0]);
btoa(dl,dados);
dado(dados[0]);
dado('/');
btoa(mesh,dados);
dado(dados[0]);
btoa(mesl,dados);
dado(dados[0]);
dado('/');
btoa(ah,dados);
dado(dados[0]);
btoa(al,dados);
dado(dados[0]);
comando(0x14);
switch(horario[4])
{
case 1: for(i=0;i
IdleI2C();
StartI2C();
while(SSPCON2bits.SEN);
IdleI2C();
WriteI2C(0x80);
IdleI2C();
WriteI2C(0x00);
IdleI2C();
RestartI2C();
while(SSPCON2bits.RSEN);
IdleI2C();
WriteI2C(0x81);
IdleI2C();
i = getcI2C();
NotAckI2C();
IdleI2C();
StopI2C();
while(SSPCON2bits.PEN);
IdleI2C();
}
void configura_RTC()
{
IdleI2C();
StartI2C();
while(SSPCON2bits.SEN);
IdleI2C();
WriteI2C(0x80);
IdleI2C();
WriteI2C(0x07);
IdleI2C();
WriteI2C(0x03);
IdleI2C();
StopI2C();
while(SSPCON2bits.PEN);
IdleI2C();
}
void main()
{
ADCON1 = 0X0F;
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49;
TRISA = 0X00;
PORTA = 0XFF;
TRISC = 0XFF;
TRISD = 0X00;
TRISE = 0X00;
PORTE = 0X00;
configura_lcd();
configura_RTC();
while(1)
{
ler_RTC();
exibir();
Delay10TCYx(250);
Delay10TCYx(250);
}
while(1);
}