单片机双击串行通信C语言设计报告含代码.docx

上传人:b****6 文档编号:7447162 上传时间:2023-01-24 格式:DOCX 页数:27 大小:24.79KB
下载 相关 举报
单片机双击串行通信C语言设计报告含代码.docx_第1页
第1页 / 共27页
单片机双击串行通信C语言设计报告含代码.docx_第2页
第2页 / 共27页
单片机双击串行通信C语言设计报告含代码.docx_第3页
第3页 / 共27页
单片机双击串行通信C语言设计报告含代码.docx_第4页
第4页 / 共27页
单片机双击串行通信C语言设计报告含代码.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机双击串行通信C语言设计报告含代码.docx

《单片机双击串行通信C语言设计报告含代码.docx》由会员分享,可在线阅读,更多相关《单片机双击串行通信C语言设计报告含代码.docx(27页珍藏版)》请在冰豆网上搜索。

单片机双击串行通信C语言设计报告含代码.docx

单片机双击串行通信C语言设计报告含代码

.

 

※※※※※※※※※

2012级

单片机接口课程设计

※※※※※※※※※

石家庄铁道大学四方学院

 

集中实践报告书

 

课题名称

双机串行通信设计

邢志杰

20127019

系、

电气工程系

专业班级

方1210-4

指导教师

马丽

 

2015年7月3日

 

.

.

 

一、设计任务及要求:

 

设计任务:

 

双机串行通信设计

 

设计要求:

1、两片单片机利用串行口进行串行通信:

串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。

串行口工作方式为方式1的全双工串行通信。

2、两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1计数

初值TH1、TL1进行设定。

故本题目本质上是通过键盘扫描得到设定的波特率,从而

载入相应的T1计数初值TH1、TL1实现的。

3、要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数码管上。

4、要求做出实物。

 

二、指导教师评语:

 

.

.

 

三、成绩

 

指导教师签名:

 

年月日

 

第1章设计目的··············································错误!

未定义书签。

第2章设计要求··············································错误!

未定义书签。

第3章硬件电路设计············································错误!

未定义书签。

3.1系统框图··············································1

3.2STC89C52单片机最小系统·····································2

3.3按键电路··············································3

3.4主电路设计············································错误!

未定义书签。

第4章软件程序设计············································44.1主程序流程图···········································4

4.2键盘扫描子程序流程图·······································5

4.3从机主程序流程图·········································6

4.4从机中断子程序流程图·······································7

4.5程序调试··············································8

4.6双机串行通信源程序········································9第5章结论················································13参考文献··················································13

 

.

.

 

第1章设计目的

 

1.1设计目的

 

(1)掌握单片机实际系统的开发步骤。

(2)了解串行通信的原理;了解数码管显示的工作原理;了解键盘扫描的

工作原理;对双机串行通信软件编程、调试、相关硬件设备的使用技能等方面得

到真正的实践机会,把软硬件结合,克服其中的种种问题,提高编程能力。

 

第2章设计要求

 

2.1设计要求

 

(1)两片单片机利用串行口进行串行通信:

串行通信的波特率可从键盘进

行设定,可选的波特率为1200、2400、4800和9600bit/s。

串行口工作方式为方

式1的全双工串行通信。

(2)两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1

计数初值TH1、TL1进行设定。

故本题目本质上是通过键盘扫描得到设定的波特

率,从而载入相应的T1计数初值TH1、TL1实现的。

(3)要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数

码管上。

(4)要求做出实物。

 

第3章硬件电路设计

 

3.1系统框图

 

.

.

 

单片机1单片机2

按键电路显示电路

AT89C52AT89C52

 

图3-1系统框图

 

3.2STC89C52单片机最小系统

 

89C52共有四个八位的并行双向口,即有32根输入输出口线。

各口的每一

位均由锁存器、输出驱动器和输入缓冲器组成。

VCC(40引脚):

电源电压

VSS(20引脚):

接地

 

图3-2STC89C52引脚图

P0端口(P0.0~P0.7,39~32引脚):

P0口是一个漏极开路的8位双向I/O口。

作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以

作为高阻抗输入。

在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。

此时,P0口内部上拉电阻有效。

在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。

验证时,要求外接上拉电阻。

 

.

.

 

P1端口(P1.0~P1.7,1~8引脚):

P1口是一个带内部上拉电阻的8位双向I/O口。

P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。

对端

口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。

P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。

P1口特点是输出锁存器,输出时没有条件。

输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。

P3口为准双向口。

可以字节访问,也可以位访问。

P3.0---RXD,串行输入口。

P3.1---TXD,串行输出口。

P3.2---INT0,外部中断0的请求。

P3.3---INT1,外部中断1的请求。

P3.4---T0,定时器/计数器0外部计数脉冲。

P3.5---T1,定时器/计数器,1外部计数脉冲。

P3.6---WR,外部数据存储器写选通。

P3.7---RD,外部数据存储器读选通。

RST(9引脚):

复位输入。

当输入连续两个机器周期以上高电平时为有效,

用来完成单片机单片机的复位初始化操作。

ALE(30引脚):

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存

低8位地址的输出脉冲。

XTAL1(19引脚):

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):

振荡器反相放大器的输入端。

STC89C52引脚图如图3-2

所示。

 

3.3按键电路

 

.

.

 

6

 

7

 

图3-3按键电路图

本设计按键采用矩阵键盘,键盘连接主机的P2口,主机从矩阵键盘接收信息,通过串行输出口输出到从机,从机从串行输入口接收信息并把信息显示在数码管上。

 

3.4主电路设计

 

C1

U1

0

33pF

1

X1

19

XTAL1

P0.0/AD0

39

C2

CRYSTAL

P0.1/AD1

38

2

37

P0.2/AD2

18

36

XTAL2

P0.3/AD3

3

35

S3

S0

P0.4/AD4

33pF

34

P0.5/AD5

C3

33

P0.6/AD6

4

9

32

RST

P0.7/AD7

10uF

P2.0/A8

21

0

0

R3

R1

22

1

P2.1/A9

1

5

10k

10k

23

2

2

P2.2/A10

24

3

29

PSEN

P2.3/A11

3

30

25

4

ALE

P2.4/A12

4

31

26

5

EA

P2.5/A13

5

6

27

6

P2.6/A14

6

28

7

P2.7/A15

7

1

P1.0/T2

P3.0/RXD

10

7

2

11

P3

P3

P1.1/T2EX

P3.1/TXD

3

12

P1.2

P3.2/INT0

4

13

P1.3

P3.3/INT1

5

14

P1.4

P3.4/T0

6

15

P1.5

P3.5/T1

7

16

P1.6

P3.6/WR

8

17

P1.7

P3.7/RD

AT89C52

C4

33pF

U2

X2

19

XTAL1

P0.0/AD0

39

C5

CRYSTAL

P0.1/AD1

38

37

P0.2/AD2

18

36

XTAL2

P0.3/AD3

35

P0.4/AD4

33pF

34

P0.5/AD5

C6

9

33

U4

RST

P0.6/AD6

32

P0.7/AD7

a2

19

a

D0

Q0

10uF

21

b3

18

P2.0/A8

a

b

D1

Q1

R2

22

c4

17

P2.1/A9

b

c

D2

Q2

10k

23

d5

16

29

P2.2/A10

c

d

D3

Q3

PSEN

P2.3/A11

24

d

e

e6

D4

Q4

15

30

25

f7

14

ALE

P2.4/A12

e

f

D5

Q5

31

26

g8

13

EA

P2.5/A13

f

g

D6

Q6

27

h9

12

P2.6/A14

g

h

D7

Q7

28

P2.7/A15

h

11

LE

P10

P3

1

10

P3

1

P1.0/T2

P3.0/RXD

OE

P11

2

11

P1.1/T2EX

P3.1/TXD

P12

3

12

74HC573

P1.2

P3.2/INT0

P13

4

13

P1.3

P3.3/INT1

5

14

P1.4

P3.4/T0

6

15

P1.5

P3.5/T1

U3

7

16

P1.6

P3.6/WR

P10

8

17

2

19

P1.7

P3.7/RD

D0

Q0

P11

3

18

D1

Q1

AT89C52

P12

4

17

D2

Q2

P13

5

16

D3

Q3

6

15

D4

Q4

7

14

D5

Q5

8

13

D6

Q6

9

12

D7

Q7

11

1

LE

OE

74HC573

 

图3-4主电路图

 

第4章软件程序设计

 

.

.

 

设计思路为:

主机通过键盘扫描程序确认是否有键按下,若有键按下则将按

键号对应的显示代码发送给从机,并判断是否是波特率按键,若是则进行波特率

调整,若无键按下,则继续进行键盘扫描。

从机主程序动态显示缓冲区内的数据。

中断子程序接收数据并判断是否是波特率按键所对应的显示代码,若是则进行波

特率调整,然后将数据保存到缓冲区。

初始波特率都为9600。

 

4.1主程序流程图

 

键盘连接到甲机的P2口,通过按键扫描确定键值,从机与主机通过串行输入口P3.0和串行输出口P3.1相连接,实现两机之间的串行通信。

 

开始

 

设置串行口工

作方式及波特

 

N

检测按键

 

Y

 

确定按键号

并发送

 

N

波特率按键

 

Y

 

调整波特率

 

图4-1主机主程序流程图

 

4.2键盘扫描子程序流程图

 

.

.

 

矩阵式键盘扫描的方法常用的有两种,一种是逐列送0,依次读回行;另一种为反转法。

本程序采用前者,程序流程图如下:

 

开始

 

P2口列置0,行

置1

 

读回P2口

 

行值是否变化

N

调整行,列值

 

Y

 

得键号

 

结束

 

图4-2键盘扫描子程序流程图

 

4.3从机主程序流程图

 

从机主程序动态显示缓冲区的4个数据。

从机的P1口经锁存器74HC573连接数码管位码,P2口经锁存器74HC573连接数码管的段码。

从机与主机通过串行输入口P3.0和串行输出口P3.1相连接,利用中断来接收主机发来的数据,并根据接收的数据来判断是否需要进行波特率调整。

从机主程序流程图如下:

 

.

.

 

开始

 

初始化

 

送段码,送位码

 

显示完?

N

调整指针

 

Y

 

图4-3从机主程序流程图

 

4.4从机中断子程序流程图

 

.

.

 

开始

 

清接收标志位RI

 

保存到缓冲区

 

波特率按键?

Y

调整波特率

 

N

 

中断返回

 

图4-3从机中断子程序流程图

 

4.5程序调试

 

图4-5程序调试

 

.

.

 

4.6双机串行通信源程序

 

/*************************************************************

程序调试软件:

KeiluVision4

 

程序仿真软件:

ISIS即Proteus-7.8sp2

/*************************************************************

双机串行通信主机程序源代码:

 

/***********************************************

 

程序名称:

双机串行通信波特率可调主机程序(C语言)

 

主机功能:

通过键盘扫描得到键号并发送,同时判断是否是波特率按键,若是则

 

调整波特率。

 

简要说明:

主机P2口接4*4矩阵式键盘,高4位行,低4位列。

 

其中0~4号按键分别代表4种不同波特率(1200、2400、4800、9600)。

 

初始波特率9600。

 

编写:

邢志杰(QQ824997141)

 

时间:

2015年07月02日

 

最后修改:

2015年07月03日

 

***********************************************/

#include

#defineuintunsignedint

#defineucharunsignedchar

intlog=0,bot=0;//log,bot分别是按键标志位和波特率调整标志位

uchartemp,num;

voiddelay(uintz)//延时函数

{

uintx,y;

for(x=z;x>0;x--)

 

.

.

 

for(y=110;y>0;y--);

}

/*****按键扫描子函数*****/

voidkeyscan()

{

P2=0xf0;

temp=P2;

temp&=0xf0;

if(temp!

=0xf0)

{

delay(5);//延时消抖

 

P2=0xf0;//二次读回

temp=P2;

temp&=0xf0;

if(temp!

=0xf0)

{

log=1;//有按键

P2=0xfe;

temp=P2;

if(temp!

=0xfe)

switch(temp)

{

 

case0xee:

num=0;bot=1;break;//bot=1表示是波特率按键

case0xde:

num=4;break;

case0xbe:

num=8;break;

case0x7e:

num=12;break;

}

P2=0xfd;

temp=P2;

if(temp!

=0xfd)

switch(temp)

{

case0xed:

num=1;bot=1;break;//bot=1表示是波特率按键

case0xdd:

num=5;break;

case0xbd:

num=9;break;

case0x7d:

num=13;break;

}

P2=0xfb;

 

.

.

 

temp=P2;

if(temp!

=0xfb)

switch(temp)

{

case0xeb:

num=2;bot=1;break;//bot=1表示是波特率按键

case0xdb:

num=6;break;

case0xbb:

num=10;break;

case0x7b:

num=14;break;

}

P2=0xf7;

temp=P2;

if(temp!

=0xf7)

switch(temp)

{

 

case0xe7:

num=3;bot=1;break;//bot=1表示是波特率按键

case0xd7:

num=7;break;

case0xb7:

num=11;break;

case0x77:

num=15;break;

}

//等待按

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1