




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9 章 微控制器的C 语言程序设计,9.1.1 微控制器的编程语言,BASIC 语言简单易学,适用于对编程效率或运行速度要求不高的场合,但是BASIC 采用浮点运算,导致程序复杂且执行时间长, 即使用BASIC 编译器也未能解决这个问题。 PLM 可以说是“高级汇编语言” ,详细控制着代码的生成。但对很多微控制器, PL M 不支持复杂的算术运算和浮点变量, 也没有丰富的库函数。,9.1.1 微控制器的编程语言,用C 语言进行微控制器程序设计的优点: () 开发速度大大加快。 () 可以实现复杂的算法。 () 可移植性强。 () 程序易读易改, 调试方便。 () 可以与汇编语言混编, 发挥各自的优点。,9.1.2 C语言编译器与程序开发过程,9.2.1 KEIL 编译器,KEIL 编译器是基于C内核的微处理器软件开发平台,其中, Vision集成开发环境是将编辑、编译、汇编、链接和调试等各阶段都集成在一个程序内的集成开发环境, 它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中, 编写程序、编译和链接后可直接运行。避免了不必要的分散重复作业,缩短了开发周期。,9.2.2 C51 程序设计基础,数据类型,变量,在C中对变量进行定义的格式如下: 存储种类 数据类型 存储器类型 变量名表 其中, “存储种类” 和“存储器类型” 是可选项。变量的存储种类有四种: 自动(auto) 、外部(extern) 、静态(static) 、寄存器(register) 。若省略存储种类选项定义变量, 则该变量将为自动(auto) 变量。在定义一个变量时, 除了需要说明其数据类型外, C 编译器还允许说明变量的存储器类型。,存储模式,C 编译器的三种存储模式SMALL 、COMPACT 和LARGE 决定了变量的默认存储类型和参数传递区域,9.3.1 ICC08编译器和08C语言,Motorola 微控制器常用的C 语言编译器有ICC 编译器, Hiware C 编译器和Small C 编译器等。 ICC是ImageCraft Creations 公司推出的一款针对MOTOROLA HC的商业化C语言编译器,可以生成如 .S、.MAP 和 .LST 等多种格式的文件,但其内部并不包含调试工具, 编译后只能用其他的调试软件来调试它生成的目标文件或下载到芯片中进行在线运行和调试。,ICC支持的数据类型,IO 口和寄存器的定义,在C 语言中操作寄存器及IO 口时, 通常预先在头文件中使用宏定义, define IO 口名 (volatile unsigned char ) IO 口地址 define 寄存器名 (volatile unsigned char ) 寄存器地址, 并口A 、B 、C 、D 的定义 define PTA (volatile unsigned char ) 0x00 A 口 define PTB (volatile unsigned char ) 0x01 B 口 define PTC (volatile unsigned char ) 0x02 C 口 define PTD (volatile unsigned char ) 0x03 D 口 SPI 寄存器的定义 define SPCR (volatile unsigned char ) 0x10 SPI控制寄存器 define SPSCR (volatile unsigned char ) 0x11 SPI 控制状态寄存器 define SPDR (volatile unsigned char ) 0x12 SPI 数据寄存器,中断处理,在HC系列微控制器Flash 地址空间中,有一段专门用来存储所有的中断向量的地址空间,每个中断处理函数占用两个字节的中断向量地址。 中断函数用pragma interrupt handler 定义, 编译器会用rti而不是rts 作为返回指令。中断向量用pragma abs address 定义。,中断处理函数:,() 新建一个vectors.c , 并加入工程中; () 定义中断处理函数; () 定义中断向量; () 在中断向量中填入中断处理函数名称。, 串口接收中断处理函数 pragma interrupt handler sci receive isr void sci receive isr (void) 中断向量定义 pragma abs address : 0xffe4 void ( const vectab ) (void) sci receive isr ; pragma end abs address,中断处理,C 语言与汇编语言的混合编程,() asm (“汇编指令”) asm (“cli”) 开中断 asm ( “sei”) 关中断 可用 define 进行宏定义, 以方便使用。 define INTR ON ( ) asm ( “cli”) define INTR OFF ( ) asm ( “sei”) () 定义汇编子程序。 定义格式如下: 子程序名 代码 rts 注意以下几点: 在子程序名前加“ ” ; 汇编子程序只能放在 s 文件中, 然后将该文件加入到工程中; 在C 代码中调用汇编子程序时可直接调用: 子程序名( ) ; 汇编子程序编写时, 如果使用了A 或HX , 则需要保护寄存器A 或HX 。,C 提供一系列可供使用的函数库, 其中包括了标准C 所具有的大部分库函数和一些C 特有的函数, 但是C 中的有些函数和标准C 中的函数的功能不一样。这些函数的头文件位于安装目录的include 目录下, 库文件位于安装目录的lib 目录下。具体可参阅其文档。,C 的常用库函数,数据类型的选用:只有bit 和char 等数据类型是机器语言直接支持的数据类型, 用此类数据类型的语句所生成的代码较短; 而其他的数据类型, 如整型和浮点型等数据要有一定的内部程序或内部函数的支持, 相对来说用该类数据类型的语句生成的代码要长。有些C 语言程序表面上看起来十分的简单, 但在实际编译时, 生成的代码却相当长。因此我们要按照实际需要, 尽量选用占用存储空间少的数据类型, 可以大大的减少所生成的代码长度。 算法设计: 数据存储器的分配:尽量的使用局部变量, 提高内部数据存储器的使用率。,Motorola 08C 语言编程,编程管理,编译文件输出,C 语言程序的组成,一个完整的C 语言程序通常包含以下几个部分: 汇编语言的启动文件 存储器映像及IO 端口的头文件 主程序模块 中断服务程序模块 中断向量表文件,C 语言源程序的参考范例, include include char SendFlag 0x00 ; void init devices (void) SEI ( ) ; 关闭中断 CONFIG2 0x01 ; 内部总线时钟用作SCI 时钟 CONFIG1 0x3D ; clock init ( )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论