Ðề tài: Giao tiếp I2C
View Single Post
Old 22-03-2014, 03:52 AM   #211
grapefruit
Nhập môn đệ tử
 
Tham gia ngày: Dec 2013
Bài gửi: 1
:
Pic18f4520 giao tiếp Ds1307

Anh Chị thân!
Hiện tại em đang viết chương trình giao tiếp I2C giữa Pic18f4550 và DS1307 đã chạy trên proteus nhưng ko hiểu tại sao khi chuyển sang con pic18f4520 giao tiếp với ds1307 thì lại ko chạy mà theo như em tìm hiểu thì cấu trúc thanh ghi về I2C của 2 con này ko khác nhau ko hiểu vì lý do j mà lại ko chạy.Anh Chị nào đã từng viết cho pic18f4520 có thể chỉ giúp em với đc ko ạ?còn có 1 tuần nữa nộp đồ án rùi mà mô phỏng chưa chạy thì mạch ko biết thế nào đây
còn dưới đây là chương trình của em Anh chị nào giúp em với,Help Me!
em cảm ơn!

#include "p18f4520.h"
#include "stdio.h"
#include "i2c.h"
#include "delays.h"

#pragma config OSC = HS
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LVP = OFF
#pragma config DEBUG = ON

#define l1 PORTDbits.RD0
#define l2 PORTDbits.RD1
#define l3 PORTDbits.RD2
#define l4 PORTDbits.RD3
#define l5 PORTDbits.RD4
#define l6 PORTDbits.RD5

unsigned char M[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
char m[32];
unsigned char s,giay,phut,gio;
unsigned char x,a;


void ghids(unsigned char diachi,unsigned char dulieu)
{
unsigned char b;
b=dulieu;//((((dulieu/10)<<4)&0xf0)+((dulieu%10)&0x0f));
StartI2C();
IdleI2C();

WriteI2C(0xd0);
IdleI2C();

WriteI2C(diachi);
IdleI2C();

WriteI2C(b);
IdleI2C();
StopI2C();
}
void docds1307(unsigned char slave1,unsigned char diachi)
{
unsigned char x;
StartI2C();
IdleI2C();

WriteI2C(slave1);
IdleI2C();

WriteI2C(diachi);
IdleI2C();

RestartI2C();
IdleI2C();

WriteI2C(slave1+1);
IdleI2C();

x=ReadI2C();
a=(x>>4)*10+(x&0x0f);

NotAckI2C();
IdleI2C();
StopI2C();
return x;
}
void hienthi(void)
{
docds1307(0xd0,0x00);giay=x;Delay1KTCYx(10);
l1=1;PORTB=M[(giay/10)];Delay1KTCYx(10);l1=0;
l2=1;PORTB=M[(giay%10)];Delay1KTCYx(10);l2=0;
docds1307(0xd0,1);phut=a;Delay1KTCYx(10);
l3=1;PORTB=M[(phut/10)];Delay1KTCYx(10);l3=0;
l4=1;PORTB=M[(phut%10)];Delay1KTCYx(10);l4=0;
docds1307(0xd0,2);gio=a;Delay1KTCYx(10);
l5=1;PORTB=M[(gio/10)];Delay1KTCYx(10);l5=0;
l6=1;PORTB=M[(gio%10)];Delay1KTCYx(10);l6=0;
}

void main()
{
TRISB=0X00;
TRISC=0b11110111;
TRISD=0x00;
ADCON1=0x0f;
Delay1KTCYx(10);
OpenI2C(MASTER,SLEW_OFF);
SSPADD=0x63;//49; //xung nhip=Fosc/(4*(SSPADD=49+1);
Delay1KTCYx(10);
//ghids1307(0x19,0x19,0x57);
gio=0;
giay=0;
phut=0;
ghids(0x00,0x14);
SSPCON1bits.SSPM3=1;
SSPCON1bits.SSPM2=0;
SSPCON1bits.SSPM1=0;
SSPCON1bits.SSPM0=0;
SSPCON2bits.RCEN=1;
Delay1KTCYx(10);
while(1)
{
hienthi();
}
}
grapefruit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn