飞思卡尔8位单片机MC9S08第07章 08C语言
- 格式:pdf
- 大小:1.81 MB
- 文档页数:34
第一章搭建实验环境1、实验电路板及下载器实物图片2、实验电路图本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。
CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍)图1-3实验资源部分电路图1-4LCD串口1602液晶电路图1-5RS232接口电路图1-6数码管显示电路图1-7发光管、ad转换以及按键电路图1-83、集成开发软件环境的建立1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewarrior6.3版本2〉运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下a>C:\Program Files\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;b>C:\Program Files\pgo\USBDM4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因此在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。
3〉运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。
4、C语言编程基础第二章 LED闪烁程序编写过程1、新建工程运行单片机集成开发环境codewarrior IDE出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。
1.CodeWarrior中建立新项目运行CodeWarrior(CW)集成开发平台,如图1-1所示在File菜单下点击New,弹出建立新项目的模板对话框,见图1-2。
一般的简便做法是在图1-2对话框左面的选择列表中选择“HC(S)08 New Project Wizard”,然后在右面的项目名“Project Name”输入条中,输入你要建立的新项目名字,再在“Location”一栏中用确定项目存放的文件夹路经,完成后按“OK”进入下一步。
你也可以在图1-2对话框左侧列表中选择“Empty Project”,这样生成的项目不包含任何文件,你必须在CodeWarrior中自己添加所有相关的文件内容。
我想除非有特殊理由,实际项目开发过程中很少采用这种麻烦的方式来建立自己的项目。
接下去是选择项目开发所用的编程语言,见图1-3。
最常用的当然是C语言编程。
有时因具体项目要求,除了C编程外还需要编写独立的汇编语言模块,那就再加选汇编工具(Assembly)。
C++编程在免费版和标准版CW下都不支持,只有在专业版下才可以使用。
编程语言选择完毕后按“Next”。
图1-1图1-2图1-3这时将出现如图1-4的对话框,让你选择项目开发对应的MCU 型号。
在CW5.x 版本下支持几乎所有的HC08和大部分HCS08单片机型号。
在最新的CW6.x 中,增加了飞思卡尔最低端的8位机(RS08系列)和低端32位处理器(Coldfire V1系列)的支持,但HC08系列的有些型号没有被包含在内。
由于HC08为比较老的产品系列,已经不推荐在新项目设计中选用,因此影响不会太大。
对于新用户来说,请尽量直接安装CW6.x 或以后推出的更新版本。
以典型的9S08系列为例,当你选择了一个MCU 型号后,在图1-4右侧会显示出所有针对该型号芯片可用的项目调试场景。
其中:∙ “Full Chip Simulator ”是芯片全功能模拟仿真,即无需任何目标系统的硬件资源,直接在你的PC 机上模拟运行单片机的程序,在模拟运行过程中可以观察调试程序的各项控制和运行流程,分析代码运行的时间,观察各种变量,等等。
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
第8章定时器/计数器模块8.1 定时器定时器是主管定时的系统。
MCS08AW60内部包括两个独立的定时器。
定时器的核心是一个16位计数器。
该计数器的时钟由外部晶振时钟或者锁相环模块总线时钟经过预定的分频因子分频得到,相互独立的定时器可以使用不同的分频因子。
同一个定时器的所有动作都以分频后的时钟作为参考,相互之间都有确定的关系。
从单片机的角度看,一个单位时间就是定时器的自由运行计数器计数的时间间隔,所以在任何时候都可以通过读取计数器的值而判断经过了多少时间。
使用预置计数功能可以得到精确的溢出时间,可以在任何时候暂停或清除计数器的计数。
通过定时器的溢出功能可以进行长时间的定时。
定时器具有定时溢出、输入捕捉、输出比较、PWM脉冲输出和DMA直接存储器访问等功能。
定时器应用很广,如利用输入捕捉测量脉宽和频率;输出特定的波形;直接输出脉宽调制波(PWM);使用输入捕捉配合输出比较来输出同步波形以及用于延时等。
下面就以MCS08AW60为例,详细阐述定时器的功能及应用。
8.1.2定时器的结构及基本功能MCS08AW60定时器的功能结构图如图8-1所示。
每个定时器具有两路独立的输入捕捉和输出比较通道;可以实现带缓冲(Buffered)和不带缓冲(Unbuffered)的脉宽调制波;可以得到8种可编程选择的分频因子;可以自由运行计数或预置计数;可以停止或清除计数器计数;定时器溢出可以引发中断,每路通道的输入捕捉和输出比较也可以引发中断。
每一路定时器都由以下寄存器控制:1)一个8位状态和控制寄存器——TPMxSC;2)一个16位计数器寄存器——TPMxCNTH:TPMxCNTL;3)一个16位预置计数器寄存器——TPMxMODH:TPMxMODL;4)控制每个通道的8位状态和控制寄存器——TPMxCnSC;5)每个通道计数器值的16位寄存器——TPMxCnVH:TPMxCnVL。
注:寄存器命名中的“x”表示定时器模块标志。
飞思卡尔8位单片机概述----飞思卡尔8位单片机系列主要包括RS08类、HCS08类、HC08类、HC08汽车类、HCS08汽车类。
下面每个类型都将挑选一典型产品进行介绍,更多产品介绍敬请登陆飞思卡尔官方网站。
1、RS088位微控制器正逐渐向小型化应用发展。
在这些小型应用中,也许并不需要使用完整的HC08或S08所具备的丰富功能。
RS08内核是非常流行的SO8中央处理器(CPU)的精简版,它被精心打造为效率更高、成本更低并适合小容量内存的微控制器。
RS08是一些新兴应用的理想解决方案,例如完全用固态电路实现的简单机电设备,或小型便携设备甚至一次性便携设备。
飞思卡尔的工程师将小型化应用不需要的功能从S08内核中去除,而对其余的运算进行了增强,从而提高了超小型控制器的使用效率。
这些控制器的芯片面积非常小,您甚至可以将它们从胡椒罐中摇出来。
RS08内核的尺寸比S08小30%。
为了减小面积,RS08将计数器和地址总线宽度限制为14位,使用一个全局中断标志寄存器取代了矢量中断功能,同时还取消了以下功能:堆栈指针和H:X寄存器及其相关指令和寻址模式乘法、除法以及BCD码指令算术逻辑移位运算(保留了逻辑移位和旋转)条件码寄存器中的若干位以及相关条件分支指令这些被取消的功能由更为简单的结构所代替,这些结构保证了在内存低于16K且引脚数目很少的器件上,可以用非常简洁高效的代码实现大多数嵌入式应用。
为了进一步提高运算效率,飞思卡尔增加了如下内容:屏蔽程序计数器,用于更为高效的子程序调用简短微小的寻址模式,允许对最常用的变量和寄存器进行更为有效地访问和操作内存分页方案,能够更充分地利用直接寻址模式和新型的简短微小的寻址模式RS08内核深化了飞思卡尔8位产品系列,在发展可以共享外围设备和通用开发工具、并且引脚兼容的8位/32位器件的过程中,迈出了第一步。
它将使机械和电子产品开发者开发出史无前例、独具匠心、节约成本的电子应用产品和功能非常先进的一次性产品。