?? uart.c
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: Uart.C
* 文件標識: none
* 適用器件: C8051F020
*
* 摘 要: uart0和uart1工作在8位,可變波特率異步方式下.可修改頭文件改變UART工作.
*
* 當前版本:1.1
* 作 者:劉大偉
* 完成日期:2006年12月12日
*
* 歷史版本:1.0
* 作 者:盧 陽
* 完成日期:2004年11月14日
*
* 歷史版本:0.9
* 原作者 : 李林利
* 完成日期:2004年7月1日
*************************************************************************************/
/***************************引用外部頭文件*******************************************/
#include "c8051f020.h"
#include "uart.h"
/************************************************************************************/
/*************************************************************************************
* 函數名稱:Uart0_Init;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:unsigned char類型,發送數據波特率;
*
* 返回數據:none;
*
* 注意: 具體模式設置查看UART.H文件;
*************************************************************************************/
void Uart0_Init (unsigned char BaudRate) //Uart0初始化
{
TMR1_Stop; // 關閉定時器Timer1,串口0停止工作
TMR1_Uart0AppSet; // 關閉定時器Timer1中斷,關閉定時器Timer1中斷優先權
T1_MODSet; // TMOD: 定時器1模式設置
Uart0_ModSet; // SCON0: 串口工作模式設置
if (BaudRate>=BaudRate_4800)
{
CKCON |= 0x10; // 定時器Timer1使用系統時鐘作為時間基準
TH1 = -(SYSCLK/1200/(BaudRate*16)); // 設置定時器Timer1重載值
}
else
{
CKCON &= ~0x10; // 定時器Timer1使用系統時鐘作為時間基準
TH1 = -(SYSCLK/1200/(BaudRate*16*12)); // 設置定時器Timer1重載值
}
Uart0_IntClose; // 關閉串口Uart0中斷,中斷優先權
TI0 = 1; // Indicate TX0 ready
RI0 = 0; // Indicate RX0 ready
TMR1_Start; // 打開定時器Timer1,串口0開始工作
}
/***********************************************************************************
* 函數名稱:Uart0_Enable;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:bool類型,打開輸入1;關閉輸入0;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_Enable (unsigned char Flag)
{
if (Flag)
TMR1_Start; // 打開串口Uart0
else
TMR1_Stop; // 關閉串口Uart0
}
/***********************************************************************************
* 函數名稱:Uart0_SendByte;
*
* 函數功能描述:Uart0發送字符;
*
* 輸入參數:unsigned char類型,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_SendByte (unsigned char value)
{
while (!TI0); // 等待發送1個字節數據完成
SBUF0=value; // 發送數據到uart0
TI0=0; // 清除中斷標志
}
/***********************************************************************************
* 函數名稱:Uart0_SendString;
*
* 函數功能描述:Uart0發送字符串;
*
* 輸入參數: unsigned char類型指針,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_SendString (unsigned char *pt)
{
while (*pt)
{
Uart0_SendByte (*pt++);
}
}
/***********************************************************************************
* 函數名稱:Uart0_ReceiveData;
*
* 函數功能描述:Uart0接收數據;
*
* 輸入參數:none;
*
* 返回數據:unsigned char類型,接收數據;
*
* 注意: none;
************************************************************************************
unsigned char Uart0_ReceiveData (void)
{
if (RI0)
{
SCON0&=~0x01; // 清除RI1標志位
return SBUF0;
}
return 0xff;
}
/***********************************************************************************
* 函數名稱:Uart1_Init;
*
* 函數功能描述:Uart1初始化;
*
* 輸入參數:unsigned char類型,發送數據波特率;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_Init (unsigned char BaudRate) //Uart0初始化
{
T4CON&=~0x04; // 關閉定時器Timer4
EIE2&=~0x04; // 關閉Timer4中斷
EIP2&=~0x04; // 關閉Timer4中斷優先級
T4CON=0x30; // 工作模式2: TX,RX 波特率模式
PCON|=0x10; // 電源控制寄存器, SMOD=1,BaudRate
SCON1=0x52; // SCON0:模式1, 8字節UART, 打開RX, TI1=1,RI1=0
CKCON |= 0x40; // Uart1使用SYSCLK/2作為時間基準
RCAP4H = (65536-(SYSCLK/1200/(BaudRate*32)))/256;
RCAP4L = (65536-(SYSCLK/1200/(BaudRate*32)))%256;
// 設置定時器Timer4重載值, Uart1_CLK=SYSCLK/2
EIE2&=~0x40; // 關閉Uart1中斷
EIP2&=~0x40; // 關閉Uart1中斷優先級
T4CON|=0x04; // 打開Uart1
}
/***********************************************************************************
* 函數名稱:Uart1_Enable;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:bool類型,打開輸入1;關閉輸入0;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_Enable (unsigned char Flag)
{
if (Flag)
T4CON|=0x04; // 打開Uart1
else
T4CON&=~0x04; // 關閉Uart1
}
/***********************************************************************************
* 函數名稱: Uart1_SendString;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:unsigned char類型指針,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_SendString (unsigned char *pt)
{
while(*pt)
{
Uart1_SendByte(*pt++);
}
}
/***********************************************************************************
* 函數名稱:Uart1_SendByte;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:unsigned char類型指針,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_SendByte (unsigned char value)
{
while(!(TI1)); // 等待發送1個字節數據完成
SBUF1=value; // 發送數據到uart1
SCON1&=~0x02; // 清除中斷標志
}
/***********************************************************************************
* 函數名稱:Uart1_ReceiveData;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:none;
*
* 返回數據:unsigned char類型,接收數據;
*
* 注意: none;
************************************************************************************
unsigned char Uart1_ReceiveData (void)
{
while(RI1)
{
SCON1&=~0x01; // 清除RI1標志位
return SBUF1;
}
return 0xff;
}
/***********************************************************************************
*文件結束
***********************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -