![]() |
|
![]() |
#1 |
Super Moderator
Tham gia ngày: Feb 2006
Bài gửi: 150
: |
Vì SPI bạn cấu hình là Slave, đọc dữ liệu từ Master bạn phải dùng hàm spi_data_is_in() trước.
Đối với đoạn code của bạn, khi gọi spi_read() thì CCS dịch ra như sau: MOVFF SSP1BUF, _yourvar Không có lệnh kiểm tra cờ nào cả, do đó cho dù có nối hay chưa thì nó đọc được kết quả hiển thị ra PortD không có gì lạ cả. Bạn có thể dịch thử trong MPLAB, view->program memory để xem Disassember Vì bạn post code không đủ, nên nếu nói thiếu thì thiếu nhiều, ví dụ bạn khởi tạo ngắt, hàm ngắt của bạn ở đâu ..., Bạn có thể tham khảo 2 ví dụ của CCS là EX_SPI.C và EX_SPI_SLAVE.C trong thư mục [C:\Program Files\PICC\Examples] nếu cài CCS ở ổ C |
![]() |
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Jul 2008
Bài gửi: 9
: |
Trích:
Tuy nhiên, mình sử dụng ngắt chứ ko sử dụng thuật toán thăm dò: data=spi_data_is_in()... Mình Post 2 đoạn Code, bạn nào cần thì tham khảo nha, truyền-nhận ngon lắm!!! Master Code: Code:
#include <16f877a.h> #include <def_877a.h> #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #use fast_io(b) #use fast_io(c) #use fast_io(d) #include <lcd_lib_4bit.c> //********************************* int8 data; //********************************* void main() { output_high(pin_c2); data = 0b00110010; //Thử một giá trị để truyền setup_spi( SPI_MASTER | SPI_L_TO_H); delay_ms(1000); while(1) { output_low(pin_c2); //Chân C2 dùng Select chip spi_write(data); output_high(pin_c2); delay_us(10);//Tao tre giua 2 lan truyen } } //******************************* Slave Code: Code:
#include <16f877a.h> #include <def_877a.h> #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #use fast_io(b) #use fast_io(c) #use fast_io(d) #include <lcd_lib_4bit.c> //************************* int8 data; //************************* #int_ssp void ssp_isr(void) { data = spi_read(); output_d(data); //Hiển thị ra Port D } //************************* void main() { setup_spi(SPI_SLAVE|SPI_L_TO_H); clear_interrupt(INT_SSP); enable_interrupts(INT_SSP); enable_interrupts(GLOBAL); while(1) { //Ko làm gì, đợi Data đến } } //************************ thay đổi nội dung bởi: falleaf, 22-08-2009 lúc 06:48 PM. |
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|