登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 第三章:中断系统

[复制链接]
发表于 2017-2-1 18:00:40 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51
学习安排: 详见:http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=837&fromuid=385
开始时间: 2017-01-30
结束时间: 2017-01-31
先上图

1-1.PNG

这是手册开篇对中断的描述

首先,明确一下,它是为使CPU具有对外界紧急事件的处理能力设置的

也就是说,MCU内部也有一些事件可引起中断,而且绝大部分中断都发生在MCU内

比如MCU中的定时器中断就是因为TF(Timer Flag)置位引起的

对于CPU来说,定时器计满就是紧急事件

当紧急事件发生时也就是TF=1时CPU就会放下手中的‘活’,转而去执行定时器计满后该干的事情

你可以去写一些代码告知CPU定时器中断发生后应该去干什么


[mw_shl_code=c,true]void ser1() interrupt 1//中断函数
{
        TL0 = 0xAB;
        TH0 = 0x2F;
        TF0=0;
        LED_DOT++;
        if(LED_DOT==50)
        {
                LED_DOT=0;
                LED_NUM++;
        }
}[/mw_shl_code]

这是我上篇帖子的附件中定时器的中断代码

乍一看与函数无异

但仔细一看你就会发现他有一个函数所没有的关键字

interrupt(中断)

这个关键字告诉了CPU这是谁的中断程序

因为相对于CPU来说外部中断有很多

需要进行区分

那么此时一张表格就是必须的了

1-2.PNG

这张表格说明了标号1为定时器0的中断号

也就是说当你在函数后加interrupt 1时,这个函数就是定时器0的中断程序

当定时器0溢出时,CPU就会过来执行它

如手册上所说

1-3.PNG

然而,CPU外部有许多中断

并且,CPU无法控制中断发生的时间

也就是说,对于CPU来说中断是随机的

那么,如果同时发生了两个或以上中断怎么办?

为此引入了一个优先级的概念

当你的标号越小时,你的优先级越高

对于上表来说,外部中断0的优先级最高

其次是定时器0

以此类推

但是,有些时候在不同场合会有一些不同的要求

比如我想让定时器0的优先级高于外部中断0

那么为了便于这种想法的实现,引入了两个寄存器

IP,IPH

1-4.PNG

再附上一张如何更改优先级的图示

1-5.PNG









该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表