51学习之定时器中断

发布者:liliukan最新更新时间:2016-01-18 来源: eefocus关键字:51学习  定时器中断 手机看文章 扫描二维码
随时随地手机看文章
定时器中断可用两种方式处理:查询和进入中断处理。
1.查询
void Init_T0 (void)   定时器初始化 
{           
    TMOD = 0x01;   
    TH0 = (65536-65000) /256; 
    TL0 = (65536-65000) %6;
    EA = 1;      
    ET0 = 1;
    TR0 = 1;      
}
 
void Main()    主函数
{    Init_T0 ();
     Speak1 =1;
     if(TF0==1)  查询中断标志
       {
         Speak1=~Speak1;
         //TH0 = (65536-65000) /256; 
         //TL0 = (65536-65000) %6;
         TF0=0;
        }
 }
2.进入中断处理
void Init_T0 (void)   定时器初始化 
{           
    TMOD = 0x01;   
    TH0 = (65536-65000) /256; 
    TL0 = (65536-65000) %6;
    EA = 1;      
    ET0 = 1;
    TR0 = 1;      
}
 
void Time0_Int() interrupt 1  中断处理函数
  Speak1=~Speak1; 
  //TH0 = (65536-65000) /256; 
  //TL0 = (65536-65000) %6;
}
 
void Main()  主函数
{   
   Init_T0 ();
   Speak1 =1;
   while(1);  等待中断
}
 
对于查询方式,一定要手动清楚中断标志。
上面2段程序,我屏蔽了,中断时重新装计数初值的语句,程序都可正常运行,所以我认为无论对于那种处理方式,重装初值都不必要。
初始化时,可定义输出口的初始状态。而在处理中断时,一定要用取反语句。手动置0或1,程序不能正常运行。
 
对于方式2,开始main中没写最后的while(1),程序不正常运行。
 
上述定时最大为65535,约65ms.如果计时大于此,可在中断中处理。
程序如下:
int a;
void Time0_Int() interrupt 1
{
    if(a++==20)
{ a=0;
 Speak1=~Speak1;
}
}
 
呵呵,在写上面这一小段时,开始没写a=0,灯一直亮,后来参考下,发现不清0.a一直变大,程序只能执行一次。

关键字:51学习  定时器中断 引用地址:51学习之定时器中断

上一篇:51学习之外部中断
下一篇:51学习之延时程序

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

STM32定时器中断设置方法
今天调试了STM32的定时器功能,STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的。就拿TIM2举例说明。在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的,让人看起来一头雾水,对于初学者很是不利(我也是初学者)。下面我将自己的定时器设置过程一一记录下来,以供大家参考,我们共同学习 首先定义定时器头文件,也就是定义寄存器以供操作: //************************************************************************* // // TIM2-Register // //***********************
[单片机]
stm32mp1 Cortex M4开发篇6:TIM定时器中断
写在前面: 本文章为《ARM Cortex-M4裸机开发篇》系列中的一篇,,全系列总计14篇。笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板),Cortex-M4裸机开发篇除了讲M4裸机开发外,还会讲解通过M4控制资源扩展板上的各种传感器执行器模块(包括空气温湿度传感器、LED灯、数码管、蜂鸣器、震动马达、按键中断、风扇等),本篇是M4控制资源扩展板中的一篇。 资源扩展板是FS-MP1A开发板的扩展模块,主要包含了10余种助主流传感器、执行器件、总线控制器件,非常方便项目扩展用。可拓展开发智慧家庭、智能医疗、智能安防、工业控制、图像识别、环境检测等方向的10个左右综合项目,华清远见开发板也将配套提
[单片机]
stm32mp1 Cortex M4开发篇6:TIM<font color='red'>定时器</font><font color='red'>中断</font>
ARM9 S3C2440—中断定时器的初始化配置
ARM9 S3C2440的寄存器特别多,这也是它和单片机不同处之一,对ARM的编程主要也是对寄存器的操作,可是寄存器多了以后,就很容易忘记对某个寄存器的设置,如果能够总结一下寄存器配置的步骤,使得其有章可循,那么应用的时候就可以对号入座了。如果长时间不去使用ARM的话,再次使用的时候重新翻看烦人的芯片用户手册,显得就浪费时间了,这样,趁着熟悉的时候记录下这些要点,以后稍加翻看就能唤起记忆,这也是自己写这些博客的缘由。 定时器初始化配置步骤主要有: 1、rTCFG0和rTCFG1的设置 首先要设置定时器的时钟频率, Timer input clock Frequency= PCLK / {prescaler va
[单片机]
51单片机学习:串口通信实验
实验名称:串口通信实验 接线说明: 实验现象:下载程序后,当串口助手发送数据给单片机,单片机原封不动转发给串口助手显示 注意事项:使用黄色跳线帽将CH340旁的P5端子的UTX和P30短接,URX和P31短接,出厂默认已短接好 ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; /***************************
[单片机]
51单片机定时器T0的使用1-中断
/********************************************** 方法1:延时法 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 波特率:9600 描述:T0用于定时,方式1,定时时间50ms,中断方式,定时时间到,TF1=1,利用模拟串口发送字符0x67 **********************************************/ #include reg52.h #define uchar unsigned char sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; #de
[单片机]
<font color='red'>51</font>单片机<font color='red'>定时器</font>T0的使用1-<font color='red'>中断</font>法
msp432快速入门第七节之定时器中断
(一)定时器基本功能解析 在用户手册中我们可以看到MSP432P401R的两种定时器,分别是Timer32定时器和TAx定时器,在此依次对其进行介绍,最后使用TA定时器进行工程实战。 (1)TA定时器 Usermanual中的介绍为: 解释为:TimerA定时器是一个16位的定时计数器,每个定时器有7路比较寄存器,支持捕获,比较,定时,PWM等模式,支持中断,可在中断中判断7路比较寄存器中哪个产生中断。 主要寄存器就是配置寄存器,CNT计数器,频率基准,CCR各路比较值寄存器等等,这些寄存器一般是Timer外设通用的。 (2)Timer32定时器 首先看Usermanula的介绍: 解释为:Timer32是一个可以
[单片机]
msp432快速入门第七节之<font color='red'>定时器</font><font color='red'>中断</font>
PIC单片机-利用Timer2定时器的溢出中断实现动态扫描数码管
编写程序,令数码管的显示顺序为:0123,1230,2301,3012。 数码管显示分静态扫描和动态扫描,动态扫描显示一般分两种方式 1、选用一个数码管位,写断码显示,延时一定的时间,关闭显示,选择下一位,依次类推,完成数码管的多位扫描显示,这种方式比较耗CPU资源。 2、利用定时器,每隔一个固定的时间去选通,写断码,这种方式可以降低CPU的占用时间,同时,每个数码管显示时间固定,不存在“抖”的现象。 本程序中使用第二种方式,利用Timer2定时器的溢出中断实现动态扫描,Timer2包含一个周期控制寄存器,可以自动控制溢出周期。周期控制寄存器PR2的存在使得TIMER2的计数值有一个可以自由设定的上限。当TIMER
[单片机]
MSP430定时器中断程序
#include msp430g2452.h int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR |= BIT0; //P1.0设定为输出 P1OUT |= BIT0; //P1.0拉高 TACCTL0 = CCIE; //CCR0中断使能 TACCR0 = 50000; //终点值 //使用连续计数模式的话,此值不会有影响 TACTL = TASSEL_2 + MC_2;//控制定时器A 选择timer时钟ACLK和连续计数模式 _EINT
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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