一、中断及定时器工作原理
1、中断概念:
1>CPU处理事件A发生事件B进行处理(中断产生)
2>CPU暂时中断当前工作,转去处理事件B(中断响应与中断服务)
3>待CPU处理完B,再回来处理事件A(中断返回)
4>51不支持中断嵌套
图释:
注意:中断服务不超过20行,尽量简短,不要进行复杂的比较,延时运算!可以进行简单比较,标志位,赋值的处理
保存主程序服务状态(保护现场):push:入栈 保存工作状态
恢复工作状态 pop:出栈
89C51:5个中断源 89C52:8个中断源
2、
可以看出,003H——00BH中有8个字节,显然是不够程序存放的,着八个字节中存放跳转指令
在ARM中,此表叫做中断向量表,在ARM中可更改,在51中固定
二、定时器使用方法
void timer_init()
{
EA = 1; //打开总中断
TMOD = 0x01; //设置定时器工作模式
TH0 = (65536 - 5000) / 256; //为定时器填初值5ms
TL0 = (65536 - 5000) % 256;
ET0 = 1; //打开定时器0
TR0 = 1;¡ //启动定时器0
}
(一)、打开总中断:
在reg52中:
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
EA被定义为A8H的第七位
标志位(只有0/1的)可以用bit定义
(二)、设定定时器工作方式
C/T:0定时,1计数(默认为0)
GATE:门电压位
(三)、给定时器赋初值:
1、晶振频率:12M,那么震荡周期为1/12us
2、机器周期:12个震荡周期=一个机器周期,即1us
3、51单片机为加法定时器
假如需要定时2ms,即加2000次,则定时器中填入65535-2000,即加2000溢出
TL0与TH0为两个寄存器,合成16位,为Timer0,高八位等于65535-2000对256取整(相当于右移8位),放入TH0,低八位等于65535-2000对256取余,放入TL0
(四)、打开定时器中断
(五)、启动定时器
(六)、写中断服务函数
1、中断服务函数无参数,无返回值
2、例:
void timer_isr() interrupt 1 //中断服务号
{
TH0 = (65536 - 5000) / 256; //重新填初值
TL0 = (65536 - 5000) % 256;
i++;
if(200 == i) //一秒到(200次,一次5ms)
{
i = 0;
led = ~led;
}
}
三、蜂鸣器
(一)、分类
1、有源蜂鸣器
2、无源蜂鸣器(大都为无源蜂鸣器,可以变音调)
(二)、有源蜂鸣器原理图:
其中蜂鸣器部分需要方波,一般为1K的频率,此频率可调音调
(三)、例:
sbit beep = P0^5;
void main()
{
while(1)
{
beep = ~beep;
delay_ms(1); //时间越短,声音越尖锐
}
}
(四)、技巧:
1、用两个定时器时候设定工作方式:
TOMD |= 0x01;
TOMD |= 0x01;
2、关定时器:
TR1 = 0;
关键字:51单片机 定时器 中断
引用地址:
51单片机的定时器与中断
推荐阅读最新更新时间:2024-03-16 16:08
51单片机通过串口控制LED
通过串口助手控制led,还有加了蜂鸣器,也有响声,不过不是太大,一点学习,希望大家多指教。 #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit beep=P1^5; void delay(u16 i) { while(i--); } /******************************************************************************* * 函数名 :UsartIni
[单片机]
关于STM32定时器16位拓展32位的探讨
STM32的通用定时器可以实现很多功能,例如:定时计数、测量外部信号脉冲宽度、产生PWM波形、测量输入的PWM波形等。在所有这些操作中,定时器的位数主要影响两个参数,一个是定时或测量的精度,另一个是定时的时间长度。下面我们以一个列表看一下定时的精度和定时的长度有多少: 关于各个预分频器的作用请参考下图的右半部分: 从表中可以看出,在最高精度下(14ns)定时长度只有0.91ms,在精度为250ns(即4MHz)时定时长度可达16.38ms。这是仅使用了定时器的独立工作模式的情况。 对于需要高精度并且长延时的应用,16位的定时(上述精度和时间长度)就不够了,这个问题可以有两种解决办法;第一
[单片机]
简易数字存储示波器的设计
摘要:随着电子通信以及教学事业的发展,示波器的应用越来越广泛,它在教学中所起到的作用越来越重要,示波器可以测量信号的幅度,频率以及波形等等,但是高精度的示波器非常昂贵,对于非盈利事业的教学组织来说无疑不合适,所以提出了一种以单片机为控制核心的简易示波器设计方案。它由前向控制部分,数据采集和存储部分,51单片机控制部分以及按键和MS12864R显示部分组成。 传统意义上的模拟示波器虽然功能较全,但是价格昂贵,体积大、重量重、成本高、等一系列问题使应用受到了限制。对于大多数学生以及教学组织来说,利用示波器主要是进行一些理论性的测试与实验,高精度高成本示波器的作用不是很必要,为此,笔者提出了一种便携式数字存储示波器的设计,它采用了L
[单片机]
STM32-自学笔记(13.NVIC和外部中断)
1.NVIC,嵌套中断向量控制器。(通俗点理解就是,许多中断向量交织在一起,形成一个向量网) 和SysTick定时器一样,NVIC属于ARM Cortex-M3内核的内部设备之一,与基于此内核的控制器并无直接联系,就是说任何一款基于ARM Cortex-M3内核的微控制器都带有NVIC. 作用:用来管理中断嵌套的,主要在于优先级的管理。嵌套是什莫?,先回忆一下中断的几个概念。 中断响应:当某个中断来临,会将相应的中断标志位置位。当CPU查询到这个置位的标志位时,将响应此中断,并执行相应的中断服务函数。 中断优先级:每个中断都具有其优先级,其相互之间的优先关系一般以优先级编号较小者拥有较高优先级。而大家容易忽略的是,优
[单片机]
51单片机外围模块——A/D模数转换
一、A/D转换器的主要技术指标 1、分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位,或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1/(2^12 )=2.4mV。 2、量化误差 ADC把模拟量变为数字量,用数字量近似表示模拟量,这个过程称为量化。量化误差是ADC的有限位数对模拟量进行量化而引起的误差。实际上,要准确表示模拟量,ADC的位数需很大甚至无穷大。一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC转换特性曲线(直线)之间的最大偏差即是量化误差。 3、偏
[单片机]
AT89C2051单片机驱动步进电机的电路和源码
程序 stepper.c stepper.hex /* * STEPPER.C * sweeping stepper''s rotor cw and cww 400 steps * Copyright (c) 1999 by W.Sirichote */ #include c:\mc51\8051io.h /* include i/o header file */ #include c:\mc51\8051reg.h register unsigned char j,flag1,temp; register unsigned int cw_n,ccw_n; unsigned char step =
[单片机]
C51单片机计数器实验
实验要求 实现一个秒表显示器,具体的画一个MSC51单片机、2个八段数码管,运行后数码管依次显示00-59,循环显示,到59后跳变回。 必须用到中断,T0还是T1不限,方式0,1,2不限。 代码部分 #include reg51.h unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char second=0; bit a=0; char t=0; int0_srv() interrupt 1{ t++; if(t==20){t=0;a=1;} TH0=0x3c; TL0=0xb
[单片机]
STM32中断和事件的对比差异分析
事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断。 事件还是其它一些操作的触发源,比如DMA,还有TIM中影子寄存器的传递与更新;而中断是不能触发这些操作的,所以要把事件与中断区分开。当你只要产生中断而不想触发其它操作时,就可以用事件屏蔽寄存器实现。 在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一定对应一个中断。 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断挂起请
[单片机]