C51---定时器中断相关寄存器

1.中断系统,是为使CPU具有对外界紧急事件的实时处理能力而设置的。

当中央处理器CPU正在处理某件事情的时候,要求CPU暂停当前任务或工作,转而去处理这这个紧急事件。处理完以后,再回到原来的被中断的地方,继续原来的工作。这个过程叫做---中断

2.代码例子:

#include "reg52.h"

sbit led1 = P3^6;
sbit led2 = P3^7;
int  cnt = 0;//cnt要定为全局变量

void Time0Init()
{
//1.配置定时器0工作模式位16位计时
    TMOD = 0x01;
//2.给初值,定一个10ms出来
    TL0 =  0x00;
    TH0 =  0xDC;
//3.开始计时
    TR0 = 1;
    TF0 = 0;
//4.打开定时器中断
    ET0 = 1; 
//5.打开总中断EA
    EA = 1;
}

void Delay300ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    //_nop_();  //这个地方报错,是因为缺少一个头文件:#include<intrins.h>  添加即可,不添加可以把_nop_();注释掉,用到再添加
    i = 3;
    j = 26;
    k = 223;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}


void main()
{
    int cnt = 0;
       led2 = 1;
    Time0Init();
        while(1){
            //假设场景:女朋友在看电视,快递打电话说快递到,中断看电视,取快递
            led1 = 0;
            Delay300ms();
            led1 = 1;
            Delay300ms();            
    }
    
}

//封装一个中断函数
void Time0Handler() interrupt 1 
{
        cnt++;//统计爆表次数
        //重新给初值
        TL0 =  0x00;
        TH0 =  0xDC;
        if(cnt == 100){//cnt爆表了100次,经过了1s
            cnt = 0;//当经过了1s,重新让cnt从0开始,计算下一次的1s.
            led2 = !led2;//每经过1s,翻转led的状态 
            
    }

}


 

3.效果图:

 4._nop_();   //这个地方报错,是因为缺少一个头文件:#include<intrins.h>  添加即可,不添加可以把_nop_();注释掉,用到再添加也可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值