山东大学飞思卡尔单片机教学第6章C语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《山东大学飞思卡尔单片机教学第6章C语言程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 卡尔 单片机 教学 语言程序设计 课件
- 资源描述:
-
1、第六章 C语言程序设计1关于实验安排 1010周和周和1111周的周二晚上在兴隆山校区计算中心周的周二晚上在兴隆山校区计算中心1 1号和号和3 3号机房号机房(1 1、2 2班班1 1号机房,号机房,3 3、4 4班班2 2号机房号机房,17,17:3030前到)前到)开放实验:开放实验:1111周、周、1212周和周和1313周在千佛山校区机械厂教学车间楼周在千佛山校区机械厂教学车间楼207207(1 1、2 2班星期六全天;班星期六全天;3 3、4 4班星期天全天:如有特殊事情者,班星期天全天:如有特殊事情者,可灵活选择;可灵活选择;上午上午9 9:0000下午下午1717:0000)实验
2、后撰写实验报告实验后撰写实验报告集成开发环境先用熟集成开发环境先用熟4.64.6版本;然后会用版本;然后会用5.05.0版本版本第六章 C语言程序设计2本周实验安排 实验实验4 4:掌握最基本:掌握最基本C C语言程序的调试及运行方法语言程序的调试及运行方法1.1.建立一个建立一个C C语言工程,并按要求编写求两个数最大值的语言工程,并按要求编写求两个数最大值的C C语言语言程序,编译并排错;程序,编译并排错;2.2.使用全速调试,并观察程序运行结果;使用全速调试,并观察程序运行结果;3.3.使用单步调试,并观察数据区、寄存器区、存储器区的数据使用单步调试,并观察数据区、寄存器区、存储器区的数
3、据变化。变化。实验实验5 5:使用仿真方法,编写并调试复杂的:使用仿真方法,编写并调试复杂的C C语言程序语言程序1.1.自定义一个包含自定义一个包含1010个无符号个无符号intint型的数组,数组元素分别是型的数组,数组元素分别是1010,9 9,8 8,7 7,6 6,5 5,4 4,3 3,2 2,1 1,0 0。使用冒泡排序法对该数组元。使用冒泡排序法对该数组元素进行从小到大排序,调试并观察存储器区数据变化,程序要素进行从小到大排序,调试并观察存储器区数据变化,程序要有注释。有注释。第六章 C语言程序设计3本周实验安排 2.2.基于上个程序,把排序好的数组进行数字滤波:去除最大的基于
4、上个程序,把排序好的数组进行数字滤波:去除最大的3 3个和最小的个和最小的3 3个,剩下的求平均,调试并观察存储器区数据变化,个,剩下的求平均,调试并观察存储器区数据变化,程序要有注释。程序要有注释。3.3.课本课本195195页例页例2 2、例、例3 3,课本,课本196196页例页例4 4调试并观察存储器区数据变化。调试并观察存储器区数据变化。第六章 C语言程序设计4第六章 C语言程序设计 6-1 C6-1 C语言程序设计基础语言程序设计基础6-2 6-2 MC9S12的的C编程与编程与ANSI C的不同的不同6-3 6-3 C C程序设计举例程序设计举例内容提要内容提要:第六章 C语言程
5、序设计5单片机编程语言单片机编程语言 汇编语言 优点:执行效率高,时序控制精确 C语言 优点:程序开发速度快,提高开发工作效率;软件调试直观;可维护性好;可移植性好(与汇编语言相比较)。单片机单片机C语言语言单片机C语言和标准C语言的用法基本相同,但是单片机C语言是针对于资源少的MCU,它的编程方法和编程手段与PC机上使用C语言还是有很大差别。6-1 C语言程序设计基础第六章 C语言程序设计6多文件多文件C语言工程的头文件语言工程的头文件当代码量非常大时,程序员一般会把代码分成几个部分,然后写入到多个文件中。这些文件一般分为C文件和H文件。作为一般规则,以下内容应该放到H文件中:预处理和宏定义
6、结构、联合和枚举声明typedef声明外部函数声明全局变量声明如果定义的变量仅仅被一个C文件所私有,那么不可放到H文件中。第六章 C语言程序设计7其它其它C语言基础知识参见补充课件:语言基础知识参见补充课件:“补充补充(自己看自己看)_C语言基础语言基础.PPT”第六章 C语言程序设计8CodeWarrior数据类型数据类型 6-2 MC9S12的C编程与ANSI C的不同第六章 C语言程序设计9自定义自定义CodeWarrior数据类型数据类型 在CodeWarrior环境下按ALT+F7打开工程的通用设置,选择“Compiler for HC12”面板然后点按钮“Type Sizes”。建
7、议不要随意更改数据类型的设置第六章 C语言程序设计10数据类型的事实数据类型的事实 代码大小和执行时间的最大节约可通过为变量选择最合适的数据类型而得到。16位微控制器内部的数据长度是16位(2字节),所以首选的数据类型是“int”。16位机处理16位数据比8位数据的效率更高。对于9S12单片机来说,16位数据类型效率最高,因此在使用中,尽量选择int类型数据。第六章 C语言程序设计11存贮类修饰符存贮类修饰符以下关键字用于声明变量,以指定特定需要或内存中变量存贮的相关条件。static(静态变量)volatile(可变变量)const(只读变量)这三个关键字,一起让我们不仅可写出好的代码,而且
8、可写出紧凑的代码。第六章 C语言程序设计12static在函数体声明的静态变量,在函数调用期间保持其值;在模块内声明静态的变量(但在函数体之外),能被模块内所有函数访问;在模块内声明静态的函数,只能被模块内其它函数调用。如:static int func(int x,int y);当一个C语言工程由多个程序员进行编写时,就不用担心自己所定义的函数与别人定义的重名了。如果在函数名和函数类型前加extern,则表示此函数是外部函数,可以被其他文件中的函数调用。如:extern int func(int x,int y)。第六章 C语言程序设计13File1.c#include /*包含文件FILE
9、2.c中的函数*/void main(void)MyFunction();/*第一次进入MyFunction之前,myVar=0*/MyFunction();/*第二次进入MyFunction之前,myVar=1*/File2.cvoid MyFunction(void)static char myVar=0;/*本地变量声明为static*/myVar=myVar+1;/*myVar是本地变量,但它保持了自己的值*/第六章 C语言程序设计14可变(可变(volatile)变量)变量 volatile的本意是“易变的”,就是该变量会以编译器无法预知的方式发生变化,请编译器不要做优化(所有的编译
10、器的优化均假设编译器知道变量的变化规律)。也就是说是其值在正常程序流程以外可能改变的变量。在嵌入式系统中,这种情况通过两种主要途径发生:一是中断服务程序,二是硬件动作。例如,通过串口接收到一个字符,然后串口状态寄存器的值会发生改变,这完全在程序流程之外发生。在嵌入式设备中,最好将所有外设寄存器声明为volatile。第六章 C语言程序设计15例子例子由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i=0;int main(void).while(1)if(i)dosomething();/*Interrupt service rout
11、ine.*/void ISR_2(void)i=1;第六章 C语言程序设计16程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。第六章 C语言程序设计17Const变量变量关键字“const”,C语言中命名最差的关键字,并不表示恒量,而是代表“只读”。在嵌
12、入式系统中,有很大的不同,这一会应会明白。const是C+中最常用的几个关键字之一,对确保程序的完整性有着重要的意义。它在调用者和被调用者之间传递这样一种信息:Baby,我不会改变你的,放心吧。Const声明可用于任何变量,它告诉编译器将其存贮在ROM代码。编译器保留了那个位置程序存贮器地址。由于位于ROM中,其值不能改变。第六章 C语言程序设计18Const的用法:的用法:const unsigned short a;unsigned short const a;const unsigned short*a;unsigned short*const a;第六章 C语言程序设计19Const
13、volatile 变量变量 现在讨论一个深奥的问题,一个变量既能是常量,又能是可变量吗?如果是这样,这意味什么,怎样使用?答案是“能”。这个修饰符应该用于能出乎意料地改变的任何存贮器位置,因此需要volatile限定语,由于const该变量是只读的。第六章 C语言程序设计20最明显的例子是硬件状态寄存器,象SCI状态寄存器SCS1。这个寄存器包含信号状态标志,如发送空、发送完成、接收满以及其它。这是一个可变寄存器由于这些标志的改变依赖于串行通信的状态,这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。这个状态寄存器最佳声明方法是:#define SCS1 (*(const v
14、olatile unsigned char*)0 x0016)第六章 C语言程序设计21访问固定内存位置与PC机不同,嵌入式系统通常的特点是需要编程者访问一个指定的存贮器位置。练习:在某个项目中需要将绝对地址0 x2FFA处整型变量的值设为0 xAA55(编译器为纯粹的ANSI编译器)。完成这个任务的代码是:int*ptr;ptr=(int*)0 x2FFA;*ptr=0 xAA55;第六章 C语言程序设计22访问访问I/O寄存器寄存器 一个普通而有用的形式是使用如下的#define指示:#define PortA (*(volatile unsigned char*)0 x0000)这种情况
展开阅读全文