好文档 - 专业文书写作范文服务资料分享网站

单片机串口通信设计方案

天下 分享 时间: 加入收藏 我要投稿 点赞

while(RI!=1); RI=0; //等待从机回发地址

if(RB8==1) //如果RB8为1,是地址帧 {

SM2=1;ES=1;goto reback; //SM2置1,开串行中断,跳转到reback }

a=SBUF;

if(a==0x01) //从机接收主机的数据 {

SBUF=0X01; //while(TI!=1); TI=0; //while(RI!=1); RI=0; //if(RB8==1) //{

SM2=1;ES=1; goto reback; //SM2}

rdata=SBUF; //while(RI!=1); RI=0; //SM2=1; ES=1; //SM2}

else {

if(a==0x02) //{

SBUF=0X02; //while(TI!=1); TI=0; //SBUF=tdata;

while(TI!=1); TI=0; //SM2=1; //SM2ES=1; //} else {

SBUF=0X80; //while(TI!=1); TI=0; //SM2=1; //SM2ES=1; //} }

reback:; //发送命令帧0X01,从机准备好接收数据 等待命令发送结束

等待数据接收完成

如果RB8为1,是地址帧 置1,开串行中断,跳转到reback 接收主机发送的数据 等待数据接收完成 置1,开串行中断 如果命令帧是0x02 回发命令帧0X02,从机准备好发送数据 等待命令发送完成 等待数据发送完成

置1,只接收地址帧 开串行中断

命令非法,发状态 等待命令发送结束

置1,只接收地址帧 开串行中断 跳转标号

}

系统从机外部中断INT0中断服务程序流程图如图4.5所示。 开始

保护现场系统从机外部中断INT0中断服务程序:

void ISR0(void) interrupt 0

从机发送的数据tdata+1{

Ntdata<9?tdata++; //要发送的数据加1

Yif(tdata>=9)tdata=0; //如果数据大于8,清零

tdata=0}

恢复现场结束图4.5 外部中断服务程序流程图

4.3本章小结

本章主要完成系统的软件设计,通过对功能的分析,软件流程图的绘制,编写了系统的模块化子程序,多机串行通信的主机和从机程序。用C51编写的程序具有可移植性,直观明了,易于读写和修改的特点,是汇编用语言所无法比拟的。

5.系统仿真与调试

Proteus 软件包括汇编语言编译系统,可以在软件平台上对单片机进行可视化调

试。但是,现在的大部分的单片机开发人员都用C 语言对单片机进行编程控制。应用TCP/IP 协议,Proteus 与Keil 的联调很好地解决了Proteus 自带的编译系统无法对C 语言进行编译的问题[4]。

5.1 生成单片机可执行文件

要进行仿真和调试,还必生成单片机可执行文件.hex文件,.hex文件时是在Keil集成开发环境中生成的,生成过程[7][11]如下:

双击Keil uViosion3图标 ,进入Keil uViosion3集成开发环境,如图5.1所示。

生成工程文件,单击“Project/New uVision Project”,在弹出的对话框中,键入工程名为“串行通信主机程序”,单击保存,如图5.2所示的对话框。选择Atmel公司的AT89C51作为应用和实验对象,弹出启动代码添加提示对话框选择“否”。返回集成开发环境界面,单击“Feil/New”,然后单击“Feil/Save”,在弹出的对话框中输入文件名“ MainShangWeiji.c”(后缀名一定要有,本系统程序用C51语言编写,后缀为.C),单击“保存”将文件存储到“串行通信主机程序”所在的文件夹中。

图5.1 Keil uVision 3集成开发环境

图5.2 工程器件选择对话框

图5.3 文件组快捷菜单

由于本系统用到了LCD1602,所以要用到

LCD1602的驱动程序和头文件,因此要添加LCD1602.c和LCD1602.h文件(此程序在网上可以查到,不必自己编写),为了便于在程序中改换接口,创建一个“hardware.h”文件。在源程序准备好以后,要将这些文件添加到项目中,在左侧“Projece Workspace”栏中右击“Source Group 1”,弹出如图5.3所示的文件快捷键菜单,选择“Add Files to Group‘Source Group 1’”,再在弹出的对话框中,文件类型选择“C Source file(*.c)”,添加“MainShangWeiji.c”和“LCD1602.c”;文件类型选择“Text file(*.txt;*.h;*.inc)”添加“LCD1602.h”和“hardware.h”文件,结果如图5.4所示。

为了编译项目并创建AT89C51单片机可执行文件*hex,则需对Optitions for Target 'Targer '进行相应设置。在左侧“Projece Workspace”栏中右击“Taget1”,选择“Optitions for Target 'Targer '”,在弹出如图5.5所示的对话框中,点击“Output”,在“Create Executable”下面的复选对话框中,单击Create HEX File

图5.5 选中Create HEX File 复选框

前面的复选框,进行选中。单击“确定”返回集成开发界面。

单击build taget图标 ,对目标文件进行编译,如图所示5.6所示。结果显示程序没有错误,有一个警告,可以忽略,并产生一个“串行通信主机程序.hex”文件。

利用同样的方法编译0#、1#和2#机的并生成“串行通信0号从机程序.hex”、“串行通信1号从机程序.hex”和“串行通信2号从机程序.hex”三个单片机可执行文件。

5.2基于Proteus的仿真与调试

本系统的主机程序和个下位机程序均在KEIL集成开发环境中进行编写,经过编译生成了四个单片机可执行文件“串行通信主机程序.hex”、“串行通信0号从机程序.hex”、“串行通信1号从机程序.hex”和“串行通信2号从机程序.hex”。

5.2.1系统仿真

打开在Proteus ISIS已经绘制好的仿真原理图,双击元器件U1弹出如图5.7所示的对话框。点击“Program File”后面的文件夹按钮,弹出文件列表,从中选择目标代码文件“串行通信主机程序.hex”,点击“OK”,即将十六进制单片机可执行成加载到单片机中,同样的方法分别将从机的目标代码文件加载到相应的单片机中,以备仿真。

图5.7 AT89C51单片机属性对话框

单击仿真按钮中最左边的按键 ,则进入全速仿真,出

图5.8 仿真结果

单片机串口通信设计方案

while(RI!=1);RI=0;//等待从机回发地址if(RB8==1)//如果RB8为1,是地址帧{SM2=1;ES=1;gotoreback;//SM2置1,开串行中断,跳转到reback}a=SBUF;
推荐度:
点击下载文档文档为doc格式
5ox666ze7k44p5c1cp2i5zpak1cslt00dc5
领取福利

微信扫码领取福利

微信扫码分享