仿真源代码
仿真源代码
AVR Studio 4可以在多种方式下工作,刚才编写代码的时候,我们是在编辑模式,现在我们进入调试模式。先让我们着重看一下软件界面
(1)注意到有一个黄色的箭头指向RLMP指令。这个箭头的作用是指向即将被执行的指令。
(2)注意到工作台窗口显示项目IO信息。IO信息是项目开发中最经常使用的信息,在下面我们将详细的介绍
(3)在底部状态栏显示当前状态。在本项目中显示:AT90S8515 simulator,Auto,Stopped。这里有一个黄色的图
标。现在,最好检查一下显示信息,以确认选用的器件和仿真工具。
展开IO信息
我们编写的项目主要是对PORTB存储器操作,所以我们将把IO信息展开,以观察IO的详细信息。展开IO信息树,将得到如图信息。
分段调试代码
AVR Studio开发软件支持分段调试代码。软件支持运行到断点,然后返回寄存器信息,并在此等待;也支持单步指令执行。按F11进行单步指令执行。
现在我们按一次F11,注意到黄色的箭头指向LDI Temp, 0xFF这条指令,表明这条指令即将被执行。
再按一次F11,LDI指令执行完毕,黄色箭头指向OUT指令。Temp寄存器的内容被赋值为0xFF(如果你观察R16寄存器,你会发现R16寄存器的内容也变成了0xFF,因为我们把Temp映射成R16了)。
再按一次F11,如图所示,DDRB寄存器的内容被赋值为0xFF。在图中,一个白的方块表示0,黑的方块表示1。DDRB被设置成高电平表示所有的PORTB位设置为输出。
再按一次F11,0xFF写入PORTB寄存器,黄色箭头指向DEC指令。注意到PORTB寄存器内容是0xFF,但是PINB寄存器内容仍然是0x00。
再按一次F11,Temp的内容被减一,变成0xFE。同时注意到PINB寄存器内容变成了0xFF。用户可能变得非常疑惑,让我们来看芯片说明书中关于PORT的章节吧。数据首先锁存在输出管脚上,在延迟一个时钟周期以后,管脚上的数据锁存到PIN寄存器中。真如你所看到了,模拟仿真如实的反映了真实器件的工作步骤。
下一条指令是跳转指令,按一次F11,RJMP指令被执行,黄色箭头重新返回到OUT PORTB ,Temp指令。
按一次F11,新的Temp值再次赋予PORTB寄存器。一直按F11,你会发现PORTB寄存器的值可以一直递减到0x00,如果我连续运行程序,会有什么结果呢?