单片机中断技术:实现分时操作、实时处理与高可靠性的关键

外部中断0→定时器0→外部中断1→定时器1→串口串工作方式寄存器TMOD口→外部中断0→定时器0→外部中断1→定时器1定时器/计数器中断定时器/计数器和单片机的CPU是相互独立的。在写单片机的定时程序时,需要对定时器中及中断寄存器做初始化设置,通常定时器初始化过程如下:

设置中断是为了使微控制器能够实时处理随机的内部或外部事件。

2. 中断效果

中断技术不仅解决了主机与I/O设备之间快速传输数据的问题,还具有以下优点:

1、分时操作:CPU可以分时地为多个I/O设备服务,从而提高了计算机的利用率。

2、实时操作:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强。

3、可靠性高:CPU具有处理设备故障、断电等突发事件的能力,使系统更加可靠。

3.中断源及相关寄存器

中断优先级

定时器/计数器控制寄存器 TCON

TF0、TF1:定时器中断标志(定时器0溢出标志、定时器1溢出标志)

TR0,TR1:开启相应定时器(定时器0运行控制位,=1时启动定时器0,定时器1运行控制位,=1时启动定时器1)

软件清零关闭定时器 0/1。当 GATE=1 且 INIT 为高时,TR1 置 1 启动定时器 1;当 GATE=0 时,TR1 置 1 启动定时器 0/1。

IT0,IT1:外部中断的触发方式,=0时为低电平触发,=1时为负跳变触发。

IE0、IE1:外部中断标志

中断使能寄存器IE

EA:通用中断使能。EA=0;CPU屏蔽所有中断请求 EA=1;使能所有中断。

ES:串口中断使能位。ES=0;禁止串口中断。ES=1;使能串口中断。

ET0,ET1:定时器/计数器 0 和定时器/计数器 1 中断使能位。=0 禁用相应的定时器中断。=1 启用相应的定时器中断。

EX0,EX1:外部中断0和外部中断1中断使能位。=0表示禁止相应的外部中断。=1表示使能相应的外部中断。

——: 无效位

中断优先级寄存器IP

PS:串口中断优先级PS = 1;(高)。PS = 0;(低)。

PT0:定时器 0 中断优先级 PT0 = 1;(高) PT0 = 0;(低)。

PT1:定时器 1 中断优先级 PT1 = 1;(高) PT1 = 0;(低)。

PX0:外部中断0中断优先级PX0=1;(高)PX0=0;(低)。

PX1:外部中断1中断优先级PX1=1;(高)PX1=0;(低)。

——: 无效位

IP寄存器未设置,上电复位后为00H,默认为低优先级。

默认优先级为(从高到低):

外部中断0 → 定时器0 → 外部中断1 → 定时器1 → 串口

如果我们将 IP 寄存器设置为:(IP = 0X10)

聚苯乙烯=1;

PT1=0;

PX1=0;

PT0=0;

PX0=0;

如下表所示:

优先级从高到低依次为:

串行工作模式寄存器TMOD端口→外部中断0→定时器0→外部中断1→定时器1

工作模式寄存器TMOD

GATE:门控制

=0: 仅使用操作控制位TRx来控制定时器/计数器的启动。

=1: 由TRx和外部中断脉冲计数。(用于统计外部中断负跳变的次数)

C/T:计数器模式和定时器模式选择

=0: 选择定时器模式

=1: 选择计数器模式

M1、M0:选择定时器/计数器的工作模式

方法 0

方式0为13位计数,由TL0的低5位(高3位未使用)和TH0的8位组成,当TL0的低5位溢出时,会进位到TH0,当TH0溢出时,TCON中的TF0标志会被置位,并向CPU发出中断请求。

方法 1

方式1的计数位数为16位,以TL0为低8位,TH0为高8位,组成16位加1的计数器。

方法 2

模式2是8位计数模式,自动重新加载初始值。

方法 3

方式3只适用于定时器/计数器T0,定时器T1处于方式3时,相当于TR1=0,计数停止。

定时器初始值寄存器THx和TLx

首先我们来了解一下CPU时序:

振荡周期:为单片机提供时序信号的振荡源的周期(晶振周期或者外部振荡周期)

状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期也叫S周期或时钟周期。

机器周期:1个机器周期包含6个状态周期和12个振荡周期。

指令周期:完成一条指令所需的总时间,以机器周期为单位。

例如:当外部晶振为12MHz时,51单片机相关周期具体值为:

振荡周期=1/12us;

状态周期=1/6us;

机器周期=1us;

指令周期=1~4us;

计数器初值的计算:

机器周期是 CPU 完成基本操作所需的时间。

机器周期 = 1/MCU时钟频率

51单片机的内部时钟频率是外部时钟频率的12倍,也就是当把外部晶振的频率输入到单片机时

当频率除以12时。

例如,如果你使用的是12MHZ的晶振,当你使用12MHZ的外部晶振时,

机器周期=1/1M=1us。(选择定时器工作模式1 16位)

我们的2的16次方等于65536,也就是说最大值是65536(溢出)

如果时间是1ms

初值为:1ms/1us=1000。也就是说如果要计数1000个数,初值=65535-1000+1=64536,65536就会溢出。所以初值为FC18H(十进制为64536)

如果时间是50ms

50毫秒/1微秒=50000;

初始值=65535-50000+1=15536​​;

计时50ms,初值为15536​​,即3CB0(十六进制)

定时器/计数器中断

你需要知道什么

