飞思卡尔8位单片机MC9S080708C语言_第1页
飞思卡尔8位单片机MC9S080708C语言_第2页
飞思卡尔8位单片机MC9S080708C语言_第3页
飞思卡尔8位单片机MC9S080708C语言_第4页
飞思卡尔8位单片机MC9S080708C语言_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 08C语言 主要内容 单片机的C语言编程概述 标准C语言的基本语法 08C语言的使用 08C语言程序编程框架 08C语言的编译过程 08C编程技巧 嵌入式应用技术基础教程课件17.1 单片机的C语言编程概述 7.1.1 单片机编程语言 汇编语言 优点:执行效率高,时序控制精确 C语言 优点: 程序开发速度快,提高开发工作效率; 软件调试直观; 可维护性好; 可移植性好(与汇编语言相比较)。嵌入式应用技术基础教程课件27.1.2 单片机C语言 单片机C语言和标准C语言的用法基本相同,但是单片机C语言是针对于资源少的MCU,它的编程方法和编程手段与PC机上使用C语言还是有很大差别。 嵌入式

2、应用技术基础教程课件返回37.2 标准C语言的基本语法 7.2.1 数据类型 (1)基本类型嵌入式应用技术基础教程课件表7-1 C语言基本数据类型数据类型简明含义位数字节数值域signed char有符号字节型81-128+127unsigned char无符号字节型810255signed short有符号短整型162-32768+32767signed int有符号短整型162-32768+32767unsigned int无符号短整型162065535signed long有符号长整型324-2147483648+2147483647unsigned long无符号长整型32404294

3、967295float浮点型3243.4E-383.4E+38double双精度型6481.7E-3081.7E+30847.2.1 数据类型(2)构造类型 构造类型有数组、结构、联合、枚举、指针和空类型。结构和联合是基本数据类型的组合。枚举是一个被命名为整型常量的集合。空类型字节长度为0,主要有两个用途:一是明确地表示一个函数不返回任何值;二是产生一个同一类型指针(可根据需要动态地分配给其内存)。嵌入式应用技术基础教程课件57.2.2 运算符C语言的运算符与大多数计算机语言基本相同,分为: 算术运算符 逻辑运算符 关系运算符和位运算符 增量和减量运算符 复合赋值运算符 指针和地址运算符 输出

4、格式转换符嵌入式应用技术基础教程课件67.2.3 流程控制(1)顺序结构 顺序结构就是从前向后依次执行语句。从整体上看,所有程序的基本结构都是顺序结构,中间的某个过程可以是选择结构或循环结构。嵌入式应用技术基础教程课件语句1语句2语句N77.2.3 流程控制(2)选择结构 if结构(双分支): if (条件表达式) 语句项; 或 if (条件表达式) 语句块 else 语句块 嵌入式应用技术基础教程课件语句1语句1条件表达式if真假87.2.3 流程控制(2)选择结构 switch结构(多分支): switch(表达式) case 常数1: 语句项1;break; case 常数2: 语句项2

5、;break; default: 语句项n 嵌入式应用技术基础教程课件表达式语句项1语句项2语句项Nswitch常数1常数2default97.2.3 流程控制(3)循环结构 for循环 : for(表达式1;表达式2;表达式3) 语句嵌入式应用技术基础教程课件表达式2求解表达式1语句求解表达式3For语句的下一个语句for真假107.2.3 流程控制(3)循环结构 while循环 : while (表达式) 语句嵌入式应用技术基础教程课件表达式语句while真假117.2.3 流程控制(3)循环结构 do.while循环 do 语句 while (表达式);嵌入式应用技术基础教程课件表达式2

6、语句do假真127.2.3 流程控制(4)break语句和continue语句 在循环中常常使用break语句和continue语句,这两个语句都会改变循环的执行情况。break语句用来从循环体中强行跳出循环,终止整个循环的执行;continue语句只用来结束本次循环 。嵌入式应用技术基础教程课件137.2.4 函数(1)函数定义 类型标识符 函数名(类型 参数1,类型 参数2,类型 参数3,) 说明部分 语句 (2)函数的声明 类型标识符 函数名(类型 参数1,类型 参数2,类型 参数3,);(3)函数的返回值 return 表达式; return语句用来立即结束函数,并返回一确定给调用程序

