王 超 杨莲红 杨 奇
(1,2,3.昌吉学院物理系新疆昌吉831100)
联合Keil C51在Multisim 10平台下实现单片机的仿真
王 超1杨莲红2杨 奇3
(1,2,3.昌吉学院物理系新疆昌吉831100)
针对传统单片机课程实验、实训教学中出现的各种难点,将Keil C51编译软件与Multisim 10仿真软件相结合引入到教学中,借助第三方软件的优势完成实践教学任务,可以提高单片机的教学效果、缩短开发周期、节省成本,提高学生的动手操作能力。
Keil C 51;Multisim 10;单片机;仿真
《单片机应用技术》课程是电子、电气信息类学生的必修课程,而实践、实验教学是该课程的重要组成部分,传统的方法是设计电路-面包板或实验箱实验-制版等一系列过程。但是,该过程开发周期长、调试繁琐,而且修改电路也比较困难,利用仿真软件Multisim 10则可以很好的解决这些问题。另外,借助于第三方编程调试软件Keil C51与Multisim 10联调可以在没有硬件实物的环境下建立虚拟硬件仿真平台,利用Keil C51软件强大的调试功能可以加快开发进程,更容易实现实验、实践的教学,为教学、实验提供一个方便灵活的环境,丰富实验内容,节约实验费用,而且仿真成功的电路可以直接在产品开发中使用。
2.1 Multisim 10特点
Multisim 10软件是美国国家仪器(NI)公司推出的电子电路仿真软件,是目前的最新版本,它在原有基础上更新和改进了某些功能[1]。
(1)增加了大量的VHDL元件模型,可以仿真更复杂的数字元件、单片机。
(2)增强了软件的仿真测试功能,大大扩充了元件库中的数目,特别是增加了大量与实际元件对应的元件模型,使得仿真结果更精确、更可靠、更实用。
(3)加强了对汇编语言和C语言的支持,增加了反汇编以及调试功能。
(4)增加了部分3D实物元件和面包板,便于教学和实验使用。
2.2 Keil C51简介
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,用过汇编语言后再使用C来开发,体会更加深刻。软件本身支持数百种51系列单片机芯片,可以用来编译C源码、汇编源程序、连接和重定位目标文件和库文件、创建HEX文件、调试目标程序等,是一种集成化的文件管理编译环境,具有强大的开发工具。虽然Multisim 10也支持C语言,但它的功能远不如Keil C51[2]。
目前在单片机的开发应用中,C语言已经成为主要的编程语言,用C语言编写单片机应用程序与标准的C语言程序在语法规则、程序结构及程序设计方法等方面基本相同,但C51程序与标准的C程序在以下几个方面是不同的:
(1)C51中定义的库函数和标准C语言定义的库函数不同;
(2)C51中数据类型与标准C的数据类型也有区别,在C51中还增加了集中针对MCS-51单片机特有的数据类型;
(3)C51变量的存储模式与C中变量的存储模式不一样,C51中变量的存储模式与MCS-51单片机的存储结构紧密相关的;
(4)C51与标准C的输入输出处理方式不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须对串行口进行初始化;
(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
下面以一个简单的0-99计数器电路为例介绍利用Multisim 10与Keil C51相结合实现单片机仿真的过程。
3.1硬件电路设计
(1)打开一个新的电路原理图并从元件库中放置8051单片机;
(2)根据MCU向导逐步执行:
首先,定义Workspace文件,包括Workspace的文件路径和文件名;然后再定义工程,包括工程类型、编程语言、汇编器/编译器工具和工程名;最后需要定义源文件,包括源文件的名字等。
按照同样步骤,放置电路中的其它元件,如果希望查看该元件的属性,可以采用右键单击选择属性即可,所有组件都可以采用默认设置来使用,硬件电路图如图1所示。
图1 硬件电路图
3.2软件程序设计
在Keil C51环境下,采用C语言完成软件程序的设计,在用C语言编写过程中要注意符合C语言的语法规则。
#include"htc.h"
unsigned char code table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char count;
void delay10ms(void);延时函数
{unsigned char i,j;
for(i=02;i>0;i--)
for(j=02;j>0;j--);}
void main()
{count=0;
P3=table[count/10];个位数据
P1=table[count%10];十位数据
while(1)
{if(P37==0);检测P3.7的电平
{delay10ms();调用延时子程序
if(P37==0)
{count++;
if(count==100)
{count=0;}
P3=table[count/10];
P1=table[count%10];}}
在Keil C51环境下,选中Creat HEX File复选框以便生成“*.Hex”文件,如图2所示。
图2 设置HEX格式
3.3仿真调试
Multisim10支持第三方的编译器,可以将第三方编译器(Keil 51)生成的可执行代码,如“*.Hex”文件,直接导入到MCU中,然后进行仿真。
(1)建立外部可执行文件工程
在工程类型(project type)选项中选择Load External Hex File选项并命名,如图3所示。
图3 建立外部可执行文件
图4 添加外部可执行文件
(2)添加外部可执行文件
激活相应的工程文件后,打开“MCU CodeManager”对话框,即可加载相应的“*.Hex”文件,如图4所示。
(3)仿真运行
①执行菜单MCU/MCU8051/BUILD,对源程序进行编译,在窗口下方会显示编译时间,编译信息。编译会通过给出“0 error(s)0 warning(s)”的提示。如果有错会给出错误的行和错误的原因,以方便查错。编译显示结果如图5所示
图5 编译结果
②单步调试、设置断点观察结果
执行MCU/MCU8051U1/Debug View命令,进人调试窗口,在调试之前,执行MCU/MCU8051U1/ Memory View命令,打开存储器窗口,可以观察指令后的执行情况。可以查看SFR、内部RAM、内部ROM,外部RAM等存储器的状态,这些操作对于调试非常重要,另外,在调试过程中还可以在反汇编中窗口中设置断点、单步执行和连续执行等命令进行调试。调试过程如图6所示。
图6 调试过程
③单击运行按钮,就可以得到仿真运行结果,如图7所示。
图7 运行结果
本文介绍了在Multisim 10平台下联合编译软件Keil C51对单片机进行仿真的一种方法,该方法可以把传统的硬件设计、软件调试、仿真集成在一个软件环境下,能够做到边设计、边实验、边修改电路。在Multisim 10平台下全部采用的是虚拟元件和测量器件,实验成本低,速度快,修改调试也非常方便,突破了实验教学中的实验内容固定不变的局限。另外,借助第三方软件的优势,可以加速实验进程,增强学生的创新意识和提高学生的实际应用能力。对于单片机实践教学尤其是综合性实验、课程设计、电子竞赛等,这种仿真调试软件的使用会起到积极的推动作用。
[1]聂典,丁伟.Multisiml0计算机仿真在电子电路设计中的应用[M].北京:电子工业出版社,2009:20-50.
[2]范立南,李震,周胜来等.基于Keil C51的软件开门狗电路的设计[J].计算机发展与展望,2009,19(1):154-156.
(责任编辑:马海燕)
O411.3
A
1671-6469(2012)02-0075-06
2012-03-12
昌吉学院教学研究项目(11jyyb011)
王超(1980-),男,新疆玛纳斯县人,昌吉学院物理系,讲师,研究方向:自动化应用技术。