求助:LINUX下51单片机开发环境mcu8051ide中如何调试简单的延时代码?

内核编译和嵌入式产品的设计与开发
回复
头像
primes
帖子: 138
注册时间: 2007-05-10 11:43
系统: Ubuntu18.04、Win 10

求助:LINUX下51单片机开发环境mcu8051ide中如何调试简单的延时代码?

#1

帖子 primes » 2015-02-03 18:12

刚接触单片机,正在学习51系列。LINUX下的mcu8051ide开发环境很不错,仿真功能也很强大。
目前为止,从编写到烧录一个流程下来没什么大问题,关于开发环境的一些简单问题都已解决。
但,,,,,,一个小小的简单延时代码却一直过不去。。。。。请大神帮忙看看:

代码: 全选

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

	//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
	{
		for (b=38;b>0;b--)
		{
			for (a=130;a>0;a--);
		}
           
	}       
}
就这段简单的延时程序,在mcu8051ide中启动模拟器进行调试,时间(远大于10ms,完全没有参考意义)却和烧录到芯片中后运行时的延时时间相差很远,应试如何设置mcu8051ide,才能使模拟器中进行调试时与实际烧录后的运行时间差不多?
(在WIN下KEIL中完全没问题!)

我是用C语言开发,mcu8051ide中保存文件默认为ASM(汇编),如何设置可以改为默认为C(C语言)?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助:LINUX下51单片机开发环境mcu8051ide中如何调试简单的延时代码?

#2

帖子 eexpress » 2015-02-04 10:20

带调试的ide,通常不能模拟到实时时序级别。调试的原理是每执行一句汇编,就trap一次。
你应该看编译器,有没有编译开关,可以在生成的汇编或者lst文件里面,列出每句汇编或者源码的机器周期。
然后自己计算机器周期的占用时间间隔。

另外,51还有人用?在很早的51例子里面,延时就是使用3层压栈循环的子函数,可以大致精确到100us 1ms 10ms。
如果还要更加精确,使用定时器中断吧。或者输出比较模块(不确定你的这51带这扩展功能没)。
● 鸣学
头像
primes
帖子: 138
注册时间: 2007-05-10 11:43
系统: Ubuntu18.04、Win 10

Re: 求助:LINUX下51单片机开发环境mcu8051ide中如何调试简单的延时代码?

#3

帖子 primes » 2015-02-04 15:29

eexpress 写了:带调试的ide,通常不能模拟到实时时序级别。调试的原理是每执行一句汇编,就trap一次。
你应该看编译器,有没有编译开关,可以在生成的汇编或者lst文件里面,列出每句汇编或者源码的机器周期。
然后自己计算机器周期的占用时间间隔。

另外,51还有人用?在很早的51例子里面,延时就是使用3层压栈循环的子函数,可以大致精确到100us 1ms 10ms。
如果还要更加精确,使用定时器中断吧。或者输出比较模块(不确定你的这51带这扩展功能没)。
这个我知道,模拟也只是个参考,而不是很准,像10ms或是1ms都已经很精确了,而且相关的ISP工具中也有延时的代码,这很方便。
只是我上面的延时代码,在WIN下调试时“正常”(可以接受,c为1时,一个循环下来也就在1秒左右),但是在MCU8051IDE中根本不可接受,c为1时,一个循环下来要几分钟,所以我说连参考的意义都没有,还怎么调试这类代码呢?我不知道是我那里设置有问题,还是开发环境本身的问题,我也是新手,如果你方便能试试这段代码吗?看是不是也这样!谢谢!!!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助:LINUX下51单片机开发环境mcu8051ide中如何调试简单的延时代码?

#4

帖子 eexpress » 2015-02-06 9:09

应该是纯ide的事情。你可以直接email作者询问。开源软件的作者,通常都是愿意帮助人的。
● 鸣学
回复