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

📄 iouart.c

📁 STC单片机IO口模拟RS232测试程序,Keil Cx51应用开发技术中的程序主要的功能是在利用串口调试工具发送一个8bit的数据
💻 C
字号:
/*********************************************************
IO口模拟232测试程序,仿单片机Keil Cx51应用开发技术中的程序
主要的功能是在利用串口调试工具发送一个8bit的数据,而后单片机
接收后把这个数据发送给模拟串口
*********************************************************/
#include "STC12C2052AD.H"
sbit Tx_Pin=P3^7;//发送端口
sbit Rx_Pin=P1^0;//接收端口
sbit Baud0=P1^6;
sbit Baud1=P1^7;//波特率选择
bit Flag=0;//若标志位为1,则表示串口已经过了一位的时间 
#define unchar unsigned char
#define unint unsigned int
unchar HighTime;
unchar LowTime;
/********************************************************/
bit CheckAvailStartBit()//检测开始位
{
	return(Rx_Pin==0);//若为0,则返回1,即有数据传送
					  //若为1,则返回0,即没有接收到数据
}
/********************************************************/
void Timer0() interrupt 1//定时器中断处理
{
	Flag=1;
	TL0=LowTime;
	TH0=HighTime;
}
/********************************************************/
unchar ReceiveByte()//接收字节
{
	unchar Data;
	unint i;
	Data=0x00;
	TR0=1;//开始定时
	while(Flag==0);
	Flag=0;//开始位不采样
	for(i=0;i<=7;i++)
	{
		Data>>=1;//移位处理
		if(Rx_Pin==1)//为1的话,则进行处理
		{
			Data|=0x80;
		}
		while(Flag==0);//若Flag为0,则时间还未到,等待
				  	  //若Flag为1,则一位的时间已经到,准备接收数据
		Flag=0;
	}
	while(Flag==0);//对第9位停止位的处理
	Flag=0;
	while(Flag==0)
	{
		if(Rx_Pin)//检测到停止位,退出
		{
			break;
		}
	}	
	TR0=0;//关闭定时器
	return(Data);//返回数据
}
/********************************************************/
void SendByte(unchar Data)
{
	unint i;
	TR0=1;//开始定时
	Tx_Pin=0;//起始位,0
	while(Flag==0);
	Flag=0;
	for(i=0;i<=7;i++)
	{
		if(Data&0x01)
		{	
			Tx_Pin=1;
		}
		else
		{
			Tx_Pin=0;
		}
		Data>>=1;
		while(Flag==0);
		Flag=0;
	}
	Tx_Pin=1;//结束位
	TR0=0;//关闭定时器
}
/********************************************************/
void main()
{
	unchar temp;
	TMOD=0x01;//定时器0为模式1,自动重装载
	TR0=0;
	PCON=0x00;
	if(Baud1==1) 
	{
		if(Baud0==1) 
		{
		HighTime=0xFF;
		LowTime=0xD0;//在这个分频下波特率为19200
		}
		else 
		{
		HighTime=0xFF;
		LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率
		}
	}
	else
	{
		if(Baud0==0) 
		{
		HighTime=0xFF;
		LowTime=0x40;//在这个分频下波特率为4800
		}
		else 
		{
		HighTime=0xFE;
		LowTime=0x80;//在这个分频下波特率为2400
		}
	}
/********************测试*********************************/

        HighTime=0xFF;
		LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率

/*********************************************************/
	TH0=HighTime;
	TL0=LowTime;
	ET0=1;//开定时器0的中断
	EA=1;//开总中断
	for(;;)
	{
		if(CheckAvailStartBit())//模拟接收口检测到起始位
		{
			temp=ReceiveByte();//接收数据
			SendByte(temp);//将接收到的数据发送给PC
		}
	}

}


⌨️ 快捷键说明

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