📄 c8051spi.c
字号:
void AD_READ(void) //读AD数据
{ unsigned char temp,clear;
unsigned int i,ad1,ad2,ad0;
SELECT_AD; //选通AD芯片
SPDR = 0x00; //指令通道0
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
SPDR = 0x00;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp = SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x08;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad0=(unsigned int)(temp*256)+clear;
SPDR = 0x08; //指令通道1
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp=SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x10; //指令通道2
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad1=(unsigned int)(temp*256)+clear;
SPDR = 0x10;
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
temp=SPDR;
NOSELECT_AD;
SELECT_AD; //选通AD芯片
SPDR = 0x00; //指令通道0
while (!(SPSR&(1<<SPIF)));
clear = SPSR;
clear = SPDR;
ad2=(unsigned int)(temp*256)+clear;
SPDR = 0x00;
while (!(SPSR&(1<<SPIF)));
NOSELECT_AD;
}
void portini(void) //SPI端口初始化
{
XBR0=0X02;
XBR1=0X40;
P0MDOUT=0X00;
}
void spiini(void) //设置3线SPI使能和SPI串口时钟频率为了和cs5463兼容
{
SPI0CKR=sysclk/(2*Fsck)-1;
SPI0CFG=0x47; //CKPHA CKPOL BC2 BC1 BC0 SPIFRS2 SPIFRS1 SPIFRS0
//时钟相位 时钟极性 指示发送到几位 数据帧有几位
//
//
SPI0CN=0x03; //SPIF WCOL MODF RXOVRN TXBSY SLVSEL MSTEN SPIEN
//SPI中断标志 写冲突标志 方式错误 接收溢出 发送忙 从选择 主方式使能 SPI使能
//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -