找回密码
 立即注册
查看: 12|回复: 1

i8051U--定时器周期性调度任务--打卡6

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-08-23 09:21:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 4 小时前 | 显示全部楼层 |阅读模式

i8051U--定时器周期性调度任务--打卡6

定时器周期性调度任务

定时器周期性调度任务:通过定时器中断触发任务切换,以实现多任务的并行处理。

定时器:能够对内部时钟信号或外部输入信号进行计数,数值达到设定要求时,向CPU发起中断请求,完成外部程序的运行。
定时方式由单片机晶振分频和定时模式及初值决定定时的时间。

中断系统

中断:单片机在执行main函数时,如果系统出现随机产生的突发事件,单片机会暂停main函数的程序转而去处理突发事件,处理完后再返回到刚才暂停的位置继续执行main函数中的程序。

中断系统组成:中断源、中断请求标志位、中断控制位和中断优先级控制位。

  1. 中断源

    1. 中断源是引起中断的原因和申请中断的来源。
    2. 中断源有外部中断、定时/计数器中断和串行口中断。
  2. 中断请求标志位

    1. 用于判断中断的来源。
    2. TCON是定时器/计数器控制寄存器
    3. SCON是串口中断控制寄存器
  3. 中断使能寄存器IE

    1. IE是单片机中断的使能控制寄存器。
    2. 中断使能开关分两级:第1级为总开关EA,用于所有中断的控制;第2级为分级开关,分别对单片机5个中断源进行控制。
  4. 中断优先级控制位IP

    1. 中断源默认的中断优先级别,从高到低分别为:外部中断0、定时器/计数器0、外部中断1、定时器/计数器
    2. 中断优先级可更改:1是高优先级中断,0是低优先级中断

中断服务函数

中断服务函数是指当中断源申请中断后,单片机中断main函数的程序转而去执行的函数。中断服务函数优于main函数。

void 函数名称(void) interrupt 中断编号 using 工作寄存器组编号
{
  中断服务程序
}

中断编号:0--外部中断0,1--定时/计数器中断0,2--外部中断1,3--定时/计数器1,4--串口中断

中断服务函数注意事项:

  1. 中断服务函数优于main函数,不能直接被main函数调用,否则将导致编译失败。
  2. 中断服务函数没有返回值,应将中断服务函数定义为void类型。
  3. 中断服务函数参数函数,即中断服务函数不能有传参列表,否则将导致编译错误。
  4. 中断服务函数只识别中断编号,不识别中断服务函数名称。因此函数名称只要符合命名规则即可,但中断编号必须一一对应。
  5. 若中断服务函数中调用了其他函数,则被调用函数使用的寄存器编号必须与中断函数相同,也就是using 后面的数字必须一样。
  6. 中断服务函数使用浮点运算时,要保存浮点寄存器状态。
回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 4 小时前 | 显示全部楼层
i8051U定时器周期性调度任务是实现多任务并行处理的重要机制,通过定时器中断触发任务切换,可有效提升系统响应效率与任务管理能力。以下是对该机制的详细说明。

在i8051U单片机中,定时器用于对内部时钟信号或外部输入信号进行计数,当计数值达到设定值时,会向CPU发起中断请求,从而触发任务切换。定时器的工作方式由晶振分频、定时模式及初值共同决定,不同的配置可实现不同时间间隔的中断触发,适用于多种应用场景。

中断系统是单片机处理突发事件的核心机制。当中断源产生中断请求时,单片机会暂停当前执行的main函数,转而执行对应的中断服务程序,处理完成后返回原处继续执行。这一过程确保了系统能够及时响应外部事件,提高了整体运行效率。

中断源包括外部中断、定时/计数器中断和串行口中断。其中,定时器中断常用于任务调度,因其具备高精度和可编程性,适合实现周期性任务切换。

中断请求标志位用于标识中断来源,例如TCON寄存器用于控制定时器/计数器的中断状态,SCON寄存器则用于串行口的中断控制。这些寄存器的设置直接影响中断的触发与处理。

中断使能寄存器IE用于控制中断的开启与关闭。其分为两级:第一级为总开关EA,用于全局控制所有中断;第二级为各中断源的分级开关,分别控制外部中断、定时器中断等。

中断优先级控制位IP决定了中断的响应顺序。默认优先级从高到低依次为外部中断0、定时器/计数器0、外部中断1、定时器/计数器1、串行口。用户可通过设置IP寄存器调整中断优先级,以适应不同应用需求。

中断服务函数是中断处理的核心代码段,其格式如下:
  1. void 函数名称(void) interrupt 中断编号 using 工作寄存器组编号
  2. {
  3.   // 中断服务程序
  4. }
复制代码

其中,中断编号对应不同的中断源,如0表示外部中断0,1表示定时器/计数器0中断,2表示外部中断1,3表示定时器/计数器1中断,4表示串行口中断。

通过合理配置定时器、中断源及中断服务函数,可以实现多任务的周期性调度,提高系统的实时性和稳定性。在实际应用中,应根据具体需求选择合适的定时器模式、初值及中断优先级,以优化任务调度效果。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-23 20:17 , Processed in 0.104409 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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