?? 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 + -