单片机EAET0都=1,没有设定TR0=1(或0)对中段有影响吗,不设定TR0时,是不是只能计数
发布网友
发布时间:2022-04-25 18:19
我来回答
共3个回答
热心网友
时间:2023-10-03 16:09
模式0的工作原理图
模式1的工作原理图
先解释一下两张图的不同:
只是由于定时器工作模式寄存器(TMOD)的两位:[M1,M0]的设置不同,所以定时/计数的模式不同,但是结构上是无差别的。假如[M1,M0]=[0,0],则代表模式0,表示就是13位的定时/计数器,TL0只有低5位参与计数,TH0整个8位全都参与计数。假如[M1,M0]=[0,1]代表模式1,表示TL0、TH0全都参与计数。如果你是用C语言编程,而不是汇编,初始化设置的时候,就可以通过TMOD|=0x00,来选择模式0,TMOD|=0x01,来选择模式1。提醒一点最好用"|=",而不要用“=”,因为前者是 “赋值位或”因为有或运算,不会改变TMOD寄存器中原先其他已经设置好的位,但是后者是“赋值”,就会把TMOD中的其他位全都改变。
然后哦解释一下TR0在控制中断发生上的作用:
由图上结构可以看到,因为TR0通过一个“与”门,然后才(control)控制了通向计数器TL0、TH0的开关。所以如果TR0为0,“与”门不会置1的,所以就无法把通向计数器的开关打开,所以无法让计数器TL0、TH0计数,所以无法让数据溢出,所以无法让定时器控制寄存器(TCON)的TF0位置1,所以就无法触发(Interrupt)中断了。
简单说呢,上面这个图中涉及到的寄存器的控制位有:
定时器工作模式寄存器(TMOD)中的C/T,负责控制定时模式还是控制计数模式。假如C/T是0,则由内部时钟输入,此时外设T0用做定时器。假如C/T是1,则由T0 Pin (T0 管脚)输入,此时外设T0用做计数器。
定时器工作模式寄存器(TMOD)中的[M1,M0],负责控制定时器的模式为0,为1,为2,还是为3。
定时器工作模式寄存器(TMOD)中的GATE,负责决定定时器的触发是否受外部中断INT0的影响。因为GATE通过一个反相器(也就是非门)后和外部中断INT0通过“或”门形成控制流。GATE=0,经过反向,输出为1,不管INT0是0/1,都可以经过“或”门输出1。GATE=1,经过反向,输出为0,必须要INT0是1,才可以经过“或”门输出1。
额外多说点,TH0和TL0是单独的计数器,赋上初值以后,可以用来定时。定时器初始化的时候,可以用赋值语句直接赋值,比如模式1,TL0=0xff;TH0=0x06。这个是250us的计数器初值设置。怎么算的呢?
就是当外部晶振为12M的时候,单片机内部默认是12分频,可以得到单片机内部时钟频率f=12M/12=1MHz。根据频率与周期的关系,单片机的机器周期T=1/f=1/1M=1us。250us就是250个机器周期。以模式1为例,初值为多少的时候,经过250个机器周期,就可以让TH0溢出了呢?
因为使用了TL0和TH0两个8位计数器,合在一起就是16位,可以产生0~65525一共65536个数。实际上计数器要65536(2的16次幂)个数才可以溢出。16位计数器的容量是65535,包括0,一共可以表示65536个数。所以想要计数250个数以后溢出,初值=65535(容量)-250+1(这个1就代表要至少超过容量1个数,才可以溢出)。所以初值的计算也就表示为:初值=65536-250
热心网友
时间:2023-10-03 16:09
对于51单片机,设置了EA=1和ET0=1,这是定时器T0开中断,即允许T0中断。而设定TR0=1,是启动定时器开始计时/计数,TR0=0,则定时器停止计时/计数,对中断是没有影响的。不设定TR0=1,那就是TR0=0,那就是不计数。既然定时器都停止计时/计数了,也不会发生中断的,即不会中断的。举个例子吧,上课时,老师允许你提问发言,可是你都不去上课,你怎么发言?是一个道理。所以,虽然不影响中断,但却不会引起中断。
热心网友
时间:2023-10-03 16:09
不是只能计数;TR0=1,开始计时/计数,跟中断没关系;EA=Enable all所有中断使能,ET0=Enable Timer0,timer0中断使能;定时器中断是计数满了溢出后中断,TR0不开不计时没法溢出怎么中断?
单片机EAET0都=1,没有设定TR0=1(或0)对中段有影响吗,不设定TR0时,是不...
所以如果TR0为0,“与”门不会置1的,所以就无法把通向计数器的开关打开,所以无法让计数器TL0、TH0计数,所以无法让数据溢出,所以无法让定时器控制寄存器(TCON)的TF0位置1,所以就无法触发(Interrupt)中断了。简单说呢,上面这个图中涉及到的寄存器的控制位有:定时器工作模式寄存器(TMOD)中的C...
单片机的EA和ET0、 TR0有何区别?
对于51单片机,设置了EA=1和ET0=1,这是定时器T0开中断知,即允许T0中断。而设定TR0=1,是启动定时器开始计时/计数,TR0=0,则定时器停止计时/计数,对中断道是没有回影响的。
单片机定时 ET0=1什么意思,,要详解。。
单片机定时 ET0=1的意思是51单片机的定时器0允许中断。ET0是51系列单片机定时器0的中断允许开关,定时器中断是为了满足定时或计数溢出处理的需要而设置的,当发生计数溢出时,表示定时时间已到或者计数值已满,接着就以计数溢出信号作为中断请求去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生...
...启动定时器和两个都开时有啥区别?一: EA=1 ET0=1
你好:EA是中断的总开关,不管是定时器,串口还是外部中断,都需要打开EA才能触发中断;而ET0是定时器0的专用中断开关,也就是说打开了EA.而不打开ET0,定时器0是无法触发中断的.而TR0是启动定时器开始定时计数的开关,如果打开EA和ET0,就代表允许定时器0触发中断,但是定时器0何时开始触发,由TR0来启动和...
请教一个单片机的问题 很基础的
是的,只有溢出才申请中断,要进入中断必须要EA=1,和ET0=1两个条件满足。至于你说的开始删除TH0和TL0赋初值也能进入中断的问题,很简单,你没赋初值,那么初值默认为0,经过65536次计数后也同样溢出申请中断。第二个问题嘛,计数是没有终止的,除非你TR0=0,所以你在给TH0和TL0赋值的过程中都在...
为什么我把那外部中断子函数中的TR0=0屏蔽掉就可以正常溢出了,我给的...
这是必然的,你的溢出条件是计数65536,但是当flag1=2时你就关闭了计数(TR0=0),定时器0停止工作了,同时定时器寄存器也初始为0,这样当然始终达不到溢出条件了。当然不会溢出了。这个程序你的两秒不知道从何而来。
ET0=1什么意思
应该是“定时器0的中断允许开关”,ET0=1后,定时器0的中断就允许了,当然也要打开EA总开关。定时器0的运行开关是TR0=1
TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;这是什么意思啊??谢谢啦
TMOD是定时器工作方式寄存器,T表示time,mod表示model,模式的意思,ox11表示定时器的第4种工作方式仅适用于T0,分成两个8位计数器,T1停止计数,ET0=1开定时器0 中断,TR0=1启动定时器0,EA开总中断,建议看一下郭天祥《51单片机c语言教程》,里面内容比较丰富,解释不对的地方请谅解。
帮我解释一下单片机定时中断程序,每一条语句的详细详细含义。比如TMOD...
TR=1时定时器启动,TR=0时停止。这里要注意,前面说的门控位,如果门控位为1,则定时器的启动除TR=1以外,还要求INTx引脚输入1。ET0可以理解为T0的中断开关,只有ET0=1的时候,T0才可能输出中断。EA则是中断的总开关,EA=0的时候,所有的中断都无效。写的很繁琐,要是看不懂可以继续问我。
单片机实现门铃 这个程序中ding dong怎样实现的。具体ding dong频率...
定时器0中断时,给定时器0的寄存器TH0和TL0赋的初始值,确定了定时中断时间为250us,进定时中断的频率就是1/0.000250=4000。因为进两次才算一个周期(beep置0一次,置1一次),所以ding 的频率应该是2000Hz,过0.5秒后,进入dong,它是进定时中断2次才翻转一次置位,所以dong的频率应该是1000Hz ...