51单片机计时器中断

发布者:devilcore最新更新时间:2018-07-16 来源: eefocus关键字:51单片机  计时器  中断 手机看文章 扫描二维码
随时随地手机看文章

    单片机中,中断算是一个比较重要的部分,在51单片机中有八种中断方式 ,其中常用的的有五种,分别是外部中断0,计时器中断0,外部中断1,计时器中断1,和串口中断。今天主要介绍的是计时器中断。

    51单片机给我们提供了2个计时器中断,分别是计时器0和计时器1,他们对应的优先级分别是1和3,开启计时器并允许其中断后,计时器会从给定的初始值开始,每个指令周期加1,直到加到65535,再加一时计时器溢出,计时器此时会进入中断,并执行中断服务函数。

    在编程过程中发现有许多人搞不清中断服务函数与一般函数的区别,他们总是问出诸如中断服务函数在程序中哪一句之前或哪一句之后执行的问题。其实中断服务函数虽然也是个函数,但是它与一般函数还是有一定的区别的。一般函数想使用时,必须要在主函数或其他函数中调用。而中断服务函数,只要在主函数中初始化计时器后,当计时器进入中断时会中止单片机进行的所有操作,开始执行中断服务函数,在执行完中断服务函数后再回到执行中断服务函数前执行的地方继续执行。其实中断服务函数也是被调用了,但它不是被程序中的某一句话调用了,而是被单片机调用了。

    单片机单片机存储程序并不是从0地址开始保存,而是在中端向量表后保存,中断向量表中保存的是中断的优先级和中断服务函数的地址。程序执行后一旦计时器进入中断状态,单片机会回到中断向量表查询中断的优先级和中断服务函数的地址,然后跳转到中断服务函数所在地址开始执行,执行完成后回到中断向量表,然后回到中断前的地方执行。

    单片机的初始化有5步:

    1.打开总中断。

    2.选择工作方式。

    3.计时器初始化。

    4.打开计时器中断允许。

    5.开始计时。

 

   下面以定时器0为例就按照上面五个步骤写一个1ms执行一次中断函数的初始化函数。

    void tiemr0_init()

   {

          EA = 1;        //打开总中断

          TMOD |= 0x01;   //选择工作方式1      *注1

          TH0 = (65536 - 1000) / 256;     //定时器高八位初始化

          TL0 = (65536 - 1000) %256;    // 定时器低八位初始化

          ET0 = 1;  //打开定时器0中断允许

          TR0 = 1; //定时器0开始计时

    }

注1:TMOD寄存器有八位,其中高八位用于选择定时器1的工作方式,低八位用于选择定时器0 的工作方式,定时器1有三种工作方式,定时器1有四种工作方式。

一般定时器中断时使用方式一,也就是用定时器0(T0)时 TMOD |= 0x01,用定时器1(T1)时 TMOD |= 0x10,方式2一般用于串口中断,其余两种涉及不多。

中断服务函数只需要在函数名后加interrupt X ,X就是中断对应的优先级,如定时器0中断对应的优先级是1,那他的中断服务函数名后面就加interrupt 1,下面就以定时器0为例编写一个使count一毫秒加一的中断服务函数(晶振为12M)

unsigned char count = 0;

void timer0_isr() interrupt 1

{   

      TH0 = (65536 - 1000) / 256;

      TL0 = (65536 - 1000) % 256;   

      count++;

}


关键字:51单片机  计时器  中断 引用地址:51单片机计时器中断

上一篇:51单片机的中断控制
下一篇:51单片机的定时器与中断

推荐阅读最新更新时间:2024-03-16 16:08

51单片机 LCD12864
有了LCD12864,人机交互就友好的多了。 原理图: 上代码: //程序可能,驱动12864液晶显示文字 //本程序有问题,见实际效果,1数码管在接入串口线乱码;2无法多页显示 #include reg52.h #define uint unsigned int #define uchar unsigned char //端口声明 sbit duanxuan=P2^6; //数码管段选端 sbit weixuan=P2^7; //数码管位选端 sbit lcd12864_R
[单片机]
51单片机初学实践:用DS1302模块和1.44寸TFT显示屏实现电子钟
这周在上次实现的电子钟(51单片机初学实践:用DS1302模块和LCD1602显示屏实现电子钟)的基础上作了以下2点改进:1、将LCD1602屏幕更换为1.44寸 TFT显示屏 主要考虑是TFT显示屏可以使用不同字体和颜色,更方便定制显示界面 2、将STC89C52RC单片机更换为STC12C5A60S2单片机 首先是空间更大,STC12C5A60S2单片机(60K bytes flash ROM, 1280 bytes data RAM),STC89C52RC单片机(8K bytes flash ROM, 512 bytes data RAM) 其次STC12C5A60S2单片机有单独的SPI接口(P1.5 MOSI 和
[单片机]
<font color='red'>51单片机</font>初学实践:用DS1302模块和1.44寸TFT显示屏实现电子钟
51单片机资源扩展:从片内ROM跳转到片外ROM
源于一年前想自己动手给51写个OS,编译选Large模式,调试时整个流程都跑的好好的,可是烧写到片上后得不到预期的效果,后来查书才知道51单片机片上只有4KRom,如果没有扩展片外Rom,当访问4K以外的程序空间,程序指针又会回到最开始执行。参考手册扩展片外Rom后,能访问达64K的程序空间。网上能搜索到的扩展方式都是将EA引脚接地,让MCU上电后从外部ROM开始执行。但查看芯片手册,明明说EA为高时,程序从片内ROM执行,当执行到0x1000以上地址时(标准51单片机),会跳转到片外ROM执行。按网上的做法,为了扩展个片外ROM,片内的基本ROM都不用了,有点浪费了,于是开始找资料如何从片内跳转到片外执行。 射人先射马,发
[单片机]
<font color='red'>51单片机</font>资源扩展:从片内ROM跳转到片外ROM
51单片机(使用8x8点阵)
1.说在前面 今天初步学会了怎样使用面包板,感觉挺好玩的,学硬件的路渐行渐远吧 2.74hc595模块(8位移位寄存器和一个存储器,三态输出功能) 1.将三位串行输入变为并行输出 2.数据先移位到最高点在移位到次高点 3.基础参考资料:https://wenku.baidu.com/view/4d619b1c650e52ea55189826.html 3.实现点亮8x8点阵的代码 #include reg52.h typedef unsigned char u8; typedef unsigned int u16; //定义串行端口 sbit SRCLK=P3^6; sbit RCLK=P3^
[单片机]
<font color='red'>51单片机</font>(使用8x8点阵)
51单片机5110液晶显示屏实现时间温度串口发送
制作出来的实物图如下: 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 单片机源程序如下: /** P2.7置低电平时,开机接入串口,自动进入时间设置界面 每秒钟自动检测温度一次,并在LCD上显示 每分钟自动刷新日期、时间、温度,在LCD上显示,并在串口中输出(方便电脑读取) */ #include stdio.h //#include AT89X51.H #include reg51.h #include ds1302.h #include temp.h #include nokia_5110.h //*********************************** #def
[单片机]
<font color='red'>51单片机</font>5110液晶显示屏实现时间温度串口发送
51单片机STC15W408AS驱动无感无刷电机BLDC
看到很多人在用C8051做无感无刷电机的驱动,今天瑞生给大家来个国产51单片机STC15W408AS驱动无刷电机的驱动资料吧! 1.硬件设计 主控单片机使用STC15W408AS,单片机自带硬件PWM模块、ADC模块和比较器模块,所以非常适合做无刷电机的驱动,主频35M,无需外部晶振和复位电路,接好VCC和GND就可以工作。半桥电路使用PMOS+NMOS的组合,PMOS为IRF9540,NMOS为IRF540.驱动芯片用TC4427A。 先在洞洞板上做实验吧。原理图如下所示,懒得用软件画了,还是手画来得快些。下面的图中,只画出了A相的桥,B相和C相的桥与A相一样。 依照原理图,焊接好的板子如下图所示: 2.软件设计 2
[单片机]
<font color='red'>51单片机</font>STC15W408AS驱动无感无刷电机BLDC
STM32 HAL库 定时器中断
//定时时间t=(Prescaler +1)*(Period +1) /clock(定时器时钟评率) ` MX_TIM3_Init(); HAL_TIM_Base_Start_IT(&htim3); //(必须要,启动定时器中断) static void MX_TIM3_Init(void) { /* USER CODE BEGIN TIM3_Init 0 */ /* USER CODE END TIM3_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig =
[单片机]
51单片机系统抗干扰应用实例
近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。 1 MAX813L芯片及其工作原理 1.1 芯片特点   · 加电、掉电以及供电电压下降情况下的复位输出,复位脉冲宽度典型值为200 ms。 · 独立的看门狗输出,如果看门狗输入在1.6 s内未被触发,其输出将变为高电平。 · 1.25 V门限值检测器,用于电源故障报警、电池低电压检测或+5 V以外的电源
[单片机]
<font color='red'>51单片机</font>系统抗干扰应用实例
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved