当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 利用Multisim10中的MCU模块进行单片机协同仿真

  MCU(MicrocontrollerUnit)即单片机是大家都比较熟悉并常用的电子器件,由于其广泛的应用,所以用单片机设计电路是电子技术人员必备的技能。对于初学者,可以先从软件仿真入手。我们知道利用Proteus软件可以进行单片机的软件仿真,Multisim同样也可以。Multisim是基于SPICE的电路仿真软件,SPICE(SimulationProgramwithIntergratedCircuitEmphasis)是“侧重于集成电路的模拟程序”的简称,在1975年由加利福尼亚大学伯克莱分校开发。在Multisim9中,需要另安装MultiMCU进行单片机仿真。NI(NationalInstruments)Multisim10将MuitiMCU称为MCUModule,不需要单独安装,可以与Multisim中的SPICE模型电路协同仿真,支持Intel/Atmel的8051/8052和Microchip的PIC16F84a,典型的外设有RAM和ROM,键盘,图形和文字LCD,并有完整的调试功能,包括设置断点,查看寄存器,改写内存等。支持C语言,可以编写头文件和使用库,还可以将加载的外部二进制文件反汇编。

  这里我们通过一个简单的带有复位功能的计数器的例子来说明在NIMultisim10中如何进行单片机开发以及如何与SPICE模型电路协同仿真。

  如果你对Multisim比较熟悉,那一定对里面的安捷伦(Agilent)54622D混合信号示波器等仪器印象很深刻吧,因为它与真实的仪器面板和操作几乎完全一样。Multisim里象这种模仿实际仪器的还有安捷伦的33120A任意波形函数发生器和34401A万用表,泰克(Tektronix)的TDS2024四通道示波器。充分利用这些仪器,就好比拥有了一个真实的实验室,你可以用33120A任意波形函数发生器给单片机提供输入信号,用54622D或TDS2024示波器观看模拟信号,或用54622D的逻辑分析仪功能查看单片机多个管脚数字信号的输出。在下面的例子里我们将用54622D来观察复位信号。

  搭建电路设置MCU

  建好的电路图如图1所示,各器件的名称等信息如附表所示。需要说明的是电路图中的单片机不用连接晶振也可以进行仿真,时钟频率(速度)的设置见下文。

图1带复位功能的简单计数器的电路图

[!--empirenews.page--]

  搭建电路时,当将单片机U1放入电路图中时,会出现MCU向导,如图2所示。第一步,分别输入工作区路径和工作区名称。工作区名称任意,这里输入MCUCosimWS。第二步,如图3所示,在项目类型(Projecttype)下拉框有两个选项:标准(Standard)和加载外部Hex文件(LoadExternalHexFile),你可以在Keil等环境下编写汇编和C源程序,然后生成Hex文件,再通过“加载外部Hex文件”导入。限于篇幅这里选标准(Standard),接着在“编程语言”(Programminglanguage)下拉框里会有两个选项:C和汇编(Assembly),如果选择C,则在汇编器/编译器工具(Assembler/Compilertool)下拉框会出现Hi-TechC51-Litecompiler,我们这里选择汇编(Assembly),则出现8051/8052Metalinkassembler。接下来在项目名称(Projectname)里输入名称,如CosimProject。第三步,如图4所示,对话框里有两个选项:创建空项目(Createemptyproject)和添加源文件(Addsourcefile)。选择添加源文件,点击完成。保存文件,键入M10Cosim作为文件名,然后查看“设计工具箱”(DesignToolbox),应如图5所示。


   你可能更愿意用C来编写程序,而不是汇编,或两个都用,或还想引入外部Hex文件,这都可以通过用“MCU代码管理器”添加MCU项目来解决。在设计工具箱里右键单击MCUCosimWS,选择“MCU代码管理器”(MCUCodeManager),点击“新MCU项目”(NewMCUProject)按钮,选择“项目类型”(ProjectType),可以是标准(Standard)或加载外部Hex文件(LoadExternalHexFile),这里选“标准”,接着输入名称,如Cosim_C_Project,确定后就可以在MCU代码管理器对话框里进行下一步设置了,可以创建新文件,设置汇编器/编译器等等。如图6所示,这时已经多了一个Cosim_C_Project项目(未添加C代码源文件),前面图标空心的方框说明它不是“当前使用的项目”(ActiveMCUProject)。


