首页 > 其他分享 >单片机原理2:定时器和中断

单片机原理2:定时器和中断

时间:2023-08-10 21:45:01浏览次数:55  
标签:定时器 中断 现场 单片机 地址 寄存器 允许

定时器

定时器寄存器:

TMOD:方式寄存器,设定定时器0和定时器1的工作方式 C/T:0为定时,1为计数 TCON:控制寄存器,可位寻址 TCON:TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0 前面四位用于定时/计数,后面四位用于控制外部中断

两个模式:定时和计数模式

中断:

主程序因为随机事件发生,暂停现行程序的运行,转去执行另一程序,处理完毕之后又自动返回原来程序继续运行。

中断源和中断允许:

中断源 中断标志位 中断允许 优先控制
外部输入中断源0 IE0 中断允许EX0 PX0
外部输入中断源1 IE1 中断允许EX1 PX1
片内定时器0 TF0 中断允许ET0 PT0
片内定时器1 TF1 中断允许ET1 PT1
片内串行口发送或者接受中断源 TI,RI 中断允许ES PS

中断源1-4的中断标志位均可通过TCON查看
TF1 |TR1| TF0 |TR0 |IE1 |IT1| IE0| IT0
串口的中断标志位为TI,RI,通过SCON查看(SCON.0,SCON.1,该寄存器可以位寻址)
总的中断允许位为EA
中断允许位通过IE寄存器查看(该寄存器也可以位寻址)
中断优先控制由寄存器IP进行查看(可以位寻址)
中断优先级可以设定高优先级和低优先级,优先控制为1则是高优先级,优先控制为0则是低优先级
自然优先级:INT0->T0->INT1->T1->串口(重要)

中断处理过程

中断响应,中断处理和中断返回(还有中断请求撤除)

中断响应

满足中断响应条件之后即可处理。
过程:保护断点地址(当前PC地址)->把程序转向中断服务程序的入口地址(矢量地址),即中断服务子程序的入口地址->使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址去
这些过程是由硬件自动完成的!

中断处理

从入口地址开始执行,直到返回指令RET1为止
中断服务子程序,一般包括两个部分内容,一是保护和恢复现场,二是处理中断源的请求
关中断->保护现场->开中断->中断服务->关中断->恢复现场->开中断->中断返回->断点地址由堆栈弹入PC(RETI,硬件自动完成)
保护现场和恢复现场的过程不允许中断,以免现场遭到破坏。
保护现场和恢复现场之后的开中断是为了允许有更高级中断打断此中断服务程序。

中断请求的撤除

定时器和外部中断均用硬件自动清除中断标志位,外部中断的低电平在响应中断之后会立即撤除。
但是串行口中断没有硬件撤除,需要用软件来清除相对应的标志。

标签:定时器,中断,现场,单片机,地址,寄存器,允许
From: https://www.cnblogs.com/ustc2122zy/p/17618103.html

相关文章

  • STC15 外部中断编程笔记
    以STC15W4K58S4为例,可以将片上的外部中断资源分为“高级”和“低级”两类,EXINT0和EXINT1属于高级的,EXINT2~EXINT4属于低级的。“高级”的外部中断可以配置中断优先级,选择中断源;低级的则不行。EXINT0和EXINT1的配置这两个外部中断的配置寄存器都可位寻址,因此可以直......
  • prometheus的sdk client_golang 使用 定时器
    之前线上监控的agent都是直接  time.Sleep(time.Duration(collectInterval)*time.Second),多少有些许的low,每次开始采集数据的时间都是从程序开始执行就开始采集,很显然这种偷懒的方式是不合理的。1、简单复制粘贴一下funcAbNormalLoglistener(collectIntervalint){......
  • 单片机 | 51单片机原理
    文章目录一、引脚分布介绍1.分类2.电源引脚3.时钟引脚(2根)4.控制引脚(4根)5.端口引脚(32根)二、存储器结构及空间分布介绍1.存储器的划分方法2.程序存储器(ROM)3.数据存储器(RAM)三、复位、时钟与时序1.复位与复位电路2.时钟电路3.单片机时序四、并行I/......
  • 清除定时器clearLnterval
      ......
  • 定时器setInterval
      ......
  • Swift Timer 定时器
    importSwiftUIstructTimerView:View{@Statevarcount1:Int=0@Statevarcount2:Int=0@Statevarcount3:Int=0//timer1创建@Statevartimer1:Timer?//timer2创建lettimer2=Timer.publish(every:1.0,on:.main......
  • 定时器之setTimeout
      ......
  • Mitsubishi 三菱FXPLC入门之定时器和计数器
    “小时候总想着,自己要是可以控制时间就好了,给时间按下暂停键,然后把班里的那个死对头打一顿哈哈哈哈哈嗝,做梦呢。虽然我不可以控制时间,但是我可以通过定时器控制PLC的程序执行呀,这也是从另一方面实现我控制时间的的梦想了,激动!PLC中,定时器和计数器是两个非常主要的编程元件......
  • Mitsubishi 三菱FXPLC学习之中断服务
    “前面我先是分享了PLC程序流程转移中的条件跳转CJ,然后紧接着进攻了子程序调用CALL和循环FOR,这次,我要向“终极BOSS”中断服务发出挑战了!要学习中断服务,我们就得知道什么是中断。那就让我们看看什么是中断吧!一、中断是什么所谓中断,是指PLC按顺序执行程序扫描的过程中,当有需......
  • 【JavaScript16】定时器
    在JS中,有两种设置定时器的方案1、setTimeout//语法规则t=setTimeout(函数,时间)//经过xxx时间后,执行xxx函数//m是第几个定时器varm=setTimeout(function(){console.log("我叫xwl");},5000);//单位是毫秒console.log("正常执行的....");......