51单片机中断函数可以有返回值吗

51单片机中断函数可以有返回值吗?
unsigned char receiveCharacter( void ) interrupt 4
{

tempChar = SBUF;
TI = 0;

return( tempChar );
}
非常感谢 shark_8309和 谢应宸 两人的回答,谢谢。

中断函数不会返回
中断使用interrupt 关键字和终端编号0-4来实现:
返回值 函数名 interrupt n
n对应中断源的编号,中断编号告诉中断器中断程序的入口地址,它对应着IE寄存器中的使能位,即IE寄存器中的0位对应着外部中断0。
8051单片机的中断源以及终端编号如下:

中断编号 中断源 入口地址
0 外部中断0 0003H
1 定时器/计数器0 溢出 000BH
2 外部中断1 0013H
3 定时器/计数器1 溢出 001BH
4 串行口中断 0023H

在51系列单片机中,有的单片机多达32哥中断源,所以终端编号是0-31.
当正在执行一个特定的任务时,可能有更紧急的事情需要CPU处理,这就涉及到了中断优先级。高优先级中断可以中断正在处理的低优先级中断程序,因而最好给每种优先级程序分配不同的寄存器组。在C51中可使用using指定寄存器组,using后的变量为0-3的常整数,分别表示51单片机内的4哥寄存器组。中断函数的完整语法如下:
返回值 函数名([参数])[模式][重入]interrupt n[usingn]
unsigned int interruptcnt;
unsigned char second;
void timer0(void) interrupt 1 using 2
if(++interruptcnt==4000) // 计数到4000
second++; //另一个计数器
interruptcnt=0; //计数器清零
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-30
这样恐怕编译不通过吧。

你想想,中断函数是硬件调用的,你想返回什么给硬件?

如果你想返回什么信息给主程序的话就只能使用全局变量了。暂时我都没想到其他好的方法。

通常像你这种情况我是使用队列表的,由中断函数把读到的数据写入队列,然后在主程序读数的时候就可以逐个字节读出了。当然,51就不要用链表做队列表了。通过指针求余就好了。本回答被提问者采纳
第2个回答  2010-07-30
中断函数不会返回

中断函数是一个特殊的函数,没有参数,也没有返回值;但是程序中允不允许使用return呢?答案是允许的,不过只能用"return;",不能用"return(z);";用在一些需要快速返回的地方,对应的汇编会有多个ret语句,相对效率会高一些。
第3个回答  2010-08-04
把tempchar定义为一个全局变量不就行了,中断函数不能有返回值
第4个回答  2010-07-30
不会吧

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网