上位机与下位机之间通信编程
基于Csharp的串口通信上位机和下位机源程序
基于单片机串口通信的上位机和下位机实践串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
首先亮出C#的源程序吧。
主要界面:只是作为简单的运用,可以扩展的。
源代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO.Ports;using System.Timers;namespace 单片机功能控制{public partial class Form1 : Form{public Form1(){InitializeComponent();}SerialPort sp = new SerialPort();private void button1_Click(object sender, EventArgs e){String str1 = comboBox1.Text;//串口号String str2 = comboBox2.Text;//波特率String str3 = comboBox3.Text;//校验位String str4 = comboBox5.Text;//停止位String str5 = comboBox4.Text;//数据位Int32 int2 = Convert.ToInt32(str2);//将字符串转为整型Int32 int5 = Convert.ToInt32(str5);//将字符串转为整型groupBox3.Enabled = true;//LED控制界面变可选try{if (button1.Text == "打开串口"){if (str1 == null){MessageBox.Show("请先选择串口!", "Error");return;}sp.Close();sp = new SerialPort();sp.PortName = comboBox1.Text;//串口编号sp.BaudRate = int2;//波特率switch (str4)//停止位{case "1":sp.StopBits = StopBits.One;break;case "1.5":sp.StopBits = StopBits.OnePointFive;break;case "2":sp.StopBits = StopBits.Two;break;default:MessageBox.Show("Error:参数不正确", "Error");break;}switch (str3){case "NONE":sp.Parity = Parity.None; break;case "ODD":sp.Parity = Parity.Odd; break;case "EVEN":sp.Parity = Parity.Even; break;default:MessageBox.Show("Error:参数不正确", "Error");break;}sp.DataBits = int5;//数据位sp.Parity = Parity.Even;//设置串口属性sp.Open();//打开串口button1.Text = "关闭串口";textBox1.Text = Convert.ToString(sp.PortName) + "已开启!";}else{sp.Close();button1.Text = "打开串口";groupBox3.Enabled = false;//LED控制界面变灰色textBox1.Text = Convert.ToString(sp.PortName) + "已关闭!";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void Form1_Load(object sender, EventArgs e){//初始化textBox1.Text = "欢迎使用简易的串口助手!";groupBox3.Enabled = false;//LED控制界面变灰色groupBox6.Enabled = false;groupBox7.Enabled = false;groupBox8.Enabled = false;button3.Enabled = false;button6.Enabled = false;timer1.Start();try{foreach (string com in System.IO.Ports.SerialPort.GetPortNames()) //自动获取串行口名称boBox1.Items.Add(com);//默认设置comboBox1.SelectedIndex = 0;//选择第一个com口comboBox2.SelectedIndex = 4;//波特率4800comboBox3.SelectedIndex = 0;//校验位NONEcomboBox4.SelectedIndex = 0;//停止位为1comboBox5.SelectedIndex = 0;//数据位为8}catch{MessageBox.Show("找不到通讯端口!", "串口调试助手");}}private void timer1_Tick(object sender, EventArgs e){label6.Text = DateTime.Now.ToString();}private void button2_Click(object sender, EventArgs e){try {if (button2.Text == "开启"){groupBox6.Enabled = true;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;checkBox1.Checked = false;checkBox2.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;button3.Enabled = true;textBox2.Text = String.Empty;button2.Text = "关闭";}else{groupBox6.Enabled = false;button3.Enabled = false;button2.Text = "开启";textBox2.Text = String.Empty;}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void button3_Click(object sender, EventArgs e){groupBox6.Enabled = true;label7.Text = "已发送";if (textBox2.Text == "")MessageBox.Show("发送失败,请选择发送的数据!");elsesp.WriteLine(textBox2.Text);//往串口写数据}private void checkBox1_CheckedChanged(object sender, EventArgs e) {try {if (checkBox1.Checked){checkBox1.Checked = true;checkBox2.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;label7.Text = "准备发送";textBox2.Text = "1";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox2_CheckedChanged(object sender, EventArgs e) {try {if (checkBox2.Checked){checkBox1.Checked = false;checkBox2.Checked = true;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;label7.Text = "准备发送";textBox2.Text = "2";radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox3_CheckedChanged(object sender, EventArgs e) {try{if (checkBox3.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = true;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "3";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox4_CheckedChanged(object sender, EventArgs e) {try{if (checkBox4.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = true;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "4";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox5_CheckedChanged(object sender, EventArgs e) {try{if (checkBox5.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = true;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "5";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox6_CheckedChanged(object sender, EventArgs e) {try{if (checkBox6.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = true;checkBox7.Checked = false;checkBox8.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "6";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox7_CheckedChanged(object sender, EventArgs e) {try{if (checkBox7.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = true;checkBox8.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "7";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void checkBox8_CheckedChanged(object sender, EventArgs e) {try{if (checkBox8.Checked){checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = true;radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;label7.Text = "准备发送";textBox2.Text = "8";}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void button5_Click(object sender, EventArgs e){try{if (button5.Text == "开启"){radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;radioButton4.Checked = false;checkBox1.Checked = false;checkBox2.Checked = false;checkBox3.Checked = false;checkBox4.Checked = false;checkBox5.Checked = false;checkBox6.Checked = false;checkBox7.Checked = false;checkBox8.Checked = false;groupBox7.Enabled = true;button6.Enabled = true;textBox2.Text = String.Empty;button5.Text = "关闭";}else{groupBox7.Enabled = false;button6.Enabled = false;button5.Text = "开启";textBox2.Text = String.Empty;}}catch (Exception er){MessageBox.Show("Error:" + er.Message, "Error");return;}}private void button6_Click(object sender, EventArgs e){label7.Text = "已发送";if (textBox2.Text == "")MessageBox.Show("发送失败。
上位机与下位机之间的连接
第一章上位机与下位机1.1 上位机与下位机的概念上位机和下位机,一般是指集中控制系统中的PC机和现场的工控机。
上位机(PC 机)主要用来发出操作指令和显示结果数据,下位机(工控机)则主要用来监测和执行上位机的操作指令。
举个例子,蓄电池生产中,需要按工艺要求进行充电和放电。
现场有许多工位,各自配有智能的充放电设备,它们就是“下位机”。
整个车间有一台PC机来集中管理,这就是“上位机”。
上位机软件一般用高级语言编程,如BASIC、C,有比较丰富的图形界面。
下位机的编程,依所用的MCU而异,以汇编为主。
上位机和下位机之间的通讯,常见是RS-232,RS-485,当然还有很多,但都是串行方式。
特别是“一对多”的RS-485用得最普遍。
上位机是指:人可以直接发出操控命令的计算机,一般是PC,屏幕上显示各种信号变化(液压,水位,温度等)。
下位机是直接控制设备获取设备状况的的计算机,一般是PLC/单片机之类的。
上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。
下位机不时读取设备状态数据(一般模拟量),转化成数字信号反馈给上位机。
简言之如此,真实情况千差万别不离其宗。
上下位机都需要编程,都有专门的开发系统。
另外,上位机和下位机是通过通讯连接的“物理”层次不同的计算机,是相对而言的。
一般下位机负责前端的“测量、控制”等处理;上位机负责“管理”处理。
下位机是接收到主设备命令才执行的执行单元,即从设备,但是,下位机也能直接智能化处理测控执行;而上位机不参与具体的控制,仅仅进行管理(数据的储存、显示、打印......人机界面等方面)。
常见的DCS系统,“集中-分散(集散)系统”是上位机集中、下位机分散的系统。
在概念上,控制者和提供服务者是上位机.被控制者和被服务者是下位机.也可以理解为主机和从机的关系.但上位机和下位机是可以转换的.两机如何通讯,一般取决于下位机。
TCP/IP一般是支持的。
上位机与下位机之间的通信编程
上位机与下位机之间的通信编程在现代工业自动化系统中,上位机和下位机之间的通信起着至关重要的作用。
上位机是指控制整个系统的计算机,而下位机则是指负责执行具体任务的设备或机器。
通过上位机与下位机之间的通信,上位机可以向下位机发送指令,控制其工作状态,并实时获取下位机的数据反馈。
本文将探讨以上位机与下位机之间的通信编程技术。
1. 通信协议在上位机与下位机之间进行通信时,需要定义一种通信协议,以确保双方能够正确地交换数据。
常用的通信协议包括Modbus、Profibus、CAN等。
这些协议定义了数据的格式、传输方式以及错误处理机制,使得上位机和下位机能够按照统一的规范进行通信。
2. 通信接口上位机与下位机之间的通信可以通过串口、以太网、无线网络等多种方式实现。
在编程时,需要选择合适的通信接口,并根据接口特点进行相应的编程配置。
例如,在使用串口进行通信时,需要配置串口的波特率、数据位、停止位等参数;在使用以太网进行通信时,需要配置IP地址、端口号等参数。
3. 数据交换在通信过程中,上位机和下位机需要交换各种类型的数据,如控制指令、传感器数据、报警信息等。
为了确保数据的准确性和可靠性,通常会使用特定的数据格式进行数据交换。
常见的数据格式包括二进制、ASCII码、JSON等。
在编程时,需要根据数据格式的要求进行数据的打包和解包操作。
4. 通信流程通信流程是指上位机与下位机之间通信的具体步骤和顺序。
在通信编程中,需要明确通信流程,确保上位机和下位机能够按照预定的顺序进行通信。
通常,通信流程包括建立连接、数据交换、关闭连接等步骤。
5. 异常处理在通信过程中,可能会出现各种异常情况,如通信超时、通信中断、数据错误等。
为了保证通信的稳定性和可靠性,需要在编程时对这些异常情况进行处理。
常见的异常处理方式包括重新连接、重发数据、错误提示等。
6. 安全性在工业自动化系统中,数据的安全性至关重要。
为了保护通信过程中的数据安全,需要在通信编程中加入相应的安全机制。
上位机、下位机通信实例
上位机、下位机通信实例摘要:1.上位机与下位机通信的基本概念2.上位机与下位机通信的方式3.通信实例介绍4.通信实例的应用场景5.通信实例的优势与不足正文:一、上位机与下位机通信的基本概念上位机和下位机通信是指在计算机控制系统中,上位机(通常为控制中心或主计算机)与下位机(通常为现场控制器或执行器)之间的信息交换。
上位机主要负责数据处理、逻辑控制和决策等任务,而下位机则主要负责现场设备的运行控制。
两者之间的通信是实现自动化控制系统正常运行的关键。
二、上位机与下位机通信的方式上位机与下位机之间的通信方式主要有串行通信、并行通信和网络通信等。
其中,串行通信和并行通信是硬件层面的通信方式,而网络通信则是基于计算机网络的通信方式。
1.串行通信:串行通信是指上位机与下位机之间通过串行接口进行数据传输。
它具有线路简单、成本低的优点,但传输速率相对较低。
2.并行通信:并行通信是指上位机与下位机之间通过并行接口进行数据传输。
它具有传输速率快的优点,但需要较多的线路和硬件资源。
3.网络通信:网络通信是指上位机与下位机之间通过网络进行数据传输。
它可以实现远程控制和实时数据交互,但需要建立稳定的网络环境和较高的网络带宽。
三、通信实例介绍以下是一个典型的上位机与下位机通信实例:假设有一个自动化生产线系统,上位机负责生产任务的分配和调度,下位机负责具体的设备运行控制。
在这个系统中,上位机需要实时获取下位机的运行状态和数据,并根据生产任务进行调整。
同时,下位机也需要根据上位机的指令来执行相应的操作。
四、通信实例的应用场景上位机与下位机通信实例在许多领域都有应用,如工业自动化、楼宇自控、智能交通等。
在这些领域中,上位机与下位机通信实例可以实现设备的远程监控、实时数据采集和智能决策等功能,从而提高系统的运行效率和可靠性。
五、通信实例的优势与不足上位机与下位机通信实例具有以下优势:1.提高系统的自动化水平,降低人工干预成本。
2.实现远程监控和控制,方便管理人员进行决策。
上位机与下位机之间的通信编程
上位机与下位机之间的通信编程
上位机与下位机之间的通信编程是一项重要的技术,在现代工业控制和自动化领域得到了广泛的应用。
上位机通常是指计算机或其他控制设备,它们通过网络或串口等方式与下位机进行数据交换和控制命令传输。
通信编程的目的是实现上位机与下位机之间的数据传输和命令控制,主要包括以下方面:
1. 通信协议的选择:为了实现通信,上位机与下位机需要使用一种通信协议,常见的协议有Modbus、CAN、TCP/IP等。
2. 通信接口的编程:上位机与下位机的通信需要通过网络或串口等接口进行,编程时需要实现接口的初始化、数据收发等操作。
3. 数据封装和解析:通信传输的数据需要进行封装和解析,以确保数据的正确性和可靠性。
4. 控制命令的传输:上位机可以通过控制命令对下位机进行控制,命令的传输需要进行协议设计和数据封装。
5. 数据处理和显示:上位机从下位机接收到的数据需要进行处理和显示,以便用户进行监测和控制。
在通信编程过程中,需要注意以下几点:
1. 数据传输的可靠性和实时性是关键,需要进行严格的测试和验证。
2. 编程时需要考虑到不同硬件和操作系统的兼容性问题。
3. 通信协议的选择和设计需要满足实际应用的需求。
4. 数据的安全性也需要考虑,特别是在涉及机密信息的应用中。
总之,上位机与下位机之间的通信编程是一项复杂而重要的技术,需要开发人员具备扎实的编程技能和广泛的实际应用经验。
上位机与下位机之间的通信编程
上位机与下位机之间的通信编程近年来,随着技术的不断发展,上位机和下位机之间的通信编程变得越来越重要。
上位机和下位机是指在一个控制系统中的两个层次,上位机负责高级控制和监控,而下位机则负责实际的执行和数据采集。
它们之间的通信是实现整个控制系统正常运行的关键。
在通信编程中,我们需要考虑的第一个问题是通信协议的选择。
通信协议是上位机和下位机之间进行数据交换的规范和约定。
常见的通信协议有Modbus、Profibus、CAN等。
选择合适的通信协议可以提高通信的效率和稳定性。
通信编程的第二个问题是通信接口的选择。
通信接口是上位机和下位机之间进行物理连接的接口,常见的通信接口有串口、以太网口、USB等。
选择合适的通信接口可以确保数据的可靠传输。
在编写通信程序时,我们需要考虑的第三个问题是数据的格式和解析。
上位机和下位机之间需要进行数据的传输,而数据的格式可能是不同的。
因此,我们需要定义统一的数据格式,并在上位机和下位机之间进行数据的解析和封装。
通信编程的第四个问题是通信的稳定性和可靠性。
在实际的工业控制系统中,通信往往面临着复杂的环境和条件,如电磁干扰、噪声等。
因此,我们需要采取一些措施来保证通信的稳定性和可靠性,如数据的校验和重发机制等。
除了以上的问题,通信编程还需要考虑其他一些因素。
例如,通信的实时性、通信的安全性等。
实时性是指通信的响应时间,通信的实时性越高,控制系统的响应速度就越快。
安全性是指通信的保密性和防护性,通信的安全性越高,控制系统的安全性就越高。
在实际的通信编程中,我们需要进行上位机和下位机之间的数据交互。
上位机可以向下位机发送控制命令,下位机可以向上位机发送采集数据。
这样,上位机和下位机之间就形成了一个闭环反馈控制系统。
通过不断地优化和改进通信编程,我们可以实现控制系统的高效运行和稳定工作。
以上位机与下位机之间的通信编程是实现控制系统正常运行的关键。
通过选择合适的通信协议和通信接口,定义统一的数据格式和解析方法,保证通信的稳定性和可靠性,以及考虑实时性和安全性等因素,我们可以实现控制系统的高效运行和稳定工作。
上下位机通信方法
上下位机通信方法
上下位机通信是指在自动化控制系统中,上位机和下位机之间进行数据交换和通信的方式和方法。
常见的上下位机通信方法有以下几种:
1. 串口通信:使用串行通信接口(如RS232、RS485等)实现上下位机之间的数据传输。
这种通信方法简单易实现,但传输速度相对较慢。
2. 网口通信:利用以太网接口进行通信,可以使用TCP/IP协议或UDP协议进行数据传输。
网口通信速度较快,适用于大数据量或实时性要求较高的场景。
3. USB通信:通过USB接口进行数据传输和通信。
USB通信的优点是便携性强,适用于移动设备或一体机等场景。
4. 无线通信:利用无线模块(如蓝牙、Wi-Fi、ZigBee等)实现上下位机之间的通信。
无线通信可以实现远程控制和监测,但受环境影响较大,通信稳定性相对较差。
5. CAN总线通信:针对工控领域的通信协议,主要用于机器人、工业自动化等领域。
CAN总线通信速度快,可实现多节点通信,适用于复杂系统中的设备间通信。
6. MQTT通信:一种轻量级的消息发布/订阅协议,适用于物联网设备之间的通信。
MQTT通信具有低带宽和开销、可靠
性强、支持海量设备等优点。
在实际应用中,选择哪种上下位机通信方法,需要根据具体的应用场景和要求进行选择和配置。
上位机与下位机之间通信协议格式
上位机与下位机之间通信协议格式⼀、通信协议1、命令帧格式帧头标志参数校验帧尾命令字01累加和20301Byte1Byte2Byte1Byte1Byte说明:1、累加和校验:各字节累加和与100的模。
2、 10进制输⼊;16进制传输。
2、信息帧格式帧头标志参数校验帧尾命令字203002累加和1Byte1Byte2Byte1Byte1Byte说明:1、累加和校验:各字节累加和与100的模。
2、 10进制输⼊;16进制传输。
3、数据帧格式(⽂件mokuaideng.txt (模块指⽰灯地址) 20 Byte )帧头标志校验帧尾203003累加和数据数据1Byte16Byte1Byte1Byte1Byte标志:03 数据帧⽂件mokuaideng.txt (模块指⽰灯地址) 20 Byte 04 数据帧⽂件daotongbiao.txt (导通表) 40 Byte 05 数据帧⽂件canshu.txt (控制参数) 6 Byte06 数据帧校验⽂件mokuaideng.txt (模块指⽰灯地址) 20 Byte 07 数据帧校验⽂件daotongbiao.txt (导通表) 40 Byte 08 数据帧校验⽂件canshu.txt (控制参数) 6 Byte4、信息帧格式定位物理针位下位机-》上位机上位机-》下位机点亮指⽰灯帧头标志参数校验帧尾203011累加和物理针位1Byte1Byte2Byte1Byte1Byte说明:1、累加和校验:各字节累加和与100的模。
2、 10进制输⼊;16进制传输。
标志位 13 ,单点检测判断单点导通关系是否真确5、信息帧格式下位机-》上位机⾃检、线检测帧头标志参数1校验帧尾203012累加和起始针位1Byte1Byte2Byte1Byte1Byte参数2终点针位2Byte参数3状态1Byte状态:00 导通 01 断路02 短路/错路0308 检测完成09 读485数据超时,485通信故障说明:1、累加和校验:各字节累加和与100的模。
上位机与下位机通讯
通过这次的练习,可以加深对单片机应用了解,更能灵活的使用51系列单片机的资源解决实际问题。
3.2系统功能设计
3.2.1采集的数据,但采集的是模拟的电压。需要通过下位机上的AD转换模块进行处理得到数字信息。但是得到的数据并不是真正的温度值,还需要进一步的处理换算才能得到真正的温度值。
ds_t=_cror_(temp1,4); /*将变量temp1循环右移4位*/
lcd_busy();
w_d_add=num[ds_t]; /*写数据*/
ds_t=ds_mon & 0x0f; /*月保留低四位,将小时的十位和个位分离*/
lcd_busy();
w_d_add=num[ds_t]; /*写数据*/
3.3硬件设计及描述
3.3.1时钟与复位模块
由电容,电位器,按键组成复位电路部分,该电路接于单片机的RESET端可以通过按键达到手动复位的效果,也可以通过电位器和电容组成上电复位电路。通过复位电路使单片机回到初始状态。
图3.2复位电路图3.3晶振时钟电路
3.3.2按键选择模块
利用P1.0到P1.2与8279芯片构成键盘扫描电路,可以扫描十六个按键,但本次设计只用到十个按键。用来进行对实时时间的更改和校准。
ds_t=ds_d & 0x0f; /*天保留低四位,将小时的十位和个位分离*/
lcd_busy();
w_d_add=num[ds_t]; /*写数据*/
lcd_busy();
w_d_add=0xC8; /*日*/
lcd_busy();
w_d_add=0xD5;
上位机、下位机通信实例
上位机、下位机通信实例(原创实用版)目录1.上位机与下位机通信的基本概念2.上位机与下位机通信的实例介绍3.通信实例的优势与应用场景4.通信实例的发展趋势和未来展望正文一、上位机与下位机通信的基本概念上位机和下位机通信是指在计算机控制系统中,上位机(如 PC、服务器等)与下位机(如 PLC、PAC 等)之间的数据交换与通信。
上位机主要负责控制策略的制定、数据处理、信息显示和报警处理等功能,而下位机主要负责现场设备的实时控制、数据采集和执行上位机发出的指令。
两者之间的通信是实现计算机控制系统正常运行的关键环节。
二、上位机与下位机通信的实例介绍1.通过 RS-485 总线进行通信RS-485 总线是一种串行通信标准,可实现多点、远距离的数据传输。
在工业自动化领域,RS-485 总线常用于上位机与下位机之间的通信。
例如,上位机可以通过 RS-485 总线向 PLC 发送控制指令,PLC 接收到指令后执行相应的操作,并将现场数据通过 RS-485 总线反馈给上位机。
2.以太网通信以太网通信是一种局域网通信技术,具有传输速度快、通信距离远、抗干扰能力强等优点。
在工业自动化领域,以太网通信也广泛应用于上位机与下位机之间的通信。
例如,上位机可以通过以太网通信向 PAC 发送控制指令,PAC 接收到指令后执行相应的操作,并将现场数据通过以太网通信反馈给上位机。
三、通信实例的优势与应用场景上位机与下位机通信实例的优势主要体现在以下方面:1.实时性:通信实例可以实现实时数据传输,使得上位机能够及时了解现场设备的运行状态,并根据实际情况发出控制指令。
2.可靠性:通信实例具有较强的抗干扰能力,能够保证在恶劣的工业环境中实现稳定、可靠的数据传输。
3.灵活性:通信实例支持多种通信协议,可以根据实际需求选择合适的通信方式,满足不同应用场景的需求。
4.易于扩展:通信实例可以方便地实现与其他设备的集成与互联,为系统扩展和升级提供便利。
上位机、下位机通信实例
上位机、下位机通信实例一、引言随着科技的不断发展,自动化控制系统逐渐成为各个行业的重要组成部分。
上位机与下位机的通信作为自动化控制系统的核心环节,越来越受到广泛关注。
本文将介绍上位机与下位机通信的实例,以帮助读者更好地理解这一领域的知识。
二、上位机与下位机的通信原理1.串口通信串口通信是一种通过串行数据传输线实现数据交换的方式。
它具有传输速率较低、传输距离较短、抗干扰能力较弱等特点。
尽管如此,串口通信在许多场景下仍具有广泛的应用。
2.以太网通信以太网通信是一种基于计算机局域网技术的通信方式。
相较于串口通信,以太网通信具有传输速率快、传输距离远、抗干扰能力强等优点。
因此,在需要高速、远距离通信的场合,以太网通信成为首选。
3.其他通信方式除了串口通信和以太网通信,上位机与下位机之间还可以采用其他通信方式,如无线通信、CAN总线等。
这些通信方式各有优缺点,适用于不同的应用场景。
三、通信实例详解1.串口通信实例(1)硬件连接上位机与下位机通过串行通信线(如RS-232)进行连接。
通常,下位机配备有串口通信模块,而上位机则需要安装相应的串口通信转换器。
(2)通信协议为了实现数据的一致性和完整性,上位机与下位机之间需要遵循一定的通信协议。
常见的通信协议有MODBUS、PROFIBUS、CAN等。
(3)编程实现在上位机和下位机上分别编写相应的程序,实现数据的发送和接收。
编程语言可以选择C、C++、Python等。
2.以太网通信实例(1)硬件连接上位机与下位机通过以太网线进行连接。
下位机需要具备以太网通信模块,上位机则需配置以太网接口。
(2)通信协议以太网通信通常采用TCP/IP协议。
上位机与下位机之间通过以太网协议进行数据交换。
(3)编程实现在上位机和下位机上分别编写相应的程序,实现数据的发送和接收。
编程语言可以选择C、C++、Python等。
四、上位机与下位机通信的优缺点1.优点上位机与下位机通信具有以下优点:- 传输速率快、传输距离远;- 抗干扰能力强;- 易于扩展和维护;- 通信协议成熟,易于实现。
上位机与下位机通信设计
1 引言现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。
加之单片机的计算能力有限,难以进行复杂的数据处理。
因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。
2 PC机与单片机8051之间的通信特点在工业控制系统中,各种数据的采集和执行机构的控制都是由下位机或探测站来完成。
由于单片机具有体积小、价格低廉、可应用于恶劣工业环境的特点,在分布式控制系统中大多采用单片机作为下位机来进行数据采集和现场控制。
在这些应用中,单片机只是直接面向被控对象底层。
而对采集到的数据进行进一步分析和处理的工作是由功能强大的主控PC机来完成的。
因此,PC机和单片机之间就有着大量的数据交换。
3 PC机与单片机8051通信的硬件设计通常PC机和单片机之间的通信是通过串行总线RS-232实现的。
因此采用一种以MAX232为核心的通信接口电路。
该接口电路适用于由一台PC机与多个8051单片机串行通信的设计,其原理和方法同样适用于PC机与其它单片机之间的串行数据通信。
其原理框图见图1:图1 单片机与PC机通信原理框图该框图中,起着重要作用的是RS-232C通信接口电路。
它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成,上位机直接利用它的RS-232串行口,为此,采用了RS-232串行通信来接收或上传数据和指令。
但RS-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。
在此电路中,采用MAX232实现TTL逻辑电平和RS-232电平之间的相互转换。
MAX232由单一的+5V电源供电,只需配接5个高精度10μF/50V的钽电容即可完成电平转换。
因此,避免了用1488和1489时必需两路电源的麻烦。
上位机和下位机通信
上位机和下位机通信
简介
在嵌入式系统中,我们经常需要将上位机和下位机进行通信。
上位机可以是
PC机、嵌入式开发板等,下位机可以是单片机、FPGA、DSP等。
本文将介绍上位
机和下位机通信的一般流程和具体实现方法。
通信流程
上位机和下位机之间的通信一般分为以下几个步骤:
1.建立连接:上位机通过串口、USB、以太网等方式建立与下位机的物
理连接。
2.协议定义:双方需要定义好通信协议,即数据格式和通信规则。
3.数据传输:上位机向下位机发送数据,下位机接收数据并进行处理,
然后向上位机返回数据。
4.断开连接:通信结束后,双方需要关闭物理连接。
具体的通信流程如下图所示:
graph LR
A(建立连接) --> B(协议定义)
B --> C(数据传输)
C --> D(断开连接)
常见的通信协议
在上位机和下位机之间通信时,需要定义好数据格式和通信规则,即通信协议。
常见的通信协议有以下几种:
1. ASCII码协议
ASCII码协议是一种文本协议,数据使用ASCII码表示,每个数据项使用特定
的分隔符分开。
这种协议实现简单,但数据量大,传输速度较慢。
常用于调试和测试。
例如,上位机向下位机发送。
上位机和下位机通讯代码
#include <reg51.h>#include <string.h>#define led P1unsigned char RX_FLAG;unsigned char TX_FLAG;unsigned char j=0;//j=0;unsigned char ch[30];unsigned char dda[13];//串口接收中断函数void serial () interrupt 4 using 3{unsigned char chh;if(RI) //接收中断{EA=0;if(TX_FLAG==0){chh=SBUF;if(chh == 0xCC){RX_FLAG = 1;}if(chh == 0xFF){TX_FLAG=1;}}else{led =ch[28];ch[j]=SBUF;j++;if(j==30){j=0;TX_FLAG=0;}dda[0]=ch[1]*256+ch[0]; //整形dda[1]=ch[3]*256+ch[2];dda[2]=ch[5]*256+ch[4];dda[3]=ch[7]*256+ch[6];dda[4]=ch[9]*256+ch[8];dda[5]=ch[10]; //字符dda[6]=ch[11];dda[7]=ch[12];dda[8]=ch[13];dda[9]=(ch[17]*256+ch[16])+(ch[15]*256+ch[14])/1000; //浮点dda[10]=(ch[21]*256+ch[20])+(ch[19]*256+ch[18])/1000;dda[11]=(ch[25]*256+ch[24])+(ch[23]*256+ch[22])/1000;dda[12]=(ch[29]*256+ch[28])+(ch[27]*256+ch[26])/1000;}EA=1;RI=0; //清除接收中断标志位}}void init_serialcomm(void){SCON = 0x50; //SCON: 串口工作方式1,允许接收TMOD |= 0x20; //TMOD: 定时器1的工作方式2PCON |= 0x80; //SMOD=1;TH1 = 0xF4; //Baud:4800 fosc=11.0592MHzIE |= 0x90; //开总中断,开串口中断TR1 = 1; // 开启定时器1}//延时函数void delay (void){unsigned int i;for(i=0;i<5000;i++);}//向串口发送一个字符void send_char_com(unsigned char ch){SBUF=ch;while(TI==0);TI=0;}void send_int_com(unsigned int zhengshu) //发送整型,2字节数{unsigned char gaowei,diwei;diwei=(char) (zhengshu&0xFF);gaowei=(char) (zhengshu>>8);SBUF=diwei;delay();SBUF=gaowei;while(TI==0);TI=0;}void send_float_com( float xiaoshu) //发送浮点,4字节数{unsigned int zz,xx;zz= (int) xiaoshu;xx=(int) ((xiaoshu-zz)*1000);send_int_com(xx);delay();send_int_com(zz);}void main(){init_serialcomm(); //初始化串口while(1){if(RX_FLAG == 1){EA = 0 ; //修正BUG,关闭总中断send_char_com (0xCC);delay();send_int_com(512);delay();send_int_com(1024);delay();send_int_com(j);delay();send_int_com(dda[2]);delay();send_char_com(15);delay();send_char_com(99);delay();send_char_com(128);delay();send_float_com(15.123);delay();send_float_com(22.193);delay();send_float_com(99.886);delay();}EA = 1 ; //打开总中断RX_FLAG = 0;}}。
上位机、下位机通信实例
上位机、下位机通信实例【原创版】目录1.上位机与下位机通信的概念与原理2.上位机与下位机通信的实例分析3.上位机与下位机通信的发展趋势和应用前景正文一、上位机与下位机通信的概念与原理上位机和下位机通信是指在计算机控制系统中,上位机(如 PC 机、工控机等)与下位机(如 PLC、PAC 等)之间的数据通信。
这种通信方式在工业自动化、过程控制等领域有着广泛的应用。
上位机主要负责数据处理、信息管理和人机交互等功能,而下位机主要负责现场设备运行控制和数据采集。
两者之间的通信是实现控制系统正常运行的关键。
通信原理主要基于 RS-232、RS-485、以太网等通信协议。
其中,RS-232 是一种串行通信协议,主要适用于短距离通信;RS-485 是一种串行通信协议,具有较强的抗干扰能力,适用于长距离通信;以太网是一种局域网通信协议,具有传输速度快、通信距离远等特点,适用于大型控制系统。
二、上位机与下位机通信的实例分析1.基于 RS-232 的通信实例假设有一个简单的控制系统,上位机为 PC 机,下位机为 PLC。
在这种情况下,PC 机需要通过 RS-232 协议与 PLC 进行通信。
通信过程如下:(1)PC 机发送数据:PC 机将需要控制的设备参数(如速度、温度等)通过 RS-232 协议打包成数据帧,发送给 PLC。
(2)PLC 接收数据:PLC 接收到数据帧后,对数据进行解包,提取出设备参数,并根据这些参数控制现场设备运行。
(3)PLC 发送数据:当现场设备运行状态发生变化时,PLC 将这些变化信息打包成数据帧,发送给 PC 机。
(4)PC 机接收数据:PC 机接收到数据帧后,对数据进行解包,提取出设备运行状态信息,并在人机界面上进行显示。
2.基于 RS-485 的通信实例假设有一个中型控制系统,上位机为工控机,下位机为 PAC。
在这种情况下,工控机需要通过 RS-485 协议与 PAC 进行通信。
通信过程如下:(1)工控机发送数据:工控机将需要控制的设备参数(如流量、压力等)通过 RS-485 协议打包成数据帧,发送给 PAC。
上位机和下位机串行通信设计
——上位机和下位机串行通信设计
2021/10/10
1
主要内容
• 串行通信概述 • 串行通信的设计(分下位机和上位机)
2021/10/10
2
概述
• 在PC的主板上, 有一种接口可能会被 我们忽视,也随着个 人计算机的小型化而 逐步被淘汰,这就是 RS-232C串行接口 ,在Windows系统中 被称为COM端口。
2021/10/10
8
概述
• 异步通信的主要参数: • 波特率 • 起始位和结束位 • 校验位 • 握手方式
2021/10/10
9
概述
• MODBUS通信协议
• 在数据采集系统中,采用MODBUS通信协议可实现计算
机与采集设备(下位机)间的串行通信,实现采集功能。
• 采用有限介质(如RS-232-/422/485)的MODBUS通信协 议的通信模式有2种:
2021/10/10
15
谢谢! 欢迎大家批评指正!
2021/10/10
16
2021/10/10
11
下位机软件设计
串口初始化
串口中断
接收
发送或接收
发 送
地址判断 正确
错误 错误
数
CRC校验
据
正确
命令字类型
01
02
03
操作1 操作2 操作3
2021/10/10
退出
12
下位机软件设计
• CRC校验分为查表校验法和多项式计算法。
查表法是将移位异或的计算结果做成了一个表,就是将0~256放入一个长
2021/10/10
5
概述
• 串行通信的组成
2021/10/10
上位机、下位机通信实例 -回复
上位机、下位机通信实例-回复如何进行上位机和下位机的通信。
文章旨在帮助读者了解上位机和下位机通信的基本原理、通信协议和实际应用案例。
第一步:了解上位机和下位机的概念上位机和下位机是指在计算机系统或者自动化控制系统中,按照功能划分的两个层次。
上位机通常负责数据处理、图形界面和用户交互操作,而下位机则负责具体的硬件控制和数据采集。
在一个典型的自动化系统中,上位机负责设置参数、监控设备状态、采集数据并进行分析,在需要时可以向下位机发送指令以实现设备的控制。
而下位机则负责将传感器采集到的数据传输给上位机,并根据上位机发送的指令控制相应的设备。
第二步:了解上位机和下位机的通信原理上位机和下位机之间的通信原理可以通过串口通信、以太网通信、无线通信等方式实现。
串口通信是一种常见的上位机和下位机通信方式。
通常使用RS232、RS485等接口标准进行连接,并通过串口通信协议进行数据传输。
一般情况下,上位机通过发送特定的命令或者数据格式给下位机,下位机则解析数据进行相应的操作,并将结果反馈给上位机。
以太网通信是另一种常用的上位机和下位机通信方式。
通过以太网接口连接上位机和下位机,并使用TCP/IP或者UDP等协议进行数据传输。
上位机和下位机可以使用自己定义的通信协议进行数据交互,也可以使用应用层协议如Modbus、OPC等。
无线通信是近年来的新兴通信方式,基于无线局域网(WLAN)、蓝牙(Bluetooth)等技术,上位机和下位机可以通过无线连接进行数据传输。
无线通信可以提供更大的灵活性和便捷性,适用于一些需要移动或者远程控制的应用场景。
第三步:了解上位机和下位机通信协议通信协议是上位机和下位机进行数据交互的规定,它定义了数据的格式、传输方式、错误检查等规则,确保数据正确地传输并被正确解析。
常用的通信协议有以下几种:1. Modbus:是一种开放的应用层通信协议,广泛用于工业自动化领域。
Modbus主要定义了数据的传输格式、数据读取和写入的指令等。
上位机、下位机通信实例
上位机、下位机通信实例上位机和下位机通信实例是指在某个系统中,上位机和下位机之间通过网络或串口等通信方式进行数据交互的实践案例。
上位机一般指控制系统的主机,负责运行程序、协调各个组件的工作,而下位机通常是控制系统中的从属设备,负责执行上位机指令或者采集数据等工作。
下面将分步骤回答关于上位机和下位机通信实例的问题。
第一步:确定通信协议和通信方式上位机和下位机通信的第一步是确定通信协议和通信方式。
通信协议是上位机和下位机之间进行通信时使用的数据格式、命令规范等约定,例如Modbus、CAN、TCP/IP等。
通信方式则是确定通信介质和传输方式,例如串口通信、以太网通信等。
第二步:建立物理连接根据通信方式的不同,需要在上位机和下位机之间建立物理连接。
如果是通过串口通信,需要使用串口线缆将上位机和下位机连接起来;如果是通过以太网通信,需要将上位机和下位机连接到同一个局域网上。
第三步:实现通信协议上位机和下位机之间的通信需要遵循特定的通信协议。
在这一步中,需要编写上位机和下位机的通信程序,实现协议中定义的数据格式、命令规范等。
例如,如果采用Modbus协议,上位机需要发送Modbus命令给下位机,下位机根据命令执行相应的操作,并返回结果给上位机。
第四步:数据传输和处理一旦通信协议实现并建立好连接,上位机和下位机之间就可以进行数据传输和处理。
上位机可以向下位机发送指令,下位机根据指令执行相应的操作,并将执行结果返回给上位机。
上位机可以对返回的数据进行分析和处理,例如显示在界面上、保存到数据库中等。
第五步:错误处理和异常处理在通信实例中,错误处理和异常处理是十分重要的部分。
在通信过程中,可能出现通信中断、数据损坏等问题。
因此,设计良好的错误处理和异常处理机制是必要的。
例如,在通信中断时,可以建立断线重连机制;在数据损坏时,可以进行数据校验和重传。
第六步:实时性要求通信实例中,实时性往往是一个重要的指标。
上位机和下位机之间的通信需要满足一定的实时性要求,以确保系统的稳定性和响应性。
上位机与下位机之间通信编程
摘要本文主要描述了利用PC机与AT89C51单片机之间的通信程序设计实现温度显示。
并详述了在VC6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现温度显示。
由单片机采集一个温度信号,将采集到的温度信号传送给PC机显示,PC机用VC6.0编写程序,单片机程序用C语言编写,最后用PROTUES软件进行仿真实现温度显示。
关键词:单片机MSCOMM控件VC6.0 AT89C51 温度显示目录摘要1 引言 (1)2 结构设计与方案选择 (2)2.1设计任务 (2)2.1.1单片机的选择 (2)2.1.2电平转换 (2)2.1.1单片机的选择 (2)2.1.3单片机与pc机通信原理 (2)2.2软件方案选择 (2)2.2.1 上位机编程方案选择 (3)2.2.2 单片机编程方案选择 (3)2.3 总体方案选择 (2)3 硬件设计 (8)3.1单片机主要特性 (5)3.2 MAX232电平芯片介绍10 (10)3.3 硬件电路设计图 (11)3.3.1 PC机与单片机通信接口电路设计框图 (11)3.3.2整体设计原理图 (11)4软件设计 (12)4.1上位机程序设计 (12)4.2下位机程序设计 (13)5 软硬件调试部分 (21)5.1 PROTEUS软件仿真 (21)5.1.1 Protues简介 (21)5.1.2 Protues仿真电路图 (22)5.2 VC软件仿真 (21)结束语 (27)致谢 (28)参考文献 (29)1引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要本文主要描述了利用PC机与A T89C51单片机之间的通信程序设计实现温度显示。
并详述了在VC6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现温度显示。
由单片机采集一个温度信号,将采集到的温度信号传送给PC机显示,PC机用VC6.0编写程序,单片机程序用C语言编写,最后用PROTUES软件进行仿真实现温度显示。
关键词:单片机MSCOMM控件VC6.0 AT89C51 温度显示目录摘要1 引言 (1)2 结构设计与方案选择 (2)2.1设计任务 (2)2.1.1单片机的选择 (2)2.1.2电平转换 (2)2.1.1单片机的选择 (2)2.1.3单片机与pc机通信原理 (2)2.2软件方案选择 (2)2.2.1 上位机编程方案选择 (3)2.2.2 单片机编程方案选择 (3)2.3 总体方案选择 (2)3 硬件设计 (8)3.1单片机主要特性 (5)3.2 MAX232电平芯片介绍10 (10)3.3 硬件电路设计图 (11)3.3.1 PC机与单片机通信接口电路设计框图 (11)3.3.2整体设计原理图 (11)4软件设计 (12)4.1上位机程序设计 (12)4.2下位机程序设计 (13)5 软硬件调试部分 (21)5.1 PROTEUS软件仿真 (21)5.1.1 Protues简介 (21)5.1.2 Protues仿真电路图 (22)5.2 VC软件仿真 (21)结束语 (27)致谢 (28)参考文献 (29)1引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。
加之单片机的计算能力有限,难以进行复杂的数据处理。
因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。
2方案选择2.1硬件方案选择2.1.1单片机的选择本设计采用的是AT89C51单片机,AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
它是一种高效微控制器,因为它更经济实惠,用起来灵活方便,而且习惯了用这种型号的单片机,所以选择AT89C51单片机。
2.1.2电平转换本设计采用MAX232芯片进行电平转换,MAX232芯片是美信公司专门为电脑的RS232标准串口设计的接口电路,使用+5V单电源供电,它的作用就是完成TTL 电平与RS232电平的转换。
PC机的串行口采用的是标准的RS 232接口,单片机的串行口电平是FTL电平,而TTL电平特性与RS 232的电气特性不匹配,因此为了使单片机的串行口能与RS 232接口通信,必须将串行口的输入/输出电平进行转换。
通常用MAX232芯片来完成电平转换。
2.1.3单片机与pc机通信原理MCS-51单片机有一个全双工的串行通讯口UART。
利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。
所以单片机和PC机之间可以方便地进行串口通讯。
单片机串口有3条引线:TXD(发送数据)、RXD(接收数据)和GND(信号地)。
因此在通信距离较短时可采用零MODEM方式,简单三连线结构。
IBM—PC机有两个标准的RS.232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;为了Pc 机与MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片,我们采用了MAXIM公司生产的专用芯片MAX232进行转换。
电路如图所示。
图2.2 MAX232工作原理图2.2软件方案选择2.2.1 上位机编程方案选择本设计采用VC6.0++来实现编程,上位机与单片机进行通信的程序编写可用VB、VC等软件。
由于VB作为面向对象的编程工具不够完全,效率比VC低,提供的命令语言环境较弱,通过串口设备一次最多只能交换16B的数据,对较大数据量的传输存在很大的局限性,很难实现较为复杂的数据处理,VC6.0++是一种功能强大的面向对象的Windows编程开发平台。
VC6.0的优点是界面简洁,占用资源少,操作方便。
所以本设计采用VC作为串口编程工具。
2.2.2单片机编程方案选择本设计单片机的编程选择C语言编写,因为它简洁紧凑、灵活方便、运算符丰富、数据结构丰富、C是结构式语言、C语法限制不太严格,程序设计自由度大、C语言允许直接访问物理地址,可以直接对硬件进行操作、C语言程序生成代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低10へ20%、C语言适用范围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。
所以我选用C语言来编写此程序。
2.3 总体方案选择温度传感器测量出来的温度值由单片机采集出来,然后单片机再将采集出的温度数据处理后,通过串行口发送给上位机。
图2.1总体设计方案流程图3硬件设计3.1 单片机主要特性²与MCS-51 兼容²4K字节可编程闪烁存储器²寿命:1000写/擦循环²数据保留时间:10年²全静态工作:0Hz-24MHz²三级程序存储器锁定²128³8位内部RAM²32可编程I/O线²两个16位定时器/计数器²5个中断源²可编程串行通道²低功耗的闲置和掉电模式²片内振荡器和时钟电路单片机AT89C51的引脚说明:图3.1 AT89C51的引脚排列引脚描述:VCC:电源电压GND:地P0口:P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。
作为输出口时,每一个管脚都能够驱动8个TTL电路。
当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。
P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。
P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。
P1口:P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。
闪烁编程时和程序校验时,P1口接收低8位地址。
P2口:P2口是一个内部带有上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL电路。
对端口写“1”,通过内部的电阻把端口拉到高电平,此时,可作为输入口。
因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口线上的内容在整个运行期间不变。
闪烁编程或校验时,P2口接收高位地址和其它控制信号。
P3口:P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。
对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。
P3口除了作为一般的I/O口外,更重要的用途是它的第二功能,如下表所示表2..1 P3口第二功能P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。
RST:复位输入。
当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。
要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。
如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。
这个位置后只有一条MOVX和MOVC指令ALE才会被应用。
此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。
PSEN:程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。
在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。
EA/VPP:外部访问允许。
欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。
需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA 端状态。
如EA端为高电平,CPU则执行内部程序存储器中的指令。
闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V 编程电压VPP。
XTAL1:震荡器反相放大器及内部时钟发生器的输入端。
XTAL2:震荡器反相放大器的输出端。
时钟震荡器:AT89C51中有一个用于构成内部震荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自然震荡器。
外接石英晶体及电容C1,C2接在放大器的反馈回路中构成并联震荡电路。
对外接电容C1,C2虽然没有十分严格的要求,但电容容量的大小会轻微影响震荡频率的高低、震荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF±10PF,而如果使用陶瓷振荡器建议选择40PF±10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
图3.2内部振荡电路图3.3闲散节电模式AT89C51有两种可用软件编程的省电模式,它们是闲散模式和掉电工作模式。
这两种方式是控制专用寄存器PCON中的PD和IDL位来实现的。