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

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

目录:

1、单片机串口通信的应用

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

3、单片机控制实训指导及综合应用实例

4、单片机给计算机发送数据:

[实验任务]

单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。

个人电脑作为上位机,向下位机单片机系统发送十六进制或者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

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

                              ASCII常用代码表

字符

代码

字符

代码

字符

代码

字符

代码

字符

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

[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(); //显示接收到的数据

}

}

///这一个例子是以扫描的方式编写的,还可以以中断的方式编写,请大家思考//

[实验任务]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赋与dat

if(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)

}

}

}

[实验任务]单片机控制实训指导及综合应用实例

#include "reg52.h" //包函AT89S52 内部资源的定义

#define uchar unsigned char                  //宏定义

uchar led [10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef};    //数字1~10,字符串

uchar led1[64];   //存储接收数据

unsigned int i,j,t,k;

sbit P32=P3^2;

void scjs(void)interrupt 4 //定义中断

{

ES=0;// 使能串行口的中断

k=1;

while(1)

{

RI=0;

led1[k-1]=SBUF;       //将接收数据送段码表

k++;

TH0=0x3c; //t0定时50sm内接收不到数据跳过接收

TL0=0xb0;

TR0=1;

while(!RI)

{

if(!TF0) goto FH;

}

}

FH:TF0=0;//TF0不清零不能重新接收

   TR0=0;

   P32=1;

for(j=1;j<k;j++)

{

SBUF=led[j-1];//数据送回给pc

while(!TI);

TI=0;

}

P32=0;

}

delay(t)

{

ES=1;

SCON=0x50;

for(i=0;i<t;i++);

ES=0;

SCON=0x00;

}

void main (void)

{

int a,c;

TMOD=0x21;

TH1=0Xfd;

TL1=0xfd;

SCON=0x50;

PCON=0x00;

IE=0x90;

TR1=1;

k=1;

P32=0;

while(1)

{

ES=0;

SCON=0x00;

for(a=0;a<=k+1/k*8;a++)

{

for(c=5;c>=0;c--)

{

if(a+c<k+1/k*8+1)

{

if(k==1)SBUF=led[a+c];

else SBUF=led1[a+c];

}

else SBUF=0x00;

while(!TI);

TI=0;

}

delay(39000);

}

}

}
#include "reg52.h" //包函8051 内部资源的定义

#define uchar unsigned char

sbit P3_2=P3^2;

uchar zdzt=0x0c;

uchar zsgw=0x02;

uchar zsdw=0x00;

uchar bs=0;

uchar zqsbw=0;

uchar zqssw=0;

uchar zqsgw=0;

uchar yxsj=0x11;

uchar zs=20;

int zqs=0;

uchar zqsgzj=0x00;

uchar zqsdzj=0x00;

uchar zsscgw=0x1f;

uchar zsscdw=0x00;

uchar bzsj;

uchar ztsj;

void key (void);

void keyprc();

void binbcd();

void disp();

void delay();

code uchar tab[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x39};

code uchar zssc[160]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,

0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,

0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,

0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,

0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,};

void key(void)

{

TR0=0;

if(!(P2&0X01))

{

delay();

while(!(P2&0X01));

zdzt=0x0a;

disp();

}

else if(!(P3&0X08))

{

delay();

while(!(P3&0X08));

zdzt=0x0b;

disp();

}

else if(!(P3&0X10))

{

delay();

while(!(P3&0X10));

zs=zs+1;

keyprc();

disp();

}

else if(!(P2&0X02))

{

delay();

while(!(P2&0X02));

zs=zs-1;

keyprc();

disp();

}

}

void keyprc()

{

if(zs<20)

zs=20;

if(zs>99)

zs=99;

zsgw=zs/10;

zsdw=zs%10;

}

void djzd(void) interrupt 1

