如何用AVR studio 验证延时程序(同样适合KEIL)
1个回答
展开全部
那样的真实速度,尤其是模拟一个延时程序,需要比较长的时间,这里就阐述如何简单和正确的进行延时程序的调试。下面是个典型的AVR延时子程序DELAY:LDI R16,197PUSH R16DEL1:PUSH R16DEL2:PUSH R16DEL3:DEC R16BRNE DEL3POP R16DEC R16BRNE DEL2POP R16DEC R16BRNE DEL1POP R16 z 先将汇编程序中的延时参数197改为3,重新编译后进入调试方式。(更简单的方式是先单步执行初试化部分的指令,当执行完“ldi r16,197”一句后,使用鼠标双击Register窗口中R16寄存器,将R16的值改写为3,这样就不需要重新编译程序了。)
z 使用单步执行的方式执行延时子程序的每一句语句,查看程序的逻辑对不对,能否正确运行,堆栈是如何工作的,SP指针如何变化,各个寄存器如何变化,PC的变化,RAM中数据的变化。这样即了解了AVR的工作原理,也了解程序设计的技巧),或验证程序是否同自己想象的那样正确,而且训练了如何熟练使用DEBUG(熟练使用工具也是很重要的一环)。
z 验证了整个延时程序没有逻辑错误后,可以查看延时子程序的延时时间了。1.将延时参数由3改回197,编译后进入调试方式。 2.在调用该子程序的语句“rcall delay”处设置一个断点;在接下来的一个语句“sbi portc,0”处设置第二个断点。 3.按F5,全速运行程序。 4.当程序在第一个断点处停下时,到Processor的选项中(展开该图标)找到Stop Watch子项,双击将其清零。 5.按F5,从断点处继续全速运行程序(开始调用延时子程序)。 6.等大约十几秒或几十秒后(取决于你的PC速度),程序在第二个断点处停下(子程序模拟运行时,AVR Studio下面状态栏中的运行图标为绿色,暂停为黄色)。 7.查看Processor的选项中Stop Watch的值(本例中为999826.75us),它记录下调用子程序返回后的时间,该时间值即为延时子程序的运行时间。 由此验证了延时子程序的执行时间。调节延时参数,可以得到不同的延时时间,通过软件模拟可以精确的得到。这比使用在线实时仿真的手段要方便多了,而直接在目标板上运行,你也不能得到精确的时间。使用软件模拟仿真是现在调试技术的发展方向。
z 使用单步执行的方式执行延时子程序的每一句语句,查看程序的逻辑对不对,能否正确运行,堆栈是如何工作的,SP指针如何变化,各个寄存器如何变化,PC的变化,RAM中数据的变化。这样即了解了AVR的工作原理,也了解程序设计的技巧),或验证程序是否同自己想象的那样正确,而且训练了如何熟练使用DEBUG(熟练使用工具也是很重要的一环)。
z 验证了整个延时程序没有逻辑错误后,可以查看延时子程序的延时时间了。1.将延时参数由3改回197,编译后进入调试方式。 2.在调用该子程序的语句“rcall delay”处设置一个断点;在接下来的一个语句“sbi portc,0”处设置第二个断点。 3.按F5,全速运行程序。 4.当程序在第一个断点处停下时,到Processor的选项中(展开该图标)找到Stop Watch子项,双击将其清零。 5.按F5,从断点处继续全速运行程序(开始调用延时子程序)。 6.等大约十几秒或几十秒后(取决于你的PC速度),程序在第二个断点处停下(子程序模拟运行时,AVR Studio下面状态栏中的运行图标为绿色,暂停为黄色)。 7.查看Processor的选项中Stop Watch的值(本例中为999826.75us),它记录下调用子程序返回后的时间,该时间值即为延时子程序的运行时间。 由此验证了延时子程序的执行时间。调节延时参数,可以得到不同的延时时间,通过软件模拟可以精确的得到。这比使用在线实时仿真的手段要方便多了,而直接在目标板上运行,你也不能得到精确的时间。使用软件模拟仿真是现在调试技术的发展方向。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询