51单片机有两组定时器/计数器,因为既能计时,又能计数,所以叫定时器/计数器。

定时器/计数器与微控制器的CPU相互独立,定时器/计数器自动工作,不需要CPU参与。

51单片机中的定时器/计数器根据机器内部时钟或者外部脉冲信号,将寄存器中的数据加1。

使用定时器/计数器可以提高单片机的效率,一些简单的重复加法运算可以由定时器/计数器来处理,CPU可以处理更复杂的任务,同时可以实现精确的定时。

工作准则

它本质上是一个加 1 计数器。当输入脉冲时,计数器自动加 1。

当计数器溢出时,它返回到0。计数器的溢出将相应的中断标志设置为1。

向CPU发出中断请求,若定时器/计数器工作在计时模式,则表示计时时间到;若工作在计数模式,则表示计数值已满。

可以看出,加1计数器的计数值是由计数器溢出时的值减去计数初始值得到的。

定时器结构

定时器/计数器的本质是一个16位的加法计数器,由THx、TLx两个寄存器组成,分别为高8位和低8位。TMOD为定时器/计数器的工作模式寄存器,决定工作模式和功能;TCON为控制寄存器,控制T0、T1的启动与停止以及设置溢出标志。

操作步骤(T0 T1)

1.选择工作模式。设置M1,M0(TMOD寄存器)

2.选择控制方式。设置GATE(TMOD寄存器)

3. 选择定时器或计数器模式。设置C/T(TMOD寄存器)

4. 为定时器/计数器分配初值。设置THx和TLx(定时器初值寄存器)

5. 使能通用中断。设置EA(IE寄存器)

6. 开启对应的定时器中断,设置ET0或者ET1(IE寄存器)

7. 启动定时器。设置TR1或TR0(TCON寄存器)

如何配置计时器

这里我们选择定时器0并选择模式1(16位)作为定时示例。

1、选择工作模式1(16位)M1=0;M0=1;

2、控制方式:仅使用操作控制位TRx来控制定时器/计数器的启动。GATE=0;

3、选择定时器模式C/T=0;

TMOD=0x01;

4.赋初值这里选择定时为50ms,我板子的晶振是11.0592,不知道怎么算,建议大家用mcuelf这个软件算一下,得到如下结果。

5.打开主中断(主开关)

6.打开T0中断开关

7.启动定时器0

程序示例

这是使用计时器在 LCD1602 上进行的简单时钟显示。

LCD1602 昨天发了一个关于LCD1602的使用以及显示hello word的视频,这里就来详细的介绍一下LCD1602的具体操作。

引脚定义

lcd1602.h

lcd1602.c

主程序

最终项目展示

4、定时器0工作模式1:16位定时器

在编写单片机的定时程序时,需要初始化定时器和中断寄存器。通常定时器初始化过程如下:

1、给TMOD赋值,确定T0、T1的工作模式。

2、计算初值写入TH0、TL0(定时器0)或TH1、TL1(定时器1)。

您正在使用 12MHZ 晶体振荡器。当您使用 12MHZ 外部晶体振荡器时,

机器周期Tcy=12*(1/12M)=1us。

计数数N=t/Tcy

(选择定时器工作模式1 16位)

2的16次方是65536,也就是说最大值是65536(溢出),溢出需要65536us。

如果计时50ms=50000,也就是需要统计50000个数,那么初始值=65536-50000=15536​​,超过65536就会溢出。

将15536​​除以256的模数:64536/256=60装入TH0,将15536​​除以256的余数:15536​​%256=176装入TL0。

如何编写中断服务程序:

中断函数格式如下:

void 函数名() 中断 中断号 使用工作组 /*中断函数不能返回任何值,所以开头使用void,后面跟着函数名,名字可以是任意的,中断函数不带任何参数,所以函数名后面的括号为空;中断号是单片机中几个中断源的序号*/

中断服务程序内容

例如:

void T1_time() 中断1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

3、中断模式下,中断使能寄存器IE被赋值,使能中断。

中断使能寄存器IE

EA:通用中断使能。EA=0;CPU屏蔽所有中断请求 EA=1;使能所有中断。

ES:串口中断使能位。ES=0;禁止串口中断。ES=1;使能串口中断。

ET0,ET1:定时器/计数器 0 和定时器/计数器 1 中断使能位。=0 禁用相应的定时器中断。=1 启用相应的定时器中断。

EX0,EX1:外部中断0和外部中断1中断使能位。=0表示禁止相应的外部中断。=1表示使能相应的外部中断。

——: 无效位

(EA=1;启用所有中断。

ET0=1则使能相应的定时器中断。)

4.设置TR0,启动定时器/计数器计时或计数。

定时器/计数器控制寄存器 TCON

TF0、TF1:定时器中断标志(定时器0溢出标志、定时器1溢出标志)

TR0,TR1:开启相应定时器(定时器0运行控制位,=1时启动定时器0,定时器1运行控制位,=1时启动定时器1)

软件清零关闭定时器 0/1。当 GATE=1 且 INIT 为高时,TR1 置 1 启动定时器 1;当 GATE=0 时,TR1 置 1 启动定时器 0/1。

IT0,IT1:外部中断的触发方式,=0时为低电平触发,=1时为负跳变触发。

IE0、IE1:外部中断标志

(TRO=1启动定时器0)

单片机

C 语言:通用编程语言,应用广泛且保持良好跨平台特性

2024-6-10 18:07:46

单片机

二阶高通滤波器的设计与应用:综合滤波功能及在音频中的应用

2024-6-10 19:15:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索