第3章C51基本语法3.1C51程序结构和特点3.2C51数据类型3.3C51运算符和表达式3.4C51语句和结构化程序设计3.5C51的数组、结构和联合3.6C51的指针3.7C51的函数和中断函数3.8预处理命令、库函数3.1C51程序结构和特点3.1.1C51程序的结构特点(1)源程序有一个或多个源文件组成,扩展名C(2)源文件中含有若干个函数在整个程序中只有一个(必须)主函数,viodmain(viod)程序从main()开始执行,调用其它函数。(3)源程序中含有预处理命令、语句、说明等(4)源程序中可以加注释3.1.2C51的字符集、标识符与关键字一、字符集和词汇字符集:0一9,a一Z,A一Z,下划线,运算符等词汇:由上述符号组成词汇二、标识符用于标识源程序中某个对象的名称三、关键字C51中已定义的、有特定含义的特殊标示符
第 3 章 C51 基本语法 3.1 C51 程序结构和特点 3.2 C51 数据类型 3.3 C51 运算符和表达式 3.4 C51 语句和结构化程序设计 3.5 C51 的数组、结构和联合 3.6 C51 的指针 3.7 C51 的函数和中断函数 3.8 预处理命令、库函数 3.1 C51 程序结构和特点 3.1.1 C51 程序的结构特点 (1)源程序有一个或多个源文件组成,扩展名 .C (2)源文件中含有若干个函数在整个程序中只有一个(必须)主函数,viod main(viod)程序 从 main( )开始执行,调用其它函数。 (3)源程序中含有预处理命令、语句、说明等 (4)源程序中可以加注释 3.1.2 C51 的字符集、标识符与关键字 一、字符集和词汇 字符集:0—9,a—z,A—Z,下划线,运算符等 词汇:由上述符号组成词汇 二、标识符 用于标识源程序中某个对象的名称 三、关键字 C51 中已定义的、有特定含义的特殊标示符
3.2C51数据类型3.2.1C51数据类型3.2.2常量一、整型常量(1)八进制整数,以O开始,后跟数字,如O123(2)十六进制整数,以0X开始,后跟数字,如0Xaf(3)十进制整数,没有前缀,如125二、字符型常量(1)普通字符如“A',B"其值为ASCLL码。“A值0X41,B值OX42(2)转义字符三、字符串常量用双括号引,如“AKJN”,“8051”四、实型(浮点型)常量一般格式:【土】整数部分.小数部分指数部分123.e10变量3.2.3一、变量定义格式单片机内有RAMISFRI外部RAM/IO等存储区域变量定义的一般格式:【存储种类】数据类型【存储器类型】变量名(或变量表名)存储种类有:动态(auto),静态(auto),寄存器(register)无说明,默认是动态二、整型变量4种:Int有符号基本整型无符号基本整型unsigned intLong有符号长整型无符号长整型unsigned long三、字符型变量(1)有符号字符型变量signed char
3.2 C51 数据类型 3.2.1 C51 数据类型 3.2.2 常量 一、整型常量 (1)八进制整数,以 O 开始,后跟数字,如 O123 (2)十六进制整数,以 0X 开始,后跟数字,如 0Xaf (3)十进制整数,没有前缀,如 125 二、字符型常量 (1)普通字符 如‘A’, ’B’ 其值为 ASCLL 码。 ‘A’值 0X41, ’B’值 0X42 (2)转义字符 三、字符串常量 用双括号引,如“AKJN”, “8051” 四、实型(浮点型)常量 一般格式: 【±】整数部分.小数部分 指数部分 123.e10 3.2.3 变量 一、变量定义格式 单片机内有 RAM\SFR\外部 RAM/IO 等存储区域变量定义的一般格式: 【存储种类】数据类型【存储器类型】变量名(或变量表名) 存储种类有: 动态(auto),静态(auto),寄存器(register) 无说明,默认是动态 二、整型变量 4 种: Int 有符号基本整型 unsigned int 无符号基本整型 Long 有符号长整型 unsigned long 无符号长整型 三、字符型变量 (1)有符号字符型变量 signed char
(2)无符号字符型变量unsigned char四、实型变量C51支持单精度实型变量(也称浮点型),关键字float如:floatx长度为4字节3.2.4存储器类型和存储模式一、存储器类型二、存储模式3种SMALL(小模式)缺省存储器类型说明的变量均放在idata区域COMPACT紧凑模式)缺省存储器类型说明的变量均放在pdata区域LARGE(大模式)缺省存储器类型说明的变量均放在xdata区域3.2.5C51扩展的数据类型1.普通位变量bit普通位变量bit只能放在内部RAM中,定义格式:bit【存储器类型】变量名bitbdatakey-flbit idata dis-fl2.特殊功能寄存器sfr8位特殊功能寄存器用sfr说明,格式为:sfrSFR名=绝对地址3.可位寻址的特殊位变量sbit能位寻址的对象位于内部RAM的20H一2FH区域和SFR中地址能被8整除的特殊功能寄存器中,可字节寻址,也可位寻址。3种定义方法(1)指定已定义的可位寻址的SFR或bdata区变量的某一位(2)指定可位寻址的SFR的某一位(地址必须大于0x80)sbit FO=PSW△5sbit F1=PSW^1(3)指定可位寻址的SFR的某一位地址(地址必须大于0x80)sbitF1=0xdl4.16位特殊功能寄存器sfr16两个8位特殊功能寄存器,可以组成16位sfr16如定时器2的TL2和TH2寄存器,可以
(2)无符号字符型变量 unsigned char 四、实型变量 C51 支持单精度实型变量(也称浮点型),关键字 float 如:float x 长度为 4 字节 3.2.4 存储器类型和存储模式 一、存储器类型 二、存储模式 3 种 SMALL(小模式 ) 缺省存储器类型说明的变量均放在 idata 区域 COMPACT(紧凑模式 ) 缺省存储器类型说明的变量均放在 pdata 区域 LARGE(大模式 ) 缺省存储器类型说明的变量均放在 xdata 区域 3.2.5 C51 扩展的数据类型 1. 普通位变量 bit 普通位变量 bit 只能放在内部 RAM 中,定义格式: bit【存储器类型】 变量名 bit bdata key-fl bit idata dis-fl 2. 特殊功能寄存器 sfr 8 位 特殊功能寄存器用 sfr 说明,格式为: sfr SFR 名 = 绝对地址 3. 可位寻址的特殊位变量 sbit 能位寻址的对象位于内部 RAM 的 20H—2FH 区域和 SFR 中地址能被 8 整除的特殊功能寄 存器中,可字节寻址,也可位寻址。3 种定义方法: (1)指定已定义的可位寻址的 SFR 或 bdata 区变量的某一位 (2)指定可位寻址的 SFR 的某一位(地址必须大于 0x80) sbit F0 = PSW∧5 sbit F1 = PSW∧1 (3)指定可位寻址的 SFR 的某一位地址(地址必须大于 0x80)sbit F1 = 0xd1 4. 16 位特殊功能寄存器 sfr16 两个 8 位特殊功能寄存器,可以组成 16 位 sfr16 如定时器 2 的 TL2 和 TH2 寄存器,可以
组成16位sfr16,定义格式:sfr16SFR名=sfr16的低端地址,如定时器T2的TL2地址为0xcc,TH2地址为Oxcd,则可定义16位的特殊功能寄存器T2CNT,sfr16T2CNT=0xCC3.2.6绝对地址访问的变量sfr、sfr16、bit变量是指定绝对地址的变量C51程序对绝对地址单元的访问还可以使用宏定义实现用C51提供的宏定义文件absacc.h定义绝对地址变量定义格式如下:#define变量名XBYTE【绝对地址】I/在外部64KRAM中定义字节变量#define变量名XWORD【绝对地址】//在外部64KRAM中定义字变量#define变量名CBYTE【绝对地址】1/在程序存储器中定义字节变量#define变量名CWORD【绝对地址】//在程序存储器中定义字变量#define变量名PBYTE【绝对地址】I/在外部RAM某页中定义字节变量#include <absacc.h>1/预处理命令#define变量名DBYTE【绝对地址】I在内部RAM中定义字节变量#define变量名DWORD【绝对地址】1/在内部RAM中定义字变量#define变量名PWORD【绝对地址】//在外部RAM某页中定义字变量#definePA8155XBYTE[0xdff1]//定义8155A3.3运算符和表达式算数运算符、逻辑运算符、位操作运算符、条件运算符、逗号运算符、求字节数运算符、特
组成 16 位 sfr16,定义格式: sfr16 SFR 名 = sfr16 的低端地址,如定时器 T2 的 TL2 地址为 0xcc, TH2 地址为 0xcd, 则可定义 16 位的特殊功能寄存器 T2CNT:,sfr16 T2CNT = 0xcc 3.2.6 绝对地址访问的变量 sfr、sfr16 、bit 变量是指定绝对地址的变量 C51 程序对绝对地址单元的访问还可以使用宏定义实现 用 C51 提供的宏定义文件 absacc.h 定义绝对地址变量 定义格式如下: #define 变量名 XBYTE【绝对地址】 //在外部 64KRAM 中定义字节变量 #define 变量名 XWORD【绝对地址】 //在外部 64KRAM 中定义字变量 #define 变量名 CBYTE【绝对地址】 //在程序存储器中定义字节变量 #define 变量名 CWORD【绝对地址】 //在程序存储器中定义字变量 #define 变量名 PBYTE【绝对地址】 //在外部 RAM 某页中定义字节变量 #include <absacc.h> //预处理命令 #define 变量名 DBYTE【绝对地址】 //在内部 RAM 中定义字节变量 #define 变量名 DWORD【绝对地址】 //在内部 RAM 中定义字变量 #define 变量名 PWORD【绝对地址】 //在外部 RAM 某页中定义字变量 #define PA8155 XBYTE [0xdff1] //定义 8155A 口 3.3 运算符和表达式 算数运算符、逻辑运算符、位操作运算符、条件运算符、逗号运算符、求字节数运算符、特
殊等运算符:算数运算符、逻辑运算符、位操作运算符、算数运算符、逻辑运算符、位操作运算符表达式:用算符和括号将运算对象连接起来并符合C语法规则的式子叫表达式3.3.1算数运算符和算数表达式算数运算符I(1)加、减、乘、除都是双目运算符,具有左结合性(2)%求余运算符,双目,两个量都必须是整数(3)+(取正)、-(取负)都是单目运算符,具有右结合性(4)++(自增1)、-(自减1)都是单目运算符,具有右结合性++变量;--变量;//先使变量加1或减1,后使用变量变量++:变量-.;//先使用变量,后将变量加1或减1,二、算数表达式3.3.2位运算符和位运算位运算符对数据进行按位运算,只能用于字符型和整型数据一、按位与运算符&P1= P1 &Oxfe//清零P1口第0位二、或运算符P1= P1 0x1//置“1”P1口第0位三、按位异或运算符入四、按位取反运算符~五、左移运算符<<六、右移运算符>3赋值运算符和赋值表达式3.3.3一、赋值运算符和赋值表达式一般形式:变量=表达式例如:unsignedint a,b,x,y;X= a+b;
殊等 运算符: 算数运算符、逻辑运算符、位操作运算符、算数运算符、逻辑运算符、位操作运 算符 表达式: 用算符和括号将运算对象连接起来并符合 C 语法规则的式子叫表达式 3.3.1 算数运算符和算数表达式 一、 算数运算符 (1) 加、减、乘、除都是双目运算符,具有左结合性 (2) % 求余运算符,双目,两个量都必须是整数 (3) + (取正)、- (取负)都是单目运算符,具有右结合性 (4) ++(自增 1)、- - (自减 1)都是单目运算符,具有右结合性 ++变量;- -变量; //先使变量加 1 或减 1,后使用变量 变量++ ;变量- - ; //先使用变量,后将变量加 1 或减 1, 二、算数表达式 3.3.2 位运算符和位运算 位运算符对数据进行按位运算,只能用于字符型和整型数据 一、按位与运算符 & P1 = P1 & 0xfe //清零 P1 口第 0 位 二、或运算符 P1 = P1 0x1 //置“1”P1 口第 0 位 三、按位异或运算符 ∧ 四、按位取反运算符 ~ 五、左移运算符 << 六、右移运算符 >> 3.3.3 赋值运算符和赋值表达式 一、 赋值运算符和赋值表达式 一般形式: 变量 = 表达式 例如:unsigned int a , b , x , y; x = a+b;