双单片机的串行通信.docx

上传人:b****5 文档编号:11543902 上传时间:2023-03-19 格式:DOCX 页数:12 大小:209.81KB
下载 相关 举报
双单片机的串行通信.docx_第1页
第1页 / 共12页
双单片机的串行通信.docx_第2页
第2页 / 共12页
双单片机的串行通信.docx_第3页
第3页 / 共12页
双单片机的串行通信.docx_第4页
第4页 / 共12页
双单片机的串行通信.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

双单片机的串行通信.docx

《双单片机的串行通信.docx》由会员分享,可在线阅读,更多相关《双单片机的串行通信.docx(12页珍藏版)》请在冰豆网上搜索。

双单片机的串行通信.docx

双单片机的串行通信

 

双单片机的串行通信

一、总体设计

1、系统概述

MCS-51单片机系列是Intel公司推出的功能强、速度快的8位高档单片微型计算机系列产品,是当前工业测试系统中较理想的一种,内部有一个可编程的全双工的串行通信口,即串行通信和发送缓冲器(SBUF),这两个在物理上是独立的接收发送器,既可以发送数据,也可以接收数据。

全双工的串行通信只需要一根输出线(发送数据TXD)和一根输入线(接收数据RXD)。

串行通信中主要有两种技术问题,一个是数据传送,另一个是数据转换。

具体说,在发送端,要把并行数据转换为串行数据;而在接收端,则要把接收到的串行数据转换为并行数据。

串行数据传送是将构成字符的每个二进制数据按一定的顺序进行传送的方式,串行通信协议规定字符数据的传送格式,每个串行数据由起始位、数据位、奇偶校检位和停止位组成。

本系统就是利用单片机的串行口,以串行通信方式,实现两单片机之间的数据交换,信息共享。

2、设计要求

功能要求:

①实现两片51单片机之间信息的串行通信。

②通信信息由小键盘(0~F)输入,发送机每按一次任意键,即刻发送到接收机。

③接收机按接收的顺序在本机的4位LED显示器上从右往左挤兑显示。

④没有接收到信息前两处的4位LED显示器不显示。

⑤每一个单片机既可以是接收机也可以是发送机。

3、设计方案

本系统利用单片机的串行口,由软件和硬件两部分协调实现两单片机的串行数据传输。

硬件电路以AT89C5l单片机为核心,外围电路包括键盘电路(数据的输入),显示电路(数据的输出)。

工作

在硬件电路基础上的软件主要完成数据

输入,存储,显示,发送和接收。

由于

两单片机相距很近,可以直接将其串行

口相连。

系统整体电路图如图1所示

图1系统整体电路框

二、设计原理

此设计以AT89C5l单片机为核心,利用其内部的串行口,通过硬件与软件相结合的方式,实现双机的全双工的串行通信。

硬件电路包括键盘电路,显示电路,单片机主控电路,串行通信线和电源电路。

软件包括键盘扫描程序,显示程序,发送程序和接受程序。

发送和接收都采用中断方式。

硬件电路的组成如图2所示。

 

图2硬件电路的组成

由于两个单片机应用系统相距很近,近程通信时(通信距离小于15米),可以不使用调制解调器,将它们的串行口直接相连就可以实现全双工的串行通信。

1、硬件设计

(1)系统组成

下面就以1号机为例,介绍硬件。

硬件电路包括AT89C5l单片机,共阳性LED数码管以及传输线。

AT89C5l是一个低电压,低功耗,高性能CMOS8位单片机,40个引脚,32个外部双向输入/输出(I/0)端口,同时内含2个外设中断口,2个16位可编程定时计数器,2个全双工串行通信口。

AT89C5l可以按照常规的方法进行编程,也可以在线编程。

片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统。

(2)单片机主控电路

AT89C5l是片内有ROM/EPROM的单片机,用其构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可。

①晶振电路

AT89C5l单片机的时钟信号通常有两种形式:

一种是内部时钟方式,另外一种是外部时钟方式。

内部时钟方式是在单片机的XTALI和XTAL2引脚外接石英晶体,就构成了自激震荡并在单片机内部产生时钟脉冲信号。

本设计采用内部时钟方式,可以不受设各条件的影响。

复位电路

当在AT89C5l单片机的RST引脚引入高电平并保持两个机器周期时,单片机内部就执行复位操作。

在实际应用中,复位操作有两个基本形式:

一种是上电复位,另一种是上电与按键均有效的复位。

本系统采用上电与按键均有效的复位。

开机瞬间RST引脚获得高电平,随着电容C的充电,RST引脚的高电平将获得下降。

RST引脚的高电平只能保持足够的时间(2个机器周期),单片机就可以进行复位操作。

另外在单片机运行期间,还可以利用按键完成复位操作。

(3)键盘电路

按键实际上就是简单的开关,当按键接下时,相当于开关闭合;当按键松开时,相当于开关断开。

操作员通过键盘输入数据或命令,实现简单的人机对话。

按键有独立式按键和行列式按键。

独立式按键的各个按键相互独立,每一个按键独立地与一根数据输入线相连。

独立式按键配置灵活,软件结构简单,但每个按键必须占用一根口线,在按键数量多时,口线占用多。

所以,独立式按键常用于按键数量不多的场合。

由于此系统所用的按键较少,故选用独立式按键。

(4)显示电路

显示器是单片机应用系统常用的设备,主要包括LED和LCD。

LED显示器由若干个发光二极管组成。

当发光二极管导通时,相应的一个笔画或一个点就发光,控制相应的二极管导通,就能显示出对应字符。

七段LED通常构成字型“8”,

还有一个发光二极管用来显示小数点。

由于LED显示器成本低廉,配置灵活,并且与单片机接口方便,所以本系统选用七段LED显示器(共阳极)

2、系统软件设计

(1)总体方案

此系统欲实现双机的全双工的串行通信。

甲乙两机的内部软件是完全相同的,1号机和2号机都能发送和接收数据信息能同时进行数据交换。

假设1号机为发送方,2号机为接收方。

当接下发送按键时,1号机开始发送数据,存储在R7中并通过显示器显示接下2号机的接收按键,2号机开始接收数据,每接收一个数值就直接送到显示器显示。

本设计通过键盘输入数据。

利用软件控制键盘进行加1或者减1操作,可以使其输入0~F之间的任意一个数。

(2)模块说明

串行口工作方式

单片机的串行通信口是可编程的,在工作之前应该初始化,对它初始化编程只需将两个控制字分别写入特殊功能寄存器SCON[98H]和电源控制寄存器PCON[97H]即可。

串行控制寄存器SCON是一个特殊功能寄存器,用以设定串行口的工作方式、发送/接收控制以及设置控制状态标志。

字节地址为98H,可进行位寻址,SMO和SMI(SCON.7和SCON.6):

串行口工作方式选择位,可选择4种工作方式(见

表1)

SM0

SM1

方式

说明

波特率

0

0

0

移位寄存器

Fosc/12

0

1

1

10位异步收发器

可变

1

0

2

11位异步收发器

Fosc/12或Fosc/32

1

1

3

11位异步收发器

可变

表1串行口工作方式

本系统采用串行口方式1(SMO置0,SMI置1)进行通信,一帧信息为10位,其中有1个起始位,8个数据位和1个停止位。

中断口设定

AT89C5l单片机有5个中断源,在应用之前应该初始化。

本系统用到外部中断0(丽),外部中断1(丽),作为发送中断,入口地址是OOO3H。

当此键接下,转到中断服务程序(执行发送程序)。

丽作为接收中断,入口地址是OOl3H。

当此键接下,转到中断服务程序(执行接收程序)。

中断控制寄存器TCONFPITO位,IT1位应置0,采用电平触发方式。

中断允许控制寄存器IEFPEXO、EXI、ES位应置1,允许中断。

(3)键盘工作设定

本系统采用独立式按键结构。

对于是否有按键接下的信息输入方式有中断方式和查询方式,本系统采用查询方式。

本系统的键盘控制程序分为以下几个部分:

判断有无键接下;

用软件编程的方式控制键盘的输入数值;

③可靠的逻辑处理方法。

(4)显示工作设定

显示程序用查表法显示,七段数码管(共阳性)显示段选码如表2所示。

表2数码管显示段选码

显示字符

0

1

2

3

4

5

6

7

段选码

COH

F9H

A4H

BOH

99H

92H

82H

F8H

显示字符

8

9

A

B

C

D

E

F

段选码

80H

90H

88H

83H

C6H

AIH

86H

8EH

三、系统设计图

四、设计小结

我觉得做单片机课程设计是十分有意义的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?

如何把我们所学的专业基础课理论知识运用到实践中去呢?

我想做类似的课程设计就为我们提供了良好的实践平台。

在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了,无论是课本上的还是网上的都浏览了不少相关的程序,从中也借鉴了别人的思想,开阔了自己的思路。

做单片机课程设计,对设计者对软硬件的理解和掌握的要求都比较高。

在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

回顾这段时间以来自己从接到题目到编写出程序、画出电路原理图,自己真的收获不少。

无论是软件的使用还是对单片机内部资源的了解,自己的认识都加深了很多。

真希望能有多点的时间来把设计深入下去,把原理图做成实实在在的电路板,并在板子上实现设计的功能。

另外,这次课程设计让我感到了团队合作的重要性。

在团队中,我们互帮互助,对整个课程设计来说,这是至关重要的,缺少每一个人都会对我们的设计产生影响。

还有要感谢指导老师在我们遇到困难时,给予我们的建议与鼓励!

五、参考文献

1.单片机接口技术(C51版)张道德编著水利水电出版社

2.单片微型计算机原理及接口技术杨光友朱宏辉主编水利水电出版社

3.51单片机C语言应用程序设计实例精讲戴佳戴卫恒编著电子工业出版社

4.单片机语言C51典型应用设计刘文涛编著人民邮电出版社

5.μVision2单片机应用程开发指南尹勇李宇编著科学出版社

6.单片机控制实习与专题制作蔡朝洋编著北京航天航空大学出版社

 

附录:

1.主机发送程序

#include

#defineucharunsignedchar

ucharTAB[8];

uchari,sum;/*sum为求和校验*/

voiddelay(void)/*延时程序*/

{intj;

for(j=0;j<12000;j++);

}

voidscanf()

{/*键盘扫描程序*/

ucharj,k=0;

unsignedcharnum[4][4]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e

};

while

(1)

{

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

{

P1=0x0F;

delay();/*软件去抖动*/

if((P1&0x0F)!

=0x0F)

{

switch(P1)

{

case0x07:

i=3;break;

case0x0b:

i=2;break;

case0x0d:

i=1;break;

case0x0e:

i=0;break;

default:

break;

}

}

P1=0xF0;/*反转行和列上的电平*/

if((P1&0xF0)!

=0xF0)

{

switch(P1)

{

case0x70:

j=3;break;

case0xb0:

j=2;break;

case0xd0:

j=1;break;

case0xe0:

j=0;break;

default:

break;

}

TAB[k]=num[j][i];/*P1输出对应的按键值*/

}

}

}

}

voidinit(void)/*初始化程序*/

{

TMOD=0x20;

TH1=0xf3;/*波特率为2400bps*/

TL1=0xf3;

PCON=0x00;/*SMOD=0*/

TR1=1;/*开T1中断*/

SCON=0x50;/*接收允许*/

}

voidsend(void)/*发送函数*/

{

do

{

SBUF=0xaa;/*发送握手信号0XAA*/

while(!

TI);/*等待接收*/

TI=0;/*传送完复位*/

while(!

RI);/*等待接收*/

RI=0;/*接收完复位*/

}

while(SBUF!

=0xbb);/*甲机收到BBH后就把数码表*/

//TAB[8]/*中的8个数据发送给乙机,并发送校验和*/

do

{

sum=0;

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

{

SBUF=TAB[i];/*发送段选码*/

sum+=TAB[i];/*和校验*/

while(!

TI);

TI=0;

}

SBUF=sum;/*发送校验和*/

while(!

TI);

TI=0;

while(!

RI);

RI=0;

}

while(SBUF!

=0);//等待接收

}

main()//主程序

{

init();

while

(1)

{

scanf();

send();

}

}

 

2.从机接受程序

#include

#defineucharunsignedchar

voidinit(void)//初始化程序

{TMOD=0x20;

TH1=0xf3;//波特率为2400bps

TL1=0xf3;

PCON=0x00;

TR1=1;

SCON=0x50;

}

voiddelay(void)/*延时程序*/

{ucharj;

for(j=0;j<12000;j++);

}

voidreceive(void)//接收函数

{uchari,sum;

ucharTABS[4];//定义接收数组

do{while(!

RI);RI=0;}

while(SBUF!

=0xaa);//接收完0XAA则向主机发送0XBB

SBUF=0xbb;while(!

TI);TI=0;

while

(1)

{sum=0;

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

{while(!

RI);RI=0;

TABS[i]=SBUF;//装人接收的数据

sum+=TABS[i];

}

while(!

RI);RI=0;

if(SBUF==sum)//和校验

{SBUF=0X00;while(!

TI);TI=0;break;}

else

{SBUF=0xff;while(!

TI);TI=0;}

}

while

(1)//p2口为位选码

P2=0xfe;

{for(i=0;i<=3;i++)

{P0=TABS[i];//p0口输出段选码

P2=P2<<1|0x01;//位选码左移,并或0X01实现动态显示

delay();}//延时

}

}

voidmain(void)//接收主函数

{init();

receive();

}

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

当前位置:首页 > 考试认证 > 财会金融考试

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

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