当然不一样了
1电平触发是在高或低电平保持的时间内触发,
2而边沿触发是由高到低或由低到高这一瞬间触发
3 边沿触发一般时间短,边沿触发一般时间都是us级的,响应要快的,而电平触发只须是高和低就可以了,没时间要求,比如10s 时间内总是低电平,那么它也是触发的,
比如中断计时或计数,最好用边沿触发,用电平触发误差会很大,电平触发一般用于简单报警,开关一类(时间要求不高的)
51单片机只是在进入中断服务程序的瞬间清除外中断标志,在执行中断服务程序过程中再次发生相同中断时,中断标志位被置1 但在执行RETI指令退出中断服务程序以前,再次发生的多少次相同的中断都不会被响应。而退出中断服务程序后,如果本中断仍被允许而又没有更高优先级中断,则会再次进入中断服务程序并清除中断标志位。
IT0是决定51单片机响应外中断的模式标志位,为0是低电平触发,为1是下降沿触发。而IE0才是外中断的请求标志位。
INT0/1为1下降沿触发 为0电平触发 ,而下降沿触发IE0和IE1可以自动清零,而电平触发得人为把IE0和IE1清零,要不然会一直启动中断。IE0/1可以自动清零,所以一般用下降沿触发
下面是修改的代码。你注意注释部分:
ORG
0000H
JMP
START
ORG
13H
//这里要改,因为it0和it1的中断向量表地址不同,这个地方要
//看你的单片机类型,51的话,就不是13这数值,你看看你的
//it0的中断起始地址应该是什么,把13H改了。
JMP
INT_0
//改为INT_0
START:
MOV
IE,#10000100B
//IE也需要改,设置中断控制寄存器:
//改为MOV
IE,#01001000B
MOV
SP,#30H
SETB
IT1
//这里要改为SETB
IT0
MOV
A,#01010101B
LOOP:
MOV
P0,A
CALL
DELAY
CPL
A
JMP
LOOP
INT_0:
PUSH
PSW
PUSH
ACC
SETB
RS0
MOV
R0,#3
INT_LOOP:MOV
A,#0FEH
MOV
R1,#7
INT_LOOPL:MOV
P0,A
CALL
DELAY
RL
A
DJNZ
R1,INT_LOOPL
MOV
R1,#7
INT_LOOPR:MOV
P0,A
CALL
DELAY
RR
A
DJNZ
R1,INT_LOOPR
DJNZ
R0,INT_LOOP
POP
ACC
POP
PSW
RETI
DELAY:
MOV
R7,#200
D1:
MOV
R6,#250
DJNZ
R6,$
DJNZ
R7,D1
RET
END
需要改的就这几个地方,希望你看看。因为你没有具体的限制是什么类型的单片机,这样的话,指令和中断地址就不能非常具体的给你改。你结合我的提示,改改吧。
1、设置TI=1,是人为的设置了串行发送请求完毕的中断请求标志但是你并没有致能(es=1)串口中断实际上你的interrupt5的处理程序也没有写,是空的(注意这点)
2、你既然没有设置it0=1(跳变触发中断),那么就是IT0=0(低电平触发)
3、当一个低电平来的时候,就进入你的interrupt0处理程序并且硬件自动清标记位置执行完毕 beer=1
4、这个时候还有一个中断请求标志IT=1,于是产生了中断嵌套执行完高级中断后,进入低级中断interrupt5之后是空白
5、结果就是你描述的:蜂鸣器一直响,数码管停止显示
不知道我这样描述,你能不能理解
以上就是关于单片机中IT0=1与IT0=0有什么区别全部的内容,包括:单片机中IT0=1与IT0=0有什么区别、51单片机外部中断0响应中断程序的时候IT0被硬件置0,要是再来一个中断信号不是就不能响应了吗、单片机实验 按钮触发外部中断 以下程序中为什么IT0和IT1为1即为什么是负跳变而不是低电平触发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)