最近看了一下80C51单片机的中断部分的实验,做一些笔记,方便以后学习查找。
首先说一下什么是中断吧,中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设(外部设备)请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去执行相应的服务处理程序;当服务处理程序运行完毕之后,CPU再返回到暂停处继续执行原来的程序。

那什么是中断嵌套呢?简单点说就是低优先级的中断可以被高优先级的中断源所中断,等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序。

举个简单的栗子吧(之前写过但不知道怎么删了,,又让我重新编辑):比如我们就是一个CPU,我们当前在洗衣服(当前程序),突然电话铃声响了(中断来了),它的优先级肯定高于洗衣服嘞,此时我们会停止洗衣服而转去接电话,等到电话打完,我们继续回去洗衣服(也就是所谓的“”等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序“”)。
好了,接下来我们来说说怎么去设置一个中断:

TCON(定时器/计数器控制寄存器)高4位是设置定时计数器,低4位是用来设置外部中断

* IT0和IT1是设置外部中断的触发方式
当其为0时,为低电平触发方式。
当其为1时,为负跳变触发方式。
* IE0和IE1是外部中断标志位。
* 其他事定时/计数器的控制。
* TF0和TF1是定时器的中断标志。
* TR0和TR1是打开相应的定时器。
中断允许寄存器IE

* EA总中断允许。
0时:CPU屏蔽所有的中断请求。
1时:CPU开放所有的中断。
* ES串行口中断允许位。
0时:禁止串行中断。
1时:允许串行中断。
* ET1和ET0:分别是定时计数器1和定时计数器0中断允许位。
0时:禁止相应的定时计数器中断。
1时:允许相应的定时计数器中断。

 *  EX1和EX0:分别是外部中断1和外部中断0的中断允许位0时:禁止相应的外部中断。1时:允许相应的外部中断。

中断优先级寄存器IP

* PS:串行口中断优先级
0时:串行口中断优先级定义为高优先级
1时:串行口中断优先级定义为低优先级

 *  PT1和PT0:分别是定时计数器1和定时计数器0的中断优先级0时:相应的定时计数器中断为高优先级1时:相应的定时计数器中断为低优先级*  PX1和PX0:分别是外部中断1和外部中断0的中断优先级0时:相应的外部中断为高优先级1时:相应的外部中断为低优先级

**一般默认低优先级,不是特别需求不用改**********
中断地址

中断函数的写法

void  函数名()interrupt 中断编号
{;
}

接下来我们来说一下定时器:
定时/计数器实质上是一个加1计数器。它随着计数器的而输入脉冲进行自加1,也就是每来一个脉冲,计数器 就自动加1,当加到计数器为全1 的时候,再输入一个脉冲使计数器归零,且计数器的溢出使相应的中断标志位置为1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示计数值已满。
**可见,由溢出时计时器的值减去计数初值才是加1计数器的计值。*

TMOD(工作方式寄存器)

* GATE:门控制
0时:仅有运行控制位TRx来控制定时/计数器的开启。
1时:由TRx和外部中断脉冲计数(用于计算外部中断负跳变的次数)
* C/T:计数器模式和定时器模式选择
0时:选择定时器模式。
1时:选择计数器模式。

M1和M0:选择定时/计数器的工作方式

计数器初值的计算:

  • 机器周期:CPU完成一个基本操作所需要的时间
  • 机器周期=1/单片机的时钟频率。
  • 51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如你用的是12MHZ的晶振,那么单片机内部的时钟频率就是 12/12MHZ,当你使用12MHZ的外部晶振的时候,机器周期=1/1M=1us.

  • 而我们定时1ms的初值是多少呢,1ms/1us=1000.
    也就是要计数1000个数,初值=6553-1000+1(因为实际上计数器计数到66636才溢出)=64536=FC18H
    定时/计数器的工作方式:

    定时器操作步骤:

    • 选择工作方式(设置M1,M0)
    • 选择控制方式(设置GATE)
    • 选择定时器还是计数器模式(设置C/T)
    • 给定时/计数器赋初值(设置THx和TLx)
    • 开启定时器中断(设置ET0或ET1)
    • 开启总中断(设置EA)
    • 打开计数器(设置TR1或TR0)
    void TimeConfiguration(){TMOD = 0x01;         //定时器0选择工作方式1TH0 = 0x3C;          //设置初始值TL0 = 0xB0;          EA = 1;              //打开总中断ET0 = 1;             //打开定时器0中断TR0 = 1;             //启动定时器}

中断操作步骤:
* 打开总中断(设置EA)
* 设置外部中断的触发方式(设置IT0或IT1)
* 设置外部中断的中断允许位(设置EX0或EX1)
* 设置外部中断的优先级(一般默认低优先级,不是特别需求不用改,设置PX0或PX1)

void InConfiguration()
{EA=1;             //打开总中断IT1=1;        //设置外部中断触发方式为负跳变触发方式EX1=1;        //允许外部中断1发生中断PX1=0;        //相应的外部中断为高优先级
}

好了,这部分内容就先小结到这,,要去睡觉了。不能熬夜!不能熬夜!不能熬夜!

基于80C51单片机——中断小结相关推荐

  1. 单片机c语言reti的用法,基于51单片机中断跳出指令“RETI”浅议

    原标题:基于51单片机中断跳出指令"RETI"浅议 =RET指令+通知CPU中断服务已结束. 最近在基于编程的过程中出现了个很奇怪的问题"程序执行中在寄存器EA=1,ET ...

  2. 单片机c语言交通灯源程序,基于80C51单片机的交通灯C语言源程序

    <基于80C51单片机的交通灯C语言源程序>由会员分享,可在线阅读,更多相关<基于80C51单片机的交通灯C语言源程序(5页珍藏版)>请在人人文库网上搜索. 1.include ...

  3. 单片机位寻址举例_基于80C51单片机位寻址编程

    80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式.所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0. 位寻址的范围,也就是 ...

  4. 基于STC89C51单片机中断系统操作

    MCS-51 单片机中断系统 CPU正在处理某件事情时,外部发生另一件事情,请求CPU处理后CPU暂时停止工作后,转入处理发生的事情,结束后返回原任务.这一程序称为中断. Created with R ...

  5. 基于80C51单片机的电子钟设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87761539?spm=1001.20 ...

  6. 基于80C51单片机的经纬度定位显示装置设计

    目 录 摘要.....................................................................Ⅰ Abstract............... ...

  7. 基于ATMEGA16单片机的空调控制器

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853101 源码获取 主要内容: ...

  8. 基于51单片机的电子血压脉搏计

    大三上的设计,分享给大家 1.1 基于单片机的电子血压计简介 1.1.1 基于单片机的电子血压计的介绍 该产品重量轻,便携,可放入医生护士口袋.无水银,增强环保性,避免了 因水银泄露而造成的污染事故. ...

  9. 基于STC15W4K32S4单片机仿真《外部中断INT0控制LED亮灭》

    1. 编 程 软 件:keil5版本. 2.仿 真 软 件:Proteus8.12 3.单片机选型:STC15W4K32S4 4.学 习 目 标:   1.学习外部中断INT0 5.程 序 文 件 : ...

  10. 单片机c语言计数器测速,基于51单片机的光电编码器测速.doc

    课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器.在位置控制系统中,由于电机既可能正转,也可能反转,所 ...

最新文章

  1. Xcode 9 快速跳转到定义新姿势(Jump to Definition)
  2. java1.6 linux_linux java1.6 安装
  3. c++二进制转十进制_二进制,八进制,十进制,十六进制转换详解~
  4. 第四章 生命周期函数--36 结合Node手写JSONP服务器剖析JSONP原理
  5. DirectShow 在 VS2010 中开发环境的设置
  6. CocosCreator2.3.1切换场景出现Failed to load scene ‘xxx‘ because ‘xxx‘ is already being loaded问题的解决方案
  7. android 导出数据库文件
  8. 插桩java_字节码插桩技术
  9. 想自学单片机和c语言,单片机想入门应该怎么学?请记住以下几点
  10. speak 计算机英语作文,【必备】英语作文5篇
  11. element中table表格和已选数据联动
  12. 时间片,从多任务系统说起
  13. 红蓝眼睛逻辑问题推理
  14. 售前售前售前售前售前
  15. CSS定位—静态定位、相对定位、固定定位、绝对定位、粘性定位
  16. 封装系列 | QFN
  17. 如何调试上位机软件与串口进行通信
  18. 2021科大讯飞-X光安检图像识别赛Top1方案!
  19. 【Unity】捕鱼达人开发流程
  20. arduino uno r3 控制42不进电机+TB6600驱动

热门文章

  1. Leetcode刷题笔记 35.搜索插入位置(详细说明二分查找)
  2. 在Ubuntu上部署ROS以及如何搭建工作空间和功能包的创建与编译
  3. WebStorm下载、安装、配置/2022最新版
  4. 操作系统实验——进程控制
  5. 基于到达时间差(TDOA)的室内定位(/无线传感器网络定位)——极大似然估计ML
  6. 【C语言】详解 calloc 函数用法
  7. Tom猫游戏代码iOS 素材
  8. Metrics 入门教程
  9. Docker在蚂蚁金融云平台中的探索与实践
  10. Android 测试工具集01