微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机基础剖析(基于C语言)

51单片机基础剖析(基于C语言)

时间:11-20 来源:互联网 点击:

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编译器的一种扩展,如果带有此选项,指针被定义为基于存储器的指针,无此选项时,被定义为一般指针,这两种指针的区别在于它们的存储字节不同。

一般指针:占用三个字节,第一个字节存

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top