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; //开串行口中断
1
2
3
4
5
6
7
2.2 编写随机函数

unsigned int random()
{
unsigned int value;
value = rand() % (500 + 1- 1) + 1;//范围:1-500
return value;
}
1
2
3
4
5
6
2.3 编写串行口中断函数,接收来自PC机的数据

void serial()interrupt 4 //串行口中断类型号是4
{
unsigned char rxch;
if(RI) //中断标志 RI=1, 数据接收
{
RI = 0; //软件清零
rxch = SBUF; //读缓冲
if (rxch0x00) //停止指令
frameFlag =0; //设置接收完标志位
if (rxch
0x01) //继续指令
frameFlag =1; //设置接收完标志位
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2.4 发送数据函数

//功能:向串口发送一个字符串
void send_string_com(unsigned char str)
{
SBUF = str;
while(TI == 0); //等待发送完毕
TI = 0;
}
1
2
3
4
5
6
7
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++);//延时,降低单片机发送数据的频率
}
}
1
2
3
4
5
6
7
8
9
10
11
三、完整代码
#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 (rxch0x00) //停止指令
{
frameFlag =0;
}
if (rxch
0x01) //继续指令
{
frameFlag =1;
}
}
}
unsigned int random()
{
unsigned int value;
value = rand() % (500 + 1- 1) + 1;
return value;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
四、实验效果
串口调试助手效果图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值