📄 mcu.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 + -