你试试下面的代码
#define uint unsigned int
#define uchar unsigned char
#define SPIF 7
#define ss 4 // PB4
#define mosi 5 // PB5
#define sck 7 // PB7
void spi_init() // 初始化
{
DDRB |= (1 << mosi) | (1 << sck) | (1 << ss); // 设置MOSI, SCK, SS为输出
PORTB |= (1 << ss); // SS引脚初始化为高电平
SPSR = 0x00; // 状态寄存器清零
SPCR = 0x50; // 主机模式,时钟速率为fosc/16
}
void DAC_TLV5618(uint temp)
{
PORTB &= ~(1 << ss); // 拉低SS引脚
SPDR = (uchar)((temp & 0xff00) >> 8); // 发送高字节
while (!(SPSR & (1 << SPIF))); // 等待传输完成
SPDR = (uchar)(temp & 0x00ff); // 发送低字节
while (!(SPSR & (1 << SPIF))); // 等待传输完成
PORTB |= (1 << ss); // 拉高SS引脚
}
void main()
{
spi_init();
DAC_TLV5618(0x4800); // 发送数据到DAC
while (1);
}
|