工控网首页
>

应用设计

>

采用软件仿真技术开发单片机的实践

采用软件仿真技术开发单片机的实践

2006/5/18 9:40:00
关键词:软件仿真;单片机开发;C语言;在线编程 中图分类号:TP211+.5 文献标识码.A Practice on Developing Microcontroller by Software Simulation LI Li (College of Mechanical Science & Engineering, Huazhong University of Science & Technology, Wuhan 430074, China) Abstract:Different from by the hardware simulation that is usually used, this paper discusses the developing microcontroller by the software simulation. An application scheme for developing microcontroller is pro- posed; witch is combined with the software simulation and the on- line program technique for developing microcontroller. This scheme is simple and easy to realize, and two practice examples are presented. Based on the practice experience, the advantage and the future applications of the developing microcontroller by the software simulation are described. Key words: Software Simulation, Microcontroller, C programming language, On - line Program 1 引言 电子技术的迅速发展,给人类生活带来了根本性的改变;单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,应用最普遍的单片机之一是Intel公司的8051以及它的兼容产品,即通常所说的51系列单片机。 现已有很多可用于51系列单片机开发的实现方案和与其配套的开发系统[1]。通常,51系列单片机的各类开发系统,主要是采用汇编语言编程和硬件仿真技术来进行开发工作的。这种开发方法存在着繁琐、不易理解、仿真不灵活、成本过高等问题和缺陷。 随着技术的进步,现已有了解决上述问题和缺陷的转机。其中最有前途的途径为:采用C语言编程和软件仿真技术来进行开发工作[2-4]。本文将对此途径进行详细的讨论,并结合单片机在线编程技术[5-6],给出了单片机开发的实现方案和实例。 2 仿真开发软件 KeilμVision2是德国keil公司开发的单片机 C语言编程工具,它具有开发和仿真的功能[2-4]。 这一系统采用C51进行编程,接触过C语言的工程技术人员都可以经过简单的学习后迅速掌握 C51。C51继承了标准C语言[7]的绝大部分的特性,而且基本语法相同,只是在针对单片机特定的硬件结构上有所扩展,并且要求开发人员注重对系统资源的理解,对RAM、ROM中的每一字节都要充分利用。Keil μVision2具有软件仿真的功能。在软件模拟方式下,用户不需要任何单片机硬件即可完成用户程序仿真调试。与以往的硬件仿真相比,软件仿真不仅极大地提高了用户程序开发效率,而且极大地节约了用户程序开发成本。应用 Keil μVision2开发程序极为方便快捷,非常适合初学者使用。 3 单片机开发的实现方案 在讨论单片机开发的实现方案之前,我们先介绍这实现方案所用到的器件和设备。 3.1 可在线编程的单片机AT89S51 Atmel公司推出的AT89S51单片机是8位可在线编程单片机,与Intel公司的MCS-51系列单片机兼容。它具有片内4KB可在线编程的闪存、128字节的内部RAM、32根I/O线、看门狗定时器、两个数据指针、两个16位的定时器/if数器、6个中断源、一个全双工串口、片内振荡器和时钟电路等。AT89S51单片机比较便宜,每片价格不到十元人民币。 特别值得一提的是AT89S51单片机的在线编程功能,Atmel公司称它为“在系统可编程”(In-Sysytem Programmable)L5 J,当将单片机插到目标机后,还能够直接在目标机上对单片机进行编程。 AT89S51单片机的在线编程采用串行模式,需借用串行编程器把程序文件内容写入到目标机的单片机芯片内。传统的单片机编程器也可编程AT89S51单片机,它采用并行模式,不能在线编程。 3.2 串行编程器与在线编程软件 Atmel公司专门为AT89S51单片机生产有配套的串行编程器和在线编程软件。由于此串行编程器非常简单,看起来像有着两个插头的电缆,At.mel公司称它为串行编程电缆[6]。串行编程电缆的一端插接到运行在线编程软件的PC机并行口上,另一端插接到自标机上。在线编程软件可到 Atmel公司的网站(http://www.atmel.com)免费下载。 在购买串行编程电缆时,还配有可在线编程的简易实验目标机和电源。整套装置极为经济实惠,花费不足百元,就可以进行单片机的实验及开发。这套装置不仅可以将程序写入单片机,同时还可在实验目标机上运行单片机内的程序。 3.3 单片机开发的实现方案 当采用了软件仿真技术后,再结合本章前两节介绍的单片机在线编程技术,单片机开发的实现方案就可以大大地简化了(如图1所示)。一台PC机,一条串行编程电缆,就可对目标机进行开发了。
采用此实现方案来开发单片机的主要步骤有: (1)在PC机上,使用KeilμVision2作为开发工具,用C语言进行编程并进行软件仿真的测试。 (2)用串行编程电缆把PC机和插有AT89S51单片机的目标机连接好,在PC机上运行在线编程软件,把通过软件仿真测试好的程序写入目标机的单片机芯片内。 (3)在目标机上运行单片机内的程序,观察或测试目标机的功能是否达到预期目标。如果达到预期的目标,则完成了开发工作;否则,重做上述步骤。 4 两个实例 下面特意选择了两个比较典型的实例。它们涉及了中断、定时器、并行口和串行口等单片机硬件。两个实例所用到的实验目标机,是通过增加一些器件,改造上面3.2节所述的实验目标机而成。 4.1 实例1:定时器中断及输入/输出
单片机P0端口上的0号管脚连接开关K1,P2端口的0号和1号管脚分别接发光二极管D1和D2。当开关K1闭合时,发光二极管D1闪烁;当开关K1断开时,发光二极管D2闪烁。电路图如图2所示。 C程序源代码如下: #include #include /*8051的特殊功能寄存器*/ sbit PO-O:P0-0; sbit P2-0=P2-0;? sbit P2.1=P2-1; int i=O; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /* 定时器0中断处理* / /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / void time-0(void)interrupt 1 using 2 {/* 中断使用第2组寄存器* / i++: /* 设定500次定时器中断,闪烁一次。* / /* 使在目标机运行时,能清楚观察到。* / if(i>500){ if(P0-0==0) {/* 开关K1闭合* / P2-1=1; P2-0=!P2-0;/* D1闪烁 * / } else {/* 开关K1断开* / P2-0=1: P2—1=!P2-1;/* 132闪烁 * / } i=0: } } void main() { TMOD=0x02; TH0=0x06; TL0=Ox06; TRO=1;/* 定时器0运行* / ETO=1; EA=1;/* 允许中断* / P2-0=1; P2-1=1; while(1)/* 等待中断* / { } } 程序被编译连接后,则可调用软件仿真功能来对其进行调试。在单步或者连续的仿真运行中,通过外围器件菜单“Peripherals”下的并行口“Port 0”和“Port 2”窗口,可以测试和看到预期的结果。 程序经上述软件仿真调试通过后,就可用串行编程器将程序写入目标机的单片机芯片内。启动目标机运行后,可以观察到与仿真运行相同的结果。 4.2 实例2:串行口通讯 单片机可用串行口进行通信。在下面的程序中,当串行口接收到字符后,先送入行缓冲区;随后,当发送不忙时,树起发送标志,发送所收到的字符;每行发9个字符后,发换行符和回车符。软件仿真运行和在目标机上运行的结果相同。C程序源代码如下: #include /* 8051的特殊功能寄存器* / #include bit sendactive;/* 发送标志* / #define ILEN 10 /* 行缓冲区长度* / unsigned char incount: /* 接收缓冲计数器* / unsigned char outcount: /* 发送缓冲计数器* / idata char inbuf[ILEN];/* 行缓冲区* / /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /* 串行口接收/发送中断处理* / /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / serial()interrupt 4 using 2{ /* 中断使用第2组寄存器* / unsigned char c; if(RI){/* 如果为接收中断* / c=SBUF;/* 读接收到的字符* / RI=0;/* 清接收中断标志* / if(incount
投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机