📄 备份spi_send_ok.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 + -