随着Microchip公司PIC系列单片机的广泛应用,出现了许多以PIC单片机为基础的集成开发环境。比如,免费的Microchip Mplab、价格不菲的HI-TECH PICC和CCS C Compiler等,但这些PIC单片机开发软件多侧重对程序的编译,忽视了对程序的软件模拟功能。用汇编语言或C语言编写的单片机应用程序编译通过后,只能说明代码没有语法错误,要使应用系统达到设计目的,还要对目标代码进行排错、调试和检查,这就是所说的仿真。本文向广大的PIC单片机开发者和初学者介绍一款专门用来对PIC单片机进行软件仿真的软件,希望它能成为您开发中的好帮手。
PIC Simulator IDE(以下简称PIC Sim)是一个功能强大的PIC单片机软件仿真平台,它的开发者是Vladimir Soso。大家可以到其网址 http://www.oshonsoft.com/去下载最新的版本5.22。(
一.软件介绍
安装PIC Sim后打开软件,显示如图1所示的主界面。
主界面是由几个相互独立的功能框所组成的:在菜单栏以下,依次分别为目标文件地址栏、仿真PIC单片机型号栏、仿真晶振频率栏;然后是两个指令观察窗口,分别显示当前执行的指令和将要执行的下一条指令;中间是指令计数器和跑表观察窗口。
在主界面的下半部分,一左一右分别是特殊寄存器观察窗口和普通寄存器观察窗口,这将是本文介绍的重点。特殊寄存器按其地址排列,并显示了各寄存器的名称,每一个特殊寄存器都以十六进制数和二进制码这两种方式来显示其状态。在二进制码观察窗口中,用一个方格来代表一位,白色代表“0”,添充色代表“1”,这样每个特殊寄存器的状态就都一目了然了。普通寄存器也按地址顺序分两列排列,但只能以十六进制数这一种方式来显示其状态。在进行程序仿真时,可以通过特殊寄存器观察窗口和普通寄存器观察窗口来查看程序运行的效果,而且每一个特殊寄存器和普通寄存器的值均可以人为改变,这在调试程序时是非常有用的。
二.软件仿真
接下来将具体介绍采用PIC Sim进行软件仿真的一般过程和常用的功能模块。
用PIC Sim进行软件仿真时,首先需要设定仿真环境,具体包括仿真的PIC单片机型号和晶振频率这两项。选择Options(设置)菜单下的Select Microcontroller项,弹出图2所示的窗体。
由图2可以清楚地看到,PIC Sim只支持具有FLASH程序存储器的型号,由于这类单片机可以重复擦写,因此在程序开发中使用得最为普遍。选择仿真的单片机型号时,只需单击窗体中相应的栏。
接下来选择Options(设置)菜单下的Change Clock Frequency项,输入仿真的晶振频率。这样就完成了PIC Sim模拟仿真环境的设置。
不论使用汇编语言还是C语言进行PIC程序的开发,都没有关系,PIC Sim仿真的目标文件是编译器编译通过、后缀为.HEX的十六进制文件。
先将编写好的程序用相应的汇编语言或C语言编译器编译成十六进制目标文件,选择File(文件)菜单下的Load Program将编译无误的十六进制文件装入PIC Sim中。接下来在Rate(速率)菜单下选择指令执行的速率。PIC Sim提供了多达6种的指令执行速率,分别是Step by Step(逐步执行)、Slow(慢)、Normal(普通)、Fast(快)、Extremely Fast(极快)和Ultimate(极速),我们可以根据不同的需要选择合适的执行速率,而且在仿真时也可以改变指令执行速率。这一功能大大提高了仿真的效率,比如,在关键的程序段落,可以选择慢一些的执行速率以便仔细观察各寄存器的状态; 而在已知没有问题的段落或延时循环中,选择较快的执行速率来节省时间。
设置好指令执行速率以后就可以选择Simulation(模拟)菜单下的Start项或键盘上的“F1”键开始程序的模拟仿真了。同一菜单下的Stop项或键盘上的“F3”键则可以停止程序的模拟。
PIC Sim的功能还不仅如此,软件以子窗体的形式提供了许多实用的功能仿真模块,选择Tools(工具)菜单,可以看见各仿真模块的选项,如图3所示。
下面简单介绍一下几个常用模块的使用方法。
如图4所示,打开Breakpoints Manager窗体,点击需要设置断点的语句,该条语句前就会出现一个红点,说明断点设置成功。在Breakpoints Manager窗体总共可以设置10个断点。
(2) 示波器
笔者认为PIC Sim自带的这个仿真模块是最有利用价值的一个,我们可以用它来查看单片机I/O口的波形。打开Oscilloscope窗体,可以看到有4个显示通道,点击窗体上的Settings菜单,选择一个通道,根据提示输入一个需要跟踪的I/O口;Settings菜单中的Change Display Interval选项可以调整采样时间; 在每个显示通道旁可以设置I/O口是否上拉; 设置完成以后,运行程序,设置过的I/O口的状态和波形就一目了然了,我们可以根据实际需要最多跟踪显示4个I/O口的状态和波形。
如图5所示,在右上角的示波器窗体中,笔者同时跟踪显示了4个I/O口的波形。
(3)信号发生器
PIC Sim还提供了一个信号发生器模块。打开Signal Generator窗体,可以看到和Oscilloscope窗体一样它也有4个通道,这就是说最多可以同时产生4组信号。点击窗体上的Settings菜单,选择一个信号源,然后根据提示依次输入与之相连的I/O口、信号周期(40~400000之间)和周期数(1~100之间),这样就完成了信号发生器的设置。
让我们来看看实际效果如何。如图5所示,在左下角的信号发生器窗体中,笔者设置了两组不同的信号;在右上角的示波器窗体中,下边的第3、第4通道分别对应显示这两组信号的波形。
(4)液晶模块和7段数码管模块
在单片机系统的开发中,作为人机交互主要手段的显示模块的编程是非常让人头疼的。目前使用最多的是LCD液晶和7段数码管这两种介质,PIC Sim同时提供了对这两种介质的仿真。如图6、图7所示,利用这两个工具,我们在编程的同时就可以看到效果,根据效果再调整程序,直到满意为止。
三.其他功能
PIC Sim还拥有自己的汇编语言编译器和BASIC语言编译器,你可以随便选择一种语言进行PIC单片机程序的开发。它甚至还有一个反编译器,用它可以将后缀为.HEX的目标文件反编译成.ASM文件。
四.软件评价
PIC Sim的模拟功能是非常强大和可靠的,用它可以很好地模拟PIC单片机的大部分功能,包括I/O口、EEPROM存储器、中断、T0计时/计数器、T1计时/计数器、T2计时/计数器、A/D转换模块、比较器模块、参考电压模块、UART模块等。但美中不足的是,PIC Sim不能模拟WDT(看门狗计时器)和休眠指令的执行。
PIC Sim给我们提供了一个简单、快捷的PIC单片机软件模拟仿真平台。这里介绍的内容只是PIC Sim的冰山一角,只想起个抛砖引玉的作用。读者要想充分利用它所提供的各种功能,还要靠自己去尝试、去挖掘。
文/高涛



