View Single Post
Old 23-03-2011, 12:22 AM   #5
hcmut.khoamaisi
Đệ tử 4 túi
 
hcmut.khoamaisi's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TPHCM
Bài gửi: 79
:
Send a message via Yahoo to hcmut.khoamaisi
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;
}
}
//*******************************
link mô phỏng và cả project:
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.
hcmut.khoamaisi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn