第五讲 单片机C语言(1)
Select Folder for Objects:用于选择最终目标文件所在文件夹,默认是 与工程文件在同一个文件夹中。
Name of Executable:用于指定最终生成的目标文件名字,默认与工程 名字相同。
Create Library:用于确定是否将目标文件生成库文件。
6
③Listing选项卡 用于调整生成的列表文件选项,在汇编或编译完成后将产生(*.lst)列表 文件,在链接完成后也将产生(*.m51)列表文件。 ④C51 选项卡 用于对Keil C51编译器的编译过程进行控制。其中较常用的是Code Optimization选项,其Level下拉列表框用于优化等级设置。 ⑤Debug选项卡 用于设置调试方式。
4
c. 工程的设置
在uVision IDE界面中单击工程管理窗口中的Target1,然后选择 Project—Option for target ‘target1’,打开工程设置对话框。
①Target选项卡
Xtal:Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高 可用频率值。
Memory Model:用于设置RAM使用情况
8
3.数据的类型、运算符与表达式
(1)常量与变量 在程序运行过程中,其值不能被改变的量称为“常量”; 在程序运行过程中,其值可以改变的量称为“变量”。 例 在P1口接有8个LED,要求点亮P1.0所接LED。 #define Light0 0xfe #include “reg51.h” void main( ) { P1=Light0; } 分析:程序中用”#define Light0 0xfe”来定义符号Light0,以后程 序中所有出现Light0的地方均会用0xfe来替代。该程序执行结果就 是P1=0xfe,即接在P1.0引脚上的LED被点亮。
16
●关系运算符 < 小于 <= 小于等于 > 大于 >= 大于等于 == 等于 != 不等于 前4种关系运算符高于后2种关系运算符。 ●逻辑运算符 && 逻辑“与” || 逻辑“或” ! 逻辑“非” ●运算符优先次序 关系运算符的优先级低于算术运算符,高于赋值运算符(=)。 C语言逻辑运算符与算术运算符、关系运算符、赋值运算符之间 的优先级为:逻辑非(!)优先级最高,算术运算符次之,关系运算 符再次之,”&&”和”||”又次之,赋值运算符最低。 ●条件运算符 一般形式为: 表达式1? 表达式2:表达式3
②Output选项卡
Create Hex File:用于生成可执行代码文件,该文件用编程器写入单片 机芯片,文件格式为Intel HEX,文件扩展名为.HEX。默认情况下该项 未被选中,如果要写片做硬件实验,必须选中此项。
Debug Infromation:用于产生调试信息。
Browse Information: 用于产生浏览信息。
如 if(a>=3) b=0; ②if(表达式)
语句1
else 语句2
描述:如果表达式的结果为“真”,则执行语句1;否则执行语 句2。
19
如 if(a>=3)
b=0;
else
b=100; ③if (表达式1)
语句1 else if (表达式2)
语句2 else if (表达式3)
语句3
…… else if (表达式m)
11
●实型变量:其定义形式为; 修饰符 变量名 定义实型变量的修饰符是float 和double。 如 float f1; double f2; ●实型数据在内存中的存放形式: 一个实型数据一般在内存中占4字节(32位),按指数形式存 储。 其中1位符号位,8位指数位,23位尾数。 (5)Keil特有的数据类型 ●位型数据:使用一个二进制位来存储数据,其值只有0和1两种。 如 bit flag=0; //定义一个位变量 所有的位变量存储在80C51单片机内部RAM中的位寻址区。由于 80C51只有16字节的位寻址区,所以程序中最多只能定义128个位 变量。
②C51编译器 Keil C51编译器遵循ANSI C语言标准,并增加了一些支持 80C51系列单片机结构的特性。
③A51 汇编器 Keil A51汇编器支持80C51及其派生系列的所有指令集。
④LIB 51库管理器
⑤BL51 链接器/定位器
⑥OH51 目标文件生成器
⑦Monitor-51 调试器
3
(1)顺序结构程序 是最基本、最简单的编程结构。程序由低地址向高地址顺序执行指 令代码。
18
(2)选择结构程序 ●选择语句if if语句是用来判定所给定的条件是否满足,根据判定的结果(“真” 或“假”)执行给出两种操作中的一种操作。其3种基本形式如下: ①if(表达式) 语句 描述:如果表达式为“真”,则执行语句;否则执行if语句后面 的语句。
12
●sfr型数据
80C51内部有一些特殊功能寄存器sfr,为此C51增加了sfr型数 据,增加了sfr, sfr16 和sbit这3个关键字。
sfr16是用来定义16位特殊功能寄存器,标准80C51单片机只有 一个16位SFR,即DPTR,其定义形式为:
sfr16 DPTR=0x82;
(6)80C51中数据的存储位置
第五讲 单片机C语言(1)
1
1. C程序特性
①C程序是由函数构成的。一个C源程序至少包括一个函数,一个C 源程序有且只有一个名为main( )的函数,也可能包含其它函数。 ②一个C语言程序总是从main函数开始执行的,不管其物理位置如何。 ③C语言区分大小写,必须遵守这一规定。 ④C语言书写的格式自由,可以在一行写多个语句,也可把一个语句 写在多行。 ⑤每个语句和定义的最后必须有一个分号,分号是C语句的必要组成 部分。 ⑥可以用/* ……*/的形式为C程序的任何一部分做注释,Keil C可以 用“//”注释语句。
17
例: max=(a>b)?a : b; 其执行过程为:如果(a>b)条件为”真”,则条件表达式取值a; 否则取值b。
4. C51流程与控制
C语言是一种结构化的编程语言,由若干个模块组成,每个模块包含 若干个基本结构,而每个基本结构可以有若干条语句。 C语言有3种基本结构: ●顺序结构; ●选择结构; ●循环结构;
14
(7) 运算符
C运算符分类表 ﹪---取模运算符或求余运算符,其两侧均应为整型数据,其结果也 为整数。 !---逻辑非 &&----逻辑与 ||----逻辑或 &---按位”与“ |---按位”或“ ^---按位”异或“ ~---按位取反 << ---位左移 >> ----位右移
15
例1 若a=0x4b, b=0xc8, 分别求 a&b, a|b, a^b, ~a, a<<2, a>>2的值。 a&b: 原则:“有0为0,全1为1” a|b: 原则:“有1为1,全0为0” a^b: 原则:“相同为0,不同为1” ~a: 原则:“0变1,1变0” a<<2: 原则:”移出位丢失,后面用0填充“ a>>2: 原则:“移出位丢失,后面用0填充” ●自增减运算符 ++i 先i值加1,再进行运算 i++ 先运算,再i值加1 - - i 先i值减1,再进行运算 i - - 先运算,再i值减1
(3)字符型数据
●字符型常量:C语言中的字符型常量是单引号括起来的一个字 符。如‘a’,‘A’
●字符型变量:一个变量只能存放一个字符
字符型变量的定义形式为:
修饰符 变量名
如 char c1, c2;
●字符型数据在内存中的存放形式:是将字符的ASCII码放到存 储单元。
(4)实型数据
●实型常量(实数):十进制小数形式、 指数形式。 如 123e3
●Small 所有变量都在单片机的内部RAM中。
●Compact 可以使用一页外部扩展RAM。
●Large 可以使用全部外部扩展RAM。
Code Rom Size:用于设置ROM空间的使用
●Small 只用低于2KB的程序空间。
●Compact 单个函数的代码量不能超过2KB,整个程序可以使用64KB 程序空间。
80C51单片机的存储器类型较多,有片内ROM、片外ROM、片 内RAM、片外RAM。其中,片内RAM又分为低128字节和高 128字节,高128字节只能用间接寻址方式来使用,低128字节 又分位寻址区和工作寄存器区。
●程序存储器
在C51中,使用关键字code来说明存储于程序存储器中的数据。
如 code int x=100; //此时x的值在程序运行中不能修改。
(2)Keil 软件的使用
a. 源文件的建立 uV2内集成一个文本编辑器,源文件可以由此直接输入。 选择File---New,在工程管理器的右侧打开一个新文件输入窗口,
在该窗口中输入源程序,完了保存文件,文件名必须加上扩展 名,汇编程序以”.ASM”或”.A51”为扩展名,C语言以”.C”为 扩展名。 b.工程的建立 Keil 使用工程(project)概念,将所需设置的参数和所有文件都加在一 个工程中,只能对工程进行编译、链接等操作,而不能对单一 的源程序操作。 选择Project---New Project
语句m
……
else 语句n
描述:如果表达式1的结果为“真”,则执行语句1,退出if语句; 否则去判断表达式2,…. ,最后,如果表达式m也不成立,则 执行else后面的语句n。else 和语句n也可省略。
20
●switch/case 语句 switch 语句的一般形式如下: switch(表达式) { case 常量表达式1:语句1
●Large 可用全部64KB空间。
5
Use on—chip ROM:用于确认是否使用片内ROM。