mcs-51单片机程序中可以直接调用中断服务程序吗?为什么?

mcs-51单片机程序中可以直接调用中断服务程序吗?为什么?,第1张

这样给你说吧。当单片机运行起来的时候是高速运转你while(1)里面的程序。但是这样是不够的,比如你想把某个信号传递给单片机让它处理,比如说:你按了某个键来控制某个灯的亮灭,这时候就需要单片机来响应你的动作,响应的方式就是中断。也就是说你在主程序中完成了某个中断的触发条件时,当达到这个条件时程序就会跳转到中断服务函数中去,执行完中断服务函数中的程序后再返回主程序中继续循环执行。你说的调用其实不太正确,中断服务函数只能触发,它是由单片机内特定的某些寄存器的标志位控制的,当这些满足触发条件的时候,标志位被硬件置1,然后自动执行你编写的中断服务函数。

说的不是很清楚,请见谅,中断是单片机内最重要的功能之一,与之对应的还有定时器(这是单片机的心脏),这些内容在51里面都是很简单的,但是到了32位单片机里面会变得特别复杂。

希望这些内容能给你一些帮助。

子程序的返回要用到RET,当单片机执行到RET语句时,就会自动返回到调用处并继续向下执行。楼上说的RETI是中断的返回语句。

你的子程序不返回有可能是子程序最后一句不是RET,这样的话,子程序当然就无法返回了。还有就是你程序本身就有问题。因为你是以看到的结果为依据来判断程序的成功与否。如果你的程序本身就有问题,那么肯定会不能按照你的想法来执行的。

希望你可以将程序贴上来,这样大家就可以更好更快的帮助你了。

因为在你recieve()函数里有一个while(1)循环处理过程,其实你这程序在用KEIL编译的时候会有警告提示的,即:led1=0这句将永远不会被执行的

从事音频设备开发好多年——VX:xuquanfugui-2020


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

原文地址: http://outofmemory.cn/yw/11474736.html

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

发表评论

登录后才能评论

评论列表(0条)

保存