打印

怎么16F877比51还要慢?

[复制链接]
2686|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ihafd|  楼主 | 2008-3-21 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void DELAY(uchar i)
{
 char d1,d2;
 for(d1 = 250; d1 > 0; d1--)
    while(--i); 
}
那为什么这样一个延时程序,如果i = 10 在PIC167877A里跑要大约30MS啦?(12MHZ)
它是在51上跑才大约2MS(12MHZ).

我是用MCD2烧录的.
选择HS模式.
沙发
林粼粼| | 2008-3-21 16:20 | 只看该作者

写的有问题

这样写i值没什么意义


while(--i)
{
for(d1 = 250; d1 > 0; d1--);
}

使用特权

评论回复
板凳
xieyuanbin| | 2008-3-21 16:24 | 只看该作者

和烧写器没关系

完全是编译器和你的写法问题.

使用特权

评论回复
地板
ihafd|  楼主 | 2008-3-21 17:01 | 只看该作者

这两种写法有什么区别?

谢谢!

使用特权

评论回复
5
林粼粼| | 2008-3-21 19:13 | 只看该作者

i 值

你看看你那样写while(--i);第2次执行的时候i的初始值是多少?

使用特权

评论回复
6
NE5532| | 2008-3-23 14:47 | 只看该作者

与编译器有关,这是两个不同的架构,不能这样比。

使用特权

评论回复
7
ddb_21ic| | 2008-3-23 23:40 | 只看该作者

测量时间,应该在软仿真里面进行

这些指令都是直接对应汇编指令的
标准51一定比PIC慢

使用特权

评论回复
8
hungrywolf| | 2008-3-24 11:01 | 只看该作者

编译设置问题

PIC是每个指令周期占4个时钟,同样的晶振情况下也会比51快,
一楼函数有点问题,但可以运行,在两种单片机上函数的情况一样。都能产生延时,只是外面那个d1=250赋值多余而已。
问题应该是在编译的时候,编译器设置的cpu时钟跟晶振的分频有问题。

使用特权

评论回复
9
李冬发| | 2008-4-8 22:41 | 只看该作者

2楼与5楼给出了正确答案

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

290

主题

844

帖子

3

粉丝