中断引入

我们用定时中断来改写第一个程序。

#include<reg52.h>

 
 

unsigned int num1;

 
 

sbit Led1=P0^0;

 
 

void main()

{

    TMOD=0x01; //定时器工作模式1

    TH0=(65536-1000)/256; //定时器初始值晶振12MHz

    TL0=(65536-1000)%256;

    EA=1; //开总中断

    ET0=1; //定时中断开

TR0=1; //定时器开

 
 

    while(1)

    {

        if(num1==1000)

        {

            num1=0;

            Led1=~Led1;

        }

    }

    
 

}

 
 

void T0_time() interrupt 1

{

    TH0=(65536-1000)/256; //定时器初始值,决定波特率,晶振12MHz

    TL0=(65536-1000)%256;

 
 

    num1++;

}

我们用上述的方式实现三个灯的闪烁。

#include<reg52.h>

 
 

unsigned int num1;

unsigned int num2;

unsigned int num3;

 
 

sbit Led1=P0^0;

sbit Led2=P0^1;

sbit Led3=P0^2;

 
 

void main()

{

    TMOD=0x01; //定时器工作模式1

    TH0=(65536-1000)/256; //定时器初始值晶振12MHz

    TL0=(65536-1000)%256;    //定时1ms

    EA=1; //开总中断

    ET0=1; //定时中断开

    TR0=1; //定时器开

 
 

    while(1)

    {

        if(num1==1000)

        {

            num1=0;

            Led1=~Led1;

        }

        if(num2==5000)

        {

            num2=0;

            Led2=~Led2;

        }

        if(num3==10000)

        {

            num3=0;

            Led3=~Led3;

        }

    }

    
 

}

 
 

void T0_time() interrupt 1

{

    TH0=(65536-1000)/256; //定时器初始值,决定波特率,晶振12MHz

    TL0=(65536-1000)%256;    //定时1ms

 
 

    num1++;

    num2++;

    num3++;

}

上面的方式能应对大部分情况了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注