标题: 同一个程序,头文件也换过,就是不同芯片,实现时间不一样。求指导。 [打印本页]

作者: 啦啦啦1234    时间: 2016-3-27 10:31
标题: 同一个程序,头文件也换过,就是不同芯片,实现时间不一样。求指导。
我是新手,才学单片机两个月,以前没学过任何编程,以下程序是现学现卖。D1和D2控制两个继电器。用于洗衣机电机正反转,写程序到89C52等大芯片时间是对的,正传十秒停四秒,反转十秒停四秒,一直这样循环。可是写到15F104E里面,时间缩短一半多点,十秒大概是四秒,整个正反转过程大概六七秒,写程序是内部晶振11.0592,后来头文件也是改成15F104E,可是还是不行。
求高手指点迷津!!!


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^0;
sbit D2=P1^1;
void delay(uint z);
void main()
{
    while(1)
    {
    D1=0;
    delay(240);
    D1=1;
    delay(105);
    D2=0;
    delay(240);
    D2=1;
    delay(105);
    }


void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=5000;y>0;y--);
}
作者: 啦啦啦1234    时间: 2016-3-27 10:33
补充下,实际写程序时我申明用的是3.2和3.3脚
作者: 201330030167    时间: 2016-3-27 11:45
把延时子函数的实参改大点不行么

作者: 腾飞的龙    时间: 2016-3-27 12:02
89C52是12T单片机,15F和11F的单片机是1T的,速度快多了。必须延长延时时间。增加6倍的延时试试、
作者: 啦啦啦1234    时间: 2016-3-27 12:05
201330030167 发表于 2016-3-27 11:45
把延时子函数的实参改大点不行么

可以是可以,边改边试验,但这不是解决问题的方法,现在是十秒和四秒,要是时间一个小时呢?我难道下载程序以后计时一个小时看效果?而且我用调试能知道具体多少秒,但改数字大小我只能知道大概的时间。我是新手,所以想知道为什么芯片不同,同一个程序时间就不一样了。我想知道到底哪里错了。
作者: 啦啦啦1234    时间: 2016-3-27 12:08
腾飞的龙 发表于 2016-3-27 12:02
89C52是12T单片机,15F和11F的单片机是1T的,速度快多了。必须延长延时时间。增加6倍的延时试试、

谢谢,好像很有道理。那我keil工程调试不是不知道运行和停止的具体时间了吗?只能用秒表自己计时?我建立工程是芯片选的15F104E,头文件也是它,可是还是这个程序,调试看时间还是十秒和四秒。难道还要用特殊的编程软件?
作者: 啦啦啦1234    时间: 2016-3-27 12:14
腾飞的龙 发表于 2016-3-27 12:02
89C52是12T单片机,15F和11F的单片机是1T的,速度快多了。必须延长延时时间。增加6倍的延时试试、

很有道理,谢谢。那是不是要换个专用的编程软件?我用keil新建工程,选15f104e芯片,头文件也是它。但写这程序用调试还是十秒和四秒,但实际时间很短。我要精确到1秒的时间的话,那怎么办?
作者: wc86110    时间: 2016-3-27 12:17
LZ,这要看你用的是啥芯片了,不同时钟芯片相应的延时会不一样,楼上说的没错。
作者: 啦啦啦1234    时间: 2016-3-27 16:07
wc86110 发表于 2016-3-27 12:17
LZ,这要看你用的是啥芯片了,不同时钟芯片相应的延时会不一样,楼上说的没错。

好的,谢谢。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1