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

📄 io_rs232_string.c

📁 模拟串口传输字符串
💻 C
字号:
#include <reg51.h>

sbit BT_REC=P3^0;		 			//使用IO口代替串口
sbit BT_SND=P3^1;

#define INBUF_LEN 4
unsigned char Str[INBUF_LEN];
unsigned char i=0;
bit read_flag=0;

#define F_TM F0			  			//F0是PSW寄存器中的一个用户可编程位,因此可以作为用户设置的标志位,用户的程序可以根据需要对这个位进行置位或者清零、或者对这个位进行测试!

void IntTimer1(void) interrupt 3	//定时、计数器1中断程序
{
	F_TM=1;
}
/*在数据进行传送的时候,使用F_TM来控制数据位传输的时间。如果设定波特率为9600,即每一位传送所需的时间为0.106ms,所以F_TM中断时间控制在0.106ms*/
void PSendChar(unsigned char inch) 	//发送程序段
{
	unsigned char ii; 
	TH1=(256-192); 		//使用22.1184MHZ时钟
	TL1=TH1;
	ii=0;
	BT_SND=0;						//传送开始位
	F_TM=0;	
	TR1=1;	  						//中断允许控制位
	while(!F_TM);
	while(ii<8)						
	{
		if(inch&1)	 				//取最低位
		{
			BT_SND=1;
		}
		else 
		{
			BT_SND=0;
		}
		F_TM=0;
		while(!F_TM);
		ii++;
		inch>>=1;			  		//右移一位
	}
	BT_SND=1; 						//传送结束位
	F_TM=0;
	while(!F_TM);
}

//向串口发送一个字符串,strlen为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen)
{
	unsigned int k= 0 ;
	do
	{
		PSendChar(*(str + k));
		k++;
	} while (k < strlen);
}

unsigned char PGetChar()
{
	unsigned char rch,ii;
	TH1=(256-195); 		//使用22.1184MHZ时钟
	TL1=TH1;
	F_TM=0;
	ii=0;
	rch=0;
//	TR1=1;							//中断允许控制位
	while(!F_TM);
	while(ii<8)
	{
		rch>>=1;			 		//右移一位	
		if(BT_REC)				   	//判断接收的数据位是否为1,接收到的第一位应为0开始位,最后一位为1结束位,数据从低到高接收
		{
			rch|=0x80;			   	//实现数据从低到高接收
		}
		ii++;
		F_TM=0;
		while(!F_TM);
	}
	F_TM=0;
	while(!F_TM)
	{
		if(BT_REC)
		{break;}
	} 
	return rch;
}

//检查是不是有起始位
bit StartBitOn()
{
	return  (BT_REC==0);
}

//接收字符串程序
void serial ()
{
	unsigned char ch;
    ch=PGetChar();
	Str[i]=ch;
	i++;
	if(i==INBUF_LEN)
	{
		read_flag=1;
	}
}

char code dx516[3] _at_ 0x003b;

void main()
{

	TMOD=0x22;
	PCON=0x00;
	EA=1;
	ET1=1;	 			//定时/计数器1开通

	PSendChar(0x11);
	PSendChar(0x88);

	while(1)
	{
		if(StartBitOn())
		{	
			while(BT_REC==0x00)	  //判断有数据传输
			{
				serial();
			}
			if(read_flag)
			{
				read_flag=0;
				send_string_com(Str,i);
				i=0;
			}
		}
	}	
}

⌨️ 快捷键说明

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