⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.h

📁 51读写u盘 uart.c main.c rwudiskdemo.c
💻 H
字号:
/*
	Uart.h
	标准80C51单片机串行口通用收发程序
说明:
	RXD = P3.0
	TXD = P3.1
	晶振:11.0592MHz(缺省值)
	用定时器T1作为波特率发生器
	波特率:9600(缺省值)
	起始位:1
	数据位:8
	停止位:1
	校验位:无
用法:
	1、根据实际情况,修改参数配置
	2、在主程序中包含本头文件
	3、在main()函数开始处执行串行口初始化函数UartInit()
	4、发送数据时直接用函数UartSendChar()和UartSendString()
	5、数据接收部分的程序框架已经写好,只需根据实际情况添加具体的处理代码
*/


#ifndef _UART_H_
#define _UART_H_


#include <reg52.h>
#include "config.h"

//参数配置
#define MCLK		11059200L	//定义CPU主频(Hz)
#define BAUD_RATE	9600L		//设置波特率


//定义发送中断辅助标志(仅用于发送)
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;			//允许中断
}


//串行口中断服务程序
static void UartINTSVC() interrupt 4
{
	char c;
	if ( RI )	//接收中断
	{
		c = SBUF;
		RI = 0;
		//在这里添加其它代码
	}
	if ( TI )	//发送中断
	{
		TI = 0;
		_TI_ = 1;
	}
}


/*
功能:
	通过串行口发送单个字节
参数:
	c:被发送的字节数据,取值0x00~0xFF
*/
extern void UartSendChar(char c)
{
	while ( !_TI_ );
	_TI_ = 0;
	SBUF = c;
}


/*
功能:
	通过串行口发送字符串
参数:
	*s:被发送的字符串
说明:
	字符串应当以'\0'结尾,而'\0'本身不会被发送出去
*/
extern void UartSendString(char *s)
{
	char c;
	for (;;)
	{
		c = *s;
		if ( c == '\0' ) break;
		s++;
		UartSendChar(c);
	}
}



//********************************************************************************************************
// 函数名称:SendResponse
// 输入参数:buff,字符串指针,类型:unsigned char
//           len,字符长度,类型:unsigned short
// 输出参数:无
// 功能描述:发送帧函数为底层字符发送处理函数,ZLG/MODBUS RTU协议栈中使用该函数发送帧数据
//********************************************************************************************************

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