![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#12 |
Đệ tử 5 túi
Tham gia ngày: May 2007
Bài gửi: 102
: |
em cấu hình như sau:
1/ giao tiếp spi//////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////////////////////////////////// em làm giao tiếp spi giữa con master là dspic30f4011, slave là dspic33fj256gp710. chỉ đơn giản là con master truyền liên tục các số từ 0-255, và slave sẽ nhận tín hiệu dạng word và hiển thị lên LCD, em cấu hình sao mà mãi mạch vẫn chưa chạy được anh à. con master có lẽ là được rồi, còn con slave vẫn chưa nhận được . em cấu hình như sau: em có dùng chân B0 của master để điều khiển chân SS của con slave - con master: ////////////////////////////////////////////////////////////////// Code:
void khoi_tao_SPI1_master(void)//cke=1 ckp=0 { //port master _TRISF3=0;//sdo1 _TRISF2=1;//sdi1 _TRISF6=0;//sck1 _TRISB0=0;//chon vao ss #define SS _LATB0 //SPI1STAT SPI1STATbits.SPIEN=0;//tam thoi khoa SPI1STATbits.SPISIDL=0;//tiep tuc khi IDLE SPI1STATbits.SPIROV=0;//ko overflow //SPI1STATbits.SPITBF=0;//su day bo truyen, readonly //SPI1STATbits.SPIRBF=1;//1 la day,readonly //SPI1CON SPI1CONbits.FRMEN=0;// ko dung Frame, SPI1CONbits.SPIFSD=0;//xung output cho master SPI1CONbits.DISSDO=0;//sdo la dung cho spi SPI1CONbits.MODE16=1;//dung data16bit SPI1CONbits.SMP=0;//middle sample SPI1CONbits.CKE=0;//clock tu active-idle- SPI1CONbits.SSEN=0;//SS dung cho slave SPI1CONbits.CKP=0;//idle=0,active=1 SPI1CONbits.MSTEN=1;//master mode SPI1CONbits.SPRE=0;//master mode only SPI1CONbits.PPRE=1;//master mode only//120khz //start SPI1STATbits.SPIEN=1;//khoi dong SPI } void ghi_spi1(unsigned int data)//nho pai co ss { int temp; SS=0; temp=SPI1BUF; if(SPI1CONbits.MODE16) { SPI1BUF=data;LATE=SPI1BUF; } else { SPI1BUF=data&0xFF;LATE=SPI1BUF; } while(SPI1STATbits.SPITBF);//cho den khi gui xong SS=1; } Code:
void khoi_tao_SPI1_slave(void)//cke ckp=0 { //port slave _TRISF8=0;//sdo1 _TRISF7=1;//sdi1 _TRISF6=1;//sck1 _TRISB2=1;//ss1 _SPI1IF=0; _SPI1IE=1; _SPI1IP=7; //SPI1STAT SPI1STATbits.SPIEN=0;//tam thoi khoa SPI1STATbits.SPISIDL=0;//tiep tuc khi IDLE SPI1STATbits.SPIROV=0;//ko overflow //SPI1STATbits.SPITBF=0;//su day bo truyen, readonly //SPI1STATbits.SPIRBF=1;//1 la day,readonly //SPI1CON1 //SPI1CON1bits.DISSCK=1;//enable xung sck(chi cho master) SPI1CON1bits.DISSDO=0;//sdo la dung cho spi SPI1CON1bits.MODE16=1;//dung data16bit SPI1CON1bits.SMP=0;//slave mode pai la 0 SPI1CON1bits.CKE=0;//clock tu active-idle- SPI1CON1bits.SSEN=1;//SS dung cho slave SPI1CON1bits.CKP=0;//idle=0,active=1 SPI1CON1bits.MSTEN=0;//slave mode //SPI1CON1bits.SPRE=8;//master mode only //SPI1CON1bits.PPRE=//master mode only //SPI1CON2 SPI1CON2bits.FRMEN=0;// ko dung Frame, SPI1CON2bits.SPIFSD=1;//xung input cho slave SPI1CON2bits.FRMPOL=1;//active high cho frame SPI1CON2bits.FRMDLY=0;//xung dong bo khung truoc bit clock dautien SPI1BUF=0; //start SPI1STATbits.SPIEN=1;//khoi dong SPI } unsigned int doc_spi1(void) { while(!SPI1STATbits.SPIRBF){LCD_gotoxy(1,1);LCD_write_string("treo");}/// trên LCD cho biết là con slave bị dừng ở đây không thoát đi được if(SPI1STATbits.SPIRBF) { SPI1STATbits.SPIROV=0; if(SPI1CON1bits.MODE16) { return(SPI1BUF);//word } else { return(SPI1BUF&0xFF);//byte } } return -1; }
__________________
Thật bó tay! thay đổi nội dung bởi: namqn, 14-09-2009 lúc 06:49 PM. Lý do: định dạng code |
![]() |
![]() |
Tags |
dspic30f spi, led matrix |
Ðiều Chỉnh | |
Xếp Bài | |
|
|