飞思卡尔MC9S08及MC9S12 单片机通过SCI口更新程序的一种方法

飞思卡尔MC9S08及MC9S12 单片机通过SCI口更新程序的一种方法
飞思卡尔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 END

SEGMENTS

ROM = READ_ONLY 0xfA00 TO 0xFFAF;

Z_RAM = READ_WRITE 0x0070 TO 0x00FF;

RAM = READ_WRITE 0x0200 TO 0x086F;

ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB;

END

PLACEMENT

DEFAULT_RAM INTO RAM;

DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM;

_DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM;

END

STACKSIZE 0x80

2,程序代码保护

为了使下载程序在任何异常情况下不会被改写,其除了放置引导程序的空间外,均要做代码保护.其在C语言种的参考代码如下.

const unsigned char NVPROT_INIT @0x0000FFBD = 0xFA;.

3,计算机应用程序如何处理单片机应用程序的中断相量表

计算机在应用程序处理该中断相量表时,应根据下载程序的映射关系,将两个字

节的相量数据自动计算到对应引导地址,并变为JMP+地址(相量)的模式.下面是参考转变模式.

单片机应用程序复位相量为0x8000,其变为跳转后的代码则为0xCC8000.如本文参考代码,其对应引导地址为0xf9fc,则计算机应用程序则应通知下载程序在0Xf9fc后写0XCC8000三个字节数据,运行完成后,反编译的代码如下:

F9FC: JMP 0x8000

3,其它建议

为保证应用程序的正确性,可以在下载程序里判断程序的校验码,可以用16位CRC码等.

七,S19文件格式简介

S-记录实际上是由五个部分组成的字符串的集合。它包括记录类型、记录长

度、存储器地址、程序/数据及校验和。每个二进制数据字节编为两个十六进制数字字符,第一个字符为字节的高四位,第二个字符为低四位。

格式(字节): 类型(2) + 记录长度(2)+ 地址(4,6,8)+ 程序/数据(0~2n)+ 校验和 (2) 类型简介如下.

?S0 S19文件名及路径

?S1 地址为2字节的代码/数据记录

?S9 S1类型文件的结束行记录

?S2 地址为3字节的代码/数据记录

?S8 S2类型文件的结束行记录

?S3 地址为4字节的代码/数据记录

?S7 S3类型文件的结束行记录

?S5 如果有的话,标记本文件总共有多少个S1,S2或S3记录。

校验和为组成记录长度、地址和程序/数据的所有字符之和值的反码的低位字节。

八,飞思卡尔MC9S12单片机程序通过SCI实现更新方法简介飞思卡尔16位单片机与8位单片机在程序空间上,中断相量概念是一样的,无论程序空间为多大,其地址空间均为64K.在Flash读写上面,基本一直.在程序空间上基本上就是多了个Page的概念.在用RAM实现对Flash进行操作时要注意长调与短调用的及Page概念后,其实与8位MCU基本一致.另外,16位MCU的程序保护与8位也有所不同,需要大家仔细看看.

需要指出的是, 飞思卡尔16位单片机的S19文件有物理地址与逻辑地址概念的区分,所以在分析地址时要小心.单片机对于Flash操作,其对物理地址与逻辑地址均可以接受.

九,参考代码

上述所有例程,我们均有相应的参考代码,含单片机代码及计算机代码.如有需要,可以直接与我们的代理的FAE或是我们分公司的相关FAE直接联系.

飞思卡尔单片机LED控制例程详解

我的第一个LED程序 准备工作: 硬件:Freescale MC9S08JM60型单片机一块; 软件:集成开发环境codewarrior IDE; 开发板上有两个LED灯,如下图所示: 实验步骤: 1.首先,确保单片机集成开发环境及USBDM驱动正确安装。其中USBDM的安装步骤如下:?假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE; ?运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下: 1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件 USBDM_JMxxCLD_V4.sx是下载器的固件文件; 2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动 所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动 安装位置到以上目录即可。 ?运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。

2.新建一个工程,工程建立过程如下: ?运行单片机集成开发环境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窗口

飞思卡尔单片机问题总结

飞思卡尔单片机问题总结 常见问题回答精华列表 为了方便网友查询相关问题,特将常见问题精华帖整理归类 本帖不断更新,欢迎网友们给出建议 另外,在提问时,请在标题中选用具体问题的字眼避免使用请问某某、请教、紧急求助等作为标题。对于具体器件,可以直接把器件类型写上,比如HC08QY4等;对于具体技术,比如CAN/LIN/ZigBee等也直接写明,便于版主分类回答,也便于其他网友查询。 一、flash/EEPROM的操作 Tips: a、HC08系列MCU中,很多Monitor ROM中固化了对flash操作的函数,用户只需调用即可,参考AN2874等应用笔记 b、HCS08系列和HCS12系列MCU对flash的操作十分类似,可以参考 AN2140 1、FLASH操作函数 (HCS08系列)

https://www.360docs.net/doc/a217612163.html,/dispbbs.asp?boardID=3&RootID=111907&ID= 111907 2、如何将flash中的程序copy至ram中 https://www.360docs.net/doc/a217612163.html,/dispbbs.asp?boardID=3&RootID=104074&ID= 104074 3、S12内部寄存器的映射 https://www.360docs.net/doc/a217612163.html,/dispbbs.asp?boardID=3&RootID=103261&ID= 103261 4、S12EEPROM的使用、 INITRG,INITRM,INITEE寄存器的说明https://www.360docs.net/doc/a217612163.html,/dispbbs.asp?boardID=3&RootID=102260&ID= 102260 5.INITRM寄存器的使用 https://www.360docs.net/doc/a217612163.html,/dispbbs.asp?boardID=3&RootID=103214&ID= 103214 二、编程技巧

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件 网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。有什么错误请指正。 正文: 关于Codewarrior 中的.prm 文件 要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。 通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。一个标准的基于XS128的.prm文件起始内容如下: .prm文件范例: NAMES END SEGMENTS RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF; ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF; EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF; EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF; EEPROM_02 = READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020BFF; EEPROM_03 = READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030BFF; EEPROM_04 = READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040BFF; EEPROM_05 = READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050BFF; EEPROM_06 = READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060BFF; EEPROM_07 = READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070BFF; PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF;

飞思卡尔16位单片机MC9S12XS128加密(程序下载不进去,正负极未短路,通电芯片不发烫)后解锁的方法及步骤w

飞思卡尔16位单片机MC9S12XS128加密(程序下载不进去,正负极未短路,通电芯片不发烫)后解锁的方法及步骤 /*****************************************************************************/ *本人用此法成功解救了4块板子【窃喜!】,此说明是本人边操作边截图拼成的,有些是在别的说明上直接截图【有些图本人不会截取,就利用现成的了,不过那也是本人用豆和财富值换来的】,表达不清之处还望见谅,大家将就着看吧!如能有些许帮助,我心甚慰!!! ————武狂狼2014.4.23 /*****************************************************************************/ 编译软件:CW5.1版本,下载器:飞翔BDMV4.6 【1】,连接好单片机,准备下载程序,单击下载按钮出现以下界面 或 (图1.1) 图 1.1——4中所有弹出窗口均单击“取消”或红色“关闭”按钮依次进入下一界面

(图1.2) (图1.3)

(图1.4) ******************************************************************************* ******************************************************************************* 【2】单击出现如下图所示下拉列表,然后单击 (图2.1) 出现下图(图2.2)对话框,按下面说明操作 (图2.2)

飞思卡尔单片机知识点

1、单片机组成:1> CPU 2> 存储器3>I/O ; 2、存储器包括2大类:ROM , RAM 3、标准ASCII码使用(1)个字节表示字符; 4、BCD码是用()进制表示的()的数据; 5、HCS08QG8的最小系统包括(电源电路,复位电路,下载口,(内部时钟)); 6、QG8管脚数量(16)、只能输入的是(PTA5)、只能输出的是(PTA4)、程序下载的是、接外部时钟的是; 7、QG8的管脚可以作为数字输入输出、也可以作为模拟输入,可以作为模拟输入的有(); 8、QG8管脚复用优先级最低的功能是(I/O); 9、QG8存储器配置中,不同资源的分界线……; 10、CPU寄存器有(A, HX, PC, CCR, SP); 11、可以执行位操作的地址范围(0X0000~0X005F); 12、有地址的寄存器分成了(3)块(0页,高页,非易失); 13、如何在C语言中定义常数(数据类型变量名;),如何指定变量的地址(数据类型变量名@ 地址;); 14、堆栈的管理者是寄存器(SP); 15、SP的复位缺省值是(0X00FF); 16、堆栈对数据的操作特点是(向上生长型:先压后涨、先减后弹); 17、堆栈一般在RAM的高地址区域还是低地址区域?高地址区 18、内部时钟源包括哪4大部分? 19、外部时钟分哪2大类;振荡器,整形外部时钟 20、内部时钟中FLL固定倍频(512倍频); 21、ICS的7种工作模式(FEI, FEE, FBI, FBILP, FBE, FBELP, stop); 22、ICS的内部参考时钟是可以校准、微调的,调整的寄存器名(ICSTRM);该寄存器的数值越大,输出时钟频率越(低); 23、FLASH是按页管理的,页大小(512)字节,每页分(8)行; 24、高页寄存器位于FLASH的最后一页的(第六行/0xFFB0~0xFFBF)位置; 25、FLASH的最后一页最后一行是(中断向量); 26、FLASH块保护寄存器(FPROT);块加密寄存器(FOPT);对应的非易失寄存器分别是(NVOPT, NVPROT); 27、FLASH操作的一般过程是(); 28、FLASH操作的有效命令有(空检查,字节编程,突发模式编程,页擦除,全部ROM 擦除); 29、记录程序运行状态的CPU寄存器是(CCR); 30、指令系统包括6大类指令,分别是(算术运算指令、数据传送指令、数据和位操作、逻辑运算、程序控制、堆栈处理); 31、寻址方式是指(CPU访问操作数和数据的方法); 32、寻址方式包括7大类16种,分别是: INH IMM DTR EXT IX,IX1,IX2,SP1,SP2,IX+,IX1+ REL IMD, DD,IX+D,DIX+ 33、8指令模板和6指令模板分别是(); 34、QG8是高电平复位还是低电平复位?低电平 35、QG8数据存储器RAM的大小为(512)字节; 36、上电复位期间将管脚(A4)设置为(低)电平可以进入调试模式 37、QG8的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼

外文翻译----- Freescale单片机在汽车控制中的应用

附录A 原文: FreescaleSingle-chip Microcomputer 's in automobile control application Freescale has the rich micro processing unit (MCU), but widely uses in the automobile electrically controlled engine, the automobile body, the crew member safety, the vehicle door and the chair, the glass, ventilation and air conditioning, skylightand light control, automobile local area network's gateway, communication facility, global positioning system and in other automobile control unit. Its product mainly includes 8/16 bit micro controller (including HC08/HCS08, HC12/HCS12 and so on), 32 bit micro controllers (including PowerPC, ColdFire, ARM and so on) 1. 8 bit Single-chip Microcomputer MC68HC11F1 and application 1.1 Characteristicsof MC68HC11F1 8 bit micro controllerMC68HC11F1 is high performance flash memory technology low cost chip based on the CPU of 8 bit HC08 the CPU . Its dozens of kind of different specification's product may cause the user to make a choice conveniently, the superior price performance ratio may cause the cost of the automobile electronic products to be more inexpensive. Chief feature of MC68HC11F1 : Two kind of power saving mode, stop and waiting; working normal in 3.0-5.0V voltage ; 0, 256b, 512b or 768b in on-chip RAM, Data of RAM will be retained in standby; 0, 12kb or 20kb inon-chip RAM or EPROM; Serical Communication InterfaceSCI,8 channel, 8 bit A/D transducer ; 16 bit timer systems; 8 bit pulse accumulators, real-time interrupt electric circuit and so on. 1.2 MC68HC11F1is employed inin automobile electronic control system Since Marelli simple point electronic fuel injectionn engine management system is promoted based on MC68HC11F1,our country Shenyang gold cup sea lion passenger car , the gold cup China passenger vehicle, AnhuiChery passenger vehicle, the Tianjin Xiali passenger vehicle and so on has used this kind of engine management system . Below to take gold cup simple point Marelli logic circuit for an example, I introducesMC68HC11F1 employed inin automobile electronic control system. 1.2.1 Compositions of system As shown in Figure 1, gold cup simple point Marelli logic circuit is mainly composed of the below part: 1.Electric circuit's control core MC68HC11F1 (CPU), is Freescale 8 bit MCU of automobile special-purpose ; 2.Tristate bus driver 74HC244 with enable, is the switch of status information input for air conditioning, oil pump, EVAP solenoid valve, idling motor and so on ; 3.8 groups rises along D trigger74HC273 with reset , isdriving signaltake-off valves for idling motor, host relay, trouble lamp, air conditioning relay power and so on;

基于飞思卡尔单片机的智能汽车设计毕业设计(论文)

基于飞思卡尔单片机的智能汽车设计 摘要 本智能车系统设计以 MC9S12DG128B 微控制器为核心,通过一个CMOS 摄像头检测模型车的运动位置和运动方向,使用LM1881视频分离芯片对图像进行处理,用光电传感器检测模型车的速度并使用PID 控制算法调节驱动电机的转速和舵机的方向,完成对模型车运动速度和运动方向的闭环控制。为了提高智能车的行驶速度和可靠性,采用了自制的电路板,在性能和重量上有了更大的优势,对比了各种方案的优缺点。实验结果表明,系统设计方案可行 关键词:MC9S12DG128,CMOS 摄像头,PID

The Research of Small and Medium-sized Electric Machines in Fuan City Author:Yao fang Tutor:Ma shuhua Abstract Fujian Fuan City industry of electric motor and electrical equipment is the one of the most representative phenomenon of industry cluster in Fujian Province mechanical industry. Its output value of small and medium-sized electric machines accounts for 20% of the whole province’s electrical equipment indu stry. The output amount of small and medium-sized electric machines from this region takes up 1/3 of that of the whole nation. Fuan electric motor and electrical equipment industry plays a significant role in the development of local national economy, being considered to be the main growth point of local economy and called "the Chinese electric motor and electrical equipment city ". This paper launched a research on small and medium- sized electric machines in Fuan city from two angles. The first one inferred the situation of Fuan electric machine industrial cluster as well as the analysis of the temporary existed problems, and then propose a few of suggestions on the part of local government. The second part focus on the improvement of the competitiveness of Fuan electric machine enterprises, through the application of Michael Porter's Five Forces Model into the local industry of electric machine, consequently carried out some strategies local enterprises should take. Key Words: small and medium-sized electric machines, Five Forces Model, industrial cluster

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中 这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器: 我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。 设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为 这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2 比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了 拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0>PORTH>PIT0。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

飞思卡尔HC12系列单片机USBDM烧录操作指导

飞思卡尔HC12系列单片机USBDM烧录操作指导 步骤一 将USBDM烧录器连接到电脑的USB口,然后,双击桌面的“hiwave.exe”图标,出现图1的窗口。 图1 假如USBDM没有连接或者连接不良,会出现如下图2的窗口,关掉程序,检查连接,再启动程序,直到出现图1的窗口。

步骤二. 将USBDM连接到需要烧录的仪表上,点击图1的“OK”按钮,将窗口最大化,然后看显示器的右下角,见图3所示,有“ACKN SYNC STOPPED”,表示连接正常。假如出现图4的窗口,表示BDM没有和仪表连接上,检查下载线。点击Cancel按钮。直到出现图3的“ACKN SYNC STOPPED”状态。 图3 图4 步骤三 点击图5的菜单栏的“TBDML HCS12”,然后点击“Load”,出现目标文件选择的窗口。见图6

图6 选择烧录的目标文件,目标文件的后缀名为“.abs”, 这里举例 1:选择DM281HZ-V1.2.abs, 2:勾选Automatically erase and program into FLASH and EEPROM 3:不勾选V erify memory image after loading code,为了节省烧录时间,不勾选这个选项。 3: 勾选Run after successful load.(可以在程序烧完的时候,自动的运行程序,看仪表是否能工作,可以作为仪表的第一次粗测) 4:点击“打开” 5:等待烧录完成, 图7,正在擦除……

图8,正在编程…… 图8 6:如果在完成编程后,仪表没有自动的进入工作状态,有以下几种可能: a.仪表有问题 b.烧录时出现问题,这个问题可以通过配置烧录选项来排除,见图6, 可以勾选选项V erify memory image after loading code ,在编程后会进行程序校验,如果校验错误表示烧录出现问题,一般来说出现烧录错误的几率很小,但也不排除。为了在批量烧录的时候,节省时间,没有选择校验。 c.烧录文件选择错误 7:如果仪表正常,拔掉USBDM和仪表的下载线,直接换上新的仪表,重复步骤三。 给程序建立快捷方式,方便操作 由于hiwave.exe程序在桌面没有快捷方式,可以自己建立一个快捷方式。 1. 打开路径C:\Program Files\Freescale\CodeWarrior for S12(X) V5.0\Prog,找到“hiwave.exe”文件 (如果CodeWarrior不是安装在C盘,则请按照…Freescale\CodeWarrior for S12(X) V5.0\Prog 寻找。)2.在文件上点击右键选择“发送到”—选择“桌面快捷方式”,就可以在桌面看到一个“hiwave.exe”程 序文件的快捷图标。以后再启动程序的时候,只需点击桌面的这个图标即可。 图1

飞思卡尔S12单片机ECT模块使用实例

/** ################################################################### ** Filename : Project_2.c ** Project : Project_2 ** Processor : MC9S12XEP100CAG ** Version : Driver 01.14 ** Compiler : CodeWarrior HCS12X C Compiler ** Date/Time : 2014-5-21, 8:55 ** Abstract : ** Main module. ** This module contains user's application code. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /* MODULE Project_2 */ /* Including needed modules to compile this module/procedure */ #include "Cpu.h" #include "Events.h" #include "Bit1.h" #include "Bit2.h" /* Include shared modules, which are used for whole project */ #include "PE_Types.h" #include "PE_Error.h" #include "PE_Const.h" #include "IO_Map.h" /* User includes (#include below this line is not maintained by Processor Expert) */ /************************************************************/ /* 初始化ECT模块*/ /************************************************************/ void initialize_ect(void){ //ECT_TSCR1_TFFCA = 1; // 定时器标志位快速清除 ECT_TSCR1_TEN = 1; // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器) ECT_TIOS = 0x03; //指定所有通道为输出比较方式 ECT_TCTL2_OM0 = 0; // 后四个通道设置为定时器与输出引脚断开 ECT_TCTL2_OL0 = 1; // 前四个通道设置为定时器与输出引脚断开 ECT_TCTL2_OM1 = 0; // 后四个通道设置为定时器与输出引脚断开 ECT_TCTL2_OL1 = 1; // 前四个通道设置为定时器与输出引脚断开 //ECT_DL YCT = 0x00; // 延迟控制功能禁止 // ECT_ICOVW = 0x00; // 对应的寄存器允许被覆盖; NOVWx = 1, 对应的寄存器不允许覆盖

基于飞思卡尔单片机自动循迹小车控制的设计

摘要 随着我国的电子科技的不断发展,我们生活中的自动化设备越来越多,也为嵌入式在智能化上的研究提供了一个广阔的平台。 本系统以MK60DN512VMD100微控制器为核心控制单元,选用OV7620 CMOS 模拟摄像头检测赛道信息,高速AD转换芯片选用TCL5510,将提取后的灰度图像进行软件二值化,进而提取赛道信息;用光电编码器实时检测小车的实时速度,采用PID控制算法调节电机的速度以及舵机转向,从而实现速度和方向的闭环控制。 关键字:MK60DN512VMD100,OV7620 CMOS,软件二值化,PID

Abstract With the continuous development of electronic technology, more and more automation equipment into the production life of the people, the rapid development of embedded intelligent study provides a broader platform. In this paper, the design of intelligent vehicle system MK60DN512VMD100 microcontroller as the core control unit, the selection of OV7620 CMOSanalog cameras to detect the track information, to using TCL5510 high-speed AD converter chip, software binarization image, extract the white guide line for identification of the track information; optical encoder to detect the real-time speed of the model car, using the PID control algorithm to adjust the speed of the drive motor and steering the angle of the steering gear, in order to achieve closed-loop control of velocity and direction of the model car. Keywords: MK60DN512VMD100,OV7620 CMOS,software binarization, PID

飞思卡尔单片机各种功能程序

流水灯四种效果: #include /* common defines and macros */ #include #include /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xdp512" #include "main_asm.h" /* interface to the assembly module */ unsigned char temp; //unsigned char pa @0x200; //unsigned char pb @0x202; unsigned char key; static void delay(void) { volatile unsigned long i; for(i=0;i<100000;i++); } static unsigned char random; static void Random(void) { random = (unsigned char)rand(); } void effect1() { unsigned char c; for(c=0;c<=6;c++) { delay(); PORTB = ~(1<=1;c--) { delay(); PORTB = ~(1<=1;c--) {

飞思卡尔9S12G系列单片机中文简介

飞思卡尔9S12系列单片机中文简介 1.1介绍 MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。MC9S12G系列是为了满足通用汽车CAN或LIN/J2602通信应用。这些应用的典型例子包括body controllers, occupant detection, doormodules, seat controllers, RKE receivers, smart actuators, lighting modules, and smart junction boxes. MC9S12G系列使用了许多MC9S12XS系列和MC9S12P系列里面的相同特性,包括在闪存(flash memory)上的纠错指令(ECC),一个快速A/D转换器(ADC)和一个为了改善电磁兼容性(EMC)性能的频率调制相位锁存循环(IPLL). MC9S12G系列是高效的对较低的程序存储器至16K。为了简化顾客使用它,特制了一个4字节可擦除扇区的EEPROM。 MC9S12G系列传送所有16位单片机的优势和效率,定位于低成本,低功耗,EMC,现行代码尺寸效率优势被现存8位和16位单片机系列的使用者所分享。像MC9S12XS系列,MC9S12G 系列运行16位位宽的访问对所有的周期和存储器状态都不用等待。 MC9S12G系列可得到的封装有100-pin LQFP, 64-pin LQFP, 48-pinLQFP/QFN, 32-pin LQFP and 20-pin TSSOP,特别是对较少引脚的封装发挥出最大的功能。此外,在每个模块中可得到的I/O口,进一步的可用于中断的I/O口允许从停止或等待模式中唤醒。 1.2特点 这部分说明了MC9S12G系列的关键特性。 1.2.1MC9S12G系列比较 表1-1提供了MC9S12G系列不同型号特点的概要。这个微机系统提供了一个明确的功能范围信息。 表1-1 MC9S12G系列概述

1飞思卡尔8位单片机MC9S08JM60开发板实践教程-60页word资料

第一章搭建实验环境 1、实验电路板及下载器实物图片 2、实验电路图 本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍) 图1-3 实验资源部分电路 图1-4 LCD串口1602液晶电路 图1-5

RS232接口电路 图1-6 数码管显示电路 图1-7 发光管、ad转换以及按键电路 图1-8 3、集成开发软件环境的建立 1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewa rrior6.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\USBDM 4.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

相关文档
最新文档