基于AVR单片机的485通信系统设计 下载本文

蚌埠学院本科毕业设计(论文)

图4.4 最小系统图

ATmega16单片机的最小系统主要包括电源电路、振荡电路和复位电路等。 图中的复位电路是由按键复位和上电复位这两部分组成的。只要最小脉冲宽度低于复位低电平持续的时间时触发复位过程就被触发,就算此时没有时钟信号处于运行的状态。而且当外加信号等于或大于复位门限电压时,这个时候延时周期就开始了。延时结束后MCU就开始启动。

时钟电路是给通信主机提供正常工作时序不可或缺的部分是 时钟电路,只有在同一个时序下主机才能完成正常的工作。而主芯片的内部的振荡器是由一个反相放大器构成的,可以由它产生时钟。时钟的产生通常有两种方式,即内部方式和外部方式。上图给出的是内部方式。

- 11 -

张苹苹:基于AVR单片机的485通信系统设计

5 软件设计

5.1 IAR FOR AVR软件的介绍

在所有AVR的编译器中,虽然编译效率最高的编译器是IAR for AVR , 可是每件事情都不会是十全十美的,所以相对来说IAR for AVR 的设置项也很多,如果我们使用不当就会出现很多没见过的问题。下面来介绍一下需要注意的几个问题。 (1) 关于堆栈的设置问题

首先,关于GCC 和 IAR 分配堆栈的方法是不一样的,IAR是先分配堆栈空间,这就是说我们定义了一个全局数组把它作为堆栈空间,而堆栈的初始化则是堆栈空间的最高地址;而GCC 就不需要预先分配堆栈,它是把 RAM 所余下的空间自动设置为堆栈空间, RAM 最高地址为堆栈初始。 IAR For SAM8 默认的堆栈是 32 字节,不够用的话,就要增大,但是增大到多少比较合适呢?首先呢,把你的程序编译,这样就可以看到程序到底用了多大本身的RAM。然后呢我们需要再查看芯片的 Data sheet,这样我们就可以知道芯片总共有多大的 RAM了。

举个例子,好了,现在我们就能够知道还余下多少 RAM 了,就是208-142=66(Byte)。

在前面我们所说的IAR 的 CSTACK,NEAR_HEAP 和 RSTACK 都是最初分配好的,占用的存储空间是不变的,就是说等于设定了一个全局数组, 而IAR的堆栈策略与GCC的堆栈策略是完全不同的,GCC的堆栈大小并不是早先就已经分配好了的,它是把 SRAM 里面所余下的空间当成堆栈空间。 如果是 GCC,那么编译器就会自动把余下的 RAM 设置为数据的堆栈空间 。

- 12 -

蚌埠学院本科毕业设计(论文)

(2) 关于代码的优化

当我们在使用 IAR 开发 C 语言程序的时候,开发环境就会给出一个优化的选项,总共有4 档,分别是None、Low、Medium以及High档。但是我们在使用时应该知道,不是在所有情况下都能够进行优化,在某些时候优化后就不能正常运行了,比如说在没有优化时运行的代码。

(3) 关于 输入输出端口的位操作

和KEIL差不多,在 IAR For AVR 中我们也可以选择直接进行位操作,就这一方面来说它要比 ICC AVR好的多。

(4 )关于内存模型

在 AVR_IAR C/C++编译器中,我们可以选择一种特定的存储模式,如memory model(记忆模式),进行设置一些访问方法为默认的存储器访问方法。总共有三种可以使用的存储模式,分别为Tiny,Small 和 Large模式。哪种模式可以使用需要看你的处理器选项。假如你不指定一种存储模式,编译器就会在设定v0、v1、v2、v3、v5 选项下默认为 Tiny,并且-v4 和-v6 选项下的访问方法为 Small。

5.2 通信协议

5.2.1 串行通信协议RS232和RS485的比较

RS-232与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或者协议等,并且在这个基础上我们可以建立自己的高层通信协议。

RS-232与RS-485都是典型的串行数据接口标准,都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,EIA又于1983年在RS-232基础上升级了RS-485通信协议的标准,并且添加了多点以及双向通信的能力,就是说允许不止一个发送器同时连接在一条总线上,并且能够同时增加发送器的驱动能力以及改善冲突的保护特性。

5.2.2 通信过程

一次完整的通信过程可以分为3个部分:主机处理输入数据、通信以及从机显示输入的数据。第一部分,主机判断输入的键值,并且将其进行打包处理;第二部分是通信阶段,即是把数值经过打包处理好的发送给寄存器,然后再从寄存器发送给接收机;第三部分是接收机显示部分,把打包好的数据处理之后再还原成原来的数据,然后通过查表以数码管的形式显示出来;此时接收机清除接收缓冲区及相关变量,准备与主机下次

- 13 -

张苹苹:基于AVR单片机的485通信系统设计

通信。任何一次完整的通信过程都是由发送机即主机方发起的,从机在无键值输入的情况下处于接收状态。

5.3 主机程序

5.3.1 主程序总流程图

多机通信的软件设计主要分为:系统初始化、确定主从机的关系、主机发送数据以及从机接收数据这四大部分;而且每个功能模块都是通信系统不可或缺的,只有这些都具有主机才能够很好的对外的部信息进行采集、分析以及解决等。下面来介绍一下这几个部分。

1.系统初始化:系统初始化包括串口初始化以及显示模块初始化。主要实现串口中断的开启、显示模块初始化、定时器的选择以及其工作方式的选择、总中断的开启以及串行口工作方式的选择等功能。

2.有键按下:通信双方在进行通信的时候需要确定双方的主从关系,然后相应的键盘按下,则会显示所传输的数据。

3.键值处理:在这一部分,通信主机会发送信号给通信从机,并且通信主机发送的数据经过处理后再传输给从机。

4.发送及显示数据:需要发送的数据需要经过处理之后才能发送给从机。 5.关闭显示:从机显示完数据之后我们就可以关闭显示,这时就不需要再传输数据和显示数据。

6.从机接收数据:这一部分功能比较容易,只要能够完成从机不断的接收主机发送的数据的就可以了。

- 14 -