51的中断函数问题

2020-01-24 11:56发布

本帖最后由 wildone 于 2014-4-4 00:18 编辑

请问各位高手,
问题1:C语言中,51中断函数不在主函数里面,写在其它文件,能顺利进入中断吗?
问题2:C 语言中,51中断函数里面不写吗?这样会不会出问题?
            例如   void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
                    {  
                    
                     }

问题3:C语言中,51主函数文件里面有个全局变量unsigned char TEMP=0;,其它模块文件里面有个子函数里面有个变量如  void  delay  (unsigned int TEMP);   这样有影响吗?

问题4:C语言中,51主函数文件里面有个全局变量unsigned char TEMP=0;  ,其它模块文件里面有个子函数里面有个变量如
                                                unsigned char  delay  (unsigned int A)
                                                         {
                                                                return TEMP;
                                                                }                                                                               
                                                                 这样有影响吗?
       
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
戒魔
1楼-- · 2020-01-25 09:33
MARK一下
gosfon
2楼-- · 2020-01-25 14:32
本帖最后由 gosfon 于 2014-4-15 14:39 编辑

前两个问题大家都说了,不过问题1要注意一点,你得把包含中断程序的那个文件加入在Keil(假设你用这个)的工程中。

我补充一下问题3和问题4

问题3,如果一个函数中有一个变量与全局变量同名(设为Temp),运行时会这样处理,在进入函数前,
先保存全局变量Temp的值到堆栈中,进入函数内后就和全局变量Temp无关了,函数内只和内部定义的Temp有关,
退出函数后,将全局变量Temp的值从堆栈中还原。

  1. #include <stdio.h>

  2. unsigned int delay(unsigned int Temp ) {
  3.     while(Temp) {
  4.         Temp--;
  5.     }
  6.     printf("局部变量Temp = %u ", Temp);
  7.     return Temp;
  8. }

  9. unsigned int Temp = 5; // 全局变量

  10. void main(void){
  11.         printf("全局变量Temp = %u ", Temp);
  12.         delay(Temp);  // 调用函数,其中delay函数有个同名的变量Temp
  13.         printf(" 全局变量Temp = %u ", Temp);
  14. }


  15. /* 运行结果
  16. 全局变量Temp = 5

  17. 局部变量Temp = 0

  18. 全局变量Temp = 5
  19. */
复制代码

问题4,和问题3的解决方法一样,函数内部的同名变量不会影响外部的同名变量,各算各的,里面的不会修改外面的,外面的也不会修改里面的

一周热门 更多>