赞
踩
面向机器的编程语言(能直接操作单片机的系统硬件)
具有指令效率高、执行速度快的优点
低级编程语言
程序可读性差,移植困难,且编程时必须具体组织、分配存储器资源和处理端口数据
为51系列单片机设计的一种C语言,是标准C语言的子集
具有结构化语言特点和机器级控制能力,代码紧凑,效率可与汇编语言媲美
程序的可读性强,易于调试维护,编程工作量小,产品开发周期短
C51程序的基本单元是函数
一个C51源程序至少包含一个主函数(主函数是程序的入口)
main()函数一对圆括号()必须有,不能省略
C51语言程序基本结构
- 包含<头文件>
- 函数类型说明
- 全局变量定义
- main(){
- 局部变量定义
- <程序体>
- }
- func1(){
- 局部变量定义
- <程序体>
- ...
- }
- funcN(){
- 局部变量定义
- <程序体>
- ...
- }

变量的基本属性:变量名、变量值(变量名与存储单元地址相对应,变量值与存储单元的内容相对应)
定义变量
- [存储种类] 数据类型 [存储类型] 变量名;
-
- 1
1
- - sfr特殊功能寄存器型:21个特殊功能寄存器(地址为80H~FFH)
-
- ```C
- sfr sfr_name = 地址常数 //8位SFR
- sfr16 sfr16_name = 地址常数 //16位SFR
-
- 12
- - sfr sfr_name是一个特殊功能寄存器名
-
- - “=”后面必须是常数
-
- - 数值范围必须在特殊功能寄存器地址范围内(0x80~0xFF)
12 ```
12
- - sbit 位变量名=SFR名称^位位置
-
- ```C
- sfr PSW=0xD0
- sbit CY=PSW^7
- //SFR名称必须是己定义的SFR名字
- //位位置是一个0~7之间的常数
-
- 1234
- - sbit 位变量名=字节地址^位位置
-
- ```C
sbit CY=0xD0^7 //以一个常数(字节地址)作为基地址,该常数必须在0x80~0xFF之间
自动变量:使用存储种类说明符auto定义的变量
作用范围在定义它的函数体或复合语句内部
如果省略存储种类,则变量默认为自动变量
将函数体内和复合语句中使用频繁的变量放在片内RAM中,且定义为自动变量(有效利用片内有限的RAM资源)
外部变量:使用存储种类说明符extern定义的变量
将多个函数或模块共享的变量定义为外部变量
外部变量是全局变量,在程序执行期间一直占有固定的内存空间
静态变量:使用存储种类说明符static定义的变量
内部静态变量(当离开函数时数值不被改变):在函数体内部定义的静态变量
外部静态变量:在函数体外部定义的静态变量
寄存器变量:使用存储种类说明符register定义的变量
将使用频率最高的那些变量定义为寄存器变量
C51基本数据类型(有符号数据类型可忽略signed标识符)
特殊数据类型
bit位型:定义一个位变量(0或1)
```C bit bit_name [=0或1]
sbit可位寻址型:定义可寻址的特殊功能寄存器的位寻址对象
sbit 位变量=位地址
```C sbit CY=0xD7
//将位的绝对地址赋给变量名(位地址必须位于0x80~0xFF之间)
sbit与bit的区别
bit型变量的位地址是由编译器为其随机分配的
sbit型变量的位地址是由用户指定的
sfr型变量和sbit型变量必须定义为全局变量(必须在所有C51函数之前定义)
用预处理命令#include 后可使用特殊功能寄存器明和特殊位名称
存储类型(6种):data、bdata、idata、xdata、pdata、code
- 数据类型*指针变量名; //被指变量和指针变量都位于C编译器默认的存储区中
-
- 1
C51指针的一般定义形式
- #include<reg51.h>
- void main(void){
- unsigned char i=0; //定义变量i
- #pragma asm //嵌入汇编代码
- MOV R0,#0AH
- LOOP:INC A //累加器循环加1
- DJNZ R0,LOOP
- #pragma endasm
- i=ACC; //累加器结果传给i
- }
变量定义时必须指明其所属类型,否则无法选择存储空间
如果再定义变量时省略了存储类型说明符,C51编译器会根据当前编译模式自动认定默认存储变量
编译模式(3种):小编译模式(Small)、紧凑编译模式(Compact)、大编译模式(Large
C51规定变量名可以由字母、数字和下划线3种字符组成(第一个字符必须为字母或下划线)
大写的变量和小写的变量不同(习惯上变量用小写表示)
变量名除了应避免使用标准C语言的32个关键字外,还要避免使用C51拓展的新关键字
C51拓展的21个关键字
- 数据类型 [存储类型1] * [存储类型2] 指针变量名
- //数据类型:被指向变量的数据类型
- //存储类型1:被指向变量所在的存储区类型
- //存储类型2:指针变量所在的存储区类型
C51编译器的编译规则
程序的寻址:通过在汇编文件中定义同名的“函数”来实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。