第6讲 AVR CPU模拟器

软件模拟器是利用PC的CPU来模拟单片机的运行,在模拟运行的过程中,通过监测程序的运行方向、时间、寄存器及变量值等关键因素来分析程序,找出问题并最终加以解决。Atmel Studio 6.1集成开发环境内部集成了专门针对AVR CPU的软件模拟器,可以模拟其运行过程。使用软件模拟器不需要硬件编程器或实验板的配合,就能以视图的形式直观地呈现出处理器、存储器、通信和模拟接口的状态,还可以对程序进行监测和调试。以下,我们就使用已经写好的流水灯程序为例,示范如何使用Atmel Studio 6.1中的软件模拟器对程序进行仿真调试。

4.2.1

程序的调试

1)将调试器设为软件模拟器。开始调试前,需要对编译器的调试器进行设定。右击“LED2”项目,在弹出的菜单中选择“Properties”项,如图4-7所示。

在“LED2”属性对话框中,选择“Tool”选项卡,在“Selected debugger/programmer”下拉列表中选择“Simulator”项,将调试器设定成“软件模拟器”,如图4-8所示。

2)编译程序。在开始调试前,需要对程序进行一次编译,否则调试不能正确进行。单击编译按钮,编译源程序。

3)使用调试按钮。Atmel Studio 6.1集成开发环境的调试功能可以通过使用按钮来完成,这些按钮如图4-9所示。

上述调试按钮所能完成的功能同样可以在“Debug”菜单下找到。接下来,我们要分别介绍一下这些调试按钮的功能。

4)进入调试模式。点击工具栏上的“开始调试并暂停”按钮(图4-10中箭头1所指位置),可以进入调试模式。

这时软件的界面已经发生了变化,程序指针(黄色箭头)停留在了程序的起始位置,表示接下来程序将会从此处开始运行。用鼠标拖动黄色箭头可以更改程序的执行位置(图4-10中圈2所示位置)。在软件窗口右侧出现了多个选项卡,这里需要特别关注的有两个,一个是“Processor”页(图4-10中箭头3所指位置),里面包含了与处理器相关的频率、周期、寄存器等相关信息。另一个是“IO View”页(图4-10中箭头4所指位置),里面包含了IO寄存器的相关信息。

进入调试模式后,软件窗口的右下方出现的是存储器观察窗口。在这个窗口中,通过点击“Memory”项后面的下拉列表,可以选择不同的存储器观察对象,用于观察Flash、数据寄存器、E2PROM等介质的存储状态。软件窗口的左下方是“Watch1”观察窗口,可以通过“快速建立观察窗口”按钮来为其添加新的观察内容。

5)模拟调试。鼠标单击“IO View”标签,打开“IO View”页(图4-10箭头4所指位置),可以看到软件右侧界面如图4-11所示。

在“IO View”页中,列出了多个IO寄存器的相关信息。如果需要查看PORTC端口的状态,可以用鼠标单击“PORTC”项(图4-11中箭头2所指位置),在“IO View”页下方会出现它的子窗口,子窗口中列出的是与PORTC相关的三个寄存器的信息。

鼠标单击“Step Over”按钮(图4-11中箭头3所指位置),程序单步运行,指针顺序下移,当程序指针移至图中箭头4所指位置时,PORTC相关的三个寄存器的状态会以图示的方式显示在PORTC的子窗口中(图4-11中箭头5位置)。

4.2.2

设立观察窗口

在调试的过程中,也可以使用观察窗口来查看寄存器的状态、时间值、变量值等。设立观察窗口的方法是在菜单栏中,选择“Debug”-“Windows”,打开调试窗口菜单,在此菜单中可以开启多个观察窗口,如图4-12所示。

也可以使用工具栏上的按钮来打开调试窗口菜单。方法是鼠标单击“Breakpoints”按钮旁边的下三角形图标,同样会弹出调试窗口菜单,如图4-13所示。

在调试窗口菜单中选择“Output”项,打开“Output”观察窗口,如图4-14中箭头所指位置所示。

4.2.3

添加断点

为了便于调试,可以在程序运行的过程中设置一个或多个断点(Breakpoints),程序运行至断点处会自动停止。程序再次启动时,会从断点处继续运行。在Atmel Studio 6.1集成开发环境中,设置断点的方法有多种,最简单的是用鼠标右键单击要添加断点的程序行,在弹出的菜单中选择“Breakpoint”-“Insert Breakpoint”,具体方法如图4-15所示。

这时,在程序行的前面会出现红色的“B”形图标,表示断点已经设置完毕,如图4-16所示。

再次在该程序行上右击,在弹出的菜单中选择“Breakpoint”-“Delete Breakpoint”,可以删除断点。在菜单中选择“Breakpoint”-“Disable Breakpoint”,可以禁用断点,具体操作如图4-17所示。

禁用后的断点如图4-18所示。

4.2.4

更改模拟CPU的时钟频率

在图4-19所示的处理器观察窗口中,“Cycle Counter”是周期计数器,指示程序运行消耗的时钟周期;“Frequency”是CPU的工作频率,模拟器默认的时钟频率是1MHz;“Stop Watch”是跑表计时器,用于查看程序运行所需的时间。在对于时间敏感的模拟应用中,需要将CPU的时钟频率调整至与实际工作时的时钟一致,这样才能模拟出正确的时序来。更改模拟CPU时钟的办法是在“Processor”页中,单击“Frequency”项后面的频率值,将其直接更改成我们想要的频率(以MHz为单位),具体方法如图4-19所示。

CPU的频率更改完成后,我们会发现“Stop Watch”的时间值也会随之改变,这一点不难理解,因为CPU的频率改变后,执行相同个数的指令所需要的时间是不同的。在调试过程中,有时为了计时的方便,需将时间值清零,即复位跑表,方法是鼠标右击“Stop Watch”项,在弹出的菜单中选择“Reset Stop Watch”项,即可将时间值清零,具体操作如图4-20箭头位置所示。

 


评论:

AVR单片机基础教程

作者:高显生   共18讲

AVR系列单片机是8位单片机中第一个真正的RISC结构单片机,它采用了大型快速存取寄存器组、快速的单周期指令系统以及单级流水线等诸多先进技术,使得AVR单片机具备了高达1MIPS/MHz的运行处理能力。