?? uart._c
字號:
/********************************************************************
* 函數庫說明:RS232總線驅動函數庫 *
* 版本說明: 1.0 Bate *
* 作者: andylee *
* 日期: 2006年7月 *
* 平臺: mega16 16M *
* 說明: 為上層提供RS232的基本讀寫函數 *
********************************************************************/
#include "uart.h"
#include "can.h"
unsigned char uart_b0_flag=0; //降壓標志
unsigned char uart_b8_flag=0; //停止充電標志
unsigned char uart_normal_flag=0; //正常
unsigned char uart_alarm_flag=0; //報警
/*************************************
* 函數說明:串口接收中斷 *
* 輸入:無 *
* 輸出:無 *
************************************/
#pragma interrupt_handler RX_ISR:12
void RX_ISR(void)
{
unsigned char sreg;
unsigned char comm_tempRec;
unsigned int i;
unsigned char sreg;
sreg=SREG; //保存全局中斷標志
CLI();
comm_tempRec=UDR;
if(comm_tempRec==0xb0)//表示降電壓
{
uart_b0_flag=1;
uartSendByte(comm_tempRec);
}
if(comm_tempRec==0xb8)//表示停止充電
{
uart_b8_flag=1;
uartSendByte(0xb8);
}
if(comm_tempRec==0xf0)//正常
{
uart_normal_flag=1;
uartSendByte(comm_tempRec);
}
if(comm_tempRec==0xa0)//報警
{
uart_alarm_flag=1;
uartSendByte(comm_tempRec);
}
SREG=sreg;
SEI();
}
/*************************************
* 函數說明:波特率設置函數 *
* 輸入:波特率 *
* 輸出:無 *
*************************************/
void uartSetBaudRate(unsigned long baudrate)
{
unsigned int baudratDiv;
baudratDiv = (F_CPU/(baudrate*16L)-1);
UBRRH=(unsigned char)(baudratDiv>>8);
UBRRL=(unsigned char)baudratDiv;
}
/*************************************
* 函數說明:串口化函數 *
* 輸入:無 *
* 輸出:無 *
*************************************/
void uartInit(void)
{
//enable RxD/TxD and interrupts
UCSRB=(1<<RXCIE)|(0<<TXCIE)|(1<<RXEN)|(1<<TXEN);
//設置波特率
uartSetBaudRate(UART_DEFAULT_BAND_RATE);
//設置幀格式: 8 個數據位, 2 個停止位
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
/************************************
* 函數說明:查詢方式發送一個字節 *
* 輸入:無 *
* 輸出:無 *
*************************************/
void uartSendByte(unsigned char txData)
{
while(!(UCSRA&(1<<UDRE)));
// send byte
UDR=txData;
}
/*************************************
* 函數說明:串口接收例程 *
* 輸入:無 *
* 輸出:接受到的數據 *
*************************************/
unsigned char uartReceiveService(void)
{
unsigned char c;
c=UDR;
uartSendByte(c);
return UDR;
}
/*************************************
* 函數說明:查詢方式串口接收例程 *
* 輸入:無 *
* 輸出:無 *
*************************************/
unsigned char uart_receive( void )
{
unsigned char c;
/* 等待接收數據*/
while ( !(UCSRA & (1<<RXC)) )
{
//rst_wdog();
}
/* 從緩沖器中獲取并返回數據*/
c=UDR;
//uartSendByte(c);
return c;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -