PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   [giao tiếp I2C] RTC DS1307 và PIC 16f887 không chạy (http://www.picvietnam.com/forum/showthread.php?t=32783)

loveboom3012 12-09-2013 08:14 AM

[giao tiếp I2C] RTC DS1307 và PIC 16f887 không chạy
 
mình đang làm lab i2c với PIC 16f887 , gặp rắc rối ở phần lấy data từ ds1307 đưa vào PIC xử lí, mọi người giúp mình với, trên 6 led 7 đoạn toàn hiển thị số 0
code của mình đây
Code:

#include <htc.h>
#include "i2c.h"
#include "lcd.h"
__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF); //1st config. Word
__CONFIG(BOR4V_BOR21V);
#define _XTAL_FREQ 4000000
#define SLAVER_ADD 0X68
#define READ 1
#define WRITE 0
#define led_gio_c RD5
#define led_gio_dv RD4
#define led_phut_c RD3
#define led_phut_dv RD2
#define led_giay_c RD1
#define led_giay_dv RD0
int gio_c,gio_dv,phut_c,phut_dv,giay_c,giay_dv;
int giay,phut,gio,i;
unsigned char mgio_c,mgio_dv,mphut_c,mphut_dv,mgiay_c,mgiay_dv;
const unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void ds1307_init();
void read_ds1307();
void ds1307_init()
{
        i2c_start();
        i2c_write((SLAVER_ADD<<1)|WRITE); // ~ i2c_write(0xd0)
        i2c_write(0x00);
        i2c_stop();
}
void read_ds1307()
{
        i2c_start();
        i2c_write((SLAVER_ADD<<1)|WRITE); // ~ i2c_write(0xd0)
        i2c_write(0x00);
        i2c_stop();
        i2c_stop(); //restart
        i2c_write((SLAVER_ADD<<1)|READ); // ~i2c_write(0xd1);
        giay=i2c_read(0);
        phut=i2c_read(0);
        gio=i2c_read(1);
        i2c_stop();       
}
void update_time()
{
        giay_dv=giay&0x0f;
        giay_c=(giay&0xf0)>>4;
        phut_dv=phut&0x0f;
        phut_c=(phut&0xf0)>>4;
        gio_dv=giay&0x0f;
        gio_c=(giay&0xf0)>>4;
        mgiay_dv=ma[giay_dv];
        mgiay_c=ma[giay_c];
        mphut_dv=ma[phut_dv];
        mphut_c=ma[phut_c];
        mgio_dv=ma[gio_dv];
        mgio_c=ma[gio_c];
}
void hienthi()
{
        for(i=0;i<5;i++)
        {
                PORTB=mgiay_dv; led_giay_dv=0; __delay_us(100);led_giay_dv=1;
                PORTB=mgiay_c; led_giay_c=0; __delay_us(100);led_giay_c=1;       
                PORTB=mphut_dv; led_phut_dv=0; __delay_us(100);led_phut_dv=1;
                PORTB=mphut_c; led_phut_c=0; __delay_us(100);led_phut_c=1;       
                PORTB=mgio_dv; led_gio_dv=0; __delay_us(100);led_gio_dv=1;
                PORTB=mgio_c; led_gio_c=0; __delay_us(100);led_gio_c=1;                       
        }
}
void main()
{
        ANSEL=0;
        ANSELH=0;
        TRISB=0X00;
        TRISD=0X00;
        i2c_init();
        ds1307_init();
        while(1)
        {
                read_ds1307();
                update_time();
                hienthi();
        }
}


loveboom3012 12-09-2013 03:25 PM

hú hú không có ai giúp em hả :(


Múi giờ GMT. Hiện tại là 03:28 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam