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

📄 mcu.c

📁 ATmega128L+CC2420的单片机源程序
💻 C
字号:
#include <mega128.h>
#include <spi.h>
#include "mcu.h" 
#include <string.h>


char rx_buffer0[RX_BUFFER_SIZE0];

#if RX_BUFFER_SIZE0<256
unsigned char rx_counter0;
#else
unsigned int rx_counter0;
#endif

bit rx_buffer_overflow0;     // This flag is set on USART0 Receiver buffer overflow



/***********************************************
* 串口0初始化函数
************************************************/
void USART0_Init(void)
{
    // 以下是8M晶振时的参数设置
    // USART0 initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART0 Receiver: On
    // USART0 Transmitter: On
    // USART0 Mode: Asynchronous
    // USART0 Baud rate: 9600
    
    UCSR0A=0x00;
    //接收器、发生器和接收中断使能    
    UCSR0B=0x98;
    //设置帧格式:8 Data, 1 Stop, No Parity
    UCSR0C=0x06;
    //设置波特率
    UBRR0H=0x00;
    UBRR0L=0x33;
}
 

/***********************************************
* 字符发送函数
* 发送采用查询方式
************************************************/
void USART0_Send_Char(unsigned char data)  //发送采用查询方式
{
    while(!(UCSR0A&(1<<UDRE))); // 等待发送缓冲器为空
    UDR0 = data;// 将数据放入缓冲器,发送数据
}

 
/***********************************************
* 字符串发送函数
* 发送采用查询方式
************************************************/ 
void USART0_Send_Str(unsigned char *ptr)
{
	while (*ptr)
	{
		USART0_Send_Char(*ptr++);
	}
	//USART0_Send_Char(0x0D);
	//USART0_Send_Char(0x0A);  //结尾发送回车换行
}


/***********************************************
* 字符接收函数
* 接收采用查询方式
************************************************/
unsigned char USART0_Receive_Char(void)
{
    while ( !(UCSR0A & (1<<RXC)) );   // 等待接收数据
    return UDR0; // 从缓冲器中获取并返回数据
}


/***********************************************
* 刷新接收缓冲器函数(缓冲器被清空)
************************************************/
void USART0_Flush(void)
{
    unsigned char dummy;
    while ( UCSR0A & (1<<RXC) ) dummy = UDR0;
}


/***********************************************
* 清空串口缓冲区函数
************************************************/
void USART0_Clear_rx_buffer0(void)
{
    memset(rx_buffer0,'',sizeof(rx_buffer0)); 
    rx_counter0=0;
}



       
/***********************************************************************************************
* Mega128端口初始化函数
************************************************************************************************/
void PORT_Init(void)
{
    DDRB |= (1<<RLED)|(1<<GLED); 
    DDRD |= (1<<WLED);
    DDRE |= (1<<RLED2)|(1<<RLED3);
    PORTD |= (1<<KEY1);     //按键接口 输入高
    PORTE |= (1<<KEY2)|(1<<KEY3);
    
    DDRC = 0x00;
    PORTC = 0xFF;
}


/***********************************************************************************************
* SPI初始化函数
************************************************************************************************/
void SPI_Init(void)
{
    unsigned char temp;
    /* 设置SS、SCK和MOSI为输出,其他为输入 */
    DDRB |= (1<<CSN)|(1<<SCK)|(1<<MOSI);
    PORTB |= (1<<CSN);    
    /* 设置SPI主机模式,设置时钟速率为fck/16 */ 
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
        
    SPSR = 0x00;
    temp = SPSR;
    temp = SPDR; //清空SPI和中断标志,使SPI空闲  
}   



void Sleep(void)
{
    MCUCR = 0x30;     //掉电模式
    #asm("sleep") 
}

⌨️ 快捷键说明

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