STC89C52中断调用以及定时器计数、中断、定时的调用


仅适用于STC89C52系列芯片。

 

 

中断:

通过配置IE中断允许寄存器以及TCON来使用中断  这个寄存器可以进行位寻址操作及直接EA = 1;

 

 

EA为中断总开关。

芯片有三个定时器中断入口:

ET1是定时器T1溢出中断允许位。

ET0是定时器T0溢出中断允许位。

ET2是定时器T2溢出中断允许位。

 

ES是串口中断允许位。

 

EX1是外部中断1允许位

EX0是外部中断0允许位

外部中断2 3同理

 

IE1是外部中断1请求源标志,当IE1 = 1时外部中断向单片机请求中断,当单片机相应中断,由硬件置0.

IE0、IE2、IE3同理。

 

配置外部中断时需要配置TCON以及XICON来配置外部中断触发的方式:

IT1和IT0控制外部中断1、0的触发方式是低电平还是下降沿。

IT2、IT3同理。

 

串口中断还需要配置SCON寄存器(可以位寻址)

 

 

 

 

 

定时器:

通过配置TCON寄存器来使用定时器

TR0是定时器T0的运行控制位

TR1是定时器T1的运行控制位

TF0是定时器0的溢出中断标志,当计数最高位超出65535时TF0被硬件置1需要手动清零

TF1是定时器1的溢出中断标志,当计数最高位超出65535时TF1被硬件置1需要手动清零

 

 

 

在配置完TCON后还需要配置TMOD来配置定时器的工作模式    TMOD不可以位寻址

 

 

当配置TMOD = 0x01时即为定时器工作模式1,16位定时模式

 

定时器计时示例:

void timer0Init()
{
    TR0 = 1;     //启动定时器0
    TMOD = 0X01; //定时器工作模式1,16位定时器计数模式
    TH0 = 0x4b;
    TL0 = 0xfd; //定时50ms
}

 

 

在使用定时器中断的时候同时需要配置定时器:

下面是定时器中断示例:

void timer0Init()  //timer0中断初始化
{
    EA = 1;      //打开总中断
    ET0 = 1;     //打开定时器0中断
    TR0 = 1;     //启动定时器0
    TMOD = 0X01; //定时器工作模式1,16位定时模式
    TH0 = 0xED;
    TL0 = 0xFF; //定时5ms
}

void timer0() interrupt 1  //中断服务函数
{
    TH0 = 0xED;
    TL0 = 0xFF; //定时5ms
    display(num); //数码管显示函数    
}

关于定时器的赋值:

 以定时50ms为例:

先转换位um

50000um

50000/1.085 = 46082

TH0 = (65535 - 46082)/ 256

TL0 = (65535 - 46082)% 256


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM