视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
工业顺序控制实验实验报告
2025-10-02 15:11:48 责编:小OO
文档
实验四  工业顺序控制实验  

一、实验目的:  

 掌握工业顺序控制程序的简单编程,中断的使用。 

二、实验仪器和设备: 

 1.微机一台 2.Keil C51集成开发环境 3.proteus仿真软件

三、实验预备知识   

 在工业控制中,像冲压、注塑、轻纺、制瓶等生产过程,都是一些断续生产过程,按某种程序有规律地完成预定的动作,对这类断续生产过程的控制称顺序控制,例注塑机工艺过程大致按“合模—>注射—>延时—>开模—>产伸—>产退”顺序动作,用单片机最易实现。  

四、实验内容:

  1. 用proteus画出仿真电路图。8031的P1.0-P1.6控制注塑机的七道工序,先模拟控制七只发光二级管的点亮,高电平有效,设定每道工序时间转换为延时,K1为开工启动开关,低电平启动。K2为外故障输入模拟开关,P3.3输入为0是不断警告,P1.7为报警声音输出,参考电路图如下图所示:

      2.P1.7报警输出时要求采用双音报警,请自行准备耳机。

五、实验说明:  

  1.实验中模拟外故障输入用外部中断1,初始化程序中需开中断。

     2.未开工时(K1未按下),按下K2不能有报警输出。

六、实验程序框图

 七、实验步骤 :      

1. 用proteus设计工业顺序控制电路;

2..在Keil C51中编写控制程序,编译通过后,与proteus联合调试;

3..K1开关拨在上面,K2拨在上面;

4..用连续方式运行程序,此时应在等待开工状态;

5..K1拨到下面(显低电平),各道程序应正常运行;

6..K2拨到下面(低电平),应有声音报警(人为设置故障);

7..K2拨到上面(高电平),排除故障,程序应从刚才报警的工序继续执行。

八、实验程序:

 1.实验电路:

    2. 实验源程序:见附录1.2

九、实验总结:

1. 用中断方式编程时,外部中断触发方式选择了低电平触发,结果导致按键按下后,中断不断触发,尽管出现了连续的报警声,但是还是会回到主程序,流水灯并未真正停止,而是间隔一段时间后,发生变化。解决方法是在中断程序中加入判断K2的条件,使其在中断期间不再返回主程序即可。

2. 注意当程序中用到两个中断时必须设置中断优先级寄存器PCON,才能实现中断嵌套。要真正理解中断优先级的含义。

3. 给speaker两个不同的频率的信号即可产生双音报警信号。

    

附录1:程序1

#include

void delay_ms(int);

int t=0,num=1,cnt,s;

sbit K1=P3^4;

sbit K2=P3^3;

bit sw=0,flag=0;

sbit speaker=P1^7;

char code tab[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};

void main(void)

{

P1=tab[0];

TMOD=0x01;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

ET0=1;

TR0=1;

EA=1;

while(1)

    {  

        while(K1==0)

        {

     if(num<=7&&K2==1)                {

            P1=tab[num++];

            delay_ms(500);

            if(num==8)    num=1;

             for(cnt=0;cnt<200&&K2==0;cnt++)

            {

            speaker=~speaker;

            while(s<2);            s=0;

            }           

for(cnt=0;cnt<200&&K2==0;cnt++)                {

            speaker=~speaker;

            while(s<3);            s=0;

            }                    

        }                                   

    }

}

void timer0() interrupt 1

{

TH0=(65536-500)/256;

TL0=(65536-500)%256;

s++;

}

void delay_ms(t)

{

int i;

for(;t>0;t--)

for(i=0;i<124;i++);

}

        }

附录2:程序2

#include

int t=0,num=1,cnt,s;

sbit K1=P3^4;

bit sw=0;

sbit speaker=P1^7;

char code tab[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};

void keyscan()

{

if(K1==0) sw=1;

if(K1==1) 

    {

    sw=0;

    P1=tab[0];

    EX1=0;       //K1接高,停止工作

    }

}

void main(void)

{

TMOD=0x01; //定时器0方式1

TH0=(65536-100)/256;

TL0=(65536-100)%256;

PT0=1;     //设置定时器1最高优先级

TR0=1;

EA=1;

while(1)

    {      

    keyscan();

    if(sw)

        {    

        ET0=1;

        EX1=1;

        IT1=0; 

        while(sw)    

        {

     if(t>=5000)    

            {

            P1=tab[num++];;

         if(num>=8)    num=1;

                t=0;                                 }

        keyscan();

        }                                   

    }

}

void INTER1() interrupt 2

{

for(cnt=0;cnt<250;cnt++)

        {

        speaker=~speaker;

     while(s<10); s=0;                }           

for(cnt=0;cnt<125;cnt++)

        {

        speaker=~speaker;

     while(s<20); s=0;                }

    if(K1==1)    EX1=0;    }        

void timer0() interrupt 1

{

TH0=(65536-100)/256;

TL0=(65536-100)%256;

t++;

s++;

}

        }    下载本文

显示全文
专题