图6用MCU代码管理器添加的新项目

  编写并编译MCU源程序

  双击CosimProject下的main.asm输入程序,程序清单及注释如下:

  由于汇编器是Metalinkassembler,详细的宏命令等可以参考其用户手册。编写好程序后,选择菜单MCU→MCU8051U1→Build,这里的下拉子菜单可能是“MCU8051U2”或“U3”,主要对应电路图中单片机的符号名称,Build的结果会输出到SpreadsheetView中。[!--empirenews.page--]

  运行程序并用示波器观察复位过程

  汇编程序编译通过后,就可以回到电路图窗口,点击工具栏的运行按钮,这时在七段数码管上就应该循环显示0到9,如果显示过快或过慢,可以调整源程序中的COUNT_NUM,改变延时时间,或双击U1,在805x对话框的Value标签里设置“时钟速度”(ClockSpeed)。

  电路中为SPICE模型的C1和R1的作用是延长复位引脚保持高电平的时间,避免因复位电压持续时间过短而引起复位失败。双击示波器XSC1,按示波器面板上的Power键,打开示波器,点击工具栏的运行按钮,这时调整示波器的电压和时间刻度,得到图7所示的复位引脚电压的变化,每个刻度是100μs,高电平持续了大概一个刻度,可见在加电时,单片机没有立刻运行,有一段延迟,延迟的时间应该足以使其内部电压和振荡都处于稳态。按下复位键S1时的波形如图8所示,这时每个刻度是50μs,波形平顶的部分是按键按下的时间,大概20μs,之后电压逐渐降低,当降到约3V时,7段数码管开始计数,说明单片机开始工作,由图8可知复位时间被延长到大概100μs。

  其原理是加电瞬间或按键按下到松开之间,电容无电荷,两端电压为0V,单片机的RST引脚的电压瞬间被提升到VCC(5V)。加电之后或按键松开,电容开始充电,两端电压逐渐增加,电阻的电压(RST引脚电压)由5V逐渐降低,因而延长了复位引脚保持高电平的时间。实际器件对复位持续时间的要求一般在两个机器周期,所以100微秒的复位时间要求51单片机的晶振频率不低于0.24MHz。当然一般情况下是根据晶振频率确定C1和R1的值,这可以根据求解一阶微分方程得到其充放电时间,或参考单片机的用户手册。

  调试程序

  选择菜单MCU→MCU8051U1→DebugView,可以看到文本区上面有下拉菜单并有两种选择,对应反汇编(disassembly)和列表汇编(listingassembly),简单的说,前者是由ROM的内容得到,后者是源文件编译后的结果。双击“设计工具箱”的main.asm,在源文件编辑窗口右键单击语句为“MOVCA,@A+DPTR”的一行,选择“设置/清除断点”(ToggleBreakpoint),在左侧会出现一个实心圆,点击“运行”,程序将停在该行,只不过是在“调试视图”(DebugView)的列表汇编窗口下,同时在实心圆上多出了一个黄色箭头。点击MCU->MCU8051U1->MemoryView,打开MCU存储器视图,在该视图可以查看特殊函数寄存器(SFR),内部RAM(IRAM),内部ROM(IROM),外部RAM(XRAM)。在SFR表格内观察ACC的值,此时应该为“00”,在IRAM里观察地址为21H的值,因为“MOVSP,#20H”语句将21H作为堆栈的第一个存储字节的地址,断点的前一处语句“PUSHACC”使该字节存储ACC的值,此时也为“00”。再点“运行”,程序第二次停在断点处,观察SFR中的ACC和IRAM中的21H,如图9所示应,两个单元格里的值都应为“01”,你还可以双击该单元格进行修改,该值也正是七段数码管即将显示的下一个数。点击MCU菜单,可以看到除了设置断点以外还可单步进入(Stepinto),遇到函数时进入函数内部;跳过(Stepover),即不进入函数;跳出(Stepout),即跳出函数到调用函数的下一条语句。

 

图9MCU存储器视图[!--empirenews.page--]

  结束语

  本文以一个简单的电路介绍了在NIMultisim下如何进行SPICE模型(这里主要指C1和R1)和8051MCU协同仿真。NIMultisim10不但有多种编译和调试功能,还提供了RAM,ROM,键盘,液晶屏等外设,是初学单片机的理想工具。掌握了基本的硬件结构,汇编指令和调试方法后,读者可以利用Multisim开发更复杂的系统并仿真,为下一步设计实际的硬件电路做准备。

  说明:因为单片机的电流是有限制的,不能太大,否则会烧毁单片机的。所以应在数码管的CA端和VCC端之间接一个限流电阻(100欧姆);或者在单片机与数码管之间接入一个排阻(7个)也可以,这样仿真时就不会烧毁单片机了。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。

关键字: 单片机 串口 STM32

日本车用MCU大厂瑞萨电子发布公告称,该公司将于8月31日完全关闭滋贺工厂,并将土地转让给日本大坂的ARK不动产株式会社。瑞萨电子曾在2018年6月宣布,滋贺工厂将在大约两到三年内关闭,该工厂的硅生产线已于2021年3月...

关键字: MCU ARK 芯片

(全球TMT2022年10月17日讯)近日,第17届中国研究生电子设计竞赛全国总决赛评审工作圆满完成。今年,来自全国63个高校的114支参赛队伍报名了TI企业命题,创下历史新高。此次TI的企业命题要求学生基于TI前沿的...

关键字: 电子设计竞赛 TI MCU 图像处理

单片机诞生于1971年,经历了SCM、MCU、SoC三大阶段。单片机由以前的1位、4位、8位、16位,发展到现在的32位甚至64位。当前国内MCU厂商已有上百家,对标进口芯片的情况非常严重,导致国内MCU产品将陷入同质化...

关键字: 单片机 MCU 市场

(微控制单元 MCU(Microcontroller Unit),又称单片机,是把中央处理器(CentralProcess Unit; CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、US...

关键字: 单片机 芯片 CPU

在疫情的影响下,出门后、用餐前使用酒精消毒已成了人们的日常,而酒精喷雾机也因此变得十分热销。为了避免交叉感染的风险,自动酒精喷雾器也就应运而生。不同于传统手动喷雾器不美观、手部接触不卫生的bug,此款自动感应酒精喷雾器使...

关键字: 芯岭技术 方案开发 解决方案 单片机

在实际的单片机控制系统中,有时候会使用数字逻辑芯片对单片机和受控元件进行隔离,以保护单片机,或者令单片机更好地对后级进行控制。

关键字: 单片机 数字逻辑芯片 受控元件

MH32F103AVET6使用高性能的32位内核,内置了多达2个高级定时器、10个通用定时器、2个基本定时器、3个12位的ADC、2个12位的DAC,还包含标准和先进的通信接口包括:3个SPI接口、2个I2S接口、2个I...

关键字: 单片机 MCU

最近由于换季,天气突然的转凉,大家也是直呼好冷。天冷了自然是要注意防寒保暖。一个能够当充电宝用的暖手宝会是你最好的陪伴。暖手宝是一种非常便捷易用的发热工具,并且体形小巧,可以随身携带并轻易握在手中,也可以放置在身上的其它...

关键字: 芯岭技术 方案开发 解决方案 单片机

近年来,伴随着新能源车的生产制造及其对安全性较高驱动力电池的要求,高效率驱动力电池BMS愈来愈获得重视,市场占有率开始疯狂扩大。据统计,2020年我国BMS市场需求规模为97亿元,同比增长6.6%,预计2022年BMS市...

关键字: 雅特力 新能源车 MCU BMS智能保护板

嵌入式软件

15715 篇文章

关注

发布文章

编辑精选

技术子站

关闭