?? spi_slave.c
字號(hào):
/////SPI調(diào)試程序//////////
/////SPI_slave.c//////////////
#include <C8051F040.h>
typedef unsigned char uchar;
typedef unsigned int uint;
xdata uchar aa[6]={0x31,0x32,0x33,0x34,0x35,0x36};
xdata uchar rr[6];
xdata uchar k;
xdata uchar t;
enum {aalen=6};
void delay1ms(uint time){//延遲1ms
uint i;
uint j;
for (i=0;i<time;i++){
for(j=0;j<300;j++);
}
}
void spi_cfg(uchar spicfg,uchar spickr,uchar spicn){//SPI配置函數(shù)
SFRPAGE = 0x00;
SPI0CFG = spicfg;
SPI0CKR = spickr;
SPI0CN = spicn;
SFRPAGE = 0x0F;
EIE1|= 0x01;
}
void config (void) {
WDTCN = 0x07; //看門狗禁止
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
XBR0 = 0x02;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x00;
P0MDOUT = 0x0c;
/*交叉開關(guān)配置,SPI總線SCK配置到P0.0口,為開漏輸出;MISO為P0.1口,開漏輸出;MOSI為P0.2口,推挽輸出,NSS為P0.3口*/
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
//采用內(nèi)部晶振,為24.5MHZ8分頻
} //End of config
void main(){
config();
spi_cfg(0x10,0x2d,0x05);
/*
SPI0CFG = 0x10; // SCK高電平空閑,從機(jī)模式,其他設(shè)置與主機(jī)相同
SPI0CKR = 0x2D; // 從機(jī)的SCK時(shí)鐘對(duì)SPI總線無影響
SPI0CN = 0x05; // 4線制從機(jī)模式,SPIEN為1
*/
EA=1;
k=0;
while(1){
SFRPAGE=0x00;
if(SPIEN==0)
k=0;//可在此設(shè)斷點(diǎn)觀察接收數(shù)組與主機(jī)發(fā)送數(shù)組是否一致
}
}
void spi_ISR() interrupt 6{
SFRPAGE=0x00;//此代碼可省略,SFRPAGE能自動(dòng)跳轉(zhuǎn)到中斷標(biāo)志位所在頁
rr[k]=SPI0DAT;
//程序中尚未考慮接收溢出等情況,對(duì)于雙機(jī)通訊暫無影響
SPI0DAT=aa[k];
//全雙工通訊,所以接收的同時(shí),可將發(fā)送的數(shù)據(jù)寫入發(fā)送緩沖區(qū)
//在下一次接收過程中將發(fā)送緩沖區(qū)的數(shù)據(jù)發(fā)送出去。
k++;
if(k>=6)
SPIEN=0;//接收7個(gè)數(shù)據(jù)
SPIF=0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -