对51单片机中断系统的理解

51单片机的中断系统十分重要,前几次我在学习的时候,根本分不清外部中断、定时器中断的区别以及正确使用方法。今天,偶然打破了自己的常规思路,得到了一点点理解,与大家分享下,希望大家不吝指出其中的不足与错误。

        1.单片机的中断分类:只有两类,外部中断和定时器中断。这两种中断使用时可以完全分离。

2.最常用的自动中断是定时器中断,也就是自己设定一个“倒计时”,该倒计时与主程序同时开始,一旦时间耗尽,开始停止主程序,进行中断程序。这种定时器中断的开启方法只需要这几个寄存器设置:

EA=1表示允许任何中断开启;

ETx表示时间耗尽允许执行中断程序;

TRx表示允许倒计时开始;

TMOD表示倒计时的计时工作方式;

THx,TLx表示倒计时的值。

然后写中断程序interrupt 1或3 。

3.可以人工控制的中断是外部中断,开启方式最简单,只需要以下寄存器:EA=1表示意义同上;EXx表示外部条件(3.2或者3.3口低电平)满足去执行中断程序。然后写中断程序interrupt 0或 2 。


以前总是误认为使用外部中断必须要开启定时器中断,现在想想不是这样的。

提供两个简单程序供大家测试:

程序一:定时器中断

sbit beep=P2^3;
void init();
int main()
{
    init();
    while(1);
}

void init()
{
    EA=1;
    ET0=1;
    TR0=1;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    TMOD=0x01;
}
void inter() interrupt 1
{
    int a;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    a++;
    if(a==40)
    {
        a=0;
        beep=~beep;
    }
    
}



程序二:外部中断

#include<reg52.h>
void init()
{
    EA=1;
    EX0=1;
    IT0=0;
    
}
int main()
{
    init();
    while(1)
    {
        P1
    }
}
void interceshi() interrupt 0
{
    P1=0;
}

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值