最近看了一下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选择工作方式1
TH0 = 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 单片机 中断
引用地址:
基于80C51单片机——中断小结
推荐阅读最新更新时间:2024-03-16 16:08
大连理工大学瑞萨MCU基础讲座开讲
-为中国嵌入式工程师培养做出贡献- 株式会社瑞萨科技在大连理工大学软件学院开始举办“瑞萨MCU基础讲座”,该讲座是以瑞萨MCU为基础的C语言程序及嵌入式软件的基础知识学习。4月23日,隆重的开讲仪式在大连理工大学举行。会上,瑞萨介绍了自身的相关情况,发表了以“培养紧缺人才--嵌入式软件工程师”的主题演讲。 大连理工大学是教育部直属的全国重点大学之一,特别是该校的理工科院系在中国名列前茅,软件学院更是首批国家级示范性软件学院,学校综合实力位于我国高等学校的前列。目前,该大学成为在东北地区开设瑞萨MCU讲座的第一所大学。大连是日资、全球电子企业汇聚之地,嵌入式软件工程师极为匮乏。此次在大连理工大学开设瑞萨MCU基础讲座,正是为了培
[焦点新闻]
如何充分利用MSP430单片机的FLASH
优点: 能够充分利用MSP430单片机的自带FLASH储存空间,就可避免外扩EEROM芯片了,一是节约成本,二是少了外扩EEROM的读写代码,三是同样可以储存用户数据,比如A/D转换后的数据。当然,如果是常量就不必了,直接将常量申明为“CONST”变量即可,这个就不多说了,懂的。 具体方法: 先把完整的程序编好(不包括FLASH的),然后编译(我用的是IAR,CCE没试过),进行在线仿真(软仿真硬仿真均可),在菜单栏选择 View/Memory ,然后就可以看到FLASH 各个地址的数据了,记下FLASH 还没有被程序占用的空间的地址,然后将FLASH的程序加到你的主程序里,再编译,检验你记下的地址是否被程序占用,如果
[单片机]
利用8位带2KB闪存MCU的设计离线锂电池充电器
高效、低成本及可靠的电池充电器设计可用各种方法来实现,但采用8 位闪速MCU 不仅能缩短设计时间、降低成本及提供安全可靠的产品,而且还能使设计人员以最少的工作量来进行现场升级。考虑到电池安全充电的成本、设计效率及重要性,基于MCU 的解决方案可为设计者们提供诸多优势。通过选择带适当外围与闪存的8 位MCU,工程师们能充分利用其优势来设计一种离线锂电池充电器。带2KB 闪存及适当外围以提供一种廉价解决方案的飞利浦 80C51 型MCU 就是这样一个例子。集成化闪存还能提供高效及方便地调试应用代码并进行现场软件升级(如果需要)的能力。 由于设计界不仅熟悉而且广泛接受8 位MCU,故软硬件开发可快速进行。由众
[电源管理]
51单片机复位电路原理介绍
复位电路的工作原理:在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 1、开机的时候为什么复位? 在电路图中,电容的的大小是10uf,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少
[单片机]
基于STM32单片机点亮LED灯
1-编写第一个程序点亮LED灯 下面是原理图,连接的是PC0-PC7引脚: 1static void Led_Cofig(void) 2{ 3 /*定义一个GPIO_InitTypeDef类型的结构体*/ 4 GPIO_InitTypeDef GPIO_InitStructure; 5 /*开启LED相关的GPIO外设时钟*/ 6 RCC_APB2PeriphClockCmd(LED_GPIO_CLCK, ENABLE); 7 /*选择要控制的GPIO引脚*/ 8 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; 9 /*设置引脚模式为通用推挽输出*/
[单片机]
Holtek 5V宽电压Cortex-M0+支持触控单片机
Holtek 新推出 5V 宽电压 Arm® Cortex®-M0+ Touch 单片机 HT32F542xx 系列产品,频率最高可达 60MHz,提供最多 28 个触控键,可通过 CS (Conductive Susceptibility) 10V 动态测试,此外还内建具自动扫描功能的 LED controller。 应用上适用于各类电器产品,如空气炸锅、电饭锅、智能门锁、洗衣机面板等。 HT32F54231/54241 系 列 的 Flash 容 量 为 32KB/64KB,SRAM 容 量 为4KB/8KB,提供最多 24 个触控键,并支持深度休眠模式 1 / 深度休眠模式2下自动侦测功能,适合低功耗产品的应用。此外
[单片机]
PC机如何实现与单片机间串行通信
中心议题: * PC机与单片机间串行通信的实现 * 设计方案的介绍 * 硬件设计 * 软件设计 解决方案: * 有线传输 * 无线传输 * 采用CCll00收发器通过串口实现PC机与单片机之间的双工无线通信 单片微型计算机简称单片机,它是将中央处理器(CPU)、存储器(RAM,ROM)、定时/计数器和各种接口电路都集成到一块集成电路芯片上的微型计算机。随着计算机技术尤其是单片机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、湿度等参数进行检测和控制。PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS 232串行接口与外部设备进行通信,是许多测控系统中
[单片机]
基于PIC单片机的电动自行车控制系统设计
摘 要:介绍以单片机PICl6F72为核心的电动自行车用无刷直流电动机控制系统的设计。该系统采用电流与速度双闭环控制的结构,其中电流调节器用传统的PI调节器,速度调节器为改进的PI调节器。实验验证了此设计方案的可行性和优越性,即控制电路简洁,器件少,成本低,保护措施可靠,提高了系统的控制精度。该设计对无刷直流电机在其他领域的应用有一定的帮助和借鉴,具有广泛的现实意义。该系统速度环采用改进型的PI调节器控制,且通过软件运用算法测速,实现转速反馈,既简化电路又节省成本。 关键词:电动自行车;控制系统;无刷直流电动机;PIC16F72;PID控制 0 引 言 随着社会的不断进步,人们生活水平的提高,环境保护和能源节约问题已经越来越
[工业控制]