Ðề tài: Giao tiếp I2C
View Single Post
Old 17-07-2011, 11:24 AM   #183
moonlight_mta
Nhập môn đệ tử
 
moonlight_mta's Avatar
 
Tham gia ngày: Jul 2011
Bài gửi: 3
:
Mình mới học về giao tiếp I2C,mình viết code cho PIC6F877A và DS1307 hiển thị LCD.Mình không sử dụng các hàm có sẵn của CCS.Khi chạy thì nó không thoát ra được khỏi vòng lặp wait_ngắt,tức chờ cho cờ ngắt SSPIF = 1.Code của nó như sau,các bạn giúp mình nhé
#include<16f877a.h>
#include<def_877.c>
#include<LCD_mod.h>
#use delay(clock = 20000000)
void wait_ngat(void);
unsigned char DECBCD2(unsigned char);
void main()
{
unsigned char s,p,h,d,m,y;
TRISB = 0x00;
TRISD = 0x00;
wrcmd(0x38);
wrcmd(0x01);
wrcmd(0x0e);

SSPCON = 0x38; //ko truyen du lieu vao sspbuf khi che do truyen du lieu chua san sang
//ko du lieu dc nhan vao sspbuf khi du lieu cu chua dc doc
// cho phep cong giao tiep mssp
// che do I2C master mode,cl SCL= Fosc/(4*(SSPADD+1)
SSPADD = 0;
INTCON7 = 1; //cho phep tat ca ngat
INTCON6 = 1; //cho phep ngat ngoai vi

PIE13 = 1; // cho phep ngat ssp

// bat dau wa trinh truyen nhan du lieu
TRISC3 = 0; // cac pin sda va scl
TRISC4 = 0;
PORTC3 = 1;
PORTC4 = 1;
SSPCON20 = 1; // sspcon2<0> = 1 thiet lap start
wait_ngat();
SSPBUF = 11010000; // address and write
PIR13 = 0;

wait_ngat();
SSPBUF = 0;
PIR13 = 0;

wait_ngat();
SSPBUF = 0;
PIR13 = 0;

wait_ngat();
SSPBUF = 0;
PIR13 = 0;

wait_ngat();
SSPBUF = 0;
PIR13 = 0;

wait_ngat();
SSPBUF = 0x01;
PIR13 = 0;

wait_ngat();
SSPBUF = 0x01;
PIR13 = 0;

wait_ngat();
SSPBUF = 0x01;
PIR13 = 0;

wait_ngat();
SSPBUF = 0x11;
PIR13 = 0;

SSPCON22 = 1;
wait_ngat();
PIR13 = 0;

//................................
SSPCON20 = 1;
wait_ngat();
SSPBUF = 11010000;
PIR13 = 0;

wait_ngat();
SSPBUF = 0;
PIR13 = 0;

wait_ngat();
SSPCON22 = 1;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
//.....................................
TRISC3 = 1;
TRISC4 = 1;
SSPCON20 = 1;
wait_ngat();
SSPBUF = 11010001;
PIR13 = 0;

wait_ngat();
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
s = SSPBUF;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
p = SSPBUF;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
h = SSPBUF;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
d = SSPBUF;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
m = SSPBUF;
PIR13 = 0;

wait_ngat();
PIR13 = 0;
wait_ngat();
y = SSPBUF;
PIR13 = 0;

SSPCON22 = 1;
wait_ngat();
PIR13 = 0;

//...........................
DECBCD2(s);
DECBCD2(p);
DECBCD2(h);
DECBCD2(d);
DECBCD2(m);
DECBCD2(y);
wrdata(s);
wrdata(p);
wrdata(h);
wrdata(d);
wrdata(m);
wrdata(y);
}
//........................
void wait_ngat(void)
{
while(PIR13 == 0);
}
//........................
unsigned char DECBCD2(unsigned char BCD)
{
unsigned char L,H;
L = BCD & 0x0f;
H = (BCD>>4) *10;
return(L+H);
}
moonlight_mta vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn