软件调试模式(仿真模式)2
上一篇简单介绍了软件调试模式中几个比较常用的按钮,这次就具体了解
查看I/O口电平变化和变量值地变化
我们先将硬件I/O口模拟器打开,它就会弹出如下窗口
串口里面现实的就是模拟出来单片机P1口8位口线的状态,单片机上电后I/O口全为1,即十六进制的0xFF。**这里我们要注意一点,当我们在调试的时候,光标,即那个黄色粗箭头,代表着单片机运行到那里了,但是对应的那一行并没有开始执行。**例如光标指向第一个Led1=0;这是我们可以发现我们的第0位还是高电平,那个勾勾还在,当光标移动到下一行的时候,那个勾勾即消失了,也就意味着是低电平这时候我们的二极管正在发亮。
再次单击右下角变量观察窗口Watch#1字样,可以看到窗口上面有”double click or F2 to add“字样,我们需要点击这个字所在框框,或者按F2键,就可以在这个框框里面输入变量,然后下面会自动生成一行,供我们输变量
当我们进入for语句的时候,我们就可以看见i和j所对应的值是1000和110,然后我们每单步执行代买的时候,就会发现i的值在减一减一。
然后我们看看左侧的寄存器窗口,我们可以了解一些寄存器名称以及他们的值。在本章,我们关心的只有一个“sec”
它后面显示的数据就程序代码执行所用时间,单位是秒。这个时间是程序启动执行到目前停止位置所花的所有时间,这个时间是个累计时间,也就是过并不是代码走一次的时间,而是无数次代码走过的时间。
当我们将黄色光标指向Led1=0处,然后单步执行代码,这一行的代码被执行了,这时候我们可以发现时间过去了0.000001s,这个就是执行一次代码所用的时间,也就是一个机器周期的时间。
何为单片机的机器周期?一共有四个周期的说法
-
时钟周期
也称为振荡周期,定义为时钟频率的倒数,也可以说是外接晶振的倒数,例如12MHz晶振的时钟周期就是1/12us。它是单片机中最基本的、最小的时间单位,在一个时钟周期内,CPU仅完成一个最基本的动作。显然,对于同一种单片机,时钟频率越高单片机的工作速度越快。
-
状态周期
时钟周期的2倍
-
机器周期
单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作,如取汁淋、存储器读/写等,机器周期由12个时钟周期组成。
接着回来软件上,我们再次单击单步执行按钮,光标从第一个for来到了第二个for,这时候右下角变量查看窗口中的i被赋值0x03E8,也就是十进制中的1000,我们可以在这个值上单击右键并选择Number Base,Decimal,我们就可以切换到十进制了。因为每当外层的for语句执行一次的时候,里面的for语句已经执行了110次了,所以那个j一直是0。
如果说我们要查看这一个for语句究竟用了多长时间,我们除了疯狂单步执行,我们还可以设置断点,让程序自动执行到for语句结束的时候。
- 如何设置断点:单击复位按钮,然后再在第一个for所在行前面空白处双击鼠标,前面就会出现一个红色方框,表示本行设置了第一个断点,然后在
led1=1所在行设置一个断点,这两个断点之间就是这个两级for嵌套语句。
这时候单机全速运行按钮,程序会自动停止在第一个断点处,然后我们再次点击全速运行按钮,这时候程序会自动停止在第二个断点处,根据两个断点处的显示时间不同,我们就可以得出我们所编写的延时语句大致是多长时间。
会自动停止在第二个断点处,根据两个断点处的显示时间不同,我们就可以得出我们所编写的延时语句大致是多长时间。
学业繁忙,这几天都不会更太多,多多见谅