当前位置:首页 > 嵌入式 > 嵌入式硬件

摘 要:介绍AVR单片机ATmega16和计算机的串行通信的软、硬件设计,采用Visual Basic6.0中的MSComm通信控件实现计算机与单片机ATmega16之间的串行通信。文章详细阐述了程序的设计流程,并给出了部分程序代码。实验证明该系统可以实现ATmega16与计算机之间的通信。
关键词: ATmega16;计算机;串行通信;Visual Basic6.0

AVR单片机[1]是美国ATMEL公司的精简指令集单片机,大多数是单周期指令,运行速度快。AVR单片机带有Flash程序存储器,擦写方便,支持ISP(串行在线下载),便于产品的调试、开发和更新。ATmega16是AVR单片机家族中的高档产品,是目前占主流、高信价比的AVR芯片之一。ATmega16的主要特点有:功耗低,在正常模式下只有1.1 mA;最高工作频率可达16 MHz;具有可擦写的16 KB的可编程Flash;内含8路10 bit ADC;具有高度灵活的串行通信设备USART,使用时只需设置相关的寄存器参数就可以实现串行通信。
EIA-232是常用的串行通信[2]技术标准之一,是目前通信工业中应用最广泛的一种串行接口,这是由于工业领域对产品的可靠性和稳定性的要求更高,EIA标准下的串行通信技术完全可以满足人们对工业设备传输的各种性能要求,使得EIA串口通信在系统控制[3-5]的范畴中一直占据着极其重要的地位。计算机和单片机的EIA-232串行通信是许多测控系统常用的一种通信解决方案。本文介绍了计算机和单片机ATmega16之间EIA-232串行通信的实现。计算机作为上位机,单片机作为下位机。
1 硬件设计
图1为EIA-232串行通信系统的结构框图。

EIA-232用正、负电压来表示逻辑状态,有效负电平的状态为逻辑1,有效正电平的状态为逻辑0;而单片机使用的TTL电平是以高、低电平表示1和0两种逻辑状态,因此将两者相连必需进行电平逻辑关系的变换。图1中的芯片MAX232就是将TTL和RS232电平相互转换的器件。
图2为EIA-232串行通信电原理图。电压VCC可采用5 V供电。

图2中的D Connector9是用于连接计算机串行口的接插件,5脚是接地端,3脚是发送端TXD,2脚是接收端RXD。TXD端的电平经MAX232转换为TTL电平后送给单片机的接收端;单片机发送出的TTL电平的数据经MAX232转换为RS232电平经RXD传送给计算机。ATmega16工作时使用系统内部时钟8 MHz,不需外接晶振,只需在烧录程序时设置相关参数即可使用内部时钟。图2中标号为UP的是一个10脚的接插件,通过这个接插件与程序烧录器相连即可实现单片机程序的烧录操作,方便产品升级。
2 上位机程序设计
上位机程序的编写采用Visual Basic6.0的编程环境。使用Visual Basic6.0的MSComm串行通信控件,非常容易实现串口通信,使用时要对串行通信的信息格式和协议进行设置。每个通信控件对应一个串口, 如果要访问多个通信口, 则要设计多个通信控件。
计算机与单片机之间的通信采用查询的工作方法,计算机作为上位机,单片机作为下位机。计算机主要负责发送控制命令以及数据的发送、接收、处理、计算和显示等功能。计算机的程序设计包括界面设计以及程序代码的编写。图3为设计的程序界面,图3中含有发送数据的输入框、接收数据的显示框和命令控件按钮。用鼠标点击“发送/接收”按钮后程序开始运行,接收数据与发送数据一致时说明通信成功,否则失败。

图4为程序设计的流程图。具体的程序代码包括串口的初始化及数据的发送与接收。初始化代码主要对串行通信的信息格式和协议进行设置,串口的初始化代码如下:
MSComm1. CommPort = 1 //使用COM1串口
MSComm1. Settings="9600,n,8,1"
//数据格式:波特率9600 b/s,无奇偶
校验,8 bit数据位,1 bit停止位
MSComm1. OutBufferCount = 0 //清空发送缓冲区
MSComm1. InBufferCount = 0 //清空接收缓冲区
MSComm1. InputMode = 1 //以二进制形式取回数据
MSComm1. InputLen=0 //一次读取缓冲区内全部数据
   If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If //打开串口
数据的发送和接收主要用到下面两句代码:
MSComm1.Output = outdata
backdata = MSComm1.Input
  由于篇幅的限制,其他代码不再给出。
3 下位机程序设计
  Atmega16内部的USART是一个通用的同步和异步串行接收器和发送器,其高度灵活,使用非常方便。与USART相关的寄存器有:UDR、UCSRA、UCSRB、UCSRC、UBRRH和UBRRL。UDR是USART发送数据和接收数据共享的数据寄存器,将数据写入UDR时实际操作的是通过UDR发送数据,读UDR时实际返回的是UDR中的数据。UCSRA、UCSRC和UCSRB为控制和状态寄存器,串行口的通信模式的设置可通过对UCSRA和UCSRB的相关数据位进行写操作来实现。数据帧包含的数据位数也是由UCSRB来确定,并与上位机保持一致。UBRRH和UBRRL为波特率寄存器,UBRRH和UBRRL是16位寄存器UBRR的高8位和低8位。UBRR的值是用于确定串行通信的波特率,对于异步正常模式(由UCSRA和UCSRB确定),波特率的计算公式为,对于9 600 b/s的波特率(和上位机一致),在fosc=8 MHz的情况下,通过计算得UBRR的值为51。对UBRR进行写操作时注意要先写高8位UBRRH,后写低8位UBRRL,否则写入无效。
  程序流程如图5所示。判断接收是否结束依据UCSRA中的标志位RXC,当RXC=1时表示接收没有结束,继续接收;当RXC=0时表示接收结束,可以从UDR中读出接收到的数据。判断发送是否结束依据UCSRA中的标志位TXC,当TXC=1时表示发送没有结束;当TXC=0时表示发送结束。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