单片机C程序设计基础
时间:2026-01-21
时间:2026-01-21
单片机C程序设计基础
4.1 C51程序开发概述 4.2 C51数据类型 4.3 C51运算符和表达式 4.4 C51构造数据类型简介 4.5 C51函数 4.6 预处理命令、库函数 4.7 汇编语言与C语言混合编程 4.8 模块化程序设计 4.9 51单片机C程序开发过程
4.1 C51程序开发概述在C语言编程中,对数据类型与变量的定义,必 须要与单片机的存储结构相关联,否则编译器不能 正确地映射定位。 C51编译器能自动完成变量的存储单元的分配, 编程者可以对常用的接口芯片、功能模块和算法编 制通用的驱动函数,可以方便地进行信号处理算法 和程序的移植,从而加快单片机开发速度。 用C语言编写单片机应用程序与编写标准的C语 言程序的不同之处就在于根据单片机存储结构及内 部资源定义相应的C语言中的数据类型和变量,其它 的语法规定、程序结构及程序设计方法都与标准的C 语言程序设计相同。
4.2
C51数据类型
4.2.1 C51的标识符与关键字 C51与任何高级语言一样,有规定的符号、词汇和语 法规则。C51的标识符的意义及用途与标准C相同。 关键字是C51已定义的具有固定名称和特定含义的特 殊标识符,又称保留字,源程序中用户自己命名的标 识符不能和关键字相同。 4.2.2 数据类型 C51常用的基本数据类型有无符号字符型、有符号字 符型、无符号整型、有符号整型、无符号长整型、有 符号长整型、浮点型、指针,这些类型和标准C相同。 需注意在C51编译器中int和short相同,float和double 相同 ,C51扩展的数据类型有bit、sbit、sfr、sfr16 。
1.char 字符类型 char类型的长度是一个字节,通常用于定义处 理字符数据的变量或常量。 分无符号字符类型unsigned char和有符号字 符类型signed char,默认值为signed char类 型。 2.int 整型 int整型长度为两个字节,用于存放一个双字节 数据。 分有符号int整型数signed int和无符号整型数 unsigned int,默认值为signed int类型。
3.long 长整型
long长整型长度为四个字节,用于存放一个四字 节数据。分有符号long长整型signed long和无符 号长整型unsigned long,默认值为signed long类 型。
4.float 浮点型
float浮点型在十进制中具有7位有效数字,是符合 IEEE-754标准的单精度浮点型数据,占用四个 字节。
5.指针型
指针型本身就是一个变量,在这个变量中存放的 是另一个数据的地址。这个指针变量要占据一定 的内存单元,对不同的处理器长度也不尽相同
6.bit 位变量 bit位变量是C51编译器的一种扩充数据类型,利用它 可定义一个位变量,但不能定义位指针,也不能定义 位数组。它的值是一个二进制位,不是0就是1。 它的声明与别的C数据类型
的声明相似,例如: static bit done_flag=0; //位变量位函数 位参数
bit testfunc(bit flag1, bit flag2 ) { ………. return(0); }
//位返回值
所有的bit变量都放在80C51内部存储区的可位 寻址区,而该区域只有16字节长,所以在某个 范围内只能声明最多128个位变量。 C51编译器对bit变量的声明及使用有如下限制: 1)禁止中断的函数(#pragma disable)和使用 一个明确的寄存器组(using n)声明的函数不 能返回一个位值。 2)一个位不能被声明为一个指针 例如: bit*ptr; //无效的 3)不能声明一个bit类型的数组,例如: bit ware[5]; //无效的
7.sfr 特殊功能寄存器 sfr也是一种扩充数据类型,占用一个内存单元, 值域为0~255。利用它可以访问51单片机内部 的所有特殊功能寄存器。 8.sfr16 16位特殊功能寄存器 sfr16占用两个内存单元,值域为0~65535。 sfr16和sfr一样用于操作特殊功能寄存器,所不 同的是它用于操作占两个字节的寄存器,如定 时器T0和T1。 9.sbit 可寻址位 sbit是C51中的一种扩充数据类型,利用它可以 访问芯片内部的RAM中的可寻址位或特殊功能 寄存器中的可寻址位。
当用sbit访问内部数据存储区的可位寻址区,则必须 要有用bdata存储类型声明的变量并且是全局的,即 必须有如下变量声明: int bdata ibase; //可位寻址的整型变量 char bdata array[4];//可位寻址的字符型数组 变量ibase和bary是可位寻址的,因此这些变量的每 个位是可以直接访问和修改的,故可以用sbit关键字 声明新的变量,来访问它们的各个位,例如: sbit Ary07=array[0]^7; //数组元素array[0]的第7位 上面的例子只是声明并不分配位空间。例子中“^”符 号后的表达式指定位的位置,此表达式必须是常数, 其范围由声明的基变量决定
4.2.3
数据的存储器类型
C51变量定义中的存储器类型部分指定了该变量的存储区域, 存储器类型可以由关键字直接声明指定。C51编译器支持的 存储器类型如表
表4-1 C51存储器类型
4.2.4
常量和变量
1.常量 常量是在程序运行过程中不能改变的量,常量 的数据类型只有整型、浮点型、字符型、字符 串型和位标量。常量的数据类型说明方式如下:
1)整型常量可以表示为十进制如123,0,-66等, 也可以表示为十六进制,以0x开头,如0x12,0xf4 等,长整型在数字后面加字母L,如100L、36L等。 2)浮点型常量可分为十进制和指数表示形式。十 进制由数字和小数点组成,如0.456,0.10等整数 和小数部分为0,可以省略但必须有小数点。指数 表示形式为:[±]数字[. 数字]E[±]数字,[ ]中的内 容为可选项,如123e4,82e-3等。 …… 此处隐藏:1770字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:安全生产标准化台帐之十职业健康