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

📄 uart.c

📁 普通I/O口模拟串口的 51汇编原程序代码!
💻 C
字号:
/*定义为中断方式串口处理*/
#define INTERSENDSTR

#include <absacc.h>
#include <AT89X51.h>
#include <string.h>
#include "err.h"


#ifdef INTERSENDSTR

unsigned char xdata sSendComBuf[256],sRecComBuf[256];
unsigned char data bOut,bIn,bSout,bSin;

#else

#define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0;

#endif

//bps设置 9600就是 PSetBps(96)(11.0592Mhz) 
unsigned char  PSetBps(unsigned int bps) SMALL
{
	unsigned int t1;
	unsigned char t2;
#ifdef INTERSENDSTR
	/*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率 */
	while(bSin!=bSout)
	{
		;
	}
	ES=0;
#endif 

	t1=576/bps;
	
	if((576%bps)||((t1==0))||(t1>=2*256)) 
	{
		return ERR_SET_BPS;
	}
	
	if(t1>256)
	{
		PCON=00;
		t2=256-(288/bps);
	}
	else
	{
		PCON=0x80;
		t2=256-t1;
	}
	
	TH1=t2;TL1=t2;
	TR1=1;

	/*模式3*/
	SM0=0;
	RI=0;TI=0;
	REN=1;
	SM1=1;
	SM2=1;
	
#ifdef INTERSENDSTR 
	bOut=bIn;
	bSout=bSin;
	ES=1;
#endif 
	return OK;
}

void PSendChar(unsigned char ch) SMALL
{
#ifdef INTERSENDSTR
	unsigned char tch;

	tch=bSin+1;
	while(tch==bSout)
	{
		;
	}
	
	sSendComBuf[bSin]=ch;
	ES=0;
	
	if((bSout==bSin))
	{
		SBUF=sSendComBuf[bSin];
		bSin++;
	}
	else
	{
		bSin++;               
	}
	
	ES=1;
#else 
	ACC=ch;
	DEFSENDCHAR;
#endif 
}

unsigned char PGetChar() SMALL
{
	unsigned char ch;
#ifdef  INTERSENDSTR
	ch=sRecComBuf[bOut];
	bOut++;
	return ch;
#else
	ch=SBUF;
	RI=0;
#endif 
}

bit PCharInCom() SMALL
{
#ifdef  INTERSENDSTR
	if(bIn!=bOut)
	{
		return 1;
	}
	return 0;
#else
	return RI;
#endif
}

void PSendString(unsigned char *st) SMALL
{
	while(*st)
	{
		PSendChar(*st);
		st++;
	}
}

void PSendArray(unsigned char  *st,unsigned int  len) SMALL
{
	unsigned int ii;
	for(ii=0;ii<len;ii++)
	{
		PSendChar(st[ii]);
	}
}

#ifdef  INTERSENDSTR
void PSerialInt() interrupt 4
{
	if(RI) 
	{
		sRecComBuf[bIn]=SBUF;
		bIn++;
		RI=0;
	}
	
	if(TI)
	{
		TI=0;
		if(bSout!=bSin)
		{
			bSout++;
		}
		
		if(bSout!=bSin)
		{
			SBUF=sSendComBuf[bSout];
		}
	}
}
#endif

⌨️ 快捷键说明

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