📄 m16spi.c
字号:
//GCC-AVR application builder : 2007-8-31 18:00:11
// Target : M16
// Crystal: 7.3728Mhz
// 作者:liuweiran
// 根据古欣的程序改
// 功能:SPI主机模式,循环发送从1~255
#include <avr/io.h>
//SPI initialize
void spi_init(void)
{
PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); //
DDRB |= (1<<DDB5) | (1<<DDB7) | (1<<DDB4); //Set MOSI, SCK AND SS as outputs
SPCR = 0x73; //SPI使能,低位首发,主机模式,时钟模式00,上升沿采样;时钟速率Fosc/128
SPSR = 0x00; //SPI2x=0
}
void init_devices(void)
{
spi_init();
}
void SPI_MasterTransmit(char cData)
{
PORTB &=~ (1<<PB4); //强制接收方进入从模式
SPCR |= (1<<MSTR); // MSTR有时会被清零,这里强制进入主机模式
PORTB&=~0x10;
//asm("nop");
asm("nop");
/* 启动数据传输 */
SPDR =cData;
/* 等待传输结束 */
while(!(SPSR & (1<<SPIF)))
asm("nop");
PORTB |= (1<<PB4);
}
void Delay(void) //
{
volatile unsigned int i,j;
for(i=500;i>0;i--)
{
for(j=200;j>0;j--)
;
}
}
int main(void)
{
unsigned int i=0;
init_devices();
while(1)
{
for(i=0;i<255;i++)
{
SPI_MasterTransmit(i);
Delay();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -