800个电子设计项目分享解析含源码 帮助小白学嵌入式 从入门到年薪50万

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事与硬件设计,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同互勉!全套资料领取扫描文末二维码


温馨提示:学而不思则罔,思而不学则殆。实践是检验真理的唯一标准!

PC机与单片机通信(RS232协议)

  • 实验任务
  • 一、实验原理
  • 二、单片机程序源码
    • 1.主函数源码
    • 2.PC控制单片机IO口输出
    • 3.PC给单片机发送数据

实验任务

单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机系统接收后,用LED显示接收到的数据和向上位机发回原样数据。


一、实验原理

RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。

RS-232串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为20kBps。

RS-232协议以-5V-15V表示逻辑1;以+5V-15V 表示逻辑0。 我们是用MAX232芯片将RS232电平转换为TTL电平的。 一个完整的RS-232接口有22根线,采用标准的25芯插头座。我们在 这里使用的是简化的9芯插头座。

注意我们在这里使用的晶振是11.0592M的,而不是12M。因为波特率的设置需要11.0592M的。

“串口调试助手V2.1.exe” 软件的使用很简单,只要将串口选择‘CMO1’波特率设置为‘9600’ 数据位为 8 位。打开串口(如果关闭)。然后在发送区里输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中,则发送的是ASCLL码,那么单片机控制的数码管将显示ASCLL码值。单片机Px0~Px7引脚5V高电平上拉。

数字

二进制

引脚Px0~Px7

数码管Abcdefg p

十六进制

0

00111111

00000011

11111100

0xco

1

00000110

10011111

01100000

0xf9

2

01011011

00100101

11011010

0xa4

3

01001111

00001101

11110010

0xb0

4

00110110

10010011

01101100

0x99

5

01101101

01001001

10110110

0x92

6

01111101

01000001

10111110

0x82

7

00000111

00011111

11100000

0xf8

8

01111111

00000001

11111110

0x80

9

01101111

00001001

11110110

0x90

A

01110111

00010001

11101110

0x88

B

01111100

11000001

00111110

0x83

C

00111001

01100011

10011100

0xc6

D

01011110

10000101

01111010

0xa1

E

01111001

01100001

10011110

0x86

F

01110001

01110001

10001110

0x8e

代码

字符

代码

字符

代码

字符

代码

字符

代码

字符

32

52

4

72

H

92

\

112

p

33

!

53

5

73

I

93

]

113

q

34

54

6

74

J

94

^

114

r

35

#

55

7

75

K

95

_

115

s

36

$

56

8

76

L

96

`

116

t

37

%

57

9

77

M

97

a

117

u

38

&

58

:

78

N

98

b

118

v

39

59

;

79

O

99

c

119

w

40

(

60

<

80

P

100

d

120

x

41

)

61

=

81

Q

101

e

121

y

42

*

62

>

82

R

102

f

122

z

43

+

63

?

83

S

103

g

123

{

44

,

64

@

84

T

104

h

124

|

45

-

65

A

85

U

105

i

125

}

46

.

66

B

86

V

106

j

126

~

47

/

67

C

87

W

107

k

48

0

68

D

88

X

108

l

49

1

69

E

89

Y

109

m

50

2

70

F

90

Z

110

n

51

3

71

G

91

[

111

o

二、单片机程序源码

1.主函数C

代码如下(示例):

#include "reg52.h" //包函8051 内部资源的定义
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^4; //个位选通定义
sbit shiwei=P2^5; //十位选通定义
sbit baiwei=P2^6; //百位选通定义
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
void LED() //LED显示接收到的数据(十进制)
{
gewei=0; P0=table[dat%10]; Delay(10); gewei=1;
shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1;
baiwei=0; P0=table[dat/100]; Delay(10); baiwei=1;
}
///功能:串口初始化,波特率9600,方式1/
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/主程序功能:实现接收数据并把接收到的数据原样发送回去///
void main()
{
Init_Com();//串口初始化
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF; //接收数据SBUF赋与dat
RI=0; //RI 清零。
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)
}
LED(); //显示接收到的数据
}
}
///这一个例子是以扫描的方式编写的,还可以以中断的方式编写,请大家思考//

2.PC控制单片机IO口输出

代码如下(示例):

#include "reg52.h" //包函8051 内部资源的定义
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 ){unsigned int i;for(i=0; i<100; i++);tc--;}
}
///功能:串口初始化,波特率9600,方式1/
void Init_Com(void)
{TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;
}
/主程序功能:实现接收数据并把接收到的数据原样发送回去///
void main()
{
Init_Com();//串口初始化
while(1){                      if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据SBUF赋与datif(dat==0x00)  //如果PC发送十六进制00,单片机P1口全亮。P1=0x00;else if(dat==0x01)P1=0x01;else if(dat==0x02)P1=0x02;else if(dat==0x03)P1=0x03;else if(dat==0x04)P1=0x04;RI=0; //RI 清零。SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)} }
}

3.PC机给单片机发送数据

代码如下(示例):

#include "reg52.h" //包函8051 内部资源的定义
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
unsigned char fan;
int i,j;
void Delay() //延时程序
{
for(i=0; i<100; i++)
for(j=0; j<100; j++);
}
void delays()
{
int k;
for (k=0;k<1200;k++);
}
///功能:串口初始化,波特率9600,方式1/
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/主程序功能:实现接收数据并把接收到的数据原样发送回去///
void main()
{
Init_Com();//串口初始化
while(1){ if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据SBUF赋与datif(dat==0x30)   //如果PC发送十六进制00,单片机P1口全亮。{P1=0x00;Delay();   }else if(dat==0x31){P1=0x01;Delay();}else if(dat==0x32){P1=0x03;Delay();}else if(dat==0x33){P1=0x07;Delay(); }else if(dat==0x34){P1=0x0f;Delay(); }else if(dat==0x35){P1=0x1f;Delay();}else if(dat==0x06){P1=0x3f;Delay(); }else if(dat==0x07){P1=0x7f;Delay();}else if(dat==0x08){P1=0xff;Delay(); }else if(!(P2&0x01)){ delays();while(!(P2&0x01));fan = 0x36;}else if(!(P2&0x02)){ delays();while(!(P2&0x02));fan = 0x37;}else if(!(P2&0x04)){ delays();while(!(P2&0x04));fan = 0x38;}else if(!(P2&0x08)){ delays();RI=0; //RI 清零。SBUF =dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)} }
}

回复【更多资料】海量嵌入式资料赠送

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事与硬件设计,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同互勉!

(一)PC 机与单片机通信(RS232 协议)【800个电子设计大赛资料合集】相关推荐

  1. PC 机与单片机通信(RS232 协议)

    PC 机与单片机通信(RS232 协议) 1.单片机串口通信的应用 2.PC控制单片机IO口输出 3.单片机控制实训指导及综合应用实例 4.单片机给计算机发送数据 文章目录 PC 机与单片机通信(RS ...

  2. rs232pc通信软件源码c语言,PC机与单片机通信(RS232 协议)程序

    这有PC 机与单片机通信(RS232 协议)的资料希望对大家有用 [C语言源程序] #include"reg52.h" //包函8051 内部资源的定义 unsigned char ...

  3. 【C51单片机】PC机控制单片机

    单片机与PC机通过RS232相连,编写一个异步串行口通信程序,实现单片机与PC机上的串口助手之间的通信.具体要求如下: ①PC机向单片机发送命令打开或关闭指定LED灯 ②PC机向单片机发送命令启动或停 ...

  4. s7300plc串口通信_基于LabVIEW的S7300PLC与PC机的串口通信.pdf

    基于LabVIEW的S7300PLC与PC机的串口通信 2011 仪 表 技 术 与 传 感 器 2011 5 Instrument Technique and Sensor No5 LabV IEW ...

  5. 【C51单片机】PC机控制单片机(仿真)

    1.功能描述 1.单片机与PC机通过RS232相连,编写一个异步串行口通信程序,实现单片机与PC机上的串口助手之间的通信.具体功能如下: ①PC机向单片机发送命令打开或关闭指定LED灯 ②PC机向单片 ...

  6. RIP1实验1(实现不同路由器 不同PC机之间的通信)

    RIP1路由实验 本文以华为模拟器ensp为基础进行操作 一.实验拓扑图: ensp上构建的实验拓扑图: 二.实验准备 分析: 由上述的实验拓扑图可知,该拓扑图中共存在8个网络,那么所需要的网络地址一 ...

  7. 串行口实验 编写程序利用PC机控制单片机实验板上的数码管设备工作

    编写程序利用PC机控制单片机实验板上的数码管设备工作 在pc上输入fe,第一个数码管显示1. 在pc上输入fa第五个数码管显示5 程序: #include<reg51.h> #define ...

  8. C#上位机 西门子PLC通信 S7NET协议

    C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...

  9. pc机之间的通信和点阵汉字的字模读取与显示

    pc机之间的通信 连线设置 点阵汉字的读取与打印 在ubuntu下面用c调用opencv显示文字和图片 总结 连线设置 两个usb转换口 G-G,3.3-3.3,TX-RX,RX-TX 打开串口助手选 ...

  10. 【51单片机】51单片机学习资料合集

    [51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...

最新文章

  1. 刚刚!最新大学专业排名出炉:北大、清华和浙大居前三!
  2. 网络视频会议整体解决方案
  3. Jquery中使用table2excel插件实现将Html的table导出为Excel(附示例代码和资源下载)
  4. Go gin参数绑定
  5. python如何遍历文件夹中的所有图片_python实现遍历文件夹图片并重命名
  6. 使用matplotlib画图时不能同时打开太多张图
  7. C语言读取load格式文件,求指导,如何用c语言实现读取*.raw格式图像
  8. 2018年工业机器人销量排位_2020年工业机器人统计数据新鲜出炉
  9. tensorflow 计算梯度: tf.gradient() 与 tf.GradientTape()
  10. 【语音去噪】基音matlab GUI音频信号去噪【含Matlab源码 1386期】
  11. SpringBoot 根据条件注入需要的 Bean
  12. C语言--《C专家编程》C语言申明的优先级规则
  13. 自然语言处理核心期刊_中文核心期刊简介及投稿推荐.PDF
  14. pdf拆分成一页一页
  15. java rrd 读取_RRDtool 系列连载-6 :如何从 RRD 数据库中提取数据 - RRDtool - 阿勃的 blog...
  16. App如何生成下载二维码?扫码即可下载App
  17. Photoshop基础学习目录
  18. elementUI——form表单
  19. 前端调用微信扫一扫不触发事件,没有任何反应
  20. 使用qq邮箱进行服务器邮件代发

热门文章

  1. python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程
  2. python3GUI--浏览器By:PyQt5(附源码)
  3. 计算机机试题Excel,2009年职称计算机考试_Excel机试题-1
  4. 大数据组项目文档整理方案
  5. lunix remount u盘_使用e2fsck修复损坏的Linux磁盘|Read only|LVM|EXT4-FS
  6. 双向循环链表讲解及实现
  7. 科学计算matlab尔雅答案,科学计算与MATLAB语言超星尔雅最新答案大全
  8. 延时等待的gcode
  9. AD快捷键,及一些基本操作设置总结
  10. 使用iconfont阿里多色矢量图标