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

📄 51scomdriver.c

📁 一套比较完整的51单片机C51串口通信驱动程序
💻 C
字号:
/*----------------------------------------
51ComFun.c
C51串口输出输入函数
外部声明 ComFun.h
----------------------------------------*/
#include <reg51.h>

//串口初始化 晶振为11.0592M 方式1 波特率300-57600
void InitCom(unsigned char BaudRate)
{
	unsigned char THTL;
	switch (BaudRate)
		{
			case 1: THTL = 64; break; //波特率300
			case 2: THTL = 160; break; //600
			case 3: THTL = 208; break; //1200
			case 4: THTL = 232; break; //2400
			case 5: THTL = 244; break; //4800
			case 6: THTL = 250; break; //9600
			case 7: THTL = 253; break; //19200
			case 8: THTL = 255; break; //57600
			default: THTL = 208;
		}
	SCON = 0x50; //串口方式1,允许接收
	TMOD = 0x20; //定时器1定时方式2
	TCON = 0x40; //设定时器1开始计数
	TH1 = THTL;
	TL1 = THTL;
	PCON = 0x80; //波特率加倍控制,SMOD位
	RI = 0;	//清收发标志
	TI = 0;
	TR1 = 1; //启动定时器
}

//向串口输出一个字符(非中断方式)
void ComOutChar(unsigned char OutData)
{
	SBUF = OutData; //输出字符
	while(!TI); //空语句判断字符是否发完
	TI = 0; //清TI
}

//向串口输出一个回车换行
void ComOutEnter(void)
{
	SBUF = 0x00;
	while(!TI);
	TI = 0;
	SBUF = 0x0A;
	while(!TI);
	TI = 0;
}

//向串口输出一个字符串(非中断方式)
void ComOutStr(unsigned char *Str)
{
	while(*Str != 0x00) //判断是否到了字符串的尾部
		{
			SBUF = *Str; //输出字符
			while(!TI); //空语句判断字符是否发完
			TI = 0; //清TI
			Str++; //字符串指针加一
		}
}

//从串口接收一个字符(非中断方式)
unsigned char ComInChar()
{
	unsigned char InData;
	while(!RI); //空语句判断字符是否收完
	InData = SBUF; //保存COM缓冲字符
	RI = 0; //清RI
	return (InData); //返回收到的字符
}

//从串口接收一个定长字符串(非中断方式,只用于字符需有一个的idata字符串数组)
	//如unsigned char *Str;
		//unsigned char i[]="abcd";
		//InHandStr = &i;
void ComInStr(unsigned char *Str)
{
	while(*Str != 0x00) //判断是否到了字符串的尾部
		{
			while(!RI);	//空语句判断字符是否收完
			*Str = SBUF; //保存字符
			RI = 0; //清RI
			Str++; //字符串指针加一
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -