APP下载

单片机AT90S8515与PC的通讯

2013-03-11张红勇

网络安全与数据管理 2013年14期
关键词:波特率寄存器控件

张红勇,方 军

(1.西安理工大学,陕西 西安710048;2.西安工业大学,陕西 西安710032)

工业领域的测控系统,用作操作、监视的上位PC和用作控制的下位单片机之间必须要进行信息交换,串行通讯是两者之间常用的通讯方式。Atmel公司开发的AT90系列8位单片机是真正的RISC单片机,具备可多次编程的Flash程序存储器、EPROM数据存储器、可编程的URAT串行口及外部中断等,再加上使用方便的SL-AVR程序开发软件,可以在成本很低的情况下开发小型控制系统。本文主要介绍单片机AT90S8515与PC之间的串行通讯方法以及应用VB在PC上实现串行通讯的编程方法。

1 串行通讯的接口电路

PC的串行通讯可以采用Modern方式或零调制方式,采用Modern方式时,通讯伙伴必须有调制解调器,这也是标准的RS232方式;采用零调制方式时,通讯伙伴没有调制解调器,通讯时,双方保证各自输出的电平满足RS232接口的逻辑要求。

单片机AT90S8515的PD0和PD1口分别为有串行通讯功能的RXD和TXD,但是其输入/出是TTL电平,而PC的串行口是按照RS232标准设计的,两者的电平不匹配,不能直接连接。需要中间接口电路来完成电平转换。RS232电平与TTL电平转换用芯片MAX232E实现,电路如图1所示。

图1 电平转换电路

在 图1中,芯 片MAX232E的T1OUT、R1IN和GND分别与PC串口以232电平对应连接;而T1IN、R1OUT为TTL/CMOS电 平,与单片机AT90S8515的PD0(RXD)和PD1(TXD)对应连接。该电路为+5 V电源供电,其作用一方面使单片机发送的TTL信号转化为RS232的电平信号;另一方面使PC进来的RS232电平转换为单片机可接收的TTL/CMOS电平信号[1]。

2 单片机AT90S8515串行通讯原理及编程

2.1 单片机AT90S8515串行通讯原理

AT90系列的单片机带有一个全双工通用串行异步收发器(UART)。通讯时使用4个寄存器:(1)数据寄存器UDR,该寄存器是两个物理分离的、但分享同一个I/O地址的寄存器。当写入UDR寄存器时,UART的发送数据寄存器被写入;当读UDR寄存器时,读的是UART的接收数据寄存器。(2)状态寄存器USR,该寄存器是一个只读的寄存器,提供UART的状态信息。数据接收完成标志为RXC、发送完成标志为TXC,数据寄存器清空标志为UDRE、帧出错标志为FE、超时标志为OR。(3)控制寄存器UCR,该寄存器是一个读/写寄存器,用来设定是否启动发送或接收、定义数据位数、接收或发送造成的中断是否触发等控制逻辑。(4)波特率寄存器UBR,该寄存器是一个读/写寄存器,用来设定通讯的波特率。UBR通过公式UBR=FCK/BAUD/16-1确定,其中FCK为单片机的晶振频率,UBR表示波特率寄存器UBR中的值。

2.2 单片机AT90S8515串行通讯编程

单片机AT90S8515芯片的通讯编程按如下步骤进行[2]:

(1)对涉及通讯的数据、状态、控制寄存器和波特率寄存器进行初始化,若使用中断方法进行通讯,需同时对中断进行定义。

(2)发送数据编程,根据数据寄存器的清空标志UDRE,判断是否该发送下一个数据。语句如下:

(3)接收数据编程,通过循环检测数据接收完成标志RXC,确定是否可以读取新的数据。语句如下:

3 PC的串行通讯及编程方法

3.1 PC的串行通讯方法

PC的VB软件为用户提供了串口通讯使用的专用MSComm控件,MSComm控件唯一的事件是OnComm事件,对应的CommEvent属性是MSComm控件记录事件发生和错误的唯一属性,该属性用来配置通讯端口、传输数据、使用握手信号以及识别控件。使用该控件进行通讯时,有两种方法可以选择,查询方式或事件触发方式。其中,查询方式是通过周期性地检测CommEvent属性的数值代码判断发生了哪种通讯错误或者事件;而事件触发方式是利用OnComm事件的触发器进行事件捕获和处理,OnComm对输入数据进行连续检查,查明远端的接收者是否准备好接收新的数据,当满足OnComm的事件发生时,应用程序会自动设置CommEvent属性,跳到控件的OnComm通讯子程序[3]。

3.2 PC的串行通讯编程步骤

(1)通过CommEvent属性设置各通讯参数,打开通讯端口,其中各参数定义如下:

CommPort:设置通讯口号

Settings:设置波特率、奇偶校验、数据位和停止位参数

HandShaking:设置硬件握手协议

InBufferSize和OutBufferSize:设置输入、输出缓冲区的大小

InputLen:设置接收缓冲区中读出的字符数

InputMode:设置接收缓冲区的数据类型

RThreshold:设置要接收的字符数

SThreshold:设置接收允许的最小字符数

PortOpen:打开或关闭串口

(2)通过CommEvent属性的Output项发送数据。如果数据为文本数据,Output项定义为一个包含一个字符串的变量;如果数据为二进制格式,Output项则需定义为一个包含字节数组的变量。MSComm控件为字符串中的每个字符传输8位ANSI编码。如果发送一个ANSI字符串到应用程序,可以用文本数据格式发送,如果发送包含嵌入控制字符等数据,必须用二进制数据格式发送。

(3)发送信息编程。首先,在工程窗体上添加一个多行显示文本框,内容为待发送的信息,定义其名称属性为SendTxt;其次,在工程窗体添加一发送信息的控件按钮,定义按钮名称属性为TxdCmd;最后,双击控件按钮TxdCmd,对其编程如下:

Private Sub TxdCmd Click

Dim Bufs As Variant

Bufs=S1vNo.Text

MSComm.Output’Bufs

EndSub

(4)接收信息编程。首先,在工程窗体上添加一个多行显示文本框,定义名称属性为ReTxt;然后双击控件MSComm,对其编程如下:

Private Sub MSComm_OnComm

Dim ComEventMessage As String

Select Case MSComm.CommEvent

Case commEvReceive

CommEventMessage=Receive buffer has RThreshold number of characters.

ReTxt.Text=MSComm.Input

End Select

MsgBox(CommEventMessage)

EndSub

单片机技术已发展多年,在工业和民用多个领域仍有广阔的前景。本文阐述了用VB语言使Atmel公司的AT90S8515单片机与PC通讯的技术。但是由于篇幅所限,再加涉及软件编程,难以给出具体的细节,请读者参考本文时,同时详细参考有关的技术手册,便于更深刻地理解及实际应用。

[1]NELSON M.串行通讯指南[M].北京:中国水利水电出版社,2002.

[2]耿德根.AVR高速嵌入式单片机原理与应用[M].北京:北京航空航天大学出版社,2001.

[3]范逸之.Visual Basic与分布式监控系统[M].北京:清华大学出版社,2002.

猜你喜欢

波特率寄存器控件
UART 波特率检测电路的FPGA 设计算法与实现
STM32和51单片机寄存器映射原理异同分析
基于.net的用户定义验证控件的应用分析
CAN 总线波特率自适应程序设计
Lite寄存器模型的设计与实现
关于.net控件数组的探讨
移位寄存器及算术运算应用
波特率自适应的CAN驱动在嵌入式Linux下的实现①
详解lAP15W4K58S4单片机的串行口通信
Lx5280模拟器移植设计及实施