7、。如果函数的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。嵌入式应用技术基础教程课件147.2.5 指针(1)指针变量的定义 类型说明符 *变量名; (2)指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址。(3)指针的运算 取地址运算(&) 取内容运算 (*) 加减算术运算 :针对指针数组变量进行嵌入式应用技术基础教程课件157.2.6 结构体(1)结构体的说明和结构体变量的定义 struct 结构体名 struct 结构体

8、名 成员列表; 成员列表 结构体变量;(2)结构体变量的使用 结构体变量也可以象其它类型的变量一样赋值运算,不同的是结构体变量以成员作为基本变量。结构体成员的表示方式为: 结构体变量.成员名 (3)结构体指针 结构体指针是指向结构体的指针。结构体指针对结构体成员的访问表示为: 结构体指针名-结构体成员嵌入式应用技术基础教程课件167.2.7 编译预处理 (1)宏定义 #define 宏名 表达式(2)条件编译 #if 表达式 #else 表达式 #endif(3)“文件包含”处理 “文件包含”是指一个源文件将另一个源文件的全部内容包含进来,其一般形式为: #include “文件名” 嵌入式应

9、用技术基础教程课件177.2.8 用typedef定义类型 typedef用来定义新的类型名来代替已有的类型名: typedef 类型名 新的类型名; 说明: 用typedef可以定义各种类型名,但不能用来定义变量。 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。 当不同源文件中用到各种类型数据(尤其是像数组、指针、结构体、共用体等较复杂数据类型)时,常用typedef定义一些数据类型,并把它们单独存放在一个文件中,而后在需要用到它们的文件中用#include命令把它们包含进来。嵌入式应用技术基础教程课件返回187.3 08C语言的使用7.3.1 寄存器和I/O口的使

10、用 使用08C语言,大部分寄存器都可以直接操作,但对寄存器A、HX、CCR和SP的操作只能通过嵌入汇编代码来完成。 (1)I/O口和寄存器的定义 在08C语言中操作寄存器及I/O口时,通常预先在头文件中使用宏定义,其定义方法如下: #define 寄存器名*(volatile unsigned char *)寄存器地址 #define I/O口名*(volatile unsigned char *)I/O口地址(2)I/O与寄存器的操作 使用上面定义的I/O口或寄存器宏,可以方便对I/O置高低电平或读取I/O的状态,读写寄存器。 嵌入式应用技术基础教程课件197.3.2 使用汇编指令 在08C

11、语言中,使用汇编代码有两种方法: (1)asm(“汇编指令”)(2)定义汇编子程序 定义格式如下:_子程序名代码rts嵌入式应用技术基础教程课件20这种使用方法要注意以下几点: 在子程序名前加_; 汇编子程序只能放在*.s文件中,然后将该文件加入到工程中; 在C代码中调用汇编子程序时可直接调用: 子程序名(); 汇编子程序的编写时,如果使用了A或HX,则需要保护寄存器A或HX。因为08C的编译器把A和HX封装在下层,不需要用户管理,如果汇编子程序没有保存这些寄存器,在返回时将造成不可预测的后果。 7.3.2 使用汇编指令嵌入式应用技术基础教程课件21 在HC08系列单片机Flash地址空间中,

12、有一段是用来存储所有的中断矢量 ,每两个字节存储的是一个中断处理函数的地址。编写中断处理函数,需要按照以下步骤: 新建一个vectors.c,并加入工程中; 定义中断处理函数; 定义中断向量表; 在中断向量表中填入中断处理函数名称; 7.3.3 中断处理 嵌入式应用技术基础教程课件22 08C提供一系列函数库供程序员使用,其中囊括了标准C所具有的大部分库函数和一些08C特有的函数,但是08C中的有些函数和标准C中的函数的功能不一样。这些函数的头文件位于安装目录的include目录下,库文件位于安装目录的lib目录下。更多的函数库说明参见附录F。7.3.4 08C的常用库函数 嵌入式应用技术基础

