PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 17-07-2011, 11:24 AM   #15
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
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam