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

📄 备份spi_send_ok.c

📁 c8051f221的SPI总线通信(发)
💻 C
字号:
/*************************************************
//spi communication (正式版) 
//design by zhixing_yuan 7.6.2006
//mcu type:c8051f221
//i/o define:nss:p2.3; sck:p2.0; mosi:p2.2; miso:p2.1; /int0 p0.2
//led footpint: data--p1.0--p1.6  choose--p0.3--p0.7 对从机NSS脚p0.0
//function:每次数据包括5个字节组成一贞数据,DATA ID,DATA0,DATA1,DATA2,CHECKSUM(校验和),数据将通过SPI发送与接收
//描述:函数里面:SPI0CKR所测能有效最低值4,发送一个字节数据要四十多个时钟其中DELAY要20个时钟左右,才能稳定,传输的波特率达到标准
*************************************************/
	#include <c8051f200.h>
	#include <intrins.h>
	#define uchar unsigned char 
	#define size 5 
	sbit NSS=P2^3;
	sbit EN=P0^2;
	uchar spi_index;
	uchar spi_Data[size];
	uchar fos_holdtime;
	uchar DataID,Data0,Data1,Data2,CheckSum;
	uchar spi_Receivedata;
/************************************
//名称:delay()
//功能: 延时小程序
//输入:无
//返回:无
************************************/
	void delay(void)
{
	uchar i;
	for(i=0;i<4;i++) 
	{_nop_();
	}
}
/**********************************************
//名称:System_init()
//功能:系统初始化函数
//输入:无
//返回:无
**********************************************/
	void System_init(void)
{
	PRT0MX = 0x04;				//INT0 routed to Port Pin
	PRT1MX = 0x00;
	PRT2MX = 0x01;				//Weak Pull-ups Disabled,SPI Bus I/O Enable
	
	PRT0CF = 0x0ff;				//IO口为推挽输出
	PRT1CF = 0x0ff;
	PRT2CF = 0x0ff;
	
	P0MODE = 0x0ff;				//输入使能
	P1MODE = 0x0ff;
	P2MODE = 0x0ff;
	
	OSCXCN = 0x67;			//起动外部时钟   
	for(fos_holdtime=0;fos_holdtime<250;fos_holdtime++)			//等待1MS以上的时间
	{
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	delay();
	}

	
    while (!(OSCXCN & 0x80));		//等待起振
    OSCICN = 0x08;			//使用外部时钟

	EA = 0;						//看门狗——关
	WDTCN = 0x0de;
	WDTCN = 0x0ad;				//disable WDTz
	
	IE = 0x00;				//关中断
	EIE1 = 0x00;			//禁止SPI中断
	EIE2 = 0x00;			//禁止其他多余中断
//	IE = 0x01;				//只开int0
//	EA = 1 ;
	
	SPI0CFG = 0x47;			//CKPHA=0,CKPOL=1,8位帧长
	SPI0CN  = 0x03;			//使能SPI总线,设为主端
	SPI0CKR = 0x4;			//SPI时钟选0
	NSS = 0x01	;				//disable nss
}
/*******************************************
//名称:SPI_send_data()
//功能:SPI总线发送数据
//输入:8位的数据
//返回:读取的数据
*******************************************/
	SPI_send_data(uchar data_to_send)
{	
//	NSS = 0;							//pull low nss
	EN=0;
	NSS = 0x01;
	NSS = 0x01;
	NSS = 0x01;
	SPI0DAT =data_to_send;			//send data
	while (SPIF == 0);				//wait for spif set '1'
	while(TXBSY);
	
	SPIF=0;	
	EN=1;
	
	}
/*******************************************
//主程序
*******************************************/

	void main(void) 
{   uchar  changer;		//biaoliang
	System_init();
	spi_Data[0]=0;
	spi_Data[1]=1;
	spi_Data[2]=2;
	spi_Data[3]=4;
	spi_Data[4]=0;
	while(1)
	{
	for(changer=1;changer<4;changer++)
	 {
	  

	SPI_send_data(changer);
	delay();			//延时二十个时钟左右

	}


	}
}


⌨️ 快捷键说明

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