(已解决)C编写的延时60S的程序,但是软件仿真延时不到1S

2019-03-24 19:49发布

谢谢大家的鼎力相助和给力支持~~!我已经找到错误所在,就是少了个中断函数,应该加个void timer0() interrupt1 的函数,然后把定时器设定放在里面。只是这样的话就没有用delay函数来的方便,而且定时器中断不能反复调用,个人觉得没有delay的调用灵活~~~无论如何,谢谢大家了~~   原程序只要把delay函数全部去掉,然后设个中断函数,把定时和key2的设定放里面就行,只是单片机默认输出高电平,我改好程序后无论如何都不能在key1闭合的情况下,先让key2=0持续60秒再自动跳转key2=1持续60秒。   有兴趣的童鞋可以试试用下面的程序改改。有兴趣想看我改好后的程序的可以说一下,我放上来。 --------------------------------------------------------------------------------------------------------------------------   KEY1为闭锁开关,KEY2为输出口   计划用芯片  89S51    6MHZ的晶振 理想预计延时60S,用软件仿真却仅延时1S左右,编译0错误0警告~~~ 不知道哪里出问题了,大伙帮看看吧~~   程序如下:   #include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P2^0;
sbit key2=P1^0;
void init();
void delay();
void main()

 init();
 while(1)
 {
  if(key1==0)
  {
    key2=0;
   delay();
   key2=!key2;
   delay();
  }
  if(key1==1)
  {
   key2=1;
   init();
  } 
 }
}
void init()

 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
}
void delay()
{
 uint i,a=0;
 for(i=60;i>0;i--)
 {
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  a++;
  if(a==10)
  a=0;
 }
}
   
[ 本帖最后由 sj777209 于 2011-8-14 00:04 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
sj777209
2019-03-26 20:10
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

12MHZ的晶振的话,一个机器周期为1us,上面这个运行一次就是50ms(50000us=50ms),6MHZ的晶振,一个机器周期为2us,上面这个运行一次就是100ms,a=10就运行10次,就是1000ms,不是1s么?

一周热门 更多>