⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m16spi.c

📁 GCC-AVR application builder : 2007-8-31 18:00:11 Target : M16 Crystal: 7.3728Mhz 作者:小马哈 功能:SP
💻 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 + -