MCS-51单片机中断函数注意事项 点击:2143 | 回复:3



玻璃的心

    
  • 精华:30帖
  • 求助:2帖
  • 帖子:985帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2013-10-02 21:41:29
楼主

(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
 (2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。
 (3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。
 (4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。
 (5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
 (6)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
 (7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。




领域

  • 精华:8帖
  • 求助:80帖
  • 帖子:481帖 | 3926回
  • 年度积分:915
  • 历史总积分:140763
  • 注册:2008年2月29日
发表于:2013-10-02 21:53:41
1楼

没有搞过单片机的飘过              

大王006

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2006年6月03日
发表于:2013-12-17 22:17:35
2楼

后悔老师教的时候没有认真听!

建议删除该帖

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 580回
  • 年度积分:0
  • 历史总积分:2884
  • 注册:2010年9月08日
发表于:2013-12-19 13:04:43
3楼

回复内容:

对: 大王006  后悔老师教的时候没有认真听! 内容的回复!


 幸好你上课时没认真听,否则你会更糊涂的,单片机这玩意只有自己动手才能明白怎么回事


热门招聘
相关主题

官方公众号

智造工程师