工业顺序控制实验
在工业控制中,象冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某种顺序有规律地完成预定的动作,对这类继续生产过程的控制称顺序控制,倒注塑机工艺过程大致按“合模→注射→延时→开模→产伸→产退”顺序动作,用单片机最易实现。
本次实验通过发光二极管点亮来模拟不同的工序,开关K1模拟启动操作,K2模拟发生故障,音频输出声音模拟报警声。而且开关K2所接的P3.3引脚就是51单片机外部中断INT1的中断请求信号输入端,因此需要设置外部中断1。
程序清单
#include <reg51.h> //包含头文件reg51.h,定义单片机特殊功能寄存器和特殊标志位
#define uchar unsigned char //宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
sbit SIN=P1^7; //定义特殊标志位,P1.7接音频输出SIN
sbit K2=P3^3; //定义特殊标志位,P3.3接开关K2,为外部故障输入模拟开关
sbit K1=P3^4; //定义特殊标志位,P3.4接开关K1,为开工启动开关
void delay(uint count) //带参数的软件延时子函数,可控制延时时间长短
{
uint n;
for(n=count;n>0;n--);
}
void int_1()interrupt 2 //外部中断INT1的中断服务函数,中断编号为2
{
while(K2==0) //当开关K2为0时,进入循环
{
SIN=0;
delay(80);
SIN=1;
delay(80); //输出方波信号,产生声音报警
}
}
void main()
{
IE=0x84; //设置中断控制寄存器,打开总中断允许EA和外部中断INT1的中断允许EX1
IT1=1; //设置外部中断INT1为下降沿触发方式
while(1) //无限循环
{
P1=0xff; //初始发光二极管全灭,等待开工
delay(50000);
while(K1==0) //检测到K1为0后,开工
{
P1=0xfe; //工序1;点亮L1
delay(50000);
P1=0xfd; //工序2;点亮L2
delay(50000);
P1=0xfb; //工序3;点亮L3
delay(50000);
P1=0xf7; //工序4;点亮L4
delay(50000);
P1=0xef; //工序5;点亮L5
delay(50000);
P1=0xdf; //工序6;点亮L6
delay(50000);
P1=0x8f; //工序7;同时点亮L5、L6和L7
delay(50000);
}
}
}