9
#include <p18f4550.h> #include <i2c.h> #include <delays.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #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;

RTC

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);

    }