|
Tài trợ cho PIC Vietnam |
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 |
17-07-2011, 11:24 AM | #15 |
Nhập môn đệ tử
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); } |
|
|