您的浏览器Javascript被禁用,需开启后体验完整功能, 请单击此处查询如何开启
网页 资讯 视频 图片 知道 贴吧 采购 地图 文库 |

上位机与下位机之间通信编程_工学_高等教育_教育专区

23711人阅读|2834次下载

上位机与下位机之间通信编程_工学_高等教育_教育专区。上位机 下位机 C编程


摘 要 本文主要描述了利用 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 引言 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它 所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的 更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向 发展。 现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警 等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的 目的。加之单片机的计算能力有限,难以进行复杂的数据处理。因此在功能比较 复杂的控制系统中,通常以 PC 机为上位机,单片机为下位机,由单片机完成数 据的采集及对装置的控制, 而由上位机完成各种复杂的数据处理及对单片机的控 制。 1 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(信号地)。因此在通信距离 较短时可采用零 MO· DEM 方式,简单三连线结构。IBM—PC 机有两个标准的 RS.232 串行口,其 电平采用的是 EIA 电平,而 MCS-51 单片机的串行通信是由 TXD(发送数据)和 RXD(接收数据)来进行全双工通信的,它们的电平是 TTL 电平;为了 Pc 机与 MCS-51 机之间能可靠地进行串行通信,需要用电平转换芯片,我们采用了 MAXIM 公司生产的专用芯片 MAX232 进行转换。电路如图所示。 2 图 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 总体方案选择 3 温度传感器测量出来的温度值由单片机采集出来, 然后单片机再将采集出的 温度数据处理后,通过串行口发送给上位机。 AT89C51 MAX232 图 2.1 总体设计方案流程图 PC 机 4 3 硬件设计 3.1 单片机主要特性 ·与MCS-51 兼容 ·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 单片机AT89C51的引脚说明: 图 3.1 AT89C51 的引脚排列 引脚描述: VCC:电源电压 5 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 口外,更重要的用途是它的第二功能,如下表所 示 端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 6 第二功能 RXD TXD INT0 INT1 T0 T1 WR RD 表 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。用户也可以采用外部 7 时钟。采用外部时钟的电路如图示。这种情况下,外部时钟脉冲接到XTAL1端, 即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频 触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但 最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。 图 3.2 内部振荡电路 图 3.3 闲散节电模式 AT89C51 有两种可用软件编程的省电模式,它们是闲散模式和掉电工作模 式。这两种方式是控制专用寄存器 PCON 中的 PD 和 IDL 位来实现的。PD 是掉电 模式,当 PD=1 时,激活掉电工作模式,单片机进入掉电工作状态。IDL 是闲散 等待方式,当 IDL=1,激活闲散工作状态,单片机进入睡眠状态。如需要同时进 入两种工作模式,即 PD 和 IDL 同时为 1,则先激活掉电模式。在闲散工作模式 状态,中央处理器 CPU 保持睡眠状态,而所有片内的外设仍保持激活状态,这种 方式由软件产生。此时,片内随机存取数据存储器和所有特殊功能寄存器的内容 保持不变。闲散模式可由任何允许的中断请求或硬件复位终止。终止闲散工作模 式的方法有两种,一是任何一条被允许中断的事件被激活,IDL 被硬件清除,即 刻终止闲散工作模式。程序会首先影响中断,进入中断服务程序,执行完中断服 务程序,并紧随 RETI 指令后,下一条要执行的指令就是使单片机进入闲散工作 模式,那条指令后面的一条指令。二是通过硬件复位也可将闲散工作模式终止。 需要注意的是:当由硬件复位来终止闲散工作模式时,中央处理器 CPU 通常是从 激活空闲模式那条指令的下一条开始继续执行程序的,要完成内部复位操作,硬 件复位脉冲要保持两个机器周期有效,在这种情况下,内部禁止中央处理器 CPU 访问片内 RAM,而允许访问其他端口,为了避免可能对端口产生的意外写入:激 活闲散模式的那条指令后面的一条指令不应是一条对端口或外部存储器的写入 指令。 8 掉电模式: 在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的 指令,片内 RAM 和特殊功能寄存器的内容在中指掉电模式前被冻结。退出掉电模 式的唯一方法是硬件复位,复位后将从新定义全部特殊功能寄存器但不改变 RAM 中的内容,在 VCC 恢复到正常工作电平前,复位应无效切必须保持一定时间以使 振荡器从新启动并稳定工作。 程序存储 模式 器 闲散模式 闲散模式 掉电模式 掉电模式 内部 内部 外部 外部 ALE 1 1 0 0 PSEN P0 数据 浮空 数据 数据 P1 数据 数据 数据 数据 P2 数据 地址 数据 数据 P3 数据 数据 数据 数据 1 1 0 0 表 2.2 闲散和掉电模式外部引脚状态。 程序存储器的加密 AT89C51 可使用对芯片上的三个加密位 LB1,LB2,LB3 进行编程(P)或不 编程(U)得到如下表所示的功能: 程序加密位 1 2 3 4 U P P P U U P P U U U P 没有程序保护功能 保护类型 禁止从外部程序存储器中执行 MOVC 指令读取内部程序存储器 的内容 除上表功能外,还禁止程序校验 除以上功能外,同时禁止外部执行 表2.3程序存储器的加密 当 LB1 被编程时,在复位期间,EA 端的电平被锁存,如果单片机上电后一 直没有复位,锁存起来的初始值是一个不确定数,这个不确定数会一直保存到真 正复位位置。为了使单片机正常工作,被锁存的 EA 电平与这个引脚当前辑电平 9 一致。机密位只能通过整片擦除的方法清除。 3.2MAX232 电平芯片介绍 MAX232 芯片是美信公司专门为电脑的 RS-232 标准串口设计的接口电路, 使用+5v 单电源供电。 内部结构基本可分三个部分: 第一部分是电荷泵电路。由 1、2、3、4、5、6 脚和 4 只电容构成。功能是 产生+12v 和-12v 两个电源,提供给 RS-232 串口电平的需要。 第二部分是数据转换通道。由 7、8、9、10、11、12、13、14 脚构成两个数 据通道。 其中 13 脚(R1IN) 、12 脚(R1OUT) 、11 脚(T1IN) 、14 脚(T1OUT)为 第一数据通道。 8 脚(R2IN) 脚(R2OUT) 、9 、10 脚(T2IN) 脚(T2OUT)为第二数据 、7 通道。 TTL/CMOS 数据从 T1IN、 T2IN 输入转换成 RS-232 数据从 T1OUT、 T2OUT 送到电脑 DP9 插头;DP9 插头的 RS-232 数据从 R1IN、R2IN 输入转换成 TTL/CMOS 数据后从 R1OUT、R2OUT 输出。 第三部分是供电。15 脚 DNG、16 脚 VCC(+5v) 。 电平转换电路如下: 图 3.4 MAX232 电平芯片 10 3.3 硬件电路设计图 3.3.1 PC 机与单片机通信接口电路设计框图 本文采用 MAx232 作为 PC 机与单片机的串行通信接口芯片。硬件连接时,可 从 MAX232 中的 2 路发送器和接收器中任选一路,只要注意发送与接收的引脚对 应关系即可。接口电路如图 3.5 所示。 图 3.5 PC 机与单片机通信接口电路设计框图 3.3.2 整体设计原理图 总体设计按照整体设计思路方案绘制原理图如下所示: 图 3.6 整体设计原理图 11 4 软件设计 4.1 上位机程序设计 void CTem_conDlg::OnOnCommMscomm1() { // TODO: Add your control notification handler code here m_strRXData=" "; 数据 VARIANT variant_inp; LONG len,k; BYTE rxdata[2048]; CString strtemp; if(m_ctrlComm.GetCommEvent()==2)//事件值为 2 表示接收缓冲区内有 字符 { 加入//处理代码 variant_inp=m_ctrlComm.GetInput();//读缓冲区 safearray_inp=variant_inp; //ColeSafeArray 型变量 len=safearray_inp.GetOneDimSize();//得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为 BYTE 型数组 for(k=0;k<len;k++) { BYTE bt=*(char*)(rxdata+k);//字符型 strtemp.Format("%c",bt); m_strRXData+=strtemp; } } UpdateData(FALSE); //更新编辑框内容 //将字符送入临时变量 strtemp 存放 //加入接收编辑框对应字符串 //将数组转换为 Cstring 型变量 //VARIANT 型变量转换为 //以下你可以根据自己的通信协议 //设置 BYTE 数组 //每次进入则将编辑框内容清空等待显示新的 } 12 4.2 下位机程序设计 #include <reg51.h> #define XTAL 11059200 #define baudrate 9600 // CUP 晶振频率 // 通信波特率 #define uchar unsigned char #define uint unsigned int sbit DQ = P3^3; sbit BEEP = P3^7; unsigned char presence ; unsigned char code LEDData1[ ] // 定义 DS18B20 端口 DQ ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff}; unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}; unsigned char data temp_data[2] = {0x00,0x00}; unsigned char data display[5] = unsigned char {0x00,0x00,0x00,0x00,0x00}; code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; void beep(); sbit DIN = P0^7; // 小数点 bit bit flash=0; flag_zf=0; // 显示开关标记 // 正负温度标志 /**********************************************************/ void Delay(unsigned int num)// 延时函数 { while( --num ); } /**********************************************************/ uchar Init_DS18B20(void) // 初始化 ds1820 13 { DQ = 1; Delay(8); DQ = 0; Delay(90); DQ = 1; Delay(8); presence = DQ; Delay(100); DQ = 1; // DQ 复位 // 稍做延时 // 单片机将 DQ 拉低 // 精确延时 大于 480us // 拉高总线 // 如果=0 则初始化成功 =1 则初始化失败 return(presence); // 返回信号,0=presence,1= no presence } /**********************************************************/ uchar ReadOneChar(void) // 读一个字节 { unsigned char i = 0; unsigned char dat = 0; for (i = 8; i > 0; i--) { DQ = 0; // 给脉冲信号 dat >>= 1; DQ = 1; // 给脉冲信号 if(DQ) dat |= 0x80; Delay(4); } return (dat); } /**********************************************************/ 14 void WriteOneChar(unsigned char dat)// 写一个字节 { unsigned char i = 0; for (i = 8; i > 0; i--) { DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat>>=1; } } /*********************************************************/ void Read_Temperature(void)// 读取温度 { Init_DS18B20(); if(presence==1) { beep(); flash=1; } else { flash=0; WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0xBE); // 读取温度寄存器 // 温度低 8 位 // 温度高 8 位 // 启动温度转换 // DS18B20 不正常,蜂鸣器报警 temp_data[0] = ReadOneChar(); temp_data[1] = ReadOneChar(); 15 } } /*********************************************************/ void Disp_Temperature()// 显示温度 { unsigned char n=0; if(temp_data[1]>7) { flag_zf=1; temp_data[1]=!( temp_data[1]); temp_data[0]=!( temp_data[0]); temp_data[0]= temp_data[0]+1; if(temp_data[0]=0) { temp_data[1]= temp_data[1]+1;} } Else {flag_zf=0} 正,不做任何 //理 display[4]=temp_data[0]&0x0f; display[0]=ditab[display[4]]; // 查表得小数位的值 //判断测得的温度数据是正还是负,如果为 //当温度高八位中的高五位全为 O // 所测温度为负时,要进行转换 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); display[3]=display[4]/100; display[1]=display[4]%100; display[2]=display[1]/10; display[1]=display[1]%10; if(flag_zf=1) {p0=0xbf; P2=0x02; Delay(300);} if(!display[3]) //温度为负数时第二个数码管显示负号 // 高位为 0,不显示 16 { display[3]=0x0a; if(!display[2]) display[2]=0x0a; } P0 = 0xc6; P2 = 0xfe; 平时选通 Delay(300); // 显示 C // 位选线为 P2.7 口,LED 为共阳极显示,当位选线为低电 // 次高位为 0,不显示 P0 = 0x9c; P2 = 0xfd; Delay(300); // 显示 ° // 选中 P2.6 口 P0 =LEDData[display[0]] ; P2 = 0xfb; Delay(300); //p2.5 // 显示小数位 P0 =LEDData1[display[1]]; // 显示个位 P2 = 0xf7; Delay(300); P0 =LEDData[display[2]]; P2 = 0xef; Delay(300); // 显示十位 P0 =LEDData[display[3]]; P2 = 0xdf; Delay(300); // 显示百位 P2 = 0xff; // 关闭显示 17 } /*********************************************************/ void beep(void) { unsigned char i; for (i=0;i<100;i++) { Delay(60); BEEP=!BEEP; } BEEP=1; } /*********************************************************/ void init(void) { EA = 1; TMOD = 0x20; 率 TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); 赋初值 SCON = 0x50; PCON &= 0x00; TR1 = 1; IE = 0x00; } /*********************************************************/ void send_char(void) // 传送十六位的温度数据,低位在前 { unsigned i=0; // 设定串行口工作方式 // 波特率不倍增 // 定时器 0 // "中断总允许" // 定时器 1 工作于 8 位自动重载模式, 用于产生波特 // 关闭蜂鸣器 // BEEP 取反 // 启动定时器 1 // 禁止任何中断 18 while (i < 2) { SBUF = temp_data[i]; while (!TI); TI = 0; i++; } } /*********************************************************/ void main(void) { uchar receive; init(); while(1) { Read_Temperature(); if (flash==0) { Disp_Temperature(); } else { P2 = 0x00 ; } if (RI) { RI = 0; receive = SBUF; if (receive == 49) { send_char(); // 传送采集的温度 // 是否开始采集温度 // 是否有数据到来 // DS18B20 不正常,关闭显示 // 显示温度 // 读取温度 // 等特数据传送 // 清除数据传送标志 19 } } } } 20 5 仿真与调试 5.1PROTEUS 软件仿真 5.1.1 Protues 简介 Protues 软件是英国 Labcenter electronics 公司出版的 EDA 工具软 件 (该软件中国总代理为广州风标电子技术有限公司) 它不仅具有其它 EDA 。 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真 单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱 好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青 睐。Proteus 是世界上著名的 EDA 工具(仿真软件),从原理图布图、代码调 试到单片机与外围电路协同仿真,一键切换到 PCB 设计,真正实现了从概 念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和 虚 拟 模 型 仿 真 软 件 三 合 一 的 设 计 平 台 , 其 处 理 器 模 型 支 持 8051、 HC11、 PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086 和 MSP430 等,2010 年 即将增加 Cortex 和 DSP 系列处理器, 并持续增加其他系列处理器模型。 在编译方面,它也支持 IAR、Keil 和 MPLAB 等多种编译器。 protues 支持当前的主流单片机,如 51 系列、AVR 系列、PIC12 系列、 PIC16 系列、PIC18 系列、Z80 系列、HC11 系列、68000 系列等。 1)提供软件调试功能 2)提供丰富的外围接口器件及其仿真 RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分 SPI 器件,部分 IIC 器件。这样很接近实际。 3) 提供丰富的虚拟仪器 利用虚拟仪器在仿真过程中可以测量外围电路的特性,培养学生实际 硬件的调试能力。 4) 具有强大的原理图绘制功能 在 PROTUES 绘制好原理图后,调入已编译好的目标代码文件:*.HEX, 可以在 PROTUES 的原理图中看到模拟的实物运行状态和过程。 PROTUES 是单片机课堂教学的先进助手。 PROTUES 不仅可将许多单片机实例功能形象化, 也可将许多单片机实例 运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则 是实物演示实验难以达到的效果。 21 它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在 相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路 连接、电路检测、电路修改、软件调试、运行结果等。 课程设计、毕业设计是学生走向就业的重要实践环节。由于 PROTUES 提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、 提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了 培养学生实践精神、创造精神的平台 随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前 期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间 大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发 应用中 PROTUES 也能茯得愈来愈广泛的应用。 5.1.2 protues 仿真电路图 图 5.1 总体仿真电路原理图 22 用搭建好的原理图放在 protues 软件中进行仿真, 当单片机采集到数据时通 过一系列的转换最终送到上位机进行数据显示, 从上位机即可得到下位机采集到 的数据,从而完成上位机与下位机的通信。 5.2 VC 软件仿真 步骤 1:打开 VC 软件,新建文件,选择【MFC AppWizard exe】项,工程 名取为【tem_con】 ,单击【OK】按钮,如图所示。 图 5.2 打开 VC 软件界面 步骤 2 选择【Dialog based】项,单击【Finish】按钮,如图所示 23 图 5.3 选择基本对话框 步骤 3:单击【Project->Add to project->Components and Controls...】菜单项, 如图所示。 24 图 5.4 添加工程 步骤 4:等待软件打开文件夹,双击【Registered ActveX Controls】文件夹, 如图所示。 25 图 5.5 软件打开文件夹 步骤 5:选择【Microsoft Communications Control,version 6.0】列表项,单击 【Insert】按钮,如图所示。 26 图 5.6 选择 Microsoft Communications Control,version 6.0 步骤 6:接着弹出【Confirm Classes】对话框,默认不修改,单击【OK】按 钮,如图所示。 27 图 5.7 弹出 Confirm Classe 对话框 步骤 7:将控件工具条中的串行口控件拖动到对话框中,用鼠标左键点住 ,一直拖到对话框中,在任意位置释放左键,如图所示。 28 图 5.8 添加串口控件 步骤 8:单击【View->ClassWizard】菜单项打开【MFC ClassWizard】对话 框,选中【IDC_MSCOMM1】和【OnComm】列表项,单击【Add Function...】 按钮,如图所示。 29 图 5.9 Add Function 按钮, 我们就会看到增加 【OnOnCommMscomm1()】 步骤 9: 一直单击 【OK】 函数,如图所示。 图 5.10 增加 OnOnCommMscomm 函数 步骤 10:选择控件工具条中的编辑框控件 abl,在对话框中添加编辑框控件, 如图所示。 图 5.11 添加编辑框控件 步骤 11:在【MFC ClassWizard】对话框中,单击【Member Variables】选 项卡, 为编辑框和串行口选择关联变量 m_strRXData 和 m_ctrlComm,单击 【OK】 30 按钮,如图所示。 图 5.12 选择关联变量 m_strRXData 和 m_ctrlComm 步骤 12:在【OnOnCommMscomm1()】函数中添加代码,添加完代码后的 界面如图所示。 图 5.13 在 OnOnCommMscomm1()函数中添加代码 步骤 13:在【OnInitDialog()】函数中添加代码,添加完代码后的界面如图 所示。 31 图 514 在 OnInitDialog()函数中添加代码 5.4 VC 软件界面仿真 如下图 5.2 所示为 VC 软件界面仿真图: 5.2 VC 软件界面仿真图 此界面仿真结果表示当前的环境温度为 28.7 度。 32 结束语 本文主要详述了 AT89C51 单片机与 PC 机的串行通信的实现的设计和内容, AT89C51 是一种带 4K 字节闪烁可编程可擦除只读寄存器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS 8 位微 处理器。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合 在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,所以它的使用前景会 是相当广泛与受欢迎。因此我们有必要来学习它与 PC 机的通信。 主要论述内容总结如下: 1. 介绍了单片机的在现实生活中的使用情况与应用环境领域,市场前景与 未来应用,并对总体设计做了概括性的描述。 2. 详述了单片机的发展概况、特点、应用,各个部件的原理,串行口的通 信方式,显示管的工作原理,使各个部件都能被读者所了解,从而方便人们来认 识 AT89C51 与 PC 机串行通信的原理。 3. 介绍了软件设计,流程,通信协议,初始化,波特率计算等软件上的准 备与设计,从而为整个设计的汇编阶段做好准备。最后采用运用汇编语言将整个 图纸上的设计变为实际的应用。 33 当然本设计也存在着很大的问题,比如说功能上相对简单容易出错等,这些 问题可以在以后的工作中继续完善。 经过几个月的毕业设计,因为时间和任务的性质的关系,没有完全按照上述 的测试方法进行测试,但经过一些简单的步骤的测试,证明本设计的串行通信的 稳定性与实用性。在设计的过程中我体会到了过程的快乐和结果的喜悦。人们常 常说不要看重结果,主要是过程,这几个月的过程也让我深深的体会到了自己知 识的匮乏和掌握的不牢固为此在将来势必要不断地继续学习与深造, 为此不断地 完善自我。 致 谢 经过几个月的努力,终于完成了 PC 机与单片机的串行通信这个毕业设计。 在此,我要衷心感谢我的指导老师王伟老师,在整个毕业设计过程中,他给予了 我悉心的指导和无私的帮助,同时还要感谢同班的许多同学,我们在相互学习和 交流中,解决问题共同进步。有了这么多的支持和无私帮助,才使我得以顺利完 成毕业设计。 衷心感谢在百忙之中评阅论文的各位老师!感谢电子工程系的所有老师,感 谢您们为我们的学习与成才创造的各种条件和付出的辛勤劳动。感谢同室室友、 师兄、师姐和朋友们在平时的学习、生活中给予了我很大的支持,在此表示衷心 的感谢! 最后感谢我的家人,是他们给予我精神上的鼓励、生活上的照顾、学业上的 支持,才使这篇论文得以顺利完成。 34 参考文献 [1] 梅丽凤.单片机原理及接口技术,北京:清华大学出版社.2004-9 [2] 何立民.单片机应用系统设计,北京:航空航天大学出版社.1990-8 [3] 张毅刚.单片机原理及应用,北京:高等教育出版社.2003-3 [4] 王忠飞.MCS-51 单片机原理及嵌入式系统应用.西安:西安电子科技大学出 版社.2007-7 [5] 晁阳.单片机 MCS-51 原理及应用开发教程,北京:清华大学出版社.2007-8 [6] 邓亚平.微型计算机接口技术.北京:清华大学出版社.2007-6 [7] 钟睿.MCS-51 单片机原理及应用开发技术.北京:铁道部出版社.2006-4 [8] 张洪润.单片机应用设计 200 例.北京:北京航空大学出版社.2006-9 [9] 周杰英.微型计算机原理及应用.北京:机械工业出版社.2006-7 [10] 张雪兰.汇编语言程序设计.北京:清华大学出版社.2007-3 35 36

文档贡献者

n1n8

贡献于2011-03-12

喜欢此文档的还喜欢