?? 備份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 + -