13、教程课件返回237.4 08C语言程序编程框架7.4.1 实践环境 SD-HC08在线编程开发系统中的C语言编程是按工程进行管理,一个08C工程所包含的文件最好放在同一文件夹下,一般由.prj、.src、.h、.c等类型文件构成,编译后还将产生.lst、.s19等文件。编译过程还会产生一些中间文件,可以不去理会这些文件。嵌入式应用技术基础教程课件24一个完整的08语言程序通常至少包含如下部分:汇编语言的启动文件存储器映像及I/O端口的头文件主程序模块中断服务程序模块中断向量表文件7.4.2 08C语言程序的组成嵌入式应用技术基础教程课件25一个完整的08语言程序通常至少包含如下部分:汇编语言的

14、启动文件存储器映像及I/O端口的头文件主程序模块中断服务程序模块中断向量表文件7.4.2 08C语言程序的组成嵌入式应用技术基础教程课件26编写第一个可执行的08C语言程序:(1)新建文件 新建C工程。 新建GP32C.h文件,该文件包含了MC68HC908GP32的I/O及寄存器的宏定义。 新建main.c程序(2)编译程序7.4.3 第一个08C语言例程嵌入式应用技术基础教程课件返回277.5 08C语言的编译过程7.5.1 编译过程 在SD-HC08在线编程开发系统中编辑了源程序以后,使用编译命令就可以把源程序翻译成目标程序。 编译的脚本文件:包含了编译指令及相关的参数,文件存放的位置在

15、.prj的同一文件夹下。 C程序向汇编程序的转化:启动08C编译器,根据.mak文件的编译脚本将所有.c文件编译成.s文件及.lis文件。 汇编代码向机器码的转化:汇编程序将所有的汇编文件编译成.o的中间目标文件,即所有的汇编语句都编译成机器码。 连接:启动连接器,连接器根据.mak文件中的连接脚本,把所有的.o文件统一连接成一个.s19文件,该文件可以下载到目标机器上执行,同时还可根据用户需求生成.lst文件和.mp文件。嵌入式应用技术基础教程课件287.5.2 编译文件输出 单片机的文件都有自己的后缀规则,不同的C编译器产生的文件后缀在某些方面有些差异。下表为08C编译过程中产生的文件类型

16、。嵌入式应用技术基础教程课件 08C编译所产生的文件类型文件扩展名说明mak编译脚本文件Lis浮动地址空间的汇编代码s浮动地址空间的汇编代码o目标文件Lst编译列表文件mp连接后生成的地址映像文件S19绝对地址目标文件返回297.6 08C编程技巧 7.6.1 数据类型的选用 单片机C要和程序存储器资源结合起来,虽然其提供的数据类型十分丰富,但是只有bit和char等数据类型是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相对来说用该类数据类型的语句生成的代码要长。有些C语言程序表面上看起来十分的简单,

17、但在实际编译时,生成的代码却相当长。因此我们要按照实际需要,尽量选用占用存储空间少的数据类型,可以大大的减少所生成的代码长度。嵌入式应用技术基础教程课件307.6.2 算法设计问题 单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序设计时可以不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码可能非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一

18、些优化算法。 嵌入式应用技术基础教程课件317.6.3 数据存储器的分配 单片机内部数据存储器RAM只有几百字节,内部处理器、内部堆栈、压缩栈、所有程序变量和所有包含进来的库函数都将使用数量有限的内部数据存储器RAM。在进行程序设计时应该尽量的使用局部变量,提高内部数据存储器的使用率。嵌入式应用技术基础教程课件327.6.4 单片机C语言与汇编语言的混合编程 C代码中可以嵌入汇编程序,汇编中也可以调用C代码中的变量与子程序。使用C代码中定义的变量:在变量名前加_或%,例如:unsigned char sPortA;asm(“lda %sPortA”)或asm(“lda _sPortA”)调用C代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论