汇编语言中的中断程序是如何执行的

汇编语言中的中断程序是如何执行的,第1张

就是计数器溢出

出现中断标志才产生中断 当然前提是你必须打开中断控制位和总中断

有的好一点的单片机进入中断会自动执行关闭总中断 和清除标志

中断返回自动打开总中断

单片机定时器中断程序的执行时间是由定时器的预设值和时钟频率决定的。

定时器中断是通过定时器计数器不断地计数,当计数器的值达到预设值时触发中断。因此,定时器的预设值越小,中断触发的频率越高,执行时间也越短。而时钟频率越高,定时器计数的速度就越快,中断触发的频率也就越高,执行时间也就越短。

另外,中断程序的执行时间还受到中断响应时间的影响。当中断触发后,单片机需要一定的时间来响应中断,并跳转到中断服务程序执行。如果中断响应时间较长,那么中断程序的执行时间也会相应地变长。

因此,要确定单片机定时器中断程序的执行时间,需要考虑定时器的预设值、时钟频率和中断响应时间等因素。

由中断号决定,一般计数器0是interrupt 0,定时器0是interrupt 1,接下来是计数器1,再是定时器1,再是串口,有些单片机还会有ADC,串口2,PCI等中断,具体看单片机的资料。

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

扩展资料:

功能:

8位CPU·4kbytes程序存储器(ROM) (52为8K)。

128bytes的数据存储器(RAM) (52有256bytes的RAM)。

32条I/O口线·111条指令,大部分为单字节指令。

21个专用寄存器。

2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

一个全双工串行通信口。

外部数据存储器寻址空间为64kB。

参考资料来源:百度百科-51单片机

int1() interrupt 2

{

EA = 0;//关中断

P26 = 1;

delay1();//发生中断后延迟一定时间(补充一下,从这里来看,这里的外部中断唤醒方式应该是霍尔开关0唤醒,即低电平唤醒,而不是负跳变唤醒,不然随着车速度的变化这个延迟时间很难掌握)

if(P33 == 1)//延迟后如果霍尔开关输出跳变为1,表明车轮在转,并且产生了新输出,就是转了一圈了

{MileAge = MileAge + 19/2;}//车轮转了,那么小钱钱就要增加,mileage在英文中有运费的意思,如果这个霍尔开关是接在车轮上数圈圈的话,这个表达式的意思大概就是车轮转一圈加95,尼玛,如果是元的话,这个车非好贵。当然,mileage也有总里程的意思,这里也可能是加里程,车轮转一圈大概也就是一米不到,不管是什么吧,反正意味着加钱。

count1 = 0;//清零等待时间,这就是自动切换到里程状态了。

count2 = 0;//同上

count3 = 0;//同上

P26 = 0;//这个应该是P26接了一个外围元件,没有图不好说是什么东西。

EA = 1;//开中断

}

//定时器中断0

void t0(void) interrupt 1 using 0

{

EA = 0;

TH0=(65536-50000)/256; //12M晶振下50ms定时,记住这个程序必须用12M晶振,不然定时就不是想像那样了。其实这个程序写得不大好,这个看起来是定时器使用自动重装模式,没必要在这里再装一次,初始化的时候弄好就行了。

TL0=(65536-50000)%256;//同上

count1++;//50ms单位定时计数+1

if(count1 == 20)//50ms20=1s,1秒到了

{

count1 = 0;//清除50ms单位定时计数

count2++;//秒计数+1

if(count2 == 60)//60s,就是说1分钟了咩?

{

count2 = 0;//1分钟了,秒计数清零

count3++;//分钟计数+1

if(count3 == 1)//等了1分钟了么?

{count3 = 0;InterVal += unit price; }//如果等了1分钟了,那么,加钱钱。相信我,这个程序如果你用12M晶振的话,绝不是你说的5分钟加小钱钱,而是1分钟就加小钱钱了,你绝对打不到5分钟才加钱的出租车的。当然,如果你把晶振换成24M的,那就是5分钟加。

}

}

EA = 1;}

另外说一句,这个程序在最后结束的时候,也就是算钱的时候,是需要把InterVal和MileAge加一下得到最后的价钱的。

你的问题是没理解中断的含义。

中断,字面上意思就是(当有更紧急的事情出现的时候)终止现在手头上的事情去忙更紧急的事情。在程序里,就相当于当某个条件成立时,停止正在运行的代码(手头上的事情),去执行另一段代码(更紧急的事情),只是这个过程是硬件自动完成的,而不是像你平时调用函数那样显式的去调用它。

你的程序里用到了定时器0(自己去看定时器的工作原理),那你只要将定时器0初始化,并且在函数void exter() interrupt 1里写下你希望当定时器0中断的时候执行的代码就行了。当你启动定时器0的时候,它有点像后台运行的一个程序,当它归0的时候,就会置相应的中断标志为1,而CPU会不时的检测这些中断标志位,当发现某个标志位为1的时候,表明有中断请求,CPU会自动转到相应的中断服务程序中去。

以上就是关于汇编语言中的中断程序是如何执行的全部的内容,包括:汇编语言中的中断程序是如何执行的、单片机定时器中断程序的执行时间、c51单片机中断程序中的interrupt1,2,3是由什么决定的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9700856.html

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

发表评论

登录后才能评论

评论列表(0条)

保存