{

TH0=zssc[(zs-20)*2];

TL0=zssc[(zs-20)*2+1];

if(zdzt==0x0a)

yxsj=yxsj<<1|yxsj>>7;

else if (zdzt==0x0b)

yxsj=yxsj<<7|yxsj>>1;

else if(zdzt==0x0c)

{

P1=0xff;

goto LP;

}

P1=yxsj;

bs++;

if(bs==48)

{

bs=0;

zqs++;

}

LP:binbcd();

disp();

}

void binbcd()

{

zqsbw=zqs/100;

zqssw=zqs%100/10;

zqsgw=zqs%10;

}

void disp()

{

TR1=0;

ES=0;

SCON=0x00;

TMOD=0x01;

SBUF=tab[zqsgw];

while(!TI);TI=0;

SBUF=tab[zqssw];

while(!TI);TI=0;

SBUF=tab[zqsbw];

while(!TI);TI=0;

SBUF=tab[zsdw];

while(!TI);TI=0;

SBUF=tab[zsgw];

while(!TI);TI=0;

SBUF=tab[zdzt];

while(!TI);TI=0;

TMOD=0x02;

TH1=0Xfd;

TL1=0xfd;

SCON=0x50;

TR1=1;

ES=1;

}

void delay()

{

int k;

for(k=0;k<1200;k++);

}

void sin()interrupt 4

{

P1=0xff;

ES=0;

bzsj=SBUF;

RI=0;

while(!RI);

RI=0;

ztsj=SBUF;

if(bzsj==0x30)

zdzt=ztsj-0x37;

if(bzsj==0x31)

{

if(ztsj==0x49)

zs++;

else zs--;

}

ES=1;

P3_2=0;

keyprc();

zqs=0;

disp();

}

main()

{

TMOD=0x21;

TH1=0xfd;

TL1=0xfd;

SCON=0x50;

PCON=0x00;

IE=0X92;

PS=1;

TR1=1;

P3_2=0;

TH0=0x1f;

TL0=0x00;

SP=0x60;

disp();

while(1)

{

key();

if(zdzt==0x0c)

{

TR0=0;

P1=0xff;

}

else TR0=1;

}

}

单片机给计算机发送数据

#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赋与dat

if(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)

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/235963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作系统大会 openEuler Summit 2023即将召开,亮点不容错过

【12月11日&#xff0c;北京】数字化、智能化浪潮正奔涌而来。操作系统作为数字基础设施的底座&#xff0c;已经成为推动产业数字化、智能化发展的核心力量&#xff0c;为数智未来提供无限可能。12月15-16日&#xff0c;以“崛起数字时代 引领数智未来”为主题的操作系统大会 &…

双向链表(数据结构与算法)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

香港身份(户口)大放水!23年香港优才计划、高才通计划申请数据公开!24年冲!

香港身份&#xff08;户口&#xff09;大放水&#xff01;23年香港优才计划、高才通计划申请数据公开&#xff01;24年冲&#xff01; 近期香港入境处公布了各项人才入境计划申请及审批数字&#xff0c;: 截止今年10月31日一共有18.4万宗申请各类人才输入计划&#xff0c;获批人…

IntelliJ IDEA无公网远程连接Windows本地Mysql数据库提高开发效率

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

智能优化算法应用:基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝴蝶算法4.实验参数设定5.算法结果6.参考文献7.MA…

【深度学习】注意力机制(三)

本文介绍一些注意力机制的实现&#xff0c;包括EMHSA/SA/SGE/AFT/Outlook Attention。 【深度学习】注意力机制&#xff08;一&#xff09; 【深度学习】注意力机制&#xff08;二&#xff09; 目录 一、EMHSA&#xff08;Efficient Multi-Head Self-Attention&#xff09;…

logstash插件简单介绍

logstash插件 输入插件(input) Input&#xff1a;输入插件。 Input plugins | Logstash Reference [8.11] | Elastic 所有输入插件都支持的配置选项 SettingInput typeRequiredDefaultDescriptionadd_fieldhashNo{}添加一个字段到一个事件codeccodecNoplain用于输入数据的…

