51单片机中断

普中51 单片机中断

51 单片机一定有的5 个中断,序号为各自的中断号,按优先级从高到低排序依次为:

0----INT0:外部中断0;1---T0:定时/计数器0;2---INT1:外部中断1;3---T1:定时/计数器1;4---RXD 和TXD:串行口中断

IE寄存器:控制中断,IE寄存器有8位,IE={EX0,ET0,EX1,ET1,ES,  ,  ,EA},其中每一位分别控制:

EX0---INT0(外部中断0);ET0---T0(定时/计数器T0);EX1---INT1(外部中断1);ET1---T1(定时/计数器T1);

ES---RXD\TXD(串行口中断);空;空;EA---总开关(当EA置1时,其他的才有效)

TCON寄存器:控制中断方式以及中断标志位,TCON={IT0,IE0,IT1,IE1,TR0,TF0,TR1,TF1},其中每一位分别表示:

IT0---IT0=0 时为电平触发,IT0=1 时为下降沿触发(一般选用1);eg:IT1同理

IE0---INT0(外部中断0)中断标志;eg:IE1同理

TR0---定时/计数器T0控制;eg:TR0同理

TF0----定时/计数器T0溢出中断标志;eg:TF1同理

INT0和INT1外部中断:

工作原理:出现中断信号时,中断标志置1,CPU 执行中断函数。

外部中断配置:INT0对应P3.2(INT1为P3.3),IT0选择触发方式(一般置1,选择下降沿触发),EX0置1允许CPU识别INT0中断,EA置1中断总开关打开。

当P3.2 出现中断信号时,中断标志IE0置1,CPU 执行中断函数:void 自定义函数名() interrupt 0(eg:interrupt 是关键字,后面的“0”是中断号)。

void Int0Init()
{
    //初始化INT0
    IT0=1;//跳变沿出发方式(下降沿)
    EX0=1;//打开INT0 的中断允许。
    EA=1;//打开总中断
}

void Int0() interrupt 0 //INT外部中断0的中断函数
{
    //中断程序
}

void main()
{
    Int0Init(); // INT外部中断0初始化函数
    while(1);
}

定时/计数器中断:

工作原理:首先设置定时/计数器初始值,定时/计数器启动后每来一个脉冲,计数器就自动加1,当加到计数器为全1 时再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU 发出中断请求。

TMOD寄存器:设置定时/计数器的工作方式,TMOD={M0,M1,C/T,GATE,M0,M1,C/T,GATE},低四位用于T0,高
四位用于T1:

GATE---控制定时器的启动是否受外部中断源信号的影响。GATE=0,TR0/TR1 =1时,启动定时/计数器工作;
             GATA=1,TR0/TR1 =1时,需外部中断引脚INT0/1 也为高电平才能启动定时/计数器工作。

C/T---0为定时模式;1为计数模式。

M1/M0---工作方式设置位。定时/计数器有四种工作方式:                                                                                                                               00--方式0--13位定时/计数器,TL0 的低5 位(高3 位未用)和TH0 的8 位组成。                                                                             01--方式1--16位定时/计数器,TL0 的8 位和TH0 的8 位组成。                                                                                                         10--方式2--8位自动重装定时/计数器,TL0 的8 位满了后自动归零溢出。                                                                                         11--方式3--只适用于定时/计数器T0,将T0 分成为两个独立的8 位计数器TL0 和TH0。                                                                   eg:这几种工作方式中应用较多的是方式1 和方式2。定时器中通常使用定时器方式1,串口通信中通常使用方式2。

定时/计数器中断配置:

1.对TMOD 赋值,确定T0 和T1 的工作方式。例如:TMOD|=0X01;//选择为定时器0 模式,工作方式1,仅用TR0 打开启动。

2.设置初值,写入TH0、TL0 或TH1、TL1。例如:定时1ms,机器周期=12/12M=1us,1ms/1us=1000,初值=65535-1000+1=64536=FC18H,所以初值即为THx=0XFC,TLx=0X18。

3.对IE寄存器赋值,开放定时器。例如:ET0=1,EA=1.

4.使TR0 或TR1 置位,启动定时/计数器定时或计数。

void Timer0Init()//初始化设置定时器
{
    TMOD|=0X01;//选择为定时器0 模式,工作方式1,仅用TR0 打开启动。
    TH0=0XFC; //给定时器赋初值,定时1ms
    TL0=0X18;
    ET0=1;//打开定时器0 中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值