当前位置:
文档之家› 飞思卡尔8位单片机MC9S08第07章 08C语言
飞思卡尔8位单片机MC9S08第07章 08C语言
(2)编译程序
返回
7.4 08C语言程序编程框架
7.5 08C语言的编译过程
7.5.1 编译过程
在SD-HC08在线编程开发系统中编辑了源程序以后,使用编译命令就可 以把源程序翻译成目标程序。 ① 编译的脚本文件:包含了编译指令及相关的参数,文件存放的位置 在.prj的同一文件夹下。 ② C程序向汇编程序的转化:启动08C编译器,根据.mak文件的编译脚 本将所有.c文件编译成.s文件及.lis文件。 ③ 汇编代码向机器码的转化:汇编程序将所有的汇编文件编译成.o的中 间目标文件,即所有的汇编语句都编译成机器码。 ④ 连接:启动连接器,连接器根据.mak文件中的连接脚本,把所有的.o 文件统一连接成一个.s19文件,该文件可以下载到目标机器上执行,同时还 可根据用户需求生成.lst文件和.mp文件。
(2)I/O与寄存器的操作
使用上面定义的I/O口或寄存器宏,可以方便对I/O置高低电平或读取I/O 的状态,读写寄存器。
7.3 08C语言的使用
7.3.2 使用汇编指令
在08C语言中,使用汇编代码有两种方法:
(1)asm(“汇编指令”) (2)定义汇编子程序
定义格式如下:_子程序名 代码 … rts
7.1 单片机的C语言编程概述
7.1.2 单片机C语言
单片机C语言和标准C语言的用法基本相同,但是 单片机C语言是针对于资源少的MCU,它的编程方法 和编程手段与PC机上使用C语言还是有很大差别。
7.1 单片机的C语言编程概述
返回
7.2 标准C语言的基本语法
7.2.1 数据类型
(1)基本类型
表7-1 C语言基本数据类型 数据类型
7.2 标准C语言的基本语法
7.2.1 数据类型
(2)构造类型
构造类型有数组、结构、联合、枚举、指针和空类型。结构 和联合是基本数据类型的组合。枚举是一个被命名为整型常量的 集合。空类型字节长度为0,主要有两个用途:一是明确地表示 一个函数不返回任何值;二是产生一个同一类型指针(可根据需 要动态地分配给其内存)。
语句1 语句2 …… 语句N
7.2 标准C语言的基本语法
7.2.3 流程控制
(2)选择结构
① if结构(双分支): if (条件表达式) 或 if (条件表达式) { 语句块 } else { 语句块 } 语句项;
真 语句1 if 条件表达式 假 语句1
7.2 标准C语言的基本语法
7.2.3 流程控制
第七章 08C语言
主要内容
单片机的C语言编程概述 标准C语言的基本语法 08C语言的使用 08C语言程序编程框架 08C语言的编译过程 08C编程技巧
7.1 单片机的C语言编程概述
7.1.1 单片机编程语言
汇编语言
优点:执行效率高,时序控制精确
C语言
优点:① 程序开发速度快,提高开发工作效率; ② 软件调试直观; ③ 可维护性好; ④ 可移植性好(与汇编语言相比较)。
7.3 08C语言的使用
返回
7.4 08C语言程序编程框架
7.4.1 实践环境
SD-HC08在线编程开发系统中的C语言编程是按工程进行管 理,一个08C工程所包含的文件最好放在同一文件夹下,一般 由.prj、.src、.h、.c等类型文件构成,编译后还将产生.lst、.s19 等文件。编译过程还会产生一些中间文件,可以不去理会这些文 件。
7.2 标准C语言的基本语法
7.2.2 运算符
C语言的运算符与大多数计算机语言基本相同,分为:
算术运算符 逻辑运算符 关系运算符和位运算符 增量和减量运算符 复合赋值运算符 指针和地址运算符 输出格式转换符
7.2 标准C语言的基本语法
7.2.3 流程控制
(1)顺序结构
顺序结构就是从前向后依次执 行语句。从整体上看,所有程序的 基本结构都是顺序结构,中间的某 个过程可以是选择结构或循环结构。
7.3 08C语言的使用
7.3.2 使用汇编指令
这种使用方法要注意以下几点: ① 在子程序名前加‘_’; ② 汇编子程序只能放在*.s文件中,然后将该文件加入到工程中; ③ 在C代码中调用汇编子程序时可直接调用: 子程序名(); ④ 汇编子程序的编写时,如果使用了A或HX,则需要保护寄存器A或 HX。因为08C的编译器把A和HX封装在下层,不需要用户管理,如果汇 编子程序没有保存这些寄存器,在返回时将造成不可预测的后果。
位数
8 8 16 16 16 32 32 32 64
字节数
1 1 2 2 2 4 4 4 8
值域
-128~+127 0~255 -32768~+32767 -32768~+32767 0~65535 -2147483648~+2147483647 0~4294967295 3.4E-38~3.4E+38 1.7E-308~1.7E+308
(3)结构体指针
结构体指针是指向结构体的指针。结构体指针对结构体成员的访问表 示为: 结构体指针名->结构体成员
7.2 标准C语言的基本语法
7.2.7 编译预处理
(1)宏定义
#define 宏名 表达式
(2)条件编译
#if 表达式 #else 表达式 #endif
(3)“文件包含”处理
“文件包含”是指一个源文件将另一个源文件的全部内容包含进来, 其一般形式为: #include “文件名”
7.2.3 流程控制
for
(3)循环结构
① for循环 : for(表达式1;表达式2;表达式3) {语句}
求解表达式1 表达式2 真 语句 求解表达式3 假
For语句的下一个语句
7.2 标准C语言的基本语法
7.2.3 流程控制
(3)循环结构
② while循环 : while (表达式) {语句}
signed char unsigned char signed short signed int unsigned int signed long unsigned long float double
简明含义
有符号字节型 无符号字节型 有符号短整型 有符号短整型 无符号短整型 有符号长整型 无符号长整型 浮点型 双精度型
7.2 标准C语言的基本语法
7.2.8 用typedef定义类型
typedef用来定义新的类型名来代替已有的类型名: typedef 类型名 新的类型名; 说明: ① 用typedef可以定义各种类型名,但不能用来定义变量。 ② 用typedef只是对已经存在的类型增加一个类型名,而没有 创造新的类型。 ③ 当不同源文件中用到各种类型数据(尤其是像数组、指针、 结构体、共用体等较复杂数据类型)时,常用typedef定义一些数据 类型,并把它们单独存放在一个文件中,而后在需要用到它们的文 件中用#include命令把它们包含进来。
7.3 08C语言的使用
7.3.4 08C的常用库函数
08C提供一系列函数库供程序员使用,其中囊括了标准C所具 有的大部分库函数和一些08C特有的函数,但是08C中的有些函 数和标准C中的函数的功能不一样。这些函数的头文件位于安装 目录的include目录下,库文件位于安装目录的lib目录下。更多 的函数库说明参见附录F。
7.5 08C语言的编译过程说明返回7.6 08C编程技巧
7.6.1 数据类型的选用
单片机C要和程序存储器资源结合起来,虽然其提供的数据类型 十分丰富,但是只有bit和char等数据类型是机器语言直接支持的数 据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类 型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相 对来说用该类数据类型的语句生成的代码要长。有些C语言程序表面 上看起来十分的简单,但在实际编译时,生成的代码却相当长。因此 我们要按照实际需要,尽量选用占用存储空间少的数据类型,可以大 大的减少所生成的代码长度。
7.2 标准C语言的基本语法
返回
7.3 08C语言的使用
7.3.1 寄存器和I/O口的使用
使用08C语言,大部分寄存器都可以直接操作,但对寄存器A、HX、 CCR和SP的操作只能通过嵌入汇编代码来完成。
(1)I/O口和寄存器的定义
在08C语言中操作寄存器及I/O口时,通常预先在头文件中使用宏定义, 其定义方法如下: #define 寄存器名 *(volatile unsigned char *)寄存器地址 #define I/O口名 *(volatile unsigned char *)I/O口地址
7.2 标准C语言的基本语法
7.2.6 结构体
(1)结构体的说明和结构体变量的定义
①struct 结构体名 {成员列表}; ②struct 结构体名 {成员列表} 结构体变量;
(2)结构体变量的使用
结构体变量也可以象其它类型的变量一样赋值运算,不同的是结构体 变量以成员作为基本变量。结构体成员的表示方式为: 结构体变量.成员名
7.2 标准C语言的基本语法
7.2.5 指针
(1)指针变量的定义
类型说明符 *变量名;
(2)指针变量的赋值
指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具 体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。 指针变量的赋值只能赋予地址。
(3)指针的运算
• 取地址运算(&) • 取内容运算 (*) • 加减算术运算 :针对指针数组变量进行
汇编语言的启动文件 存储器映像及I/O端口的头文件 主程序模块 中断服务程序模块 中断向量表文件
7.4 08C语言程序编程框架
7.4.3 第一个08C语言例程
编写第一个可执行的08C语言程序:
(1)新建文件