?? uart.h
字號:
/*
Uart.h
標準80C51單片機串行口通用收發(fā)程序
說明:
RXD = P3.0
TXD = P3.1
晶振:11.0592MHz(缺省值)
用定時器T1作為波特率發(fā)生器
波特率:9600(缺省值)
起始位:1
數(shù)據(jù)位:8
停止位:1
校驗位:無
用法:
1、根據(jù)實際情況,修改參數(shù)配置
2、在主程序中包含本頭文件
3、在main()函數(shù)開始處執(zhí)行串行口初始化函數(shù)UartInit()
4、發(fā)送數(shù)據(jù)時直接用函數(shù)UartSendChar()和UartSendString()
5、數(shù)據(jù)接收部分的程序框架已經(jīng)寫好,只需根據(jù)實際情況添加具體的處理代碼
*/
#ifndef _UART_H_
#define _UART_H_
#include <reg52.h>
#include "config.h"
//參數(shù)配置
#define MCLK 11059200L //定義CPU主頻(Hz)
#define BAUD_RATE 9600L //設(shè)置波特率
//定義發(fā)送中斷輔助標志(僅用于發(fā)送)
static volatile bit _TI_;
uint8 RS323BaudNumber(uint32 bps)
{
uint8 RS323Baud;
switch(bps)
{
/* case 115200:
RS323Baud = 7;
break; */
case 57600:
RS323Baud = 0xff;
break;
/* case 56000:
RS323Baud = 5;
break;
case 38400:
RS323Baud = 4;
break; */
case 19200:
RS323Baud = 0xfd;
break;
case 14400:
RS323Baud = 0xfc;
break;
case 9600:
RS323Baud = 0xfa;
break;
// case 4800:
// RS323Baud = 0;
// break;
default:
RS323Baud = 0xff;
break;
}
return RS323Baud;
}
//串行口初始化
extern void UartInit(uint32 baud)
{
char t;
EA = 0;
RXD = 1;
TXD = 1;
_TI_ = 1;
SCON = 0x50; //串口方式1
PCON |= 0x80; //波特率加倍
t = TMOD;
t &= 0x0F;
t |= 0x20;
TMOD = t;
// TH1 = 256 - ( MCLK / 12 ) / ( 16 * BAUD_RATE );
TH1 = RS323BaudNumber(baud) ;
TL1 = TH1;
TR1 = 1;
ES = 1; //允許串行口中斷
EA = 1; //允許中斷
}
//串行口中斷服務(wù)程序
static void UartINTSVC() interrupt 4
{
char c;
if ( RI ) //接收中斷
{
c = SBUF;
RI = 0;
//在這里添加其它代碼
}
if ( TI ) //發(fā)送中斷
{
TI = 0;
_TI_ = 1;
}
}
/*
功能:
通過串行口發(fā)送單個字節(jié)
參數(shù):
c:被發(fā)送的字節(jié)數(shù)據(jù),取值0x00~0xFF
*/
extern void UartSendChar(char c)
{
while ( !_TI_ );
_TI_ = 0;
SBUF = c;
}
/*
功能:
通過串行口發(fā)送字符串
參數(shù):
*s:被發(fā)送的字符串
說明:
字符串應(yīng)當以'\0'結(jié)尾,而'\0'本身不會被發(fā)送出去
*/
extern void UartSendString(char *s)
{
char c;
for (;;)
{
c = *s;
if ( c == '\0' ) break;
s++;
UartSendChar(c);
}
}
//********************************************************************************************************
// 函數(shù)名稱:SendResponse
// 輸入?yún)?shù):buff,字符串指針,類型:unsigned char
// len,字符長度,類型:unsigned short
// 輸出參數(shù):無
// 功能描述:發(fā)送幀函數(shù)為底層字符發(fā)送處理函數(shù),ZLG/MODBUS RTU協(xié)議棧中使用該函數(shù)發(fā)送幀數(shù)據(jù)
//********************************************************************************************************
extern void SendResponse(char *buff,uint16 len)
{
uint16 i;
char c;
for(i=0;i<len;i++)
{
c = *(buff+i);
UartSendChar(c);
}
}
#endif //_UART_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -