单片机双机之间的串行通信设计.docx

上传人:b****6 文档编号:16485049 上传时间:2023-07-14 格式:DOCX 页数:20 大小:836.33KB
下载 相关 举报
单片机双机之间的串行通信设计.docx_第1页
第1页 / 共20页
单片机双机之间的串行通信设计.docx_第2页
第2页 / 共20页
单片机双机之间的串行通信设计.docx_第3页
第3页 / 共20页
单片机双机之间的串行通信设计.docx_第4页
第4页 / 共20页
单片机双机之间的串行通信设计.docx_第5页
第5页 / 共20页
单片机双机之间的串行通信设计.docx_第6页
第6页 / 共20页
单片机双机之间的串行通信设计.docx_第7页
第7页 / 共20页
单片机双机之间的串行通信设计.docx_第8页
第8页 / 共20页
单片机双机之间的串行通信设计.docx_第9页
第9页 / 共20页
单片机双机之间的串行通信设计.docx_第10页
第10页 / 共20页
单片机双机之间的串行通信设计.docx_第11页
第11页 / 共20页
单片机双机之间的串行通信设计.docx_第12页
第12页 / 共20页
单片机双机之间的串行通信设计.docx_第13页
第13页 / 共20页
单片机双机之间的串行通信设计.docx_第14页
第14页 / 共20页
单片机双机之间的串行通信设计.docx_第15页
第15页 / 共20页
单片机双机之间的串行通信设计.docx_第16页
第16页 / 共20页
单片机双机之间的串行通信设计.docx_第17页
第17页 / 共20页
单片机双机之间的串行通信设计.docx_第18页
第18页 / 共20页
单片机双机之间的串行通信设计.docx_第19页
第19页 / 共20页
单片机双机之间的串行通信设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机双机之间的串行通信设计.docx

《单片机双机之间的串行通信设计.docx》由会员分享,可在线阅读,更多相关《单片机双机之间的串行通信设计.docx(20页珍藏版)》请在冰点文库上搜索。

单片机双机之间的串行通信设计.docx

单片机双机之间的串行通信设计

Preparedon24November2020

 

单片机双机之间的串行通信设计

专业方向课程设计报告

题目:

单片机双机之间的串行通信设计

单片机双机之间的串行通信设计

一.设计要求:

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

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

2、方案论证:

方案一:

以两片51单片机作为通信部件,以4*4矩阵键盘作为数据输入接口,通过16个不同键值输入不同的信息,按照51单片机的方式3进行串口通信,从机采用中断方式接收信息并按照通信协议改变波特率或者用I/O口输出、CD4511译码、数码管显示相关数据,整个系统的软件部分采用C语言编写。

方案二:

整个系统的硬件设计与方案一样,但是通信方式采用方式一进行通信,主从机之间的访问采用查询方式,数据输出直接由单片机的译码程序输出译码数据,同时软件编写采用汇编语言。

两种方式从设计上来说各有特色,而且两种方式都应该是可行的。

方案一中按照方式三通信可以输出九位数据而方式一只能输出八位数据,但就本题的要求来说方式一就可以了。

主从机之间的交流采用中断方式是一种高效且保护单片机的选择,但是相比之下本人对查询方式的理解更好一些。

数码管的显示若采用CD4511译码则直接输出数据就可以了,但是这样会增加硬件陈本,而且单片机的资源大部分都还闲置着,所以直接编写一段译码程序是比较好的做法。

另外在软件编写上,采用C语言在后续设计中对硬件的考虑稍少一些,换言之采用汇编可以使自己对整个通信过程及单片机的部分结构有更清晰地认识所以综合考虑采用方案二。

3、理论设计:

采用AltiumDesigner绘制的原理图(整图)

本系统主要包括五个基本模块:

单片机最小系统(包括晶振电路、电源、复位电路及相关设置电路)、4*4矩阵键盘、功能控制电路、数据显示电路、波特率更改指示电路。

本设计的基本思路是通过控制口选择将要实现的功能,然后矩阵键盘输入数据,单片机对数据进行处理(加校验码、设置功能标志位),然后与从机握手,一切就绪之后后就开始发送数据,然后从机对接收数据校验,回发校验结果,主机根据校验结果进行下一步动作,或者重发,或者进入下一数据的发送过程,然后按照此过程不段循环,直到结束。

单片机最小系统:

接上电源和地,晶振电路提供脉冲,加上复位电路,将EA接入高电电平选择片内程序存储器。

这是一个单片机能够工作的最低设置。

4*4矩阵键盘:

将矩阵键盘接入p1口通过按键扫描程序读写P1口从而判断有无安键按下,通过查键值程序确定其键值从而得到输入数据。

这是整个系统的输入接口。

功能控制电路:

控制键(图中为K3)被按下时为低电平,否则为高电平,这样就可以根据读入的的电平差别控制通信系统的功能。

高电平时让从机显示接收到的数据,低电平从机更改波特率。

数据显示模块:

译码程序将获得的数据译成可直接显示的段码输到p2口,用数码管显示。

为防止单片机的带负载能力不足,本设计中加了上拉电阻使数码管显示更清晰。

波特率更改指示电路:

在从机更改波特率之后同时给P1口写数是相应指示灯亮,指示此时两机之间通信的波特率为多少。

主机软件流程图从机软件流程图

 

4、电路仿真及仿真结果分析:

下图是系统软件仿真的结果,以下现象表明系统能正常工作并实现预设结果。

5、作品功能和使用说明:

6、

接上电源系统开始工作,功能件控制从机功能,键盘输入数据,主机发送数据,从机接收数据。

当控制键未被按下时,从机显示接收到的数据;控制键被按下时从机不再显示数据,只更改波特率,同时点亮相应的指示灯。

指示灯会指示当前工作的波特率,灯不亮时单片机以默认波特率工作。

系统断电时结束通信。

7、心得体会:

经过这几天的努力终于将设计完成了。

整个过程虽然遇到很多问题,但是确实感觉又学到了了不少东西。

整个系统的设计很快就决定下来了,但是在软件编写完之后进行软件仿真时,一直不能不能成功。

然后一步步的查错,从功能流程图开始,一步步检查,理清系统的时序逻辑关系。

确保逻辑功能没问题后,对软件进行调试,逐步调试、设置相关寄存器、查看相应的io口,然后发现这里也没什么问题。

于是直接在程序中设置标志位,观察程序的运行情况。

后来发现问题主要出现在两个地方:

一是软件不能自动返回,重复执行,于是在程序中增加了循环语句和返回语句;二是没有正确保存数据和取数据,主要体现在查键值后没有保护数据及进行校验后没有进行重取原数据,这是两个非常易错的问题。

另外功能上单片机之间的“握手”和等待通讯过程也是非常重要的。

另外在硬件制作时也遇到了一些问题,主要是在制作PCB板时由于腐蚀过度导致出现了很多断路,以至调试时得检查电路,同时对整个系统的美观造成很大影响。

不过,这次设计确实让我对通信过程有更深的理解。

七、参考文献

[1]李建忠.单片机原理及应用(第二版.西安电子科技大学出版社)

[2]何小艇.电子系统设计(第四版.浙江大学出版社)

系统程序:

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

*约定:

主机发送呼叫信号"0EH",咨询从机是否可以接受数据*

*从机发送"01H"表示可以接受,否则发送"02H"表示暂时不能接受数据*

*主机只有收到了应答信号"01H"才向从机发送数据,否则继续呼叫*

*主机收到"0FH"表示发送正确,收到"F0H"表示发送错误*

*设置:

串口工作于方式1,定时器做波特率发生器工作于方式2,SMOD=1,*

*波特率为1200时计数初值为D0,2400--E8H,4800-F4H,9600-FAH*

*两片单片机开始波特率设为4800*

*通过按键进行功能选择,按下=0设置波特率未按=1数据显示*

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

主机程序:

/*****************发送程序********************/

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOVSP,#60H

MOVTMOD,#20H;置定时器/计数器1工作于方式2定时

MOVTL1,#0F4H;置定时器/计数器1初值,初始波特率为4800

MOVTH1,#0F4H;置重装值

MOVPCON,#80H;SMOD=1

MOVSCON,#50H;串行口工作于方式1

SETBTR1

/****************首先进行查键子程序***************/

BEGAIN:

ACALLKEY

MOVR1,A

ACALLHUJIAO

AJMPBEGAIN

/************按键扫描****************/

KEY:

ACALLKS1;调用判断有无键按下子程序

JNZLK1;有键按下(A)=0,

AJMPKEY

LK1:

ACALLDELAY

ACALLKS1

JNZCKEY

AJMPKEY

CKEY:

MOVR2,#7FH

MOVR4,#00H

CKEY1:

MOVP1,R2

JB,LONE

MOVA,#00H

AJMPLPK;转到键值计算子程序

LONE:

JB,LTWO

MOVA,#04H

AJMPLPK

LTWO:

JB,LTHR

MOVA,#08H

AJMPLPK

LTHR:

JB,NEXT0

MOVA,#0CH

LPK:

ADDA,R4

PUSHACC

LK3:

ACALLKS1

JNZLK3

ACALLDELAY

POPACC

RET

NEXT0:

INCR4

MOVA,R2

JNB,KEND

RRA

MOVR2,A

AJMPCKEY1

KEND:

AJMPKEY

KS1:

MOVP1,#0FH

MOVA,P1

CPLA

ANLA,#0FH

RET

/************然后呼叫从机***************/

HUJIAO:

CALLDELAY

MOVA,#0EH

CPL

MOVSBUF,A

WAIT1:

JBCTI,TXYES;等待发送完成

SJMPWAIT1

TXYES:

JBCRI,NEXT1;等待从机回答

SJMPTXYES

NEXT1:

MOVA,SBUF;判断从机是否同意,不同意则继续呼叫

CJNEA,#01H,HUJIAO

PANDUAN:

JB,XSHU;功能键被按下,则发送数据设置波特率,否则只显示发送数据

SHEZ:

MOVA,R1

SETB;=1显示=0设置波特率

MOVC,P

MOV,C

MOVSBUF,A

WAIT2:

JNBTI,WAIT2

CLRTI

WAITC1:

JNBRI,WAITC1

CLRRI

CPL

MOVA,SBUF

CJNEA,#0FH,SHEZ

MOVA,R1

ANLA,#0FH

CJNEA,#00H,L1

MOVTL1,#0D0H;重设波特率为1200

MOVTH1,#0D0H

LJMPFH

L1:

CJNEA,#01H,L2

MOVTL1,#0E8H;重设波特率为2400

MOVTH1,#0E8H

LJMPFH

L2:

CJNEA,#02H,L3

MOVTL1,#0F4H;重设波特率为4800

MOVTH1,#0F4H

LJMPFH

L3:

CJNEA,#03H,FH

MOVTL1,#0FAH;重设波特率为9600

MOVTH1,#0FAH

LJMPFH

XSHU:

MOVA,R1;只显示数字时,A的高位不处理直接发送

MOVC,P

MOV,C

MOVSBUF,A

WAIT3:

JNBTI,WAIT3

CLRTI

WAITC:

JNBRI,WAITC

CLRRI

MOVA,SBUF

CJNEA,#0FH,XSHU

CLR

FH:

RET

/**********延时子程序*********/

DELAY:

MOVR6,#0FFH

LOOP1:

DJNZR6,LOOP1

RET

JS:

END

从机程序:

/*****************接收程序********************/

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOVSP,#60H

RSTRT:

MOVTMOD,#20H;置定时器/计数器1工作于方式2定时

MOVTL1,#0F4H;置定时器/计数器1初值,初始波特率为4800

MOVTH1,#0F4H;置重装值

MOVPCON,#80H;SMOD=1

MOVSCON,#50H;串行口工作于方式1

SETBTR1

JIESHOU:

CLRTI

JNBRI,JIESHOU

CLRRI

MOVA,SBUF

CJNEA,#0EH,FA2

FA1:

MOVA,#01H

MOVSBUF,A

CPL

WAIT1:

JBCTI,RX

SJMPWAIT1

FA2:

MOVA,#02H

MOVSBUF,A

WAIT2:

JBCTI,JIESHOU

SJMPWAIT2

RX:

CLRTI

JNBRI,RX

CLRRI

MOVA,SBUF

MOVC,P

MOVR1,A

JCFAF0

FA0F:

MOVA,#0FH

MOVSBUF,A

WAIT3:

JNBTI,WAIT3

CLRTI

SJMPCHULI

FAF0:

MOVA,#0F0H

MOVSBUF,A

WAIT4:

JNBTI,WAIT4

CLRTI

LJMPRX

CHULI:

MOVA,R1

JB,SHEZ;=1显示=0设置波特率

XIANS:

ANLA,#0FH

LCALLDISPLAY

LJMPJS

SHEZ:

MOVP2,#00H

ANLA,#0FH

CJNEA,#00H,L1

MOVTL1,#0D0H;重设波特率为1200

MOVTH1,#0D0H

MOVP1,#0FEH;CLR

LJMPJS

L1:

CJNEA,#01H,L2

MOVTL1,#0E8H;重设波特率为2400

MOVTH1,#0E8H

MOVP1,#0FDH;CLR

LJMPJS

L2:

CJNEA,#02H,L3

MOVTL1,#0F4H;重设波特率为4800

MOVTH1,#0F4H

MOVP1,#0FBH;CLR

LJMPJS

L3:

CJNEA,#03H,JIE

MOVTL1,#0FAH;重设波特率为9600

MOVTH1,#0FAH

MOVP1,#0F7H;CLR

JIE:

LJMPJS

/**********延时子程序*********/

DELAY:

MOVR6,#03FH

LOOP1:

DJNZR6,LOOP1

RET

/**********译码程序**********/

DISPLAY:

CJNEA,#00H,LT1

MOVA,#00111111B;0

SJMPLAST

LT1:

CJNEA,#01H,LT2

MOVA,#00000110B;1

SJMPLAST

LT2:

CJNEA,#02H,LT3

MOVA,#01011011B;2

SJMPLAST

LT3:

CJNEA,#03H,LT4

MOVA,#01001111B;3

SJMPLAST

LT4:

CJNEA,#04H,LT5

MOVA,#01100110B;4

SJMPLAST

LT5:

CJNEA,#05H,LT6

MOVA,#01101101B;5

SJMPLAST

LT6:

CJNEA,#06H,LT7

MOVA,#01111101B;6

SJMPLAST

LT7:

CJNEA,#07H,LT8

MOVA,#00000111B;7

SJMPLAST

LT8:

CJNEA,#08H,LT9

MOVA,#01111111B;8

SJMPLAST

LT9:

CJNEA,#09H,LT10

MOVA,#01101111B;9

SJMPLAST

LT10:

CJNEA,#0AH,LT11

MOVA,#01110111B;A

SJMPLAST

LT11:

CJNEA,#0BH,LT12

MOVA,#01111111B;B

SJMPLAST

LT12:

CJNEA,#0CH,LT13

MOVA,#00111001B;C

SJMPLAST

LT13:

CJNEA,#0DH,LT14

MOVA,#00111111B;D

SJMPLAST

LT14:

CJNEA,#0EH,LT15

MOVA,#01111001B;E

SJMPLAST

LT15:

CJNEA,#0FH,LAST

MOVA,#01110001B;F

LAST:

MOVP2,A

RET

JS:

LJMPJIESHOU

END

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2