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

📄 s_uart.h

📁 一个用C写的单片机IO程序
💻 H
字号:
#include "REG51.h"
//-----------------------------------------------------------
#define	BAUD_RATE	2400
//#define	BAUD_RATE	1200

#define	RELOAD(TIMER,SVALUE)	TIMER+=SVALUE+1
sbit	tTXD=P3^7;
sbit	rRXD=P3^2;

bit	tTI;
bit	rRI;

data	unsigned char rSBUF;
data	unsigned char tSBUF;

data	unsigned char rSBUF0;
data	unsigned char RxdCnt;
data	unsigned char rSmpCnt;

data	unsigned char TxdCnt;
data	unsigned char tSmpCnt;
//-----------------------------------------------------------

void	SimuUARTinit(void)
{
	tTI=1;
	tTXD=1;
	rRXD=1;

	TMOD&=0xf0;
	TMOD|=0x03;
	ET0=1;
	ET1=1;
	TR0=1;
	IT0=1;
	EX0=1;
	TR1=1;
	EA=1;
}
//-----------------------------------------------------------
void	IntTH0(void)	interrupt 3
{

#if	BAUD_RATE==2400
	RELOAD(TH0,0x80);
#endif
	if(tSmpCnt-- == 0)
	{       
		tSmpCnt=2;
		if(tTI) return;
		switch(TxdCnt++)
		{
		case	0:
			tTXD=0;
			break;
		case	9:
			tTXD=1;
			tTI=1;
			TxdCnt=0;
			break;
		default:
			tTXD=tSBUF&0x01;
			tSBUF>>=1;
			break;
		}
	}
}
//-----------------------------------------------------------
void	RxdInt0(void)   interrupt 0
{
#if	BAUD_RATE==2400
	TL0=0xef;
#else
	TL0=0xaf;
#endif
	TF0=0;
	rSmpCnt=1;
}
//----------------------------------------------------------
void	IntTL0(void)	interrupt 1
{
#if	BAUD_RATE==2400
	RELOAD(TL0,1);
#endif
	if(rSmpCnt-- == 0)
	{
		rSmpCnt=2;
		switch(RxdCnt++)
	      	{
		case	0:
			if(rRXD==1) RxdCnt=0;
			break;
		default:
			if(RxdCnt>9){ RxdCnt=0;return;}
			rSBUF0>>=1;
			rSBUF0|=rRXD?0x80:0;
			break;
		case	9:
			RxdCnt=0;
			if(rRXD==0) return;
			rSBUF=rSBUF0;
			rRI=1;
		}
	}
}
//-----------------------------------------------------------

⌨️ 快捷键说明

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