怎么16F877比51还要慢?

[复制链接]
3521|8
 楼主| ihafd 发表于 2008-3-21 15:41 | 显示全部楼层 |阅读模式
void&nbsp;DELAY(uchar&nbsp;i)<br />{<br />&nbsp;char&nbsp;d1,d2;<br />&nbsp;for(d1&nbsp;=&nbsp;250;&nbsp;d1&nbsp;&gt&nbsp;0;&nbsp;d1--)<br />&nbsp;&nbsp;&nbsp;&nbsp;while(--i);&nbsp;<br />}<br />那为什么这样一个延时程序,如果i&nbsp;=&nbsp;10&nbsp;在PIC167877A里跑要大约30MS啦?(12MHZ)<br />它是在51上跑才大约2MS(12MHZ).<br /><br />我是用MCD2烧录的.<br />选择HS模式.
林粼粼 发表于 2008-3-21 16:20 | 显示全部楼层

写的有问题

这样写i值没什么意义<br /><br /><br />while(--i)<br />{<br />for(d1&nbsp;=&nbsp;250;&nbsp;d1&nbsp;&gt&nbsp;0;&nbsp;d1--);<br />}
xieyuanbin 发表于 2008-3-21 16:24 | 显示全部楼层

和烧写器没关系

完全是编译器和你的写法问题.
 楼主| ihafd 发表于 2008-3-21 17:01 | 显示全部楼层

这两种写法有什么区别?

谢谢!
林粼粼 发表于 2008-3-21 19:13 | 显示全部楼层

i 值

你看看你那样写while(--i);第2次执行的时候i的初始值是多少?
NE5532 发表于 2008-3-23 14:47 | 显示全部楼层

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

  
ddb_21ic 发表于 2008-3-23 23:40 | 显示全部楼层

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

这些指令都是直接对应汇编指令的<br />标准51一定比PIC慢<br />
hungrywolf 发表于 2008-3-24 11:01 | 显示全部楼层

编译设置问题

PIC是每个指令周期占4个时钟,同样的晶振情况下也会比51快,<br />一楼函数有点问题,但可以运行,在两种单片机上函数的情况一样。都能产生延时,只是外面那个d1=250赋值多余而已。<br />问题应该是在编译的时候,编译器设置的cpu时钟跟晶振的分频有问题。
李冬发 发表于 2008-4-8 22:41 | 显示全部楼层

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

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

294

主题

858

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部