⑴ 单片机定时器中断
定时器中断后,需要响应中断,才会自动清除中断标志位TF1,这是由中断系统完成的。
而你用查询方式,并不响应中断,也就是中断系统并没有工作,所以,就不会自动清除标志位啦。
这样设计才是合理的,假如,查询也可以清除标志位,那么一查询就清除了,那就永远也不会使TF1=1了,定时器就永远也不会查询到 定时器定时到了。
所以,学习要理解其原理,不要看表面。
⑵ 什么是单片机的中断序号中断序号1表示什么 中断序号3表示什么
单片机的中断序号决定该中断的中断向量的位置(即中断服务程序的入口地址)
即 中断序号就是中断源在单片机的中断向量表中的位置序号。
具体关系: 中断向量=0003H+中断序号×8
例如:
中断0(即中断序号为0 ) 其中断向量=中断服务程序的入口地址=0003H
中断1(即中断序号为1 ) 其中断向量=中断服务程序的入口地址=000BH
对于51单片机:
中断序号0 表示的是外部中断0的中断序号
中断序号1 表示的是定时计数器0的中断序号
中断序号2 表示的是外部中断1的中断序号
中断序号3 表示的是定时计数器1的中断序号
中断序号4 表示的是串行口的中断序号
中断序号5 表示的是定时计数器2的中断序号
呵呵 满意就选满意回答吧
⑶ 51单片机中的定时器中断是怎么用的
代码如下:
//实现led灯一秒亮灭闪烁
void main()
{
TMOD=0x01;//设置定时器0为工作方式1(M1 M0为01)
TH0=(65536-45872)/256;//装初值11.0582晶振定时50ms数为45872
TL0=(65536-45872)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1);//程序停止在这里等待中断发生
}
void T0_time() interrupt 1
{
TMOD=0x01;//重装初值
TH0=(65536-45872)/256;
num++;//num每加一次判断一次是否到20次
if(num==20)//如果到了20次,说明1秒时间到
{
num=0;//num清0重新计数
led=~led1;
}
}
(3)单片机定时器1中断扩展阅读
定时器有两种工作模式,分别为计数模式和定时模式。对Px,y的输入脉冲进行计数为计数模式。定时模式,则是对MCU的主时钟经过12分频后计数。因为主时钟是相对稳定的,所以可以通过计数值推算出计数所经过的时间。
51单片机计数器的脉冲输入脚。主要的脉冲输入脚有Px,y, 也指对应T0的P3.4和对应T1的P3.5,主要用来检测片外来的脉冲。而引脚18和19则对应着晶振的输入脉冲,脉冲的频率和周期为
F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us
51计数器的计数值存放于特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C),T1(TL1-0x8B, TH1-0x8D)
定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。定时和计数的最终功能都是通过计数实现,若计数的事件源是周期固定的脉冲则可实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能全由一个部件实现。
⑷ 单片机定时器中断的问题
void
T1_INT()interrupt
3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
BEEP=-BEEP;
//根据高温还是低温警报设定不同延时间隔
if(L_LED==0)//L_LED一定是低温/高温显示,即L_LED==0是低温;==1是高温
{//如果是低温时,看看t到没到150,如果没到直接返回
if(++t!=150)
return;
}
else
{//L_LED==1,说明是高温,看看t到没到60,如果没到直接返回
if(++t!=60)
return;
}
\\低温时(L_LED==0),t==150说明是延时到了;或者高温时(L_LED==1),t==60说明延时到了。
t=0;//t清零
DelayMS(20);//延时
}
⑸ 51单片机,如果外部中断0被触发,定时器0、外部中断1、定时器1还能工作么。如果是外部中断1被触发呢
如果在没有更改过优先级的情况下,外部中断1被触发,定时器1和定时器0哪个还能工作?
不知道楼主所说的“工作”,是什么意思。
外部中断0、定时器0、外部中断1、定时器1和串行口,它们是同时工作的。
只是当满足一定的条件,它们会向CPU申请中断,而CPU只有一个,只能执行一个外设的中断程序。
如果外部中断1被触发,CPU执行X1的中断程序,这时,定时器1和定时器0仍然在做自己的工作,并没有停止工作。
楼主的问题,可能是问CPU的,当CPU在执行外部中断1的程序期间,还能不能接受T1、T0的中断申请。
答案是:不能。
只有高级的,可以中断低级的。
楼主已经说它们是同一级别的中断源,那么它们就是不能互相中断的。
只有当这个中断程序结束了,返回主程序后,CPU才会响应刚才早已来到的中断申请。
⑹ 希望高手帮忙,说明一下单片机中定时器0和定时器1中断执行过程
定时器150ms中断一次,每次中断FLAG加1
40次即为2秒,所以在定时器0中断时,要判断是0-40,40-80等时间段
定时器0中断时,要再次装入定时时间常数,但在0-40,40-80等时间段内装入的时间常数是不同的,因此beep取反的频率就不同
但由于定时器0中断10次BEEP才取反一次,所以当fre=50000;50*10= 500ms才取反一次
这么低的频率对无源蜂鸣器是没有响应的
当fre=50000;0.156*10= 1.56ms取反一次,周期3.12ms频率300多HZ,对于有源蜂鸣器响应是很困难的
所以用有源蜂鸣器演奏例程中的音乐只能呕呀嘈杂难为听了
⑺ 请问单片机定时器中断是怎么样的过程啊
1:如果是中断只有一次,那么没有下一次起始。
2:如果是多次中断,那么每一次结束后定时器数值将会被重置。
一:循环定时中断——定时的时间是循环到定时程序的时间。
二:条件定时中断——定时的时间是条件语句结束的时间(如果中断程序里面不改变条件)。
也就是说,在定时一段时间后进入中断,定时的开始与中断无关。一楼说的应该是定时器中断,及在中断程序里面会改定时数值。楼主所讲的应该是中断前加一个延时。
⑻ 51单片机中断/定时器/计数器
89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
IE寄存器:
中断允许控制寄存器分为两层结构,第一级结构为中断允许总控制EA,只有当EA处于中断允许状态,中断源中断请求才能够得到允许;当EA处于不允许状态时,无论IE寄存器中其他位处于什么状态,中断源中断请求都不会得到允许。第二级结构为5个中断允许控制位,分别对应5个中断源的中断请求,当对应中断允许控制位为1时,中断源中断请求得到允许。
EX0:外部中断0允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。当EX0=1( SETB EX0 )时,同时单片机P3.2引脚上出现中断信号时,单片机中断主程序的执行而“飞”往中断服务子程序,执行完后通过中断返回指令RET 动返回主程序。当EX0=0( CLR EX0)时,即使单片机P3.2引脚上出现中断信程序也不会从主程序“飞” 出去执行,因为此时单片机的CPU相当于被“堵上了耳朵”,根本接收不到P3.2引脚上的中断信号,但是这并不表示这个信号不存在。如果单片机的CPU有空查一下TCON中的IE0位,若为1就说明有中断信号出现过。
ET0:T0溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。
EX1:外部中断1允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。当EX1=1( SETB EX1)时,并且外部P3.3引脚上出现中断信号时,单片机CPU会中断主程序而去执行相应的中断服务子程序;当EX1=0( CLR EX1)时使外部P3.3引脚上即使出现中断信号,单片机的CPU也不能中断主程序转而去行中断服务子程序。 [3] 因此,可以这样认为,EX0和EX1是决定CPU能否感觉到外部引脚P3.2P3.3上的中断信号的控制位。
ET1:T1溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
ES:串行中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
EA:中断总允许位。EA=1,CPU开放中断;EA=0,CPU禁止所有的中断请求。总允许EA好比一个总开关。EA就相当于每家水管的总闸,如果总闸不开,各个龙头即使开了也不会有水;反过来,如果总闸开了而各个分闸没开也不会有水,所当我们想让P3.2和P3.3引脚上的信号能够中断主程序则必须将EA位设置为0(CLR EA)。
TCON寄存器:
各位的标识如下:
TF1:定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR1:定时器运行控制位,TR1置1是开启定时器1,TR1置0时关闭定时器1.
TF0:定时器0溢出标志位。当定时器0计满溢出时,由硬件使TF0置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR0:定时器运行控制位,TR0置1是开启定时器0,TR0置0时关闭定时器0.
IE1:外部中断1请求标志位。
IT1:外部中断1触发方式选择位。当IT1置0时,为低电平触发;当IT1置1时,为下降沿触发。
IE0:外部中断0请求标志位。
IT0:外部中断0触发方式选择位。当IT0置0时,为低电平触发;当IT0置1时,为下降沿触发。
51单片机外部中断响应条件:
1、中断源有中断请求;
2、中断源的中断允许位为1(设置IE寄存器相关位);
3、CPU开中断(设置IE寄存器开中断,即EA=1)
CPU时序的有关知识:
振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
状态周期:2个振荡周期为1个状态周期,用S表示。
机器周期:1个机器周期含6个状态周期,12个振荡周期。
指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。
定时器的其他知识点:
1、51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。
2、定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
3、51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。
4、有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。
与定时器/计数器有关的寄存器:
1、TMOD寄存器
2、TCON寄存器
3、IE寄存器
4、THx/TL寄存器
工作方式寄存器TMOD:
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
M1M0:工作方式设置位。定时/计数器有四种工作方式。一般我们厅方式1和方式2:
控制寄存器TCON:
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
IE中断开关寄存器:
用于开启cpu中断和对应的中断位。
THx和TL定时/计数存储寄存器:
THx存储高8位数据,TLx存储低8位数据。
定时器/计算器初值计数公式:
计数个数与计数初值的关系为:X=2^n-N
N是需要计数的值;n与设置定时器/计数器的工作方式有关(可能为8、13、16);X是需要设置在THx和TLx的初值。
使用定时器/计算器的初始化流程:
1、对TMOD赋值,以确定T0和T1的工作方式。
2、计算初值,并将其写入TH0、TL0或TH1、TL1。
3、中断方式选择,则对EA赋值,开放定时器中断。
4、使TR0或TR1置位,启动定时/计数器定时或计数。
⑼ avr单片机定时器1中断问题
中断没有问题,有问题的是把中断初始化和下面几句放在while(1)中了:
1)--DDRF = 0x01; ---设置端口PF0为输入,其他为输出
2)--PORTF = 0x01;---设置端口PF0为高电平,其他为低电平(包括PF1)
3)--DDRF = 0x02;---设置端口PF1为输入,其他为输出
4)--PORTF = 0x02;---设置端口PF1为高电平,其他为低电平
这样导致程序不断的将PF1设为低,然后马上又设为高,因为你上面几句放在主循环中了。
根据你中断的设置,你的led端口应该是PF1; 你的1.1mhz的频率是上面几句得到的。
解决方法:
1.你把while(1)中的代码全部剪切(不是复制)到while(1)之前;
while(1)中不要任何代码就OK了。
⑽ 51单片机定时器中断原理
原理很简单,说白了就是用一个计数器对内部时钟计数,计满溢出时触发定时器中断,此时,程序会中断执行当前代码跳转到一个固定地址(定时器中断服务程序入口)去执行中断服务程序,执行完毕再回到被中断的代码地址继续执行。