23-03-2011, 12:22 AM | #6 |
Đệ tử 4 túi
|
Cám ơn bạn success.tl mình đã copy chương trìh của bạn và về mô phỏng cho chạy thử .hình như là code phan MASTER thiếu lệnh set_tris_c(0x00); trong hàm main thì phải ,tưong tự trong SLAVE cũng thiếu lệnh set_tris_d(0x00); trong main .Vi mình thử bỏ 2 hàm này ra chương trình không chạy!
Mình đã dựa cva2o chưong trình trên và viết lại cái của mình:giao tiếp giữa 1 MASTER và 2 SLAVE CODE SLAVE: 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) #define SS PIN_A5 //#include <lcd_lib_4bit.c> //************************* int8 data; //************************* #int_ssp void ssp_isr(void) { if(input(SS)==0) { data = spi_read(); //doc tin hieu tu MASTER set_tris_b(0); //thiet lap PORTB la cong xuat du lieu output_b(data); //Hien thi ra port B delay_us(10); } } //************************* void main() { set_tris_a(0xff); setup_spi(SPI_SLAVE|SPI_L_TO_H|spi_clk_div_16 ); clear_interrupt(INT_SSP); enable_interrupts(INT_SSP); enable_interrupts(GLOBAL); while(1) { //Khong lam gi ,cho data den } } //************************ CODE MASTER 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) #define SS1 pin_C1 //chan chon chip cho 2 SLAVE #define SS2 pin_C2 //********************************* int8 data,i,j; //********************************* void change_data() //dich tung bit trong bien data { i++; if(i<=8)data=(data<<1) ; //dich 8 lan gia tri cua data else { data=0x01; j=1; } } void send_data() //gui du lieu den SLAVE { while(1) { spi_write(data); change_data(); delay_ms(100); //Tao tre giua 2 lan truyen if (j==1) break; //sau 8 lan quet de truyen du lieu den SLAVE ,thoat khoi vong lap } } void main() { data = 0x01; //gia tri dau cua bien data set_tris_c(0); set_tris_e(0); setup_spi( SPI_MASTER | SPI_L_TO_H|spi_clk_div_16 ); delay_ms(100); While(1) { output_low(SS1); //chon SLAVE 1 de gui du lieu output_high(SS2); send_data(); j=0; i=0; output_low(SS2); //chon SLAVE 2 de gui du lieu output_high(SS1); send_data() ; j=0; i=0; } } //******************************* http://www.mediafire.com/?85a3byc85v2ag4h
__________________
My blog: http://autumnneverreturn.blogspot.com/ Đối thủ khó chiến thắng nhất là bản thân !!! thay đổi nội dung bởi: hcmut.khoamaisi, 23-03-2011 lúc 12:28 AM. |
|
|