![]() |
|
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 |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 12
: |
anh pic bang chủ ơi!
anh add dùm nickname của em vào box 09.em đăng nhập vào diễn đàn nhưng ko thấy hộp box 09.anh kiểm tra lại giúp em với. username :suphuhocdoi89 |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Jul 2008
Bài gửi: 9
: |
Vấn đề ngắt i2c trong chip SLAVE
Mình có viết chương trình ngắt cho SLAVE như sau:
////////////////////////////////////////////////////////// #INT_SSP void i2c_isr() { state = i2c_isr_state(); if(state >=0x80) i2c_write(mang_truyen[state-0x80]); else if(state>0) mang_nhan[state-1]=i2c_read(); } ////////////////////////////////////////////////////////// mang_truyen gán sẵn giá trị, mang-truyen và mang_nhan riêng biệt. Trong chip MASTER, mình viết vòng lặp để ghi và đọc dữ liệu với SLAVE: ////////////////////////// while (1) { write_I2C(1,2,3,4,5,6); delay_ms(10); read_I2C(); ... } ///////////////////////// Nhưng dữ liệu nhận được từ SLAVE khi hiển thị ra LCD thì chỉ đúng trong lần read_I2C() đầu tiên. Còn khi vòng lặp while(1){...} lặp lại lần thứ 2, 3,... thì thu được dữ liệu là các số 255. không đúng theo yêu cầu. Hiện tượng trên lặp lại khi mình Reset chip SLAVE. Còn nếu Reset chip MASTER thì luôn thu được các số 255. ************************************************** **************** Các bạn giúp mình với. Cảm ơn nhiều. |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Jul 2008
Bài gửi: 9
: |
À, mình sửa được rồi các bạn ạ!
Bên MASTER đọc liên tiếp 6 bytes, bên SLAVE mình chỉ khai báo mảng truyền 6 phần tử nên mới có hiện tượng này. Mình khai báo lại mảng truyền >6 phần tử thì lại hoạt động đúng. Như vậy là vì sao nhỉ? Mình mới lập trình nên chưa hiểu lắm! |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|