KEIL中的变量相关

时间:2022-04-15 19:43:32

例:sfr P0=0x80表示P0口地址为80H;(sfr是字节操作) 
sfr16 T2=0xCC表示T2口地址的低地址为TL2=0XCC,高地址为TH2=0XCD(sfr16是字操作) 
头文件reg51.h定义了所有8051的特殊功能寄存器

变量的链接属性(linkage) 
链接属性决定如何处理在不同文件中现的标示符,链接属性有3种: 
vexternal:属于此属性的标示符无论声明多少次、位于几个源文件都表示同一个实体; 
vinternal:属于此属性的标示符在同一个源文件内的所有声明都指同一实体,但位于不同源文件的多个声明则分属不同实体; 
none:没有链接属性的标示符(none)总是被当作单独的实体;

变量的作用域(scope) 
当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问,此区域称为该变量的作用域。变量声明的位置决定了它的作用域,变量声明的位置有3种: 
一.在函数以外的地方声明:为全局变量,可被整个函数所使用,其视野遍布于整个程序; 
二.在函数里面声明:为局部变量,只能给该函数所使用,其视野遍布于该函数内部; 
三.函数的形式参数声明(函数体外的形参说明或在形参表列处说明):此变量用于接收调用者所传递来的参数,其视野和局部变量一样,只能在该函数内使用;

中断
void   函数名(void)   interrupt  n 
     { 
         // 中断函数体;
      } 
例: 
void timer0_Interpt(void) interrupt 1
{   
        printf("I am TIMER0, I am ready  \n"); 
}

注意:中断函数不能有入口参数或者返回值;不能直接在程序中调用;
用using函数属性说明符可以指定中断函数使用的寄存器组;
优点:
   可避免用堆栈保存和恢复寄存器组,以节省处理时间;
?  当指定工作寄存器组时,保护工作寄存器组的工作可以被省略;C51默认使用寄存器组0,
缺点:
   是所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误;
   当有多个中断使能时,不建议各中断采用using指定寄存器组