单片机与上位机通信系统设计说明
单片机多机通信课程设计

1设计任务多机串行通信的设计基本任务1.设计三个以上单片机实现主从式串行通信的系统,主机发送数据到指定站号的从机端,也可以群发到所有从机端,并在LED数码管上显示。
2.可通过接在主机上的键盘输入数据,通过主机发送到从机。
3.从机也可输入数据,并可在查询到主机空闲时将数据发送给主机。
4*.从机间可相互通信(从机—)主机 另一从机),通信协议遵从modbus规范。
4@. 其他功能(创新部分)仿真模块例2设计方案2.1设计任务本文在参考了现在普遍的多机通信系统的基础上,设计了一种基于51单片机STC89C51的多机通信系统。
在proteus上设计并仿真电路图。
进入proteus程序仿真,启动程序系统,首先主机通过按键选择准备通信的从机,接通后,主机通过矩阵键盘上的数字按键与从机通信,使从机上的数码管显示对应的数字,以此实现多机通信。
如,与2号机通信并传输“8”这个数字。
首先主机从选择从机按键上按“2号机”键,与2号机连通后按下主机矩阵键盘上的“8”键,对应的2号机数码管上会显示数字“8”,证明通信成功。
2.2串行通信简介串行通信可以分为同步通信和异步通信两类。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。
这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。
它们均由同步字符、数据字符和校验字符(CRC)组成。
其中同步字符位于帧开头,用于确认数据字符的开始。
数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。
同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
异步通信中,在异步通行中有两个比较重要的指标:字符帧格式和波特率。
数据通常以字符或者字节为单位组成字符帧传送。
字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。
发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
基于51单片机的上位机通讯系统课程设计说明书

目录摘要 0 (1) (1) (1)1.3 设计思路 (1) (2) (2) (2) (3)2.2.1 +5V电源原理及设计 (3) (4) (5)2.2.4 RS-232接口电器特性 (5) (8) (8)3.2 主控制部分――AT89C52单片机简介 (9) (16) (16)5.课程设计总结 (31)参考文献 (33)摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。
加之单片机的计算能力有限,难以进行复杂的数据处理。
因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。
本文介绍了一种基于AT89C52 单片机与上位机通信系统, 并对其工作原理及软、硬件的设计和实现方法进行了详细的阐述。
在单片机的输入输出控制中,除直接接上小键盘和LCD显示等方法外,一般都通过串口和上位机PC进行通信,后面一种方法由于PC机拥有强大的数据处理功能以及友好的控制界面并且能实现远程控制所以显得尤为有用。
此系统可以由上位机控制,通过串口操作单片机模块实现其相应功能。
本次设计就是来完成由上位机通过串口控制来实现,以发光二极管的发光状态模拟开关电路的通断,用上位机的DOS命令对其进行控制。
并用LED屏显示程序的传输。
关键字AT89C52单片机;上位机;串口通信;开关电路.1)通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
2)通过上位机通信系统的设计,了解上位机通信系统的工作原理和简单的程序编写,最终提高我们的逻辑思维能力。
上位机设计方案

前言在我国采用斜井开拓方式的矿井中,随着矿井的不断开采和延伸,井下作业地点距离越来越长。
长期以来,职工只能步行,把大量体力和时间消耗在过程中。
为此应切实解决井下作业人员体力和时间的武功消耗,确保井下作业的工作和工程质量。
目前随着科技水平的不断提高,许多矿井都选用架空人车负担煤矿人员的运输。
基于物联网的矿山井下架空人车系统的基本功能是通过无线传输对车厢进行实现监控,车厢内的工作人员可以在意外事故发生后按下紧急按钮通知地面主控制室采取有效措施,防止灾难发生。
本设计是以组态王软件做为矿井架空人车无线监控系统上位机,完成之后,可以实现对轿厢内情况的视频监控、语音通信、报警以及MP3播放等功能。
控制室可以通过上位机来监控轿厢机内的情况以及和任何一个轿厢进行语音通信,以实现控制室对每个轿厢内状态的监控。
1概述1.1矿用架空人车的概况矿用架空人车为矿山长距离安全快速地人员运输提供了经济使用的解决方案。
其工作原理类似于地面旅游索道,它通过电动机传动减速机上的摩擦轮作为驱动装置,以架空、无极循环的钢丝绳作为牵引承载,此钢丝绳靠尾轮张紧装置进行张紧和绳长调节,沿途采用托绳支撑,以维持钢丝绳在托轮间的贴合力;抱索器将乘人抱索器或物料箱与钢丝绳连接并循环运行,从而实现运送人员及物料的目的。
其优势能长期运输,实现无人值守和远程智能监控运行,无需专门操作司机,维护工作量较少。
这种矿用架空人车与斜井人车运输相比较,具有更安全使用、运送能力大、动力消耗小,设备结构简单、维护工作量小等优点,深受井下工人的欢迎,大大提高了井下辅助运输的效率。
与国内快速发展的煤矿采掘机械化水平相比,矿井辅助运输明显落后,已成为制约我国煤炭生产发展的主要因素之一。
利用架空乘人装置运送井下人员,减少工人上下班的时间和体力消耗,对矿井的高产高效起到推动作用。
矿用架空人车的最新发展方向呈现大运量、高速度、集中控制、稳定安全等特点。
具有大运量、连续运输、连续变坡拐弯的特点,而且运行可靠,易于实现自动化和集中控制,经济效益十分明显。
51单片机与PC机通信

