0
点赞
收藏
分享

微信扫一扫

51单片机中断实验

司马吹风 2022-05-02 阅读 194

1.实验要求:

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

实验中应注意:

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

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

2.实验内容:

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

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

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

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

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

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

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

(1)Proteus原理图:

我们使用了AT89C51主控单片机,利用单片机的P1、P3.2、P3.4口来实现工业顺序的控制。具体电路图如下图:

 

 

(2)keil代码如下:

1)中断方式

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40};

uchar i=0,j;

sbit SPK=P1^7;

sbit k1=P3^4;

sbit k2=P3^3;

void DelayUs2x(unsigned char t);//函数声明

void DelayMs(unsigned int t);

/*------------------------------------------------

主函数

------------------------------------------------*/

void INT_1() interrupt 2

{

EX1=0;

DelayMs(20);

EX1=1;// SPK=1;//喇叭

}

void main()

{

P1=0;

// k1=0xff;

// k2=0xff;

EA=1;

EX1=1;

IT1=1;

while(1)

{

if(k1==0)

{

P1=table[j++];

DelayMs(1000);

if(j==7)

j=0;

}

}

}

void DelayUs2x(unsigned char t) {

while(--t);

}

void DelayMs(unsigned int t) {

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

  1. 定时器方式

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x01,0x02,0x04,0x08,0x10, 0x20,0x40};

uint i=0,j=0,k=0;

sbit SPK=P1^7;

sbit k1=P3^4;

sbit k2=P3^3;

void delay(uint c)

{

uint a,b;

for(;c>0;c--)

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

void INT_1() interrupt 2

{

EX1=0;

delay(20);

EX1=1;

TR0=1;

while(k1==0&&k2==0)

{

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

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

while(TF0==0);

SPK=!SPK;

TF0=0;

}

for(k=0;k<200;k++)

{

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

while(TF0==0);

SPK=!SPK;

TF0=0;

}

}

}

void main()

{

TMOD=0x01;

EA=1;

EX1=1;

IT1=1;

P1=0;

while(1)

{

if(k1==0)

{

delay(20);

if(k1==0)

{

P1=table[j++];

delay(200);

if(j==7)

j=0;

}

}

}

}

经过调试与运行,无错误无警告。

(3)keil与Protues联合调试

在主控单片机中导入hex文件,运行正常,运行结果如下图:

 

举报

相关推荐

0 条评论