可学习超图拉普拉斯算子代码

python版本&#xff1a;3.6。sklearn版本&#xff1a;scikit-learn0.19 问题1&#xff1a;ERROR: Could not build wheels for ecos, scs, which is required to install pyproject.toml-based projects| 解决办法&#xff1a;cvxpy安装过程中遇到的坑_ecos 2.0.7.post1 cp37 …

Terraform实战(二)-terraform创建阿里云资源

1 初始化环境 1.1 创建初始文件夹 $ cd /data $ mkdir terraform $ mkdir aliyun terraform作为terraform的配置文件夹&#xff0c;内部的每一个.tf&#xff0c;.tfvars文件都会被加载。 1.2 配置provider 创建providers.tf文件&#xff0c;配置provider依赖。 provider…

LeetCode 每日一题 Day 9 ||简单dp

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2&am…

智能井盖传感器怎么有效监测井盖位移

随着城市化进程的加速推进&#xff0c;城市基础设施的安全与维护问题日益凸显&#xff0c;引发了社会的广泛关注。其中井盖作为城市地下设施的重要一环&#xff0c;其安全问题时刻影响着市民的幸福生活。近年来智能井盖传感器的发展与应用为实时监测井盖位移提供了全新的解决方…

嵌入式开发按怎样的路线学习较好?

嵌入式开发按怎样的路线学习较好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「嵌入式从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

BigData之Google Hadoop中间件安装

前言 Hadoop / Zookeeper / Hbase 因资源有限 这三个都是安装在同一台Centos7.9的机器上 但通过配置 所以在逻辑上是distributed模式 1 Java安装 1.1 下载java11 tar/opt/java/jdk-11.0.5/ 1.2 环境配置修改 文件/etc/profile export JAVA_HOME/opt/java/jdk-11.0.5/ e…

网络层重点协议——IP协议详解

✏️✏️✏️今天给大家分享的是网络层的重点协议——IP协议。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; ✈️✈️✈️动动你们发财的…

解决vue3 动态引入报错问题

之前这样写的&#xff0c;能使用&#xff0c;但是有警告 警告&#xff0c;查了下&#xff0c;是动态引入的问题&#xff0c;看到说要用glob 然后再我的基础上&#xff0c;稍微 改了下&#xff0c;就可以了&#xff1a; 最后打印了下&#xff0c;modules[../../components/flowc…

每日一练【无重复字符的最长子串】

一、题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 二、题目解析 算法思想&#xff1a;移动窗口的思想去解决。 那为什么要用这个方法解决呢&#xff1f; 我们首先用暴力的思路去遍历一遍&#xff0c;我们遍历到deabc后&#xff…

外包干了3个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

图文教程:从0开始安装stable-diffusion

现在AI绘画还是挺火&#xff0c;Midjourney虽然不错&#xff0c;但是对于我来说还是挺贵的。今天我就来安一下开源的AI绘画stable-diffusion,它的缺点就是对电脑的要求比较高&#xff0c;尤其是显卡。 话不多说开搞。 访问sd的github&#xff0c;https://github.com/AUTOMATIC…

AIGC报告专题:计算机Pika-AIGC新秀-视频生成产业或迎来GPT时刻

今天分享的AIGC系列深度研究报告&#xff1a;《AIGC报告专题&#xff1a;计算机Pika-AIGC新秀-视频生成产业或迎来GPT时刻》。 &#xff08;报告出品方&#xff1a;中泰证券&#xff09; 报告共计&#xff1a;11页 Pika&#xff1a;专注Text to Video生成场景&#xff0c;支持…

创投课程第四期 | Web3一级市场投资框架的演变及投资人能力框架的构成

协会邀请了来自Zonff Partners的合伙人——Colin&#xff0c;作为VC创投课程第4期的嘉宾&#xff0c;在北京时间12月9日(周六)下午14:00 PM-15:00 PM于蚂蚁链科技产业创新中心进行线下分享&#xff0c;届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《WEB3一级市场投资…