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

📄 init.c

📁 我写的atmega16驱动的nrf24l01程序
💻 C
字号:
//ICC-AVR application builder : 2006-11-14 8:40:20
// Target : M16
// Crystal: 8.0000Mhz

#include <iom16v.h>
#include <macros.h>

void port_init(void)
{
	PORTB = 0xEF; 
	DDRB  = 0xbb;//10111011;
	
	PORTC = 0xFF; 
	DDRC  = 0xfe;
	PORTD = 0xFe;
	DDRD  = 0xfa;//0x02;
}
//--------------------------------------------------------
//--------------------------------------------------------


//--------------------------------------------------------
//--------------------------------------------------------
//Watchdog initialisation
// prescale: 16K cycles
void watchdog_init(void)
{
	WDR(); //this prevents a timout on enabling
	WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//--------------------------------------------------------
//--------------------------------------------------------


//--------------------------------------------------------
//--------------------------------------------------------
void SPI_MasterInit(void)
{
	SPI_PORT |= (1<<nrfCE);
	_NOP();_NOP();_NOP();
	SPI_DDR |= (1<<SpiMosi)|(1<<SpiSck)|(1<<nrfCE);		//设置MOSI、SS 和SCK 为输出 
	SPI_DDR &= ~(1<<SpiMiso);					//设置MISO 为输入 
	SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);		//使能SPI 主机模式,设置时钟速率为fck/16=500kHz,MSB first
}
//--------------------------------------------------------
//--------------------------------------------------------


//--------------------------------------------------------
//--------------------------------------------------------
//call this routine to initialise all peripherals
void InitInterrupt(void)
{	
	UBRRH = 0x80;			
	UCSRC=0x86;
	UBRRL=0xcf;
	UCSRC=0x86;										//定义串口 8位数据位置 异步通讯
	UBRRL=0xcf;										//定义波特率 在8M时钟情况下 0xcf 2400波特
													//4800波特 0x67
	UCSRA=0x20;										//UCSRA:USART Control and Status A 清除接收寄存器
	UCSRB=0xd8;										//UCSRB:USART Control and Status B
													//允许接收及发送中断,接收使能 发送使能
	UBRRH = 0x80;			
	UCSRC=0x86;
	UBRRL=0xcf;
	
	TCCR0 = 0x00;									//定时器0溢出值初始化 0.5豪秒中断一次
 	TCNT0 = 0x82;
 	TCCR0 = 0x03;									//定义时钟32分频
 	
 	TCCR1B = 0x00;									//定时器1溢出值初始化 2豪秒中断一次
 	TCNT1H = 0xf8;
 	TCNT1L = 0x2f;
 	TCCR1A = 0x00;
 	TCCR1B = 0x02;									//定义时钟8分频
 	
	MCUCR = 0x02;
	GICR=0x40;										//不允许INT1 INT2 ,允许INT0 
 	TIMSK=0x05;										//TIMER0 及 TIMER1溢出中断使能
}
//--------------------------------------------------------
//--------------------------------------------------------


//--------------------------------------------------------
//--------------------------------------------------------
void init_devices(void)
{
//stop errant interrupts until set up
	CLI(); //disable all interrupts
	port_init();
	watchdog_init();
	InitInterrupt();
	
	MCUCR = 0x02;
//	GICR  = 0x00;
	TIMSK = 0x05; //timer interrupt sources
	SEI(); //re-enable interrupts
//all peripherals are now initialised
}
//--------------------------------------------------------
//--------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -