谢谢大家的鼎力相助和给力支持~~!我已经找到错误所在,就是少了个中断函数,应该加个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 编辑 ]
此帖出自
小平头技术问答
{
uint i,a=0;
for(i=60;i>0;i--)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==10)
a=0;
}
}
这个函数错了,你应在定时器中断程序这样编然后搞个旗标,主程序就判断旗标即可。
一周热门 更多>