你试试下面的代码
- #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);
- }
|