(已解决)C编写的延时60S的程序,但是软件仿真延时不到1S
[复制链接]
谢谢大家的鼎力相助和给力支持~~!我已经找到错误所在,就是少了个中断函数,应该加个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 编辑 ]
|