?? spi._c
字號(hào):
#include <iom48v.h>
#include <macros.h>
#define uint unsigned int
#define ulong unsigned long
#define uchar unsigned char
#define clk PD0//AD_clk
#define data_IO PD1//AD數(shù)據(jù)輸入輸出口
#define cs PD2//AD片選
#define IO_DDR DDD1//數(shù)據(jù)讀入讀出口
#define IO_PIN PIND
//#define clk_s PD3
//#define ss_s PD4
//#define data_s PD5
//#define data_sPIN PIND5
//#define data_sDDR DDD5
void spisend(uchar data)//寫(xiě)入
{
uchar i;
//IO_DDR=1;
DDRD |= 0x02;
//clk=0;
PORTD &= 0xfe;
for(i=8;i>0;i--)
{
if ((data&0x01)==1)
{
//data_IO=1;
PORTD |= 0x02;
}
else
//data_IO=0;
PORTD &= 0xFD;
_NOP();
//clk=1;
PORTD |= 0x01;
//_NOP();
//clk=0;
PORTD &= 0xfe;
data>>=1;//右移一位
}
}
uchar spiread(void) //讀取
{
uchar i;
uchar data=0x00;
uchar temp;
IO_DDR=0; //IO口作為輸入,DDR要寫(xiě)0
//ss_r=0;
clk=0;
for(i=0;i<8;i++)
{
clk=1;
clk=0;
temp=IO_PIN;
if (temp&0x02) //下降沿采集數(shù)據(jù),調(diào)換則會(huì)出錯(cuò)
data|=(0x01<<i);
}
IO_DDR=1;
//ss_r=1; //讀完數(shù)據(jù)后,SS拉高,同時(shí)時(shí)鐘拉高一次,上升沿重新置數(shù)
clk=1;
return(data);
}
void main(ulong spidata)
{
uint i,j;
uchar data[4]={0,0,0,0};
uchar instrution[2]={0,0};
/*PORTA="0x00"; //燈指示
DDRA="0XFF";
PORTB="0x00";//0101 0000
DDRB="0x07";//0000 0111接口作為模擬SPI口輸出接口要寫(xiě)1
PORTC="0x00";
DDRC="0x80";
DDRD="0xff";//0000 0001
PORTD="0x00";*///0100 1000
cs = 0;
for(i=0;i<2;i++)
{
spisend(instrution[i]);
}
if(instrution[0]&0x8000)
{
for(j=0;j<4;j++)
{
data[j]=spiread();
}
}
else {
for(j=0;j<4;j++)
{
spisend(data[i]);
}
}
cs = 1;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -