永发信息网

我的程序没能按我的要求跑。用了外部中断和定时器。

答案:2  悬赏:0  手机版
解决时间 2021-02-07 03:08
  • 提问者网友:几叶到寒
  • 2021-02-06 18:07
主题内容:1 : 电源/工作指示灯,开机长亮,抽水时闪亮.
2 : 抽水按键,按一次,按设定的时间抽水,直到时间点结束.如果在设定时间内再按一次可以手动停止抽水.
3 : 时间选择,可以选择10秒,20秒,30秒,40秒.(定时)
4 : 内部有一个安全开关,只有断开才能作其他的操作.(中断)

#include //头文件

sbit P10=P1^0; //定义P10为驱动抽水马达的控制口
sbit P11=P1^1; //定义P11为时间选择的高位标志
sbit P12=P1^2; //定义P12为时间选择的低位标志
sbit P13=P1^3; //定义P13为抽水开关

sbit P14=P1^4; //定义P14为电源指示灯,开机长亮,抽水时闪亮
//保护开关 : 通过中断接口P3.2连接的独立按键

static char i;


void ISR_Key(void) interrupt 0 using 1
{
//ET0=0; //定时器中断关闭
TR0=0; //定时器开关关闭
P10=0; //进入中断程序执行程序
//P14=0;
//此时可以通过 EA=0指令暂时关掉中断
}


void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}


void Timer0_isr(void) interrupt 1 using 1
{
static char s,t;

s++;
t++;
if(s==30)
{
P14=1;
s=0;
}
if(t==30*i)
{
P10=0;
t=0;
}
}


main()
{
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=0; //电平触发

P14=0;

while(P13==0)
{
//10秒定时
if(P11==0 &P12==0)
{
i=10;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//20秒定时
if(P11==0 &P12==1)
{
i=20;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//30秒定时
if(P11==1&P12==0)
{
i=30;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//40秒定时
if(P11==1&P12==0)
{
i=40;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
}
}
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-02-06 18:29
你的程序一直循环主程序,然后判断初始化定时器,别的什么都没有做啊,当然什么都没有了
全部回答
  • 1楼网友:底特律间谍
  • 2021-02-06 19:10
抱歉!这个问题不懂哦,请再加油吧!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