⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi_slave.c

📁 c8051f系列单片机的SPI 并行/串行通信源程序 Cygnal出的一种混合信号系统级单片机。片内含CIP-51的CPU内核
💻 C
字号:
/////SPI调试程序//////////
/////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配置函数
	 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; 
	/*交叉开关配置,SPI总线SCK配置到P0.0口,为开漏输出;MISO为P0.1口,开漏输出;MOSI为P0.2口,推挽输出,NSS为P0.3口*/
    SFRPAGE = 0x0F;
    CLKSEL = 0x00;  
    OSCXCN = 0x00;	
    OSCICN = 0x84;	
    //采用内部晶振,为24.5MHZ8分频
}   //End of config
void main(){
	config();
	spi_cfg(0x10,0x2d,0x05);
	/*
	SPI0CFG = 0x10;	// SCK高电平空闲,从机模式,其他设置与主机相同
	SPI0CKR = 0x2D;	// 从机的SCK时钟对SPI总线无影响
    SPI0CN = 0x05;		// 4线制从机模式,SPIEN为1
	*/
	EA=1;
	k=0;
	while(1){
		SFRPAGE=0x00;
		if(SPIEN==0)
			k=0;//可在此设断点观察接收数组与主机发送数组是否一致
	}	
}
void spi_ISR() interrupt 6{
	SFRPAGE=0x00;//此代码可省略,SFRPAGE能自动跳转到中断标志位所在页
	rr[k]=SPI0DAT;
//程序中尚未考虑接收溢出等情况,对于双机通讯暂无影响
	SPI0DAT=aa[k];
//全双工通讯,所以接收的同时,可将发送的数据写入发送缓冲区
//在下一次接收过程中将发送缓冲区的数据发送出去。
	k++;
	if(k>=6)
		SPIEN=0;//接收7个数据
	SPIF=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -