【Proteus仿真】外部中断通过双继电器控制直流电机正反转

【Proteus仿真】外部中断通过双继电器控制直流电机正反转


  • Proteus仿真
    在这里插入图片描述
  • 说明

使用了外部中断0和1,分别控制电机正反转,启动和停止都在两个按键上,第一次是启动,在按同一个按键就是是停止,程序现在不足的地方是如果启动时正转或反转,让后去按另外一个控制按钮就不起作用,然后去按前一次的按键时,继电器会出现同时跳动的情况。如果使用哪个启动哪个就有停止的权限就不会出现两个继电器同时跳动的情况。

程序源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <STC89C5xRC.H>

sbit LED1 = P1^0 ;
sbit LED2 = P1^1 ;

static void Init0(void)
{
IT0 = 1; //设置INT0的中断类型 (1:下降沿 0:低电平)
EX0 = 1; //INT0中断使能
}
static void Init1(void)
{
IT1 = 1; //设置INT0的中断类型 (1:下降沿 0:低电平)
EX1 = 1; //INT0中断使能
}
void main(){

Init0();
Init1();
EA = 1; //开启总中断
P1 =0x00;
while(1);
}

void EXIT0\_isr(void) interrupt 0 using 0
{
static volatile unsigned char flag0 = 0;
if(flag0 == 0) //亮灯
{
LED1 = 1 ;
flag0 = 1;
EX1 = 0; //如果LED2关闭了,就关闭INT1中断
}
else //灭灯
{
LED1 = 0;
flag0 = !flag0;
EX1 = 1; //如果LED2关闭了,就开启INT1中断
}
}
void EXIT1\_isr(void) interrupt 2 using 0
{
static volatile unsigned char flag1 = 1;
if(flag1 == 0) //亮灯
{
LED2 = 1;
flag1 = 1;
EX0 = 0; //如果LED2开启了,就关闭INT0中断
}
else //灭灯
{
LED2 = 0;
flag1 = !flag1;
EX0 = 1; //如果LED2关闭了,就开启INT0中断
}
}

仿真资源和程序源码

1
2
3
链接:https://pan.baidu.com/s/1sgacmzP6YSxGmxeTDqWv9A 
提取码:edxt


无事之时,心能澄然;有事之时,心能断然;得意时,心能淡然;失意时,心能泰然。用平常心看待世间万物,自会获得心灵的安稳。