51单片机之中断系统,外部中断

51单片机之中断系统,外部中断,第1张

中断分为4个步骤:中断请求→中断相应→中断处理→中断返回(先做更重要的事)

1、数据的输入/输出传送方式

外部中断要看对应引脚外部的电平状态。

例如:外部中断0(INT0)对应的引脚是P32,

当出现 低电平 ,即P32引脚连接的地方是 低电平 ,进入相应的中断函数;

当出现 下降沿 ,即P32引脚连接的地方 由高电平变为低电平 ,进入相应的中断函数

内部中断源要看单片机内部的定时器/计数器

中断允许寄存器IE

定时器/计数器0/1控制寄存器TCON

对同时发生多个中断申请时:

不同优先级的中断同时申请:先高后低

相同优先级的中断同时申请:按序执行

正处理低优先级中断又接到高级别中断:高打断低

正处理高优先级中断又接到低级别中断:高不理低

初始化的意思如图所示

实现思路

查看上方 P3第二功能各引脚功能定义 ,P33是外部中断1 (INT1)的外部输入引脚

编写一个程序,使得 S2按键按下 时,某个IO口(下面程序选择了P37这个IO口) 产生跳变沿 (由1变0)。P33与P37用跳线连接,使P33口与P37口同时产生跳变沿。

#include "reg51h"

sbit a1=P3^2;

int Xn,SUM;

void time0_initial() //定时

{

TMOD=0x01;

TH0=(65535-5000)/256; //定时器0定时5ms

TL0=(65535-5000)%256;

EA=1;

}

void interrupt_0_initial()

{

IT0=0;

EX0=1;

EA=1;

}

void main(void)

{

interrupt_0_initial();

time0_initial() ;

while(1);

}

void time0() interrupt 1

{

TH0=(65535-5000)/256; //定时器0定时5ms

TL0=(65535-5000)%256;

Xn++;

}

void interrupt_0() interrupt 0

{

do

{

ET0=1;

TR0=1;

}while(a1==0)

ET0=0;

TR0=0;

SUM=Xn;

Xn=0;

}

#include "reg52h"

sbit key=P3^2;

void main()

{

IT0=1; //外部中断0连沿触发方式

EX0=1; //使能外部中断0

EA=1; //开部中断

while(1) ;

}

void int0() interrupt 0

{

int tab[]={0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f,0xaf,0x2f,0xcf,0x4f,0x8f,0x0f} ;

int count=15;

long int i;

while(1)

{

if(key==0)

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

if(key==0)

{ count--;

if(count==0)

count=15;

P3= tab[count] ;

while(key==0);

}

}

}

外部中断,要求是低电平/下降沿触发。

你应该把按键改成接地,不要接电源。

另外,程序缺少延时,这样,按一下键,会加上很多次的。

试试如下程序:

#include <reg52h>

unsigned char code tab[] = {

0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90};

unsigned char a, b, c;

//-------------------------------

void delay(unsigned int k)

{

unsigned int i, j;

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

for(j = 0; j < 121; j++);

}

//-------------------------------

void main()

{

IT0 = 1;

EX0 = 1;

EA = 1;

while(1) {

P0 = tab[c];

}

}

//-------------------------------

void key()interrupt 0

{

c++;

if(c > 10) c = 0;

delay(200); //延时一会

}

//-------------------------------

以上就是关于51单片机之中断系统,外部中断全部的内容,包括:51单片机之中断系统,外部中断、外部中断和定时器中断在一起的程序怎么写、用外部中断1做一计数器的c语言程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9324252.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存