版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微控制器的C语言程序设计9.1.1 微控制器的编程语言BASIC BASIC 语言语言,适用于对编程效率或运行速度要求不高的场合适用于对编程效率或运行速度要求不高的场合,但是但是BASIC BASIC 采用采用浮点运算浮点运算,导致程序复杂且执行时间长导致程序复杂且执行时间长, 即使用即使用BASIC BASIC 编译器也未能解决这个编译器也未能解决这个问题问题。PLPLM M 可以说是可以说是“高级汇编语言高级汇编语言” ,详细控制着代码的生成详细控制着代码的生成。但对很多微控制但对很多微控制器器, PLPL M M 不支持复杂的算术运算和浮点变量不支持复杂的算术运算和浮点变量, 也没有丰富
2、的库函数也没有丰富的库函数。9.1.1 微控制器的编程语言用用C 语言进行微控制器程序设计的优点进行微控制器程序设计的优点: :()() 开发速度大大加快开发速度大大加快。()() 可以实现复杂的算法可以实现复杂的算法。()() 可移植性强可移植性强。()() 程序易读易改程序易读易改, 调试方便调试方便。()() 可以与汇编语言混编可以与汇编语言混编, 发挥各自的优点发挥各自的优点。9.1.2 C语言编译器与程序开发过程9.2.1 KEIL 编译器KEIL KEIL 编译器是基于编译器是基于C C内核的微处理器软件开发平台内核的微处理器软件开发平台,其中其中, VisionVision集成开
3、发环境是将编辑集成开发环境是将编辑、编译编译、汇编汇编、链接和调试等各链接和调试等各阶段都集成在一个程序内的集成开发环境阶段都集成在一个程序内的集成开发环境, 它将项目管理它将项目管理、源代源代码编辑和程序调试等组合在一个功能强大的环境中码编辑和程序调试等组合在一个功能强大的环境中, 编写程序编写程序、编译和链接后可直接运行编译和链接后可直接运行。避免了不必要的分散重复作业避免了不必要的分散重复作业,缩短了缩短了开发周期开发周期。9.2.2 C51 程序设计基础数据类型变量在在C C中对变量进行定义的格式如下中对变量进行定义的格式如下:存储种类存储种类 数据类型数据类型存储器类型存储器类型 变
4、量名表变量名表其中, “存储种类” 和“存储器类型” 是可选项。变量的存储种类有四种: 自动(auto) 、外部(extern) 、静态(static) 、寄存器(register) 。若省略存储种类选项定义变量, 则该变量将为自动(auto) 变量。在定义一个变量时, 除了需要说明其数据类型外, C 编译器还允许说明变量的存储器类型。存储模式C C 编译器的三种存储模式编译器的三种存储模式SMALL SMALL 、COMPACT COMPACT 和和LARGE LARGE 决定了变量的默认存储类型和决定了变量的默认存储类型和参数传递区域参数传递区域9 9. .3 3. .1 ICC081 I
5、CC08编译器和编译器和08C08C语言语言Motorola Motorola 微控制器常用的微控制器常用的C C 语言编译器有语言编译器有ICC ICC 编译器编译器, , Hiware C Hiware C 编译器和编译器和Small C Small C 编译器等编译器等。ICCICC是是ImageCraft Creations ImageCraft Creations 公司推出的一款针对公司推出的一款针对MOTOROLA HCMOTOROLA HC的商的商业化业化C C语言编译器语言编译器,可以生成如可以生成如 . .S S、. .MAP MAP 和和 . .LST LST 等多种格式的
6、文件等多种格式的文件,但但其内部并不包含调试工具其内部并不包含调试工具, 编译后只能用其他的调试软件来调试它生成的目标编译后只能用其他的调试软件来调试它生成的目标文件或下载到芯片中进行在线运行和调试文件或下载到芯片中进行在线运行和调试。ICC支持的数据类型I IO O 口和寄存器的定义口和寄存器的定义在在C C 语言中操作寄存器及语言中操作寄存器及I IO O 口时口时, 通常预先在头文件中使用宏定义通常预先在头文件中使用宏定义 define Idefine IO O 口名口名 (volatile unsigned char volatile unsigned char ) I IO O 口地
7、址口地址 define define 寄存器名寄存器名 (volatile unsigned char volatile unsigned char ) 寄存器地址寄存器地址 并口并口A A 、B B 、C C 、D D 的定义的定义 define PTA define PTA (volatile unsigned char volatile unsigned char ) 0 x00 0 x00 A A 口口 define PTB define PTB (volatile unsigned char volatile unsigned char ) 0 x01 0 x01 B B 口口 de
8、fine PTC define PTC (volatile unsigned char volatile unsigned char ) 0 x02 0 x02 C C 口口 define PTD define PTD (volatile unsigned char volatile unsigned char ) 0 x03 0 x03 D D 口口 SPI SPI 寄存器的定义寄存器的定义 define SPCR define SPCR (volatile unsigned char volatile unsigned char ) 0 x10 0 x10 SPISPI控制寄存器控制寄存器
9、 define SPSCR define SPSCR (volatile unsigned char volatile unsigned char ) 0 x11 0 x11 SPI SPI 控制控制状态寄存器状态寄存器 define SPDR define SPDR (volatile unsigned char volatile unsigned char ) 0 x12 0 x12 SPI SPI 数据寄存器数据寄存器中断处理中断处理在在HCHC系列微控制器系列微控制器Flash Flash 地址空间中地址空间中,有一段专门用来存储所有的中断向量有一段专门用来存储所有的中断向量的地址空间
10、的地址空间,每个中断处理函数占用两个字节的中断向量地址每个中断处理函数占用两个字节的中断向量地址。中断函数用中断函数用pragma interrupt pragma interrupt handler handler 定义定义, 编译器会用编译器会用rtirti而不是而不是rts rts 作为返回指令作为返回指令。中断向量用中断向量用pragma abs pragma abs address address 定义定义。中断处理函数中断处理函数: :()() 新建一个新建一个vectorsvectors. .c c , 并加入工程中并加入工程中;()() 定义中断处理函数定义中断处理函数;()(
11、) 定义中断向量定义中断向量;()() 在中断向量中填入中断处理函数名称在中断向量中填入中断处理函数名称。 串口接收中断处理函数串口接收中断处理函数 pragma interrupt pragma interrupt handler sci handler sci receive receive isrisrvoid sci void sci receive receive isr isr (voidvoid)中断向量定义中断向量定义 pragma abs pragma abs address address : 0 xffe40 xffe4void void ( const const ve
12、ctab vectab ) (voidvoid) sci sci receive receive isrisr ; pragma end pragma end abs abs addressaddress中断处理中断处理C C 语言与汇编语言的混合编语言与汇编语言的混合编程程()() asm asm (“汇编指令汇编指令”)asm asm (“clicli”) 开中断开中断asm asm ( “seisei”) 关中断关中断可用可用 define define 进行宏定义进行宏定义, 以方便使用以方便使用。 define INTR define INTR ON ON ( ) asm asm (
13、 “clicli”) define INTR define INTR OFF OFF ( ) asm asm ( “seisei”)()() 定义汇编子程序定义汇编子程序。定义格式如下定义格式如下: 子程序名子程序名代码代码rtsrts注意以下几点注意以下几点: 在子程序名前加在子程序名前加“ ” ; 汇编子程序只能放在汇编子程序只能放在 s s 文件中文件中, 然后将该文件加入到工程中然后将该文件加入到工程中; 在在C C 代码中调用汇编子程序时可直接调用代码中调用汇编子程序时可直接调用: 子程序名子程序名( ) ; 汇编子程序编写时汇编子程序编写时, 如果使用了如果使用了A A 或或HX
14、HX , 则需要保护寄存器则需要保护寄存器A A 或或HX HX 。C C 提供一系列可供使用的函数库提供一系列可供使用的函数库, 其中包括了标准其中包括了标准C C 所具有所具有的大部分库函数和一些的大部分库函数和一些C C 特有的函数特有的函数, 但是但是C C 中的有些中的有些函数和标准函数和标准C C 中的函数的功能不一样中的函数的功能不一样。这些函数的头文件位于安装这些函数的头文件位于安装目录的目录的include include 目录下目录下, 库文件位于安装目录的库文件位于安装目录的lib lib 目录下目录下。具具体可参阅其文档体可参阅其文档。C C 的常用库函数的常用库函数数
15、据类型的选用数据类型的选用: :只有bit 和char 等数据类型是机器语言直接支持的数据类型, 用此类数据类型的语句所生成的代码较短; 而其他的数据类型, 如整型和浮点型等数据要有一定的内部程序或内部函数的支持, 相对来说用该类数据类型的语句生成的代码要长。有些C 语言程序表面上看起来十分的简单, 但在实际编译时, 生成的代码却相当长。因此我们要按照实际需要, 尽量选用占用存储空间少的数据类型, 可以大大的减少所生成的代码长度。算法设计算法设计: :数据存储器的分配数据存储器的分配: :尽量的使用局部变量, 提高内部数据存储器的使用率。Motorola 08C 语言编程编程管理编译文件输出编
16、译文件输出C C 语言程序的组成语言程序的组成一个完整的一个完整的C C 语言程序语言程序通常包含以下几个部分通常包含以下几个部分: 汇编语言的启动文件汇编语言的启动文件 存储器映像及存储器映像及I IO O 端口端口的头文件的头文件 主程序模块主程序模块 中断服务程序模块中断服务程序模块 中断向量表文件中断向量表文件C C 语言源程序的参考范例语言源程序的参考范例 include include includehc08definclude char SendFlag char SendFlag 0 x00 0 x00 ;void init void init devices devices (voidvoid)SEI SEI ( ) ; 关闭中断关闭中断CONFIG2 CONFIG2 0 x01 0 x01 ; 内部总线时钟用作内部总线时钟用作SCI SCI 时钟时钟CONFIG1 CONFIG1 0 x3D 0 x3D ;clock clock init init
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汽车构造》习题及答案 项目五任务5测试题
- 肌萎缩侧索硬化症的护理要点
- 运输车辆挂靠合同(27篇)
- 高中思想政治必修4世界是普遍联系的
- 供应室基孔肯雅热器械消杀测试题库单选题及答案解析
- 2026年车辆购置税申报实务题库及答案
- 2025年宿迁市宿城区社区《网格员》练习题及答案
- 2025年森林防火指挥部招聘笔试试题及答案
- 临时厕所施工方案
- 2026年国家职业资格考试认证考前冲刺试卷及解析
- 2025年湖北雇员制审判辅助书记员考试综合能力测试题及答案
- 2025年广东电网有限责任公司春季校园招聘笔试参考题库附带答案详解
- 脉冲射频治疗神经病理性疼痛的病例报告与分析
- 新闻学专业毕业论文范文
- 济南入团考试题库及答案
- 信息专报管理办法
- 长城执法巡查管理办法
- 气球培训课课件
- DZ/T 0194-1997聚氨酯水力旋流器
- 2025年江苏省南京市鼓楼区中考一模英语试卷(含答案)
- 年鉴编纂合同协议
评论
0/150
提交评论