《专业综合实习报告》专业:电子信息工程年级:2013级指导教师:学生:目录一:实验项目名称二:前言三:项目内容及要求四:串口通信原理五:设计思路5.1虚拟串口的设置5.2下位机电路和程序设计5.3串口通信仿真六:电路原理框图七:相关硬件及配套软件7.1 AT89C51器件简介7.2 COMPIN简介7.3 MAX232器件简介7.4友善串口调试助手7.5 虚拟串口软件Virtual Serial Port Driver 6.9八:程序设计九:proteus仿真调试十:总结十一:参考文献一:实验项目名称:基于51单片机的单片机与PC机通信二:前言在国内外,以PC机作为上位机,单片机作为下位机的控制系统中,PC机通常以软件界面进行人机交互,以串行通信方式与单片机进行积极交互,而单片机系统根据被控对象配置相应的前向,后向信息通道,工作时作为主控机测对象,作为被控机接受PC机监督,指挥,定期或受命向上位机提供对象及本身的工作状态信息。
目前,随着集成电路集成度的增加,电子计算机向微型化和超微型化方向发展,微型计算机已成为导弹,智能机器人,人类宇宙和太空和太空奥妙复杂系统不可缺少的智能部件。
在一些工业控制中,经常需要以多台单片机作为下位机执行对被控对象的直接控制,以一台PC机为上位机完成复杂的数据处理,组成一种以集中管理、分散控制为特点的集散控制系统。
为了提高系统管理的先进性和安全性,计算机工业自动控制和监测系统越来越多地采用集总分算系统。
较为常见的形式是由一台做管理用的上位主计算机(主机)和一台直接参与控制检测的下位机(单片机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。
主机的作用一是要向从机发送各种命令及参数:二是要及时收集、整理和分析从机发回的数据,供进一步的决策和报表。
从机被动地接受、执行主机发来的命令,并且根据主机的要求向主机回传相应烦人实时数据,报告其运行状态。
用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。
上下位机通信方案(新改)

上下位机通信方案控制板电源由上位机用0x00打开,控制板电源关闭时单片机处于失电状态不工作,控制板电源可以由单片机关闭。
一旦上电,单片机即启动,控制所有输出量为无效状态(所有模拟输出为零,所有开关输出为高),且上传一帧数据表述准备好,然后进入等待状态。
单片机的工作完全受上位机控制,单片机的工作1.检测到测量点的变化,将其变化以一定的格式发送给上位机。
2.单片机接收上位机传送的命令,并按照协议执行。
单片机接受的命令有下面几种:1、关闭电源(执行该命令后,单片机会失电。
只能由上位机用0x00再打开)2、是否上传数据,及上传数据的变化量3、控制输出开关量4、控制输出模拟量握手协议:通讯双方在每次通讯时,接收方返回应答帧校验正确,返回0xFC校验错误,返回0xFD 同时丢掉当前帧,对方将从发此帧注:应答帧只发送一个字节面板指示编号:(具体编号由上位机拟定)数字输出量1 电源指示灯0xA0 61 DO02 预热塞加热指示灯62 DO13 加油泵指示灯63 DO24 急停警示指示灯64 DO35 无65 DO46 系统I 气泡观察0xC1 66 DO57 系统I仪表照明指示灯67 DO68 系统I 0-28Mpa指示灯68 DO79 系统I 主泵卸荷指示灯69 DO810 系统I自循环指示灯70 DO911 系统I输出指示灯71 DO1012 系统II 气泡观察0xC2 72 DO1113 系统II车厢照明指示灯73 DO1214系统II 0-28Mpa指示灯74 DO1315系统II主泵卸荷指示灯75 DO1416系统II 自循环指示灯76 DO1517系统II 输出指示灯77 DO1618 系统I开式灯78 DO1719 系统I 闭式灯79 DO1820系统II 开式灯0Xbf 80 DO1921系统II 闭式灯0xC0 81 DO2022 液位低指示灯82 DO2123 发电机故障指示灯83 DO2224 机油压力故障指示灯84 DO2325 空气滤故障指示灯85 DO2426 液位高指示灯86 DO2527 系统I低出滤指示灯87 DO2628 系统I 高粗滤指示灯0Xaf 88 DO2729 系统I高精滤I指示灯0xB0 89 DO2830 系统I 高精滤II指示灯90 DO2931 系统I压力报警指示灯91 DO30 32系统II 低出滤指示灯92 DO31 33系统II高粗滤指示灯93 DO32 34系统II 高精滤I指示灯94 DO33 35系统II高精滤II指示灯95 DO34 36系统II 压力报警指示灯96 DO3540 V5039 SHCLK38 SHDAT37 SHRET36 GND31 GND30 GND数字输入量1电源开关0xE0 23 DI02预热塞加热开关22 DI13加油泵开关21 DI24紧急停车按钮20 DI35油门启动按钮19 DI46系统I 气泡观察18 DI57系统I 仪表照明开关17 DI68系统I 0-28Mpa开关16 DI79系统I 主泵卸荷15 DI810系统I 自循环14 DI911系统I 输出13 D1012系统II 气泡观察12 D1113系统II 车厢照明11 DI214系统II 0-28Mpa开关10 DI1315系统II 主泵卸荷9 DI1416系统II 自循环0xEF 8 DI1517系统II 输出0xF0 7 DI1618系统I 开式开关0xF1 6 DI1719系统I 闭式开关0xF2 5 DI1820系统II 开式开关0xF3 4 DI1921系统II 闭式开关0xF4 3 DI2041 V120 模拟输出量1.电流0xD0 42 AO0 2.柴油油量43 AO1 3.汽缸盖温度44 AO2 4.机油温度45 AO3 5.机油压力46 AO4 6.转速47 AO5 7.系统I 输出压力48 AO6 8.系统I 辅助压力49 AO7 9.系统I 回油压力50 AO8 10.系统I 流量51 AO9 11.系统I 温度52 AO10 12.系统II 输出压力53 AO11 13.系统II 辅助压力54 AO12 14.系统II 回油压力55 AO13 15.系统II 流量56 AO14 16.系统II 温度0Xdf 57 AO1560 V120模拟输入量1.油门0x90 1 AI12.系统I 压力调节0x91 2 AI23.系统II 压力调节0x92 3 AI3。
RS485实验指导书

实验一实验板点对点通信【实验目的】1. 建立双机通信的概念2. 掌握单片机串行口通信的编程和调试方法。
3. 掌握异步串行通信的数据格式及数据协议设定。
【实验环境】PC机一台,keil开发环境一套,RS232通信线【实验重点及难点】串行口通信的程序的设计,以及硬件的连接数据通信的协议等。
【实验原理介绍】1.1 程序下载方式介绍1.1.1 RS232与上位机通信下载程序由于要从上位机中下载程序到单片机中,所以需要建立他们之间的通信线路。
本实验采用MAX232芯片,max232是一种把电脑的串行口rs232信号电平(-10 ,+10v)转换为单片机所用到的TTL信号点平(0 ,+5)的芯片,下面介绍一下max232引脚图,看下面的图。
图3.1 max232引脚图本实验中采用11、12、13、14号管脚作输入输出,其中13、14与DB9连接,11、12与单片机连接。
1.1.2 485通信485通信的过程如下:从DB9接收数据,经过max485芯片实现电平转换,然后max485芯片经过高速光耦与单片机通信,将数据送入单片机中进行处理;处理完成后将数据返回至max485,再经DB9输出。
如此就可实现两单片机之间的通信或单片机与上位机间的通信。
下面介绍一下max485芯片接线方法,如下图示:图2 max485接线图其中1、4为输入输出管脚,经光耦与单片机连接,2、3为使能端,6、7为与外部通信接口。
1.2 MCU功能介绍本实验中选择stc12c5a60s2系列单片机,其管脚图如下:图3 tc12c5a60s2单片机管脚图stc12c5a60s2系列单片机是单时钟的单片机,增强型8051内核,速度比普通8051快8~12倍,宽电压:5.5~3.5V,2.2~3.8V,低功耗设计:空闲模式,掉电模式,工作频率:0~35MHz.时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。
全双工异步串行口,兼容8051的串口。
单片机课程设计PC机与单片机通信

信息科学与技术学院《单片机原理》课程设计报告PC机与单片机通信目录第一章设计任务及要求 (3)1.1 设计任务 (3)1.2 设计要求 (3)第二章设计设计思路与原理 (3)2.1设计思路 (3)2.2设计原理 (4)第三章系统功能模块 (5)3.1 总原理图 (5)3.2温度测量电路 (5)3.3通信模块 (8)3.4发光二极管电路 (10)3.5复位电路及时钟电路 (11)第四章程序设计 (12)4.2 软硬件功能............................................................................错误!未定义书签。
第五章参考结论与体会 .. (13)第六章参考文献 (15)附录 (15)一、设计任务及要求1.1 设计任务PC机与单片机通信1.2 设计要求1、通过DS18B20采集当前温度2、将当前温度发送至PC机,在PC机上设计接收温度界面,(并绘制接收温度曲线);3、根据温度值向单片机传送不同字符,并点亮相应的二极管。
若温度值在20~26,传送字符A,点亮绿灯;温度值在27~30,传送B,点亮黄灯;温度值在31~40,传送C,点亮蓝灯。
二、设计思路与原理2.1 设计思路在测控系统中,经常采用单片机在操作现场进行数据采集,但是单片机数据储存和数据处理能力较低,当需要处理较复杂数据或需要对多个采集数据进行综合处理以及需要进行集散控制时,单片机的算术运算和逻辑运算能力显的不足,这时往往需要借助计算机系统。
将单片机采集的数据通过串行口传给PC机,由PC机高级语言或数据库语言进行处理,或者实现PC机对远程单片机进行控制。
所以一般情况下单片机通过串行口与PC机的串行口相连,把采集到的数据传送到PC机上。
总体思路:首先利用DS18b20采集温度数据,然后使用单片机串口将温度数据发送至PC机。
再判断温度值的范围控制发光二级管。
2.2 设计原理目前RS-232是PC与通信工业中应用最广泛的一种串行接口,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号。
基于单片机串口通信的上位机和下位机实践

基于单片机串口通信的上位机和下位机实践标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]基于单片机串口通信的上位机和下位机实践串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线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 inSystem.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;checkBox3.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; checkBox3.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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JIU JIANG UNIVERSITY
《单片机原理与应用》大作业
题目单片机与上位机通信系统设计院系信息科学与技术学院
专业计算机应用设计
姓名
班级学号
指导教师
2011年12月14
信息科学与技术学院
单片机大作业任务书
作业名称基于AT89C52单片机与上位机通信系统设计
2、设计要求
(1)可以由上位机通过串口操作单片机模块。
(2)利用单片机自身功能实现通信。
完成时间2011-2012学年第一学期
目录
一、摘要 (4)
二、总体方案设计与论证 (5)
1、设计 (5)
2、框图设计 (5)
3、知识点 (5)
三、系统硬件设计 (7)
1、电路原理图···················································
四、系统软件设计 (11)
五、系统硬件PROTEUS仿真原理图 (13)
六、系统PROTEUS运行情况图 (13)
七、心得体会 (18)
八、致 (2)
摘要
本文介绍了一种基于AT89C52 单片机与上位机通信系统, 并对其工作原理及软、硬件的设计和实现方法进行了详细的阐述。
在单片机的输入输出控制中,除直接上小键盘和LCD显示等方法外,一般都通过
串口和上位机PC进行通信,后面一种方法由于能实现远程控制并且PC机拥有强大的数据处理功能以及友好的控制界面所以显得尤为有用。
此系统可以由上位机控制通过串口操作
单片机模块
本单元就是来完成由上位机通过串口控制来实现以发光二极管的发光状态模拟开关电路的
通断,用上位机的DOS命令对其进行控制
通过此次作业能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。
关键词:AT89C52; 上位机,单片机
二.总体方案论证与设计
1设计
本论文是设计一基于AT89C52单片机应用系统,可以由上位机通过串口操作控制单片机模块以发光二极管的发光状态模拟开关电路的通断,用上位机DOS命令来控制
2框图设计
基于AT89C52单片机与上位机通信系统设计由电源电路,单片机主控电路,按键控制电路数码管控制对像和上位机接口组成,系统框图如图所示
三知识点
本项目需要通过学习和查阅资料,掌握和了解如下知识:
a +5V电源原理及设计
b 单片机复位电路工作原理及设计
c 单片机晶振电路工作原理机设计
d 单片机与上位机通信的接口电路设计
e 发光二极管的特性
f AT89C52单片机引脚
g 单片机汇编语言机程序设计
四.系统硬件设计
电路原理图
基于AT89C52单片机与上位机通信系统设计原理图如图19-2所示。
电源电路为单片机以及其他模块提供标准的电源。
晶振模块为单片机提供时钟标准,使系统各部分能协调工作。
复位电路模块为单片机提供复位功能。
单片机作为主控制器,根据输入信号对系统进行相应的控制处理。
9针接口电路和上位机的接口相连实现上位机和单片机之间的通信。
发光二极管是单片机控制的控制对象实际应用中,它连接相应的光电隔离和驱动电路。
五.系统软件设计
程序流程图如图19-3所示,其中初始化主要是对串口工作方式等设置
程序清单:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a;
sbit d = P3^7;
//--------------------------------------
say_CR_LF()
{
SBUF = 13; while (TI == 0); TI = 0;
SBUF = 10; while (TI == 0); TI = 0;
}
//--------------------------------------
say_yeah()
{
SBUF = a; while (TI == 0); TI = 0;
SBUF = ','; while (TI == 0); TI = 0;
SBUF = ' '; while (TI == 0); TI = 0;
SBUF = 'y'; while (TI == 0); TI = 0;
SBUF = 'e'; while (TI == 0); TI = 0;
SBUF = 'a'; while (TI == 0); TI = 0;
SBUF = 'h'; while (TI == 0); TI = 0;
SBUF = '!'; while (TI == 0); TI = 0;
say_CR_LF();
}
//--------------------------------------
say_hello()
{
SBUF = 'H'; while (TI == 0); TI = 0;
SBUF = 'e'; while (TI == 0); TI = 0;
SBUF = 'l'; while (TI == 0); TI = 0;
SBUF = 'l'; while (TI == 0); TI = 0;
SBUF = 'o'; while (TI == 0); TI = 0;
SBUF = '!'; while (TI == 0); TI = 0;
say_CR_LF();
}
//--------------------------------------
void init()
{
SCON = 0x50; //设置串口通信方式1, 允许接收 PCON &= 0x7F;
TMOD = 0x20; //设置T1定时方式2
TH1 = 0xfd; //9600bps11.0592MHz
TL1 = 0xfd;
TR1 = 1; //启动T1
ES = 1; //开串口中断.
EA = 1; //开总中断.
say_hello();
}
//--------------------------------------
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--) for(y = 110; y > 0; y--); }
//--------------------------------------
void main()
{
init();
TI = 1;
a = '4';
while(1) {
if(a == '1') {
d = 0; delay(400);
d = 1; delay(400);
}
else if(a == '2') {
d = 0; delay(200);
d = 1; delay(200);
}
else if(a == '3') {
d = 0; delay(100);
d = 1; delay(100);
}
else if(a == '4') {
d = 1;
} } }
//--------------------------------------
void ser() interrupt 4
{
if (TI == 1) TI = 0;
if (RI == 1) {
RI = 0;
P0 = SBUF;
a = SBUF; //中间变量.
say_yeah();
} }
六.系统硬件P R O T E U S仿真原理图
七.系统P r o t e u s仿真运行情况图显示开始测试界面
输入123
输入879
. .. .
八.致
论文的写作是枯燥艰辛而又富有挑战的。
老师的谆谆诱导、同学的出谋划策及家长的支持鼓励,是我坚持完成论文的动力源泉。
在此,我特别要感我的导师严青老师。
从论文的选题、文献的采集、框架的设计、结构的布局到最终的论文定稿,从容到格式,从标题到标点,都他费尽心血。
没有严青老师的辛勤栽培、孜孜教诲,就没有我论文的顺利完成。
感601寝室的各位同学,与他们的交流使我受益颇多。
最后要感我的家人以及我的朋友们对我的理解、支持、鼓励和帮助,正是因为有了他们,我所做的一切才更有意义;也正是因为有了他们,我才有了追求进步的勇气和信心。
我很真诚的感一直来帮助我做这个作业的老师和同学,!
.. .. .. ..。