AT89C51单片机与PC机串行通信的接口实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AT89C51单片机与PC机串行通信的接口实现[摘要] 本文介绍了AT89C51单片机与PC机采用RS232C标准进行串行通

信的接口实现。在接口中采用MAX232作电平转换电路,简单的通信协议,PC 机用VB编程,AT89C51单片机采用中断收发方式。文章给出了相应通信接口电路与程序。

[关键词] 通信协议RS232C 通信接口电路通信接口程序

AT89C51是一种带4K字节可编程可擦除只读存储器(FLASH FPEROM)和128字节的存取数据存储器(RAM)的低电压,高性能CMOS8位微处理器。采用了ATMEL公司的高密度、不容易丢失存储技术,与MCS-51系列的单片机兼容。具有集成程度高、系统结构简单、价格低廉等优点被广泛应用到控制领域中。但是在复杂的数据处理、良好的人机交互等方面不能满足需要,常采用PC 机与AT89C51单片机进行通信,AT89C51单片机(下位机)实时采集数据传送给PC机(上位机)处理,然后接收PC机处理的结果,并进行相应的控制的方式来弥补。本文介绍单片机与PC机进行串行通信的一种接口实现。

一、接口电路的设计

(一)接口逻辑电平的转换

在PC机系统大都装有异步通信适配器,为标准的RS-232C接口。RS-232C 为负逻辑,用+3V~+15V表示逻辑“0”, 用-3V~-15V表示逻辑“1”。AT89C51单片机采用正逻辑TTL电平0和+5V.所以AT89C51与PC机通信时必须进行电平转换。转换的方法有多种。常采用MAXIM公司生产的专用的双向电平转换集成电路MAX232。MAX232引脚排列与外围电路如图1所示。

图1MAX引脚及外围接口图

(二)通信接口电路

本文采用可靠性高的MAX232作电平转换芯片,选择其中一对发送器与接收器,PC机的串行口与MAX232的电平端口相连,MAX232的逻辑电平端口与单片机的串行口相连,接口电路如图2所示。

图2PC机与AT89C51通信接口图

二、通信接口程序

(一)通信协议

PC机与AT89C51进行通信必须有一定的通信协议,本文采用简单的通信

协议。波特率:2400bps;无奇偶校验位;8位数据位;1位停止位。

(二)PC机(上位机)通信程序

PC机(上位机)程序采用VB编写,主要是应用微软公司提供的MSComm 控件通信。在工程中建立通信窗口,添加文本框(接收框、发送框)、发送控件、MSComm控件并对它们的属性进行设置。部分程序如下:

初始化代码

Private Sub Form_Load()

mPort = 1 ’设置串口1

MSComm.Settings = “2400,N,8,1” ’波特率2400bps,无校验,8位数据,1位停止位

MSComm.InputLen = 0 ’读取接收缓冲区的所有字符

MSComm.InBufferSize = 1024 ’设置接收缓冲区为1024字节

MSComm.OutBufferSize = 512 ’设置发送缓冲区为512字节

MSComm.PortOpen = True’打开串口

MSComm.SThreshold = 0 ’不触发发送事件

MSComm.RThreshold = 1 ’每一个字符到接收缓冲区都触发接收事件

MSComm.InBufferCount = 0 ’清除发送缓冲区数据

MSComm.OutBufferCount = 0 ’清除接收缓冲区数据

Text_SEND.Text =““ ’清空发送文本框

Text_RECV.Text =““ ’清空接收文本框

End Sub

发送数据

Private Sub Button_SEND_Click()

Dim x As String

If Text_SEND.Text = ““ Then’发送数据不能为空

x = MsgBox(“发送数据不能为空”, 16)

Exit Sub

End If

If Not MSComm.PortOpen Then ’保证串口打开MSComm.PortOpen = True

End If

MSComm.Output = Text_SEND.Text + Chr$(13)’发送数据For i = 1 To 20000000’延时

Next

End Sub

接收数据

Private Sub MSComm_OnComm()

Select Case mEvent’检验串口事件

Case comEventOverrun’数据丢失

Text_SEND.Text =““’清空发送缓冲区

Text_RECV.Text =““’清空接收缓冲区

Text_SEND.SetFocus

Exit Sub

Case comEventRxOver’接收缓冲区溢出

Text_SEND.Text =““’清空发送缓冲区

Text_RECV.Text =““’清空接收缓冲区

Text_SEND.SetFocus

Exit Sub

Case comEventTxFull’发送缓冲区已满

Text_SEND.Text =““’清空发送缓冲区

Text_RECV.Text =““’清空接收缓冲区

Text_SEND.SetFocus

Exit Sub

Case comEvReceive’接收缓冲区内有数据

Dim str As String

str = MSComm.Input’从接收队列中读入字符串

Text_RECV.Text = Text_RECV.Textstr’读出字符串送显

End Select

End Sub

(三)AT89C51单片机(下位机)通信程序

AT89C51单片机采用中断方式向PC机发送数据和接收PC机数据,部分程序如下:

#include

#define __MAX_LEN_ 256 // 数据最大长度

#define _MHZ_ 12 // 设置单片机使用的晶振频率

#define uchar unsigned char

#define uint unsigned int

void delay10ms(uint count); // 声明延时函数

相关文档
最新文档