📄 spi._c
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
#include <BIT.h>
#define uchar unsigned char
#define uint unsigned int
#define CSN _PB0
#define SCK _PB1
#define MOSI _PB2
#define MISO READ_PB3
/*#define BYTE_BIT0 0x01
#define BYTE_BIT1 0x02
#define BYTE_BIT2 0x04
#define BYTE_BIT3 0x08
#define BYTE_BIT4 0x10
#define BYTE_BIT5 0x20
#define BYTE_BIT6 0x40
#define BYTE_BIT7 0x80
uchar DATA_BUF;
#define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
#define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
/*从最高位到最低位依次是:hafc debg
uchar table[]=//这个译码数组0、123467已经改好了! by张强
//589也已改好 lly
{0x7e, 0x12, 0x4f,0x5b
,0x33, 0x79, 0x7d, 0x52,
0x7f,0x7b};//段选编码*/
/*******************************************
函数名称: delayus
功 能: 延时指定微秒(8.31M晶振)
参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值 : 无
/*******************************************
void delayus(uint us)
{
uint i;
us=us*13/10; //13/10是在8.31MHz晶振下,通过软件仿真反复实验得到的数值
for( i=0;i<us;i++);
} */
/*******************************************
函数名称: delay()
功 能: 8.31MHz晶振下延时 z ms
参 数: z
返回值 : 无
/********************************************/
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1185;y>0;y--);
}
void SpiInit(void)
{
DDRA=0XFF;
DDRB|=BIT(0)|BIT(1)|BIT(2);
DDRB&=~BIT(3);
PORTB|=BIT(3);
CSN=1; // Spi disable
SCK=0; // Spi clock line init low
}
/*
unsigned char SpiRead(void)
{
unsigned char i;
for (i=0;i<8;i++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
//OED&=0XFD; // DATA=1; //设置为输入状态
if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
//OED|=0X02;
SCK=0;
}
return DATA_BUF;
}
void SpiWrite(unsigned char send)
{
unsigned char i;
DATA_BUF=send;
for (i=0;i<8;i++)
{
if (DATA7) //总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
*/
void main()
{
uint num;
SpiInit();
PORTA=0X55;
while(1)
{
if(MISO==0)
{
num++;
}
PORTA=num;
delayms(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -