飞思卡尔8位单片机MC9S08JM60开发板实践教程
飞思卡尔8位单片机MC9S08第07章 08C语言

(2)编译程序
返回
7.4 08C语言程序编程框架
7.5 08C语言的编译过程
7.5.1 编译过程
在SD-HC08在线编程开发系统中编辑了源程序以后,使用编译命令就可 以把源程序翻译成目标程序。 ① 编译的脚本文件:包含了编译指令及相关的参数,文件存放的位置 在.prj的同一文件夹下。 ② C程序向汇编程序的转化:启动08C编译器,根据.mak文件的编译脚 本将所有.c文件编译成.s文件及.lis文件。 ③ 汇编代码向机器码的转化:汇编程序将所有的汇编文件编译成.o的中 间目标文件,即所有的汇编语句都编译成机器码。 ④ 连接:启动连接器,连接器根据.mak文件中的连接脚本,把所有的.o 文件统一连接成一个.s19文件,该文件可以下载到目标机器上执行,同时还 可根据用户需求生成.lst文件和.mp文件。
(2)I/O与寄存器的操作
使用上面定义的I/O口或寄存器宏,可以方便对I/O置高低电平或读取I/O 的状态,读写寄存器。
7.3 08C语言的使用
7.3.2 使用汇编指令
在08C语言中,使用汇编代码有两种方法:
(1)asm(“汇编指令”) (2)定义汇编子程序
定义格式如下:_子程序名 代码 … rts
7.1 单片机的C语言编程概述
7.1.2 单片机C语言
单片机C语言和标准C语言的用法基本相同,但是 单片机C语言是针对于资源少的MCU,它的编程方法 和编程手段与PC机上使用C语言还是有很大差别。
7.1 单片机的C语言编程概述
返回
7.2 标准C语言的基本语法
7.2.1 数据类型
(1)基本类型
表7-1 C语言基本数据类型 数据类型
7.2 标准C语言的基本语法
7.2.1 数据类型
Freescale8位单片机入门与实践

Freescale 8位单片机入门与实践第一章单片机概论(当前各公司单片机使用情况、发展情况、freescale单片机命名规则、开发步骤、CodeWarrior软件开发环境的安装要求和安装说明)第二章Freescale 8位单片机(特点、结构、存储器结构、CPU内寄存器,介绍MC68HC908QY4和GP32内部资源)第三章Freescale 8位单片机指令系统(汇编指令)(CodeWarrior使用、软件仿真)第四章复位、中断、系统配置、通用IO端口第五章CodeWarrior应用综述(在线调试、VisualTools的使用)第六章MC68HC908QY4在线编程开发系统(特点、硬件、监控方式、C语言)第七章定时器模块第八章AD、键盘中断模块(各个模块的使用及例程)第九章综合应用(C和汇编混合编程、程序,扩展应用)附录:1、存储器分配图2、寄存器及中断矢量表3、MC68HC08指令集4、MC68HC908QY4开发系统原理图参考书Motorola(Freescale)微控制器MC68HC08原理及其嵌入式应用刘慧银等编著清华大学出版社嵌入式应用技术基础教程王宜怀刘晓升编著清华大学出版社单片机嵌入式应用的在线开发方法邵贝贝编著清华大学出版社mc68hc908qy4sm_simplified_Chinese.pdfMC68HC908QY4.pdfMC68HC908GP32.pdf前言飞思卡尔(前身为摩托罗拉公司半导体产品事业部)在微电子产品领域拥有50年的悠久历史,为全球的汽车、消费、工业、网络和无线市场生产半导体产品。
飞思卡尔总部位于德克萨斯州的奥斯汀,在全球超过25个国家拥有设计、生产和销售运营部门。
飞思卡尔是众多市场领域中的领导者,是世界上最大的微控制器类集成电路供应商,随着国内市场投资的增加,其产品得到越来越多的认同,尤其是移动通信、汽车电子、工业控制等环境恶劣的场所,其应用越多,因为它的产品抗干扰性能很强。
飞思卡尔8位单片机实用教程课程设计

飞思卡尔8位单片机实用教程课程设计一、课程设计概述本次课程设计旨在让学生深入了解飞思卡尔8位单片机的基本原理和使用方法,掌握其应用开发技能,为自主研发嵌入式系统打下基础。
在设计过程中,学生可以自由选择项目主题,包括但不限于:•智能家居控制系统•电子秤设计•数码钟表设计•电子琴•LED矩阵显示屏•红外遥控器除了项目主题选择自由,学生也需要在设计过程中独立完成软硬件开发,并能够撰写设计报告并进行实验现场讲解。
二、课程设计要求1. 硬件要求•飞思卡尔8位单片机开发板•液晶显示屏•七段数码管或LED矩阵显示屏•简易电路板•相关电子元器件:电阻、电容、LED、按键等2. 软件要求学生需要下载并安装相关软件进行开发,包括:•CodeWarrior软件•P&E Micro的USB Multilink接口3. 设计报告要求学生需要撰写完整的课程设计报告,报告内容包括:•选题背景及意义•设计思路及实现步骤•软硬件设计图及接口说明•代码编写及调试过程•实验现场演示三、课程设计流程1. 硬件连接将飞思卡尔8位单片机开发板与液晶显示屏、七段数码管或LED矩阵显示屏、简易电路板以及相应的电子元器件进行连接,并将P&E Micro的USB Multilink接口插入电脑上的USB接口。
2. 编写程序使用CodeWarrior软件编写程序,并进行调试。
需要注意的是,程序中需要包括板子上所有的设备,比如液晶显示屏、七段数码管或LED矩阵显示屏、按键等的驱动程序。
程序编写完成后,可以将程序烧录到单片机中。
3. 实验现场演示学生在课程设计报告演示时,需要准备好实验现场演示。
在演示过程中,需要详细讲解所设计的主题、实现效果以及编写程序的过程等,并针对现场观众的问题进行回答。
学生还需将实验现场演示过程录制下来,并与课程设计报告一起提交。
四、注意事项•编写程序时,需要注意代码规范,确保代码的可读性和维护性。
•在连接硬件时,需仔细核对电路板上的元器件及连接方式,避免出现电路连接错误。
飞思卡尔MC9S08及MC9S12 单片机通过SCI口更新程序的一种方法

通过SCI口单片机通过飞思卡尔MC9S08及MC9S12 单片机更新程序的一种方法王佚(Freescale 8/16bit MCU FAE) 飞思卡尔的8/16 Bit 单片机内置FLASH可以通过单片机编程来进行擦除与编程,所以,理论上就可以通过SCI口接口实现软件的自我升级.在实际工作中,我们也遇到不少客户询问相关的实现方法,而我们也给了一些参考代码,但还是有不少工程师不能很好地理解,基于这些原因,我写了点东西来介绍一种比较简单的实现方法,供大家参考,如有不周,敬请批评与谅解.一,飞思卡尔MC9S08单片机内部存储器介绍MC9S08有很多系列单片机,一般程序空间均在64K以下,为了介绍方便,我们以MC9S08AW60一种为例进行介绍.上图为MC9S08AW60的数据空间分布图,对于大于64K空间的MC9S08单片机,其结构与MC9S12单片机类似,故先不做介绍.从图中我们不难看出,由于飞思卡尔单片机的数据存储器(RAM)与程序存储器(FLASH)是统一编址,所以,我们可以将程序引导到RAM里运行.二,飞思卡尔 8位单片机内部中断相量地址介绍飞思卡尔 8位单片机对中断处理是通过判断中断相量表的地址来判断程序的入口地址的.飞思卡尔 8位单片机的中断相量为16位,其放置在从0xFFFF地址向下按照中断号以此排放.三, 飞思卡尔MC9S08单片机FLASH操作简介飞思卡尔MC908及MC9S08系列单片机的FLASH都可以通过软件进行擦除与编程,不同的是MC908有相应的程序内置在单片机的ROM空间,而MC9S08没有,其需要用户自己编写.飞思卡尔的CodeWarrior for MC9(S)08软件在安装后,在\freescale\CodeWarrior for Microcontrollers V6.0\(CodeWarrior_Examples)\HCS08\Device Initialization C Examples\GB60_Modules\Sources\Flash_GB60目录下有响应的参考代码.MC9S08系列单片机的Flash有四种操作模式:Byte program, Byte program (burst), Page erase及Mass erase,其操作时间见下表.需要说明的是,在此操作其间,不可以使能任何中断.下图为操作流程图.需要说明的是,用来实现”Write a data value to an address in the FLASH array”的语句代码,表面上看是将一个数据写到一个Flash数据区去,但实际上是将所需要编程的Flash地址或是擦除的Flash的块地址及数据分别写入到单片机内类似地址积存器及数据寄存器里.CodeWarrior里自带的代码,是用机器码的方式来做的,其也给出了相应的代码,大家可以对应着看看,一般来说,只做Flash模拟EEPROM,该代码即可满足大家使用.在此,本文就不详细描述代码实现的方法.四,实现程序自我更新的两种常见方法及各自特点一般说来,我们有两种方法来,我们有两种常见方法实现程序自我更新.一种是将实现程序更新的部分的程序与应用程序融合在一起,系统在更新程序时甚至可以将整个程序包括更新程序一起更新掉,其优点是可以花费少的程序空间,缺点是数据及主程序空间分配比较麻烦,且在做更新程序时一旦掉电或是其它什么原因,可能无法进行程序的再次更新.另外一种是,将实现程序更新的程序写成是一个独立的程序,其缺点是要浪费部分程序空间,且中断相量无法更新所以要做程序的映射,类似引导(bootload)的概念.其优点是在编写应用程序时不用考虑数据空间地址分配的问题,同时不用担心下载过程出现任何异常情况.本文后面所涉及的内容,均以第二种方法为例,为描述方便,我们定义其为下载程序.五, 下载程序如何实现中断相量的映射由于我们无法预知究竟系统会用多少中断,所以对于应用程序的中断,都必须在更新程序中做映射,即,我们在单片机的某个程序空间建立一个程序跳转表,更新程序的中断相量表做一个固定的表,对应固定地址,我们只需在固定地址放相应的跳转指令,就可以实现中断相量的映射.例题如下:地址A: JMP 地址B. JMP地址B其实是个引导程序.中断相量<1>: 地址A.其中, “中断相量<1>”地址放的”地址A”由更新程序确定,而”地址A” 地址放的” JMP地址B”,JMP由计算机来添加,”地址B”则由应用程序确定.对于复位中断,其处理方法有点不同,其实现方法如下:中断相量<1>: Main.地址A:JMP 地址B.Main:If (a>b){goto地址B }中断相量表的定义参考方法如下:void (* const _vect[])() @0xFFCC = { /* Interrupt vector table */0xf998, /* Int.no. 25 Vrti (at FFCC) Unassigned */0xf99c, /* Int.no. 24 Viic1 (at FFCE) Unassigned */…_Startup /* Int.no. 0 Vreset (at FFFE) Reset vector */};六,单片机程序注意事项1,程序空间分配下载程序的空间应该从0xfff地址向下排放,具体大小需要根据实际的大小及单片机Flash的Block大小来同时决定.空间的安排,一定是Block的倍数.应用程序的空间是从程序的最低段开始排放,除了中断向量外,不可以有任何代码地址与下载程序重叠.在用CodeWarrior来写程序时,我们可以修改PRM文件来控制程序排放地址.下面是下载程序的PRM参考代码.NAMES ENDSEGMENTSROM = READ_ONLY 0xfA00 TO 0xFFAF;Z_RAM = READ_WRITE 0x0070 TO 0x00FF;RAM = READ_WRITE 0x0200 TO 0x086F;ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB;ENDPLACEMENTDEFAULT_RAM INTO RAM;DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM;_DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM;ENDSTACKSIZE 0x802,程序代码保护为了使下载程序在任何异常情况下不会被改写,其除了放置引导程序的空间外,均要做代码保护.其在C语言种的参考代码如下.const unsigned char NVPROT_INIT @0x0000FFBD = 0xFA;.3,计算机应用程序如何处理单片机应用程序的中断相量表计算机在应用程序处理该中断相量表时,应根据下载程序的映射关系,将两个字节的相量数据自动计算到对应引导地址,并变为JMP+地址(相量)的模式.下面是参考转变模式.单片机应用程序复位相量为0x8000,其变为跳转后的代码则为0xCC8000.如本文参考代码,其对应引导地址为0xf9fc,则计算机应用程序则应通知下载程序在0Xf9fc后写0XCC8000三个字节数据,运行完成后,反编译的代码如下:F9FC: JMP 0x80003,其它建议为保证应用程序的正确性,可以在下载程序里判断程序的校验码,可以用16位CRC码等.七,S19文件格式简介S-记录实际上是由五个部分组成的字符串的集合。
MC9S08AW60单片机实验指导书-V10

Freescale HCS08原理及应用Version: 0.10Freescale MC9S08AW60单片机实验指导书华中科技大学电信系Freescale 联合实验室May 8, 2009REVISIONSRev.DescriptionOriginDate0.10初始化版本YangMing2009.04目录REVISIONS (II)1Freescale HCS08单片机实验指导书 (4)1.1 MC9S08AW60 单片机 (4)1.2 AW60 开发系统 (4)1.2.1 MC9S08AW60开发套件及其连接 (5)1.3 使用A W60 开发板时P C 串口的设置 (6)1.4 命令详解 (8)1.4.1 H 命令 (8)1.4.2 D 命令 (9)1.4.3 M 命令 (10)1.4.4 E命令 (10)1.4.5 L 命令 (10)1.4.6 G 命令 (11)1.4.7 R 命令 (11)1.4.8 B 命令 (12)1.5 监控程序及监控命令详解 (12)1.6 常用命令组合—向实验板下载程序 (12)1.7 运行本地用户程序 (14)1.8 清华开发板用户编程说明 (14)1.9 实验步骤 (15)2HCS08实验模块原理图 (17)2.1 8位数字量输入电路与8位数字量显示电路 (17)2.2 A/D模拟电平产生电路 (18)2.3 数码管显示电路 (19)2.4 外部键盘电路 (19)2.5 IRQ中断信号产生电路 (20)2.6 SPI输入电路 (21)2.7 SPI扩展输出电路 (21)参考文献 (23)1 Freescale HCS08单片机实验指导书1.1 MC9S08AW60 单片机MC9S08AW60 是首个能支持 5V 而基于高性能 H CS08 核系列成员。
它包含众多有价值 的特性--60K flash 存储器、2K RAM 、灵活而无需外部元件的内部时钟发生器、低压检测、 高性能、模数转换器(ADC )、串行通信模块等。
飞思卡尔8位单片机MC9S08JM60开发板实践教程

第一章搭建实验环境系统时钟设置#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位单片机MC9S08JM60开发板实践教程

第一章搭建实验环境系统时钟设置#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位单片机MC9S08第03章 高级语言的串行通信编程

3.4 Visual Basic的串行通信控件MSComm
3.4.3 MSComm控件的主要属性
(1)CommPort属性 (3)PortOpen属性 (5)InputMode属性 (7)OutPut属性 (9)SThreshold属性 (11)DTREnable属性 (13)HandShaking属性 (2)Settings属性 (4)Input属性 (6)InputLen属性 (8)RThreshold 属性 (10)CommEvent属性 (12)RTSEnable属性
3.1 Visual Basic 6.0 编程简介
3.1.2 面向对象的程序设计概念
(1)对象及其相关概念
对象:一个整体看待的数据和代码的集合。 属性:每一个对象所具备的特性。 事件:对象所能识别的动作。 方法:对象所能执行的动作。
(2)面向对象的程序设计
面向对象的程序设计方法与编程技术不同于标准的过程化程序设 计。面向对象程序设计基本上是一种包装代码,代码可以重用而且维 护起来很容易。
3.4 Visual Basic的串行通信控件MSComm
3.4.2 MSComm控件的引用
由于Visual Basic的串行通信控件并不主动出现在工具箱中,当 我们需要MSComm控件时,可把它添加到工具箱中,步骤如下:图 3-5 加载的MSComm控件。 ① 单击【工程】菜单。 ② 在【工程】菜单中选择【部件】命令。 ③ 打开【部件】对话对话框,选中 “Microsoft Comm Control ”复选框。 6.0 6.0” ④ 单击【应用】或【确定】按钮,即可在工具箱中看到 “MSComm控件”图标,如图3-5所示,我们就可以象使用标准控件一 样使用MSComm控件。
3.5.1 实例概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2〉
关于采用 for 循环进行延时的问题。 首先这种方法很难做到精确的 延时,而且对于首次使用这款单片机的人来说,粗略延时都很难 估算,这是因为 for 循环的延时跟系统的总线时钟有关。虽然电路 板上焊接了 4MHz 晶振,但上面的例子并没有用到,用的是内部 缺省时钟。内部缺省时钟在不修改参数的情况下,总线时钟是 8MHz。如果在主函数死循环前面添加修改时钟的代码,将时钟切 换到外部晶振,同时启用内部的 PLL 锁频环,将下面的代码放在 for(;;)死循环之前,将会产生 24MHz 的总线时钟,重新下载运行后 发现 LED 闪烁的速度明显加快。
选择 C 语言,项目名称就写“LED 闪烁” ,保存位置自己决定,但要记住。 后面有些选项就暂时跳过,选择“完成”后,并将文件夹展开的样子如下:
点击 “make” 快捷按钮正确编译后, 左边的钩钩全部消失, 同时在 Code 和 Data 列出现了相关的代码和数据量。
2、
修改主文件并下载运行
在左侧双击 mian.c 文件, 打开该文件的编辑界面, 修改文件直到下面模样:
第一章
搭建实验环境
1、 实验电路板及下载器实物图片
2、 实验电路图 本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。CPU 采用飞思卡尔8位单片机MC9S08JM60CLD, (电路图介绍)
图 1-3
实验资源部分电路
图 1-4 LCD串口1602液晶电路
图 1-5
RS232接口电路
PTBD_PTBD0 = 1; //B0 输出“1” ,D1 灭 PTBD_PTBD1 = 0; //B1 输出“0” ,D2 亮 for(i = 0;i<2000;i++){ //延时 for(j=0;j<100;j++){ } } //__RESET_WATCHDOG();//看门狗已经关闭,不需要喂狗了 } } 修改完 main.c 文件后,点击最右边的 debug 按钮。
#include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ void main(void) { // EnableInterrupts; //不开中断,因此将此句去掉了 word i,j; //定义两个 word(int)型的变量 i 和 j SOPT1 = 0; //关闭看门狗 PTBDD_PTBDD0 = 1; //设置 B0 为输出 PTBDD_PTBDD1 = 1; //设置 B1 为输出 for(;;) { PTBD_PTBD0 = 0; PTBD_PTBD1 = 1; for(i = 0;i<2000;i++){ for(j=0;j<100;j++){ } } //死循环,类似 while(1) //B0 输出“0” ,点亮 D1,见图 1-8 //B1 输出“1” ,D2 灭 //2 个 for 循环嵌套,延时大约半秒
/*** PTBD - Port B Data Register; 0x00000002 ***/ typedef union { byte Byte; struct { byte PTBD0 :1; /* Port B Data Register Bit 0 */ byte PTBD1 :1; /* Port B Data Register Bit 1 */ byte PTBD2 :1; /* Port B Data Register Bit 2 */ byte PTBD3 :1; /* Port B Data Register Bit 3 */ byte PTBD4 :1; /* Port B Data Register Bit 4 */ byte PTBD5 :1; /* Port B Data Register Bit 5 */ byte PTBD6 :1; /* Port B Data Register Bit 6 */ byte PTBD7 :1; /* Port B Data Register Bit 7 */ } Bits; } PTBDSTR; extern volatile PTBDSTR _PTBD @0x00000002; #define PTBD _PTBD.Byte #define PTBD_PTBD0 _PTBD.Bits.PTBD0 #define PTBD_PTBD1 _PTBD.Bits.PTBD1 #define PTBD_PTBD2 _PTBD.Bits.PTBD2 #define PTBD_PTBD3 _PTBD.Bits.PTBD3 #define PTBD_PTBD4 _PTBD.Bits.PTBD4 #define PTBD_PTBD5 _PTBD.Bits.PTBD5 #define PTBD_PTBD6 _PTBD.Bits.PTBD6 #define PTBD_PTBD7 _PTBD.Bits.PTBD7
第三章 按键程序设计过程
1、 按键与 cpu 的连接,从图 1-3 可以看出,按键 4、按键 5 分别与 PTB4 和 PTB5 相连。 该款单片机 MC9S08JM60 一共有 8 个键盘输入口,从数据手册可以看出非常分散。 键盘中断输入 KBIP0 KBIP1 KBIP2 KBIP3 KBIP4 KBIP5 KBIP6 KBIP7 对应管脚 PTG0 PTG1 PTD2 PTD3 PTB4 PTB5 PTG2 PTG3 PTG PTB PTD 所属端口 PTG
如果没有硬件,也可以完全采用软件仿真的方法进行程序设计, 改动过程如下: a〉首先确保在工程硬件连接下拉中选择第一项“Full Chip Simulation” ,如 果有硬件,对于自制的开源下载器则应该选择“HCS08 Open Source BDM”
3〉
b〉点击“debug”按钮后不会出现下载器配置界面,而是直接进入调试界 面,在调试界面选择“Component/Open…”菜单。
在属性页的最下面选择刷新模式为周期性“ Periodical” ,刷新间隔可以用 缺省的 10ms。 全部修改完成后选择保存成文件以备后用。
既然是采用没有硬件的完全仿真模式,一定要去掉跟硬件相关的代码,比 如讨论 2 中添加的将时钟切换到外部晶振的代码一定要去掉。然后就可以全速 运行了。在完全仿真模式下,LED 闪烁的速度跟实际硬件相比还是不一样的, 只能是功能仿真。
4、 C语言编程基础
第二章 LED 闪烁程序编写过程
1、 新建工程
运行单片机集成开发环境 codewarrior IDE
出现如下界面
Create New Project :创建一个新项目工程 Load Example Project :加载一个示例工程 Load Previous Project :加载以前创建过的工程 Run Getting started Tutorial:运行 CodeWarrior 软件帮助文档 Start Using CodeWarrior: 立刻使用 CodeWarrior
图 1-6
数码管显示电路
图 1-7
发光管、ad转换以及按键电路
图 1-8
3、 集成开发软件环境的建立
1〉运行文件 CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及 简化32位)单片机集成开发环境codewarrior6.3版本 2〉运行
ห้องสมุดไป่ตู้
USBDM_4_7_0i_Win,这个程序会在 c 盘的程序文
出现下载器配置界面,如果没出现说明下载器没有正确安装。选择“5V”是打 算让下载器给目标板供电 5V。确保其它选项都对后,选择“ok”
出现装载警告
继续“ok”后程序下载到单片机中。在调试界面里点击运行按钮,让程序全速 运行后应该看到两个 LED 交替点亮。
3、
延伸讨论
1〉
在修改主程序 main.c 的过程中, 对寄存器 SOPT1、 PTBDD_PTBDD0、 PTBD_PTBD0 的名称问题,对于刚入手者确实有一定难度。由于包 含了文件 "derivative.h",该文件又包含了“ MC9S08JM60.h” ,这 是与选用的 cpu 相关的,建议打开这个 cpu 相关的头文件仔细阅 读,对于 B 口数据寄存器的定义如下,如果看不懂建议要搞懂 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\USBDM 4.7.0\USBDM_Drivers\Drivers 下 有下载器的 usb 驱动.因此在插入 usb 下载器,电脑提示发现新 的 usb 硬件的时候, 选择手动指定驱动安装位置到以上目录即可。
总体来说,该款单片机的八个键盘中断输入特点如下: 1〉 可以单独允许某一个中断输入脚,其他不用的做一般I/O; 2〉 每个中断输入脚都可以单独编程设置为下降沿触发、上升沿触发、 下降沿和低电平触发、上升沿和高电平触发; 3〉 所有中断输入口公用一个中断向量,可允许或者禁止中断; 4〉 键盘中断可以将芯片从低功耗中唤醒到正常工作模式。
MCGC2= 0x36; while(!MCGSC_OSCINIT) ; MCGC1 = 0xB8; while(MCGSC_IREFST); while(MCGSC_CLKST!=2); MCGC1 = 0x88; // RDIV = 2; //0x90; //RDIV = 4 MCGC3 = 0x46; // 24 倍频; //0x44;//16 倍频 while(!MCGSC_PLLST); while(!MCGSC_LOCK); MCGC1 = 0x08; //切换到 PLL 0x10; while(MCGSC_CLKST!=3);