51单片机给串口调试助手发送随机数,指定命令停止或继续(下位机)

项目要求:下位机使用单片机,不断发送一个随机数值给上位机,上位机收到数据,显示在显示框中。
上位机部分:https://blog.csdn.net/weixin_42462552/article/details/85937289



一、功能介绍

1.1连接串口调试助手,对其发送随机数据,串口助手发送0x00指令,单片机停止发送数据,发送0x01指令,单片机继续发送数据。

二、开发步骤

2.1 初始化定时器,中断

   TMOD=0x20;    		//定时器T1方式2
   TH1=0xf4; 	   		//设置串行口波特率为2400 bps
   TL1=0xf4;		
   TR1=1;		     	//启动波特率发生器
   SCON=0x50;   		//串行口工作方式1,允许接收
   EA=1;		     	//开总中断允许位
   ES=1;      	 		//开串行口中断

2.2 编写随机函数

unsigned int random()
{
  	unsigned int value;
	value = rand() % (500 + 1- 1) + 1;//范围:1-500
  	return value;
}

2.3 编写串行口中断函数,接收来自PC机的数据

void serial()interrupt 4	//串行口中断类型号是4
{ 
	 unsigned char rxch; 
	 if(RI)                  //中断标志 RI=1, 数据接收 
	 { 
		RI = 0;              //软件清零 
		rxch = SBUF;         //读缓冲  
    	if (rxch==0x00)        //停止指令
    	 	 frameFlag =0;       //设置接收完标志位       
		if (rxch==0x01)      //继续指令
     		 frameFlag =1;      //设置接收完标志位       
	} 
}

2.4 发送数据函数

//功能:向串口发送一个字符串
void send_string_com(unsigned char str)
{
	SBUF = str;
	while(TI == 0);            //等待发送完毕 
    TI = 0; 
}

2.5 在main函数中完成功能

unsigned char temp;
unsigned int i;
 while(1)
 {	
	temp=random();
	if(frameFlag)
	{
		send_string_com(temp);
		for(i=0;i<6000;i++);//延时,降低单片机发送数据的频率
	}
}

三、完整代码

#include <reg52.h> 
#include <stdlib.h> 
bit frameFlag=1;       //暂停标志
void send_string_com(unsigned char str);
unsigned int random();
void delay(unsigned int i);
void main()		//主函数
{	
   unsigned char temp;
   TMOD=0x20;    	//定时器T1方式2
   TH1=0xf4; 	   	//设置串行口波特率为2400 bps
   TL1=0xf4;		
   TR1=1;		     	//启动波特率发生器
   SCON=0x50;   	//串行口工作方式1,允许接收
   EA=1;		     	//开总中断允许位
   ES=1;      	 	//开串行口中断
   while(1)
		{	
		  temp=random();
			if(frameFlag)
			{
				send_string_com(temp);
				delay(60000);
			}
		}
}
void delay(unsigned int i) //延时函数
{
	unsigned int k;
	for(k=0;k<i;k++);
}
//函数名:send_string_com
//功能:向串口发送一个字符串
void send_string_com(unsigned char str)
{
	SBUF = str;
	while(TI == 0);            //等待发送完毕 
  TI = 0; 
}
//函数名:serial
//功能:串行口中断函数,接收来自PC机的数据
void serial()interrupt 4	//串行口中断类型号是4
{ 
 unsigned char rxch; 
 if(RI)                    //中断标志 RI=1, 数据接收 
	{ 
	RI = 0;                 //软件清零 
	rxch = SBUF;            //读缓冲  
  if (rxch==0x00)         //停止指令   
	{
     frameFlag =0;            
	}
	if (rxch==0x01)          //继续指令 
	{
     frameFlag =1;          
	}
	} 
}
unsigned int random()
{
  unsigned int value;
	value = rand() % (500 + 1- 1) + 1;
  return value;
}


四、实验效果

串口调试助手效果图

  • 15
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值