51单片机外部中断0响应中断程序的时候IT0被硬件置0,要是再来一个中断信号不是就不能响应了吗

51单片机外部中断0响应中断程序的时候IT0被硬件置0,要是再来一个中断信号不是就不能响应了吗,第1张

此函数为外部中断1函数 ,函数名为it0(),interrupt后接中断号,0 代表外部中断1,1 代表定时器中断0,2 代表外部中断2,3代表定时器中断1,4 代表串口中断。using后接寄存器号 这个不需要了解,如果你不知道用哪个寄存器,直接把中断函数写为 void it0(void) intettupt 0 即可 ,单片机会自动选择空闲寄存器的。

beep是蜂鸣器吧

beep=0;

delay(50);

beep=1;

delay(100);

蜂鸣器一鸣一关需要的时间为5~6秒的话 就很正常了

毕竟 中断函数完全运行完了 才会运行主函数

51单片机只是在进入中断服务程序的瞬间清除外中断标志,在执行中断服务程序过程中再次发生相同中断时,中断标志位被置1 但在执行RETI指令退出中断服务程序以前,再次发生的多少次相同的中断都不会被响应。而退出中断服务程序后,如果本中断仍被允许而又没有更高优先级中断,则会再次进入中断服务程序并清除中断标志位。

IT0是决定51单片机响应外中断的模式标志位,为0是低电平触发,为1是下降沿触发。而IE0才是外中断的请求标志位。

it0、it1这个寄存器是设置外部中断0和1的触发方式。it0、it1都为1,是边沿触发,为0是低电平触发,ex0、ex1是设计外部中断允许,ex0=1,ex1=1是允许中断,可以配合it0、it1来使用,可以不用对其进行设置,默认是0(低电平)触发。it0的主要任务是支持商业流程,以满足企业的业务需求,提供高效的数据存储、数据处理和计算服务。

请你参考:

一、简述外部中断的电平触发于边沿触发方式的工作原理并说明两者的区别。

答:两个外部中断的触发方式由TCON寄存器的 IT1位 和 IT0位 分别设置,方法相同。

IT0(IT1)=1,脉冲方式,后沿负跳有效;IT0(IT1)=1,电平方式,低电平有效;

TCON寄存器的 IE0 位和 IE1 位,是外中断请求标志位。

外部中断请求采样,CPU在每个机器周期对中断请求引脚(INT0 和 INT1)进行采样:

a对于电平方式,若采样为高电平,表明没有中断请求,IE0(IE1)继续为0,若采样为低电平,则中断请求有效,把 IE0(IE1)置1 。

b对于脉冲方式,若再两个相邻的机器周期采样到的是先高后低,则中断请求有效,把IE0(IE1)置1,否则继续为0。在这种方式下高低电平持续时间应在1个机器周期以上。

中断响应以后,硬件自动清除标识位 IE0(IE1),即中断请求的撤除是自动的。

但是对于电平方式,情况有所不同,因为中断请求虽然清除了,但是请求的低电平仍然存在,下一个机器周期又会采样到,又会置位 IE0(IE1),因此这种方式应在中断信号上采取硬件措施(这个话题不再继续,有点扯远了)。

二、简述对于既有片内程序存储器又有外部程序存储器的MCS-51系统,如何才能分别使用其片内程序存储器和外部程序存储器?

答:

把单片机的EA引脚拉高,程序就从片内4k空间(0000H~0FFFH)读取,超出部分(1000H以后)自动去外部读取,片外(0000H~0FFFH)的4K就浪费掉了。

把EA引脚拉低,只从篇外读取程序,片内的4K就浪费掉了。

三、如何将中断程序设置在程序存储区的任意区域,在程序中该作何种设置?请举例加以说明。

答:

先说明一下片内程序存储空间开始的几个字节:

a0000H~0002H三个特殊单元:51片内总共4k空间(0000H~0FFFH),系统复位后(PC)=0000H,单片机从0000H单元开始取指令执行程序,如果程序不从0000H单元开始,应在0000H~0002H三个单元中存放一条无条件转移指令,以便直接转去执行指定的程序。

b还有一组特殊单元(0003H~002AH),共40个字节,分为五段,作为五个中断元的中断地址区。

这五段,其中:

0003H~000AH    外部中断0中断地址区

000BH~0012H    定时器/计数器0中断地址区

0013H~001AH    外部中断1中断地址区

001BH~0022H    定时器/计数器1中断地址区

0023H~002AH    串行中断地址区

中断响应以后,按照中断种类,自动转到个中断的首地址去执行程序。因此在中断地址区中应存放中断服务程序,但是8个单元难以存下一个完整的中断服务程序,因此通常是在中断首地址开始放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址去。

这次回答的问题比较啰嗦,仔细体会,不要着急,弄懂弄通。

ORG 00H ;开始地址

JMP MAIN ;跳转到主程序

ORG 03H ;外部中断0地址

JMP EXT1 ;跳转

ORG 13H ;外部中断1地址

JMP EXT2 ;跳转

MAIN:

MOV IE, #85H ;使能中断 0,1

SETB TCON2 ;边沿触发

SETB TCON0 ;边沿触发

SJMP $ ;--没有这一句,程序,自己就去执行中断函数了

EXT1:

MOV P2, #0 ;清0,点亮发光二极管

RETI

EXT2:

MOV P2, #0FFH ;置1,关闭

RETI

END

你好,你可以在退出中断时不要打开外部中断使能,在主循环程序里加一条判断就像判断按键一样恢复高电平以后再使能外部中断允许就可以克服这个问题了,还有就是选择边沿触发(上升沿或下降沿)也不会有次问题

以上就是关于单片机 c 语言 实现中断中void it0(void) interrupt 0 using 1 后面买的interrupt 0 using 1什么意思全部的内容,包括:单片机 c 语言 实现中断中void it0(void) interrupt 0 using 1 后面买的interrupt 0 using 1什么意思、89c52板子在it0口中断信号撤销后需要大概30秒的时间才开始运行主程序 这是为什么呢 11.0592MHz的晶振、51单片机外部中断0响应中断程序的时候IT0被硬件置0,要是再来一个中断信号不是就不能响应了吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8767936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-21
下一篇 2023-04-21

发表评论

登录后才能评论

评论列表(0条)

保存