51单片机基础剖析(基于C语言)
C51中断程序编写要求:
1.中断函数不能进行参数传递,否则,将导致编译出错
2.中断中,不能包含任何参数声明,否则,将导致编译出错。
3.中断函数没有返回值,如果企图定义一个返回值将得到不正确的结果,因些建议在定义中断函数的时将其定义为void 类型,明确说明没有返回值。
4.任何情况下都不能直接调用中断函数,否则会主生编译出错。
5.如果中断函数中用到了浮点运算,必须保存浮点寄存器的状态。当没有其它的程序执行浮点运算时(即只有中断中用到浮点运算),可以不用保存。
6.如果中断函数中调用了其它函数,则被调用的函数所使用的寄存器组必须与中断函数相同,用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须引起足够的注意,如果定义中断函数时没有使用using选项,则由编译器选择一个寄存器组作绝对寄存器访问。另外,不断的产生不可预测,中断函数对其它函数的调用可能形成递规调用,需要时,可将被中断调用的其它函数定义为再入函数。
浅析函数的递规调用与再入函数:
函数的递规调用: 在调用一个函数的过程中双直接或间接的调用该函数本身;
再入函数:一种可以在函数体内直接或间接调用其自身的一种函数。
C51编译器采用一个扩展关键字reentrant 作为定义函数时的选项,需要将一个函数定义为再入函数时,只要在函数名后加上关键字reentrant即可。空不空格以及空几格都无所谓。
再入函数剖析:
再入函数可被递归调用,无论何时,包括中断服务函数在内的任何函数都可调用再入函数。与非再入函数的参数传递和局部就是的存储分配方法不同,C51编译器为每个再入函数都生成一个模拟栈。模拟栈所在的存储器空间根据再入函数的存储模式的不同,可以分配到DATA,PDATA 或XDATA。
对再入函数有如下规定:
1.再入函数不能传送bit类型的参数。也不能定义一个局部位变量,再入函数不能包括位操作以及8051系列单片机的可位寻址区。
2.与PL/ M51兼容的函数,不能具有reentrant属性,也不能调用再入函数。
3.编译时,在存储器模式的基础上,为再入函数在内部或外部存储中建立一个模拟堆栈区,称为再入栈,再入函数的局部变量及参数被放在再入栈中,从而使得再入函数可以进行递规调用。再非再入函数的局部变量被放在再入栈之外的暂存区内,如果对非再入函数进行递规调用,则上次调用时使用的局部变量数据将被覆盖。
4.在同一个程序中可以定义和使用不同存储器模式的再入函数,任意模式的再入函数不能调用不同模式的再入函数,但可以任意调用非再入函数。
5.在参数的传递上,实际参数,可以传递给间接调用的再入函数,无再入属性的间接调用函数不能包含调用参数。但是可以使用定义的全局变量来进行参数传递。
四、C51指针深度剖析(非常重要,嵌入式系统开发人员必须要掌握的内容)
注意:由于篇幅所限,本人暂时不打算讨论抽象指针的内容。但是你必须上网或去图书馆找找关于抽象指针的资料好好看看,抽象指针很有用的。
指针是C语言中的一个重要概念,使用也十分普遍,正确使用指针类型数据可以有效的表示复杂的数据结构,直接处理内存地址,而且可以更为有效的使用数组。
在C语言中,为了能够实现直接对内存单元的操作,引入了指针类型的数据,指针类型数据是专门用来确定其它数据类型的地址的,因此一个变量的地址就被称为该变量的指针如: 一个整形变量i 存放在内存单元40H中,则该内存单元地址40H就是变量i 的指针。如果有一个变量专门用来存放另一个变量的地址,则称之为“指针变量”
变量指针与指针变量
变量的指针: 是指某个变量的地址,而一个指针变量里面存放的是另一个变量在内存中的地址。拥有这个地址的变量则称为该指针变量所指向的变量。 所以每个变量都有它自己的指针(地址),而每一个指针变量都是指向另一个变量的。C语言中用符号“*”来表示“指向”,如下:
i=50;
*ip=50;
如果指针ip这个指针变量指向i那么,两个赋值表达或同义,第二个表达式可以解释为“给指针变量ip所指向的变量赋值50”。
(1).指针变量的定义
指针变量的定义与一般变量的定义类似,其一般形式如下:
数据类型 [存储器类型] * 标识符;
标识符, 是所定义的指针变量名
数据类型, 说明了该指针变量所指向的变量类型
存储器类型,是可选的,它是C51编译器的一种扩展,如果带有此选项,指针被定义为基于存储器的指针,无此选项时,被定义为一般指针,这两种指针的区别在于它们的存储字节不同。
一般指针:占用三个字节,第一个字节存
51单片机C语 相关文章:
- Proteus运行Keil编写的51单片机C语言步骤(11-30)
- 《世上只有妈妈好》51单片机C语言程序(11-26)
- 51单片机C语言编程中对单片机绝对地址访问的两种方法(11-26)
- 硬件仿真器会不会被淘汰(11-26)
- 51单片机C语言头文件及其使用(11-26)
- 51单片机的C语言延时的一些总结(11-25)