单片机-中断

52单片机

  • 52单片机共有6个中断源:
    INT0-外部中断0,P3.2端口,低电平或者下降沿引起。
    INT1-外部中断1,P3.3端口,低电平或者下降沿引起。
    T0-定时器0/计数器0中断,T0计数器计满回零引起。
    T1-定时器1/计数器1中断,T1计数器计满回零引起。
    T2-定时器2/计数器2中断,T2计数器计满回零引起。
    TI/RI-串行口中断,串行端口完成一帧字符发送/接收引起。

中断允许寄存器IE

  • 中断允许寄存器IE用于设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址分别为A8H-AFH,可进行位寻址,即可以对寄存器的每一位进行单独操作。单片机复位时IE全部被清0。
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 EA - ET2 ES ET1 EX1 ET0 EX0
位地址 AFH - ADH ACH ABH AAH A9H A8H

EA:全局中断允许位

  • EA=1:打开全局中断控制。
  • EA=0:关闭全部中断。

ET2:定时器/计数器2中断允许位

  • ET2=1:打开T2中断。
  • ET2=0:关闭T2中断。

ES:串行口中断允许位

  • ES=1:打开串行口中断。
  • ES=0:关闭串行口中断。

ET1:定时器/计数器1中断允许位

  • ET1=1:打开T1中断。
  • ET1=0:关闭T1中断。

EX1:外部中断1中断允许位

  • EX1=1:打开外部中断1中断。
  • EX1=0:关闭外部中断1中断。

ET0:定时器/计数器0中断允许位

  • ET1=1:打开T0中断。
  • ET1=0:关闭T0中断。

EX0:外部中断0中断允许位

  • EX0=1:打开外部中断0中断。
  • EX0=0:关闭外部中断0中断。

中断优先级寄存器IP

中断优先级寄存器IP在特殊功能寄存器中,字节地址为B8H,位地址为B8H-BFH,IP用来设定各个中断源属于两级中断中的哪一级,该寄存器可以进行位寻址。单片机复位时IP全部被清0.

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 - - - PS PT1 PX PT0 PX0
位地址 - - - BCH BBH BAH B9H B8H

PS:串行口中断优先级控制位

  • PS=1:串行口中断定义为高优先级中断。
  • PS=0:串行口中断定义为低优先级中断。

PT1:定时器/计数器1中断优先级控制位

  • PT1=1:定时器/计数器1中断定义为高优先级中断。
  • PT1=0:定时器/计数器1中断定义为低优先级中断。

PX1:外部中断1中断优先级控制位

  • PX1=1:外部中断1定义为高优先级中断。
  • PX1=0:外部中断1定义为低优先级中断。

PT0:定时器/计数器0中断优先级控制位

  • PT0=1:定时器/计数器0中断定义为高优先级中断。
  • PT0=0:定时器/计数器0中断定义为低优先级中断。

PX0:外部中断1中断优先级控制位

  • PX0=1:外部中断0定义为高优先级中断。
  • PX0=0:外部中断0定义为低优先级中断。

定时器/计数器工作方式寄存器TMOD

字节地址为89H,不能位寻址,单片机复位时全被清0。

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0

TMOD的高四位用于设定定时器1,低四位用于设定定时器0。
GATE:门控制位

  • GATE=0:定时器/计数器启动与停止仅受TCON寄存器中TRX来控制
  • GATE=1:定时器/计数器启动与停止仅受TCON寄存器中TRX和外部中断INTX上的电平状态控制。

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

  • C/T=1:计数器模式。
  • C/T=0:定时器模式。

M1M0:工作方式选择

M1 M0 -----
0 0 方式0:13位定时器/计数器
0 1 方式1:16位定时器/计数器
1 0 方式2:8位初值自动重装的定时器/计数器
1 1 方式3:仅用于T0,分成两个8位计数器,T1停止计数

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

字节地址为88H,位地址为88H-8FH,可进行位寻址,单片机复位全部清0。

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H

TF1:定时器1溢出标志位

  • TF=1:定时器计数溢出后,由硬件使TF1置1,并且申请中断,进入中断服务程序后,由硬件自动清0。

TR1:定时器1运行控制位

  • 由软件清0关闭定时器1,当GATE=1时,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1,启动定时器1。

IE1:外部中断1请求标志

  • 置1表示外部中断1向CPU申请中断。
    IT1:外部中断1触发方式选择位
  • IT1=0:电平触发模式。
  • IT1=1:跳变沿触发。

#定时器0-工作方式1

  • 逻辑结构图:

  • 定时器初始化过程:
    1、对TMOD赋值:(定时器/计数器工作方式寄存器)
    2、计算初值,给THX TLX赋值
    3、对中断允许寄存器IE进行赋值,开放中断
    4、使定时器/计数器控制寄存器TCON中的TRX置位,启动定时器/计数器
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit led1=P1^0;

uchar num;

void main()
{
	TMOD=0x01;      //定时器0,工作方式1,0000 0001
	TH0=(65536-45872)/256;	//定时50ms=50000us,50000/1.09=45872
	TL0=(65536-45872)%256;
	EA=1;  //中断允许寄存器打开全局中断允许位
	ET0=1;  //中断允许寄存器打开T0中断允许位
	TR0=1;  //定时器/计数器控制寄存器TCON启动定时器T0
	while(1)		//程序停止在这里等待中断发生
	{
		if(num==20)
		{
			num=0;
			led1=~led1;
		}
	}
}

void T0_time() interrupt 1
{
	TH0=(65536-45872)/256;	//定时50ms=50000us,50000/1.09=45872
	TL0=(65536-45872)%256;
	num++;
}
赞赏