新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 利用Multisim10中的MCU模块进行单片机协同仿真

利用Multisim10中的MCU模块进行单片机协同仿真

作者:时间:2009-08-21来源:网络收藏

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

  汇编程序编译通过后,就可以回到电路图窗口,点击工具栏的运行按钮,这时在七段数码管上就应该循环显示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的值,这可以根据求解一阶微分方程得到其充放电时间,或参考单片机的用户手册。

  调试程序

  选择菜单8051U1→DebugView,可以看到文本区上面有下拉菜单并有两种选择,对应反汇编(disassembly)和列表汇编(listingassembly),简单的说,前者是由ROM的内容得到,后者是源文件编译后的结果。双击“设计工具箱”的main.asm,在源文件编辑窗口右键单击语句为“MOVCA,@A+DPTR”的一行,选择“设置/清除断点”(ToggleBreakpoint),在左侧会出现一个实心圆,点击“运行”,程序将停在该行,只不过是在“调试视图”(DebugView)的列表汇编窗口下,同时在实心圆上多出了一个黄色箭头。点击->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存储器视图



评论


相关推荐

技术专区

关闭