?? uart.c
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: Uart.c
* 文件標識: none
* 適用器件: C8051F040
*
* 摘 要: 本文件是串口0、1子程序;使用外部22.1184MHz晶振. Uart驅動程序,包括初始化、
* 波特率設置,單字節發送接收、字符串發送接受等。將跳線器JP7、短接。
* 使用外部22.1184MHz晶振。
*
* 當前版本:1.2
* 作 者:張寧強
* 完成日期:2006年1月10日
*
* 歷史版本:1.0
* 原作者 : 李林利 盧陽
* 完成日期:2005年6月1日
*************************************************************************************/
/************************************************************************************/
// 引用外部頭文件
#include "c8051F040.h"
#include "const.h"
#include "uart.h"
/************************************************************************************/
/************************************************************************************
// 常量及全局變量定義
*************************************************************************************/
/************************************************************************************
* Uart子程序
*************************************************************************************/
/***********************************************************************************
* 函數名稱:Uart0_Init;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:unsigned char類型,發送數據波特率;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_Init(unsigned long BaudRate) //Uart0初始化
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_0;// set SFR page 0
SCON0 = 0x50; // SCON0: 模式1, 8位UART, 使能RX
SSTA0 = 0x1a; // // SMOD00 = 1
ES0=0; // 關閉串口Uart0中斷
PS=0; // 關閉串口Uart0中斷優先權
TI0 = 1; // Indicate TX0 ready
RI0 = 0; // Indicate RX0 ready
SFRPAGE = SFR_PAGE_1;// set SFR page 1
TMR3CN&=~0x04; // 關閉定時器Timer3
RCAP3H =(65536-(SYSCLK/(BaudRate*16)))/256;
RCAP3L =(65536-(SYSCLK/(BaudRate*16)))%256;
// 設置定時器Timer3重載值, Uart1_CLK=SYSCLK
TMR3CF=0x08; // clk = SYS_CLK;
TMR3CN=0x04; // 工作模式2: TX,RX 波特率模式
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart0_Enable;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:bool類型,打開輸入1;關閉輸入0;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_Enable(bool Flag)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_0; // set SFR page 0
if (Flag)
TR1=1; // 打開串口Uart0
else
TR1=0; // 關閉串口Uart0
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart0_SendString;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數: unsigned char類型指針,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_SendString(unsigned char *pt)
{
while(*pt)
{
Uart0_SendByte(*pt++);
}
}
/***********************************************************************************
* 函數名稱:Uart0_SendByte;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:unsigned char類型指針,發送數據;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart0_SendByte(unsigned char value)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_0; // set SFR page 0
while(!TI0); // 等待發送1個字節數據完成
SBUF0=value; // 發送數據到uart0
TI0=0; // 清除中斷標志
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart0_ReceiveData;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:none;
*
* 返回數據:unsigned char類型,接收數據;
*
* 注意: none;
************************************************************************************/
unsigned char Uart0_ReceiveData(void)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_0; // set SFR page 0
while(!RI0);
SCON0&=~0x01; // 清除RI1標志位
return SBUF0;
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart1_Init;
*
* 函數功能描述:Uart1初始化;
*
* 輸入參數:unsigned char類型,發送數據波特率;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_Init(unsigned long BaudRate) //Uart0初始化
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_0; // set SFR page 0
TR1=0; // 關閉定時器Timer1
ET1=0; // 關閉定時器Timer1中斷
PT1=0; // 關閉定時器Timer1中斷優先權
TMOD&= 0x0f; // TMOD: 定時器1, 模式2, 8位重載
TMOD|= 0x20; // TMOD: 定時器1, 模式2, 8位重載
if (BaudRate>=172800)
{
CKCON |= 0x10; // 定時器Timer1使用系統時鐘作為時間基準
TH1 = -(SYSCLK/(BaudRate*2)); // 設置定時器Timer1重載值
}
else if ((BaudRate<172800)&&(BaudRate>=14400))
{
CKCON = 0x00; // 定時器Timer1使用系統時鐘作為時間/12基準
TH1 = -(SYSCLK/(BaudRate*2*12)); // 設置定時器Timer1重載值
}
else
{
CKCON = 0x02; // 定時器Timer1使用系統時鐘作為時間/48基準
TH1 = -(SYSCLK/(BaudRate*2*48)); // 設置定時器Timer1重載值
}
ES0=0; // 關閉串口Uart0中斷
PS=0; // 關閉串口Uart0中斷優先權
TR1=1; // 打開串口Uart1
SFRPAGE = SFR_PAGE_1;// set SFR page 1
SCON1=0x52; // SCON0:模式1, 8字節UART, 打開RX, TI1=1,RI1=0
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart1_Enable;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:bool類型,打開輸入1;關閉輸入0;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Uart1_Enable(bool Flag)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_2;
if (Flag)
TMR4CN|=0x04; // 打開Uart1
else
TMR4CN&=~0x04; // 關閉Uart1
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱: 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)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_1;
while(!(TI1)); // 等待發送1個字節數據完成
SBUF1=value; // 發送數據到uart1
SCON1&=~0x02; // 清除中斷標志
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************
* 函數名稱:Uart1_ReceiveData;
*
* 函數功能描述:Uart0初始化;
*
* 輸入參數:none;
*
* 返回數據:unsigned char類型,接收數據;
*
* 注意: none;
************************************************************************************/
unsigned char Uart1_ReceiveData(void)
{
char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = SFR_PAGE_1;
while(!RI1);
SCON1&=~0x01; // 清除RI1標志位
return SBUF1;
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
/***********************************************************************************/
// 文件結束
/***********************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -