文档详情

第6讲 单片机的C语言编程.ppt

发布:2018-06-23约1.45万字共61页下载文档
文本预览下载声明
8位单片机接口与汇编 大连理工大学软件学院 嵌入式系统教研室 邱铁 qiutie@dlut.edu.cn 综合楼413,04113.static: 使用static定义的变量称为静态变量。它又分为内部静态变量和外部静态变量。在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。 (3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。 (4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。 (5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容 例如:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。 例如:MOV A,20H。在指令中直接给出所访问的内存单元地址20H,访问的是地址为20H的单元的数据,该指令把地址为20H的片内RAM单元的内容送累加器A; 间接寻址是指所操作的数据所在的内存单元地址不是通过指令中直接提供,该地址是存放在寄存器中或其它的内存单元中,指令中指明存放地址的寄存器或内存单元来访问相应的数据。 在C语言中,数据通常是以变量的形式进行存放和访问的。 对于变量,在一个程序中定义了一个变量,编译器在编译时 就在内存中给这个变量分配一定的字节单元进行存储。如对整型变量(int)分配2个字节单元,对于浮点型变量(float)分配4个字节单元,对于字符型变量分配1个字节单元等。 变量在使用时分清两个概念:变量名和变量的值。前一个是数据的标识,后一个是数据的内容。变量名相当于内存单元的地址,变量的值相当于内存单元的内容。 对于变量也有两种访问方式:直接访问方式和间接访问方式。 直接访问方式。对于变量的访问,我们大多数时候是直接给出变量名。例如:printf(“%d”,a)。 在执行时,根据变量名得到内存单元的地址,然后从内存单元中取出数据按指定的格式输出。 间接访问方式。例如要存取变量a中的值时,可以先将变量a的地址放在另一个变量b中,访问时先找到变量b,从变量b中取出变量a的地址,然后根据这个地址从内存单元中取出变量a的值。 在这里,从变量b中取出的不是所访问的数据,而是访问的数据(变量a的值)的地址,这就是指针,变量b称为指针变量。 指针变量经过定义之后可以象其他基本类型变量一样引用。例如: int x,* px,* py; /*变量及指针变量定义*/ px=x; /*将变量x的地址赋给指针变量px,使px指 向变量x*/ * px=5; /*等价于x=5*/ py=px; /*将指针变量px中的地址赋给 指针变量py,使指针变量py也指向x*/ 六.位变量 在C51中,允许用户通过位类型符定义位变量。位类型符有两个:bit和sbit。可以定义两种位变量。 bit位类型符用于定义一般的可位处理位变量。它的格式如下: bit 位变量名; 在格式中可以加上各种修饰,但注意存储器类型只能是bdata、data、idata。只能是片内RAM的可位寻址区,严格来说只能是bdata。 【例】 bit型变量的定义。 bit data a1; /*正确*/ bit bdata a2; /*正确*/ bit pdata a3; /*错误*/ bit xdata a4; /*错误*/ sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。格式如下: sbit 位变量名=位地址; 如位地址为位直接地址,其取值范围为0x00~0xff;如位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。字节地址与位号之间、特殊功能
显示全部
相似文档