文档视界 最新最全的文档下载
当前位置:文档视界 › 飞思卡尔单片机编程

飞思卡尔单片机编程

飞思卡尔单片机编程
飞思卡尔单片机编程

关于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;

READ_ONLY DATA_FAR IBCC_FAR 0xF98000 TO 0xF9BFFF;

PAGE_FA =

READ_ONLY DATA_FAR IBCC_FAR 0xFA8000 TO 0xFABFFF;

PAGE_FB =

READ_ONLY DATA_FAR IBCC_FAR 0xFB8000 TO 0xFBBFFF;

PAGE_FC =

READ_ONLY DATA_FAR IBCC_FAR 0xFC8000 TO 0xFCBFFF;

PAGE_FE =

READ_ONLY DATA_FAR IBCC_FAR 0xFE8000 TO 0xFEBFFF; END

PLACEMENT

_PRESTART,

STARTUP,

ROM_VAR,

STRINGS,

VIRTUAL_TABLE_SEGMENT,

//.ostext,

DEFAULT_ROM, NON_BANKED,

COPY

INTO ROM_C000 ;

OTHER_ROM INTO PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;

//.stackstart,

SSTACK,

//.stackend,

PAGED_RAM,

DEFAULT_RAM

INTO RAM;

DISTRIBUTE DISTRIBUTE_INTO

ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB,

PAGE_FA, PAGE_F9, PAGE_F8;

CONST_DISTRIBUTE DISTRIBUTE_INTO

ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB,

PAGE_FA, PAGE_F9, PAGE_F8;

DATA_DISTRIBUTE DISTRIBUTE_INTO

RAM;

//.vectors INTO OSVECTORS;

END

ENTRIES

//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart

END

STACKSIZE 0x100

VECTOR 0 _Startup

//VECTOR 0 Entry

//INIT Entry

1 .prm文件组成结构

按所含的信息的不同.prm文件有六个组成部分构成,这里仅讨论和内存空间映射关系紧密的三个部分,其他的不做讨论。

·SEGMENTS… END

定义和划分芯片所有可用的内存资源,包括程序空间和数据空间。一般我们将程序空间定义成ROM,把数据空间定义成RAM,但这些名字都不是系统保留的关键词,可以由用户随意修改。用户也可以把内存空间按地址和属性随意分割成大小不同的块,每块可以自由命名。例如同样是RAM,可以使用不同的属性,使其有复位后变量清零和不清零之分。

关于内存划分的具体方法在后面详解。

·PLACEMENT… END

将指派源程序中所定义的各种段,如数据段DATA_SEG、CONST_SEG和代码段CODE_SEG 被具体放置到哪一个内存块中。它是将源程序中的定义描述和实际物理内存挂钩的桥梁。

·STACKSIZE

定义系统堆栈长度,其后给出的长度字节数可以根据实际应用需要进行修改。堆栈的实际定位取决于RAM内存的划分和使用情况。默认的情况下,堆栈放在RAM区域的起始部分。当然,堆栈的定义不只有这种方式,还可以使用STACKTOP关键字。后面将详细讨论。

2内存划分的具体方式

由SEGMENTS开始到END为止,中间可以添加任意多行内存划分的定义,每一行用分号结尾。定义行的语法型式为:

[块名] = [属性1] [属性2] ,… ,[属性n] [起始地址] TO [结束地址];

其中,

· “块名”的定义和C语言变量定义相同,是以英文字母开头的一个字符串,用户可以自己任意定义块名。

· “属性”用户是不能自己定义的,因为属性名指定了上面所说的“块名”所对应的不同的内存类型和访问方式,而不同物理内存的类型和访问方式是一定的。

对于“属性1”,Codewarrior 5.0中可以有三种不同的类型,对于只读的Flash-ROM 区属性一定是READ_ONLY,对于可读写的RAM区属性可以是READ_WRITE,也可以是NO_INIT。它们两者的关键区别是ANSI-C的初始化代码会把定位在READ_WRITE块中的所有全局和静态变量自动清零,而NO_INIT块中的变量将不会被自动清零。当然只是复位时不清零,掉电时还是清零的,但是对于单片机系统,变量在复位时不被自动清零这一特性有时是很关键的,在某些应用中有特殊的用途。

对于“属性2 …属性n”,根据上面给出的.prm的范例文件可以看出来,可能的形式有“DATA_FAR”、“DATA_NEAR”、“IBCC_FAR”、“IBCC_NEAR”四种类型。其中,“DATA_FAR”和“DATA_NEAR”相对应,当内存区域包含变量或者是常量时(通常是RAM、Flash和EEPROM),必须指明上面两种属性中的一种,由于涉及到内存的分页,可以这样理解:“DATA_FAR”属性指定的内存块为可以保存数据的非固定页,而“DATA_NEAR”属性指定的内存块为可以保存数据的固定页;同理“IBCC_FAR”和“IBCC_NEAR”相对应,当内存区域包含代码时(Flash 和EEPROM),必须指明上面两种属性中的一种,“IBCC_FAR”属性指定的内存块为可以保存代码的非固定页,而“IBCC_NEAR”属性指定的内存块为可以保存代码的固定页

讨论到这里,细心的读者已经发现,在上面的.prm文件范例中,RAM的属性有“DATA_FAR”和“DATA_NEAR”两种,Flash的属性中也是四种都有,但是EEPROM中却只有“DATA_FAR”和“IBCC_FAR”两种,这正好验证了上一篇文章(飞思卡尔16位单片机的资源配置)中所提到的,RAM、Flash中都有固定页,但是EEPROM中全部是非固定页。

·起始地址和结束地址决定了一内存块的物理位置,对于固定页,用4位16进制数表示,而对于非固定页,则用6位16进制表示,多出来的两位其实是寄存器EPAGE、RPAGE或PPAGE的值,可见,对于分页的资源,是通过寄存器(EPAGE、RPAGE或PPAGE)和16位的地址总线的组合来进行寻址的。

“TO”是系统保留的关键字,必须大写。

下面,根据上面范例提供的内容,举几个例子:

例1RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

上面这句话的意思是:分配0x2000-0x3FFF的区域的块名为“RAM”(当然可以定义别的名称),由上一篇文章而知,这一区域的物理内存的性质为RAM,属性应该为“READ_WRITE”,并且这一区域中的两页都为固定页,所以为“DATA_NEAR”。

例2将8K字节RAM的后面4K字节定义成非自动清零的数据保留区,则应如下定义:

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x2FFF;

RAM_NO_INIT = NO_INIT DATA_NEAR 0x3000 TO 0x3FFF;

……

END

注意,各部分RAM的分配地址不应该存在重叠的部分,否则会发生错误。

例3EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO

0x000BFF;

XS128单片机中的EEPROM由Data-Flash模拟,所以属性为READ_ONLY。EEPROM全部为非固定页,所以用“DATA_FAR”、“IBCC_FAR”。后面的起始地址和结束地址分别为6位的16进制数,前两位的“00”实质指的是EEPROM分页寄存器EPAGE的值为0x00。

用SEGMENTS只是从单片机的物理内存这一角度对其进行空间划分。源程序本身并不知道物理内存被分割和属性定义的这些细节。它们两者之间必须通过下面的PLACEMENT建立联系。

3程序段和数据段的放置

PLACEMENT-END内所描述的信息是告诉连接器源程序中所定义的各类段应该被具体放置到哪一个内存块中去。其语法型式为:

[段名1], [段名2],...,[段名n] INTO [内存块名1],[内存块名2],… ,[内存块名n];

[段名1], [段名2],...,[段名n] DISTRIBUTE_INTO [内存块名1],[内存块名2],… ,[内存块名n];

其中

·段名就是在源程序中用“#pragma”声明的数据段、常数段或代码段的名字。如果用缺省名“DEFAULT”,则默认的数据段名为DEFAULT_RAM,代码段和常数段名为DEFAULT_ROM。若程序中定义的段名没有在PLACEMENT中提及,则将被视同为DEFAULT。几个相同性质但不同名字的段可以被放置到同一个内存块中,相互之间用逗号分隔。

· INTO 是系统保留的关键词,在这里为“放入”的意思。

· DISTRIBUTE_INTO 也是系统的保留关键字。Codewarrior 具有内存自动优化的功能,但是在“Small memory”模式中,这种功能不会被启用,只有当16-bit的地址空间不能存放下所有的变量和代码时,才会启用这种功能。

在SEGMENTS-END区域中,当在内存模块的属性中加上“DATA_FAR”、“DATA_NEAR”、“IBCC_FAR”、“IBCC_NEAR”四种属性中的任何一种时,那么在PLACEMENT-END区域中,就需要指定段名“DISTRIBUTE”,

“CONST_DISTRIBUTE”,“DATA_DISTRIBUTE”(系统默认的,非关键字,用户可以自行更改)所分配的内存空间,这就需要使用“DISTRIBUTE_INTO”关键字。

关于内存自动优化功能,可以参考freescale的官方技术手册“TN 262.pdf”。

·内存块名就是前面介绍的用SEGMENTS划分好的不同的内存块名字。

利用这样直观的定位描述文本可以方便灵活的将数据或代码定位到芯片内存任

意可能的位置,实现某些特殊目的的应用。

下面的例子,说明了各种段名、PLACEMENT 和SEGMENTS之间的对应关系。例4定义非自动清零的数据段

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x2FFF; RAM_NO_INIT = NO_INIT DATA_NEAR 0x3000 TO 0x3FFF; ……

END

PLACEMENT

……

DATA_PERSISTENT INTO RAM_NO_INIT;

……

END

//源程序编写:

#pragma DATA_SEG DATA_PERSISTENT //定义复位时非自定清零数据段byte sysState;

#pragma DATA_SEG DEFAULT

4堆栈的设置

关于堆栈的设置,Codewarrior提供了两种方式:“STACKSIZE”命令方式和“STACKTOP”命令方式。这两种方式在同一个.prm文件中,不能同时存在。当用户只关心堆栈的大小而不关心堆栈的存放位置时,推荐使用STACKSIZE方式。

系统默认的方式为使用STACKSIZE方式。

STACKSIZE命令方式:

当使用STACKSIZE命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,这样的话,堆栈区就被放在RAM区域的起始部分,下面的例子说明了这种方式:

例5

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

……

END

PLACEMENT

……

SSTACK, PAGED_RAM, DEFAULT_RAM INTO RAM;

……

END

STACKSIZE0x100

上面的例子将堆栈区域存放的地址为0x20FF-0x2000,初始的堆栈指针指向栈顶地址0x20FF。

相反,如果在PLACEMENT-END部分没有声明“SSTACK INTO RAM”,则堆栈被分配在RAM区域中已分配空间的后面。请参见例6。

例6

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

……

END

PLACEMENT

……

PAGED_RAM, DEFAULT_RAM INTO RAM;

……

END

STACKSIZE0x100

在这个例子中,如果RAM区域中已经分配的变量占用了4个字节(从0x2000到0x2003),则堆栈放在这四个字节的后面,从0x2103到0x2004,初始的堆栈指针指向0x2103。

STACKYOP命令方式:

当使用STACKTOP命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,同样,堆栈区就被放在RAM区域的起始部分,初始的栈顶则由STACKTOP指定。若没有相应的声明,则初始的栈顶由STACKTOP 指定,而堆栈的大小则根据处理器的不同由编译器自行设定,其大小足够装下处理器的PC寄存器的值。

飞思卡尔HCS12(x) memory map解说之二

【整理者】https://www.docsj.com/doc/0516148148.html,

【提供者】whut_wj

【详细说明】飞思卡尔HCS12(x) memory map解说之二

接着上次的说吧。

首先问一个问题:

中断函数为什么要加:#pragma CODE_SEG __NEAR_SEG NON_BANKED 这个声明?这

个声明是干什么用的?

这要还是要从FLASH分页和非分页的区别说起。

下面详细说一说,FLASH里非分页和分页的使用。要明白一点,分页是不可见

的,要用的时候PPAGE参与寻

址。

1 FLASH里非分页工作机制

FLASH一共为128K,一页是16K,那么应该有8页才是,但是实际只有6个分页。

有2个非分页放在4000-7FFF

,和C000-FFFF两个逻辑地址窗里。那么,当程序的寻址在64K之内(2^16=64K,16

位机的寻址能力是64K)时,

就不用分页了,直接使用那两个非分页的数据。实际上,3E页3F页是可见的,其

实他们就是那2个非分页的映

射。因此,使用非分页FLASH,就不须设置PPAGE寄存器,直接使用逻辑地址即可。

见图1。

这点我们可以从以下看出:

/* non-paged FLASHs */

ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;

ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;

PLACEMENT

NON_BANKED, INTO ROM_C000/*, ROM_4000*/;

很直观地看出,把这两个可以直接使用逻辑地址的页面设为NON_BANKED, 那么

中断函数放在NON_BANKED里

,就可以把函数放在64K的寻址程序段中。这么一来,进中断就方便多了,效率也

高很多。这就是对本文开篇

的解释。

大家记住这一点,在XS128里也有类似的一招。

2 FLASH里分页工作机制

好了,上面是3E页3F页是可见的分页区,还有3D 3C 3B 3A 39 38不可见的分

页区。当你的程序要寻址

64K以外的空间,即不是是可见的3E页3F页时,就要涉及分页了。

PPAGE是MMC模块的东西,我搞了个图片大家看看,如图2。每一页在DG128

中的逻辑地址都是由PPAGE中的

页号和重叠窗口内地址组成的24位绝对地址。通过设置寄存器PPAGE,可以使用全

部的FLASH空间。例如:程序

要将数据存入$3D页,设置PPAGE的值为$3D,那么逻辑地址范围说是

$3D8000-$3DBFFF。有一点要注意:为了分页描述的完整性,可以如下理解:对于3E页3F页有两个逻辑地址映射到物理地址。拿3E页来说,有$004000-$007FFF和

$3E8000-$3EBFFF。

对于程序是如何寻址,这个是内核的东西,大家可以看看CPU这个文档。

通过分析,相信大家知道地址这个东西是非常有用的吧。下次说说XS128,XS128

的RAM FLASH EEPROM都可

以分页。更高级,更主动,编程弹性更大。

图1

例3 EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF;

XS128单片机中的EEPROM由Data-Flash模拟,所以属性为READ_ONLY。EEPROM全部为非固定页,所以用“DATA_FAR”、“IBCC_FAR”。后面的起始地址和结束地址分别为6位的16进制数,前两位的“00”实质指的是EEPROM分页寄存器EPAGE的值为0x00。

用SEGMENTS只是从单片机的物理内存这一角度对其进行空间划分。源程序本身并不知道物理内存被分割和属性定义的这些细节。它们两者之间必须通过下面的PLACEMENT建立联系。

3 程序段和数据段的放置

PLACEMENT-END内所描述的信息是告诉连接器源程序中所定义的各类段应该被具体放置到哪一个内存块中去。其语法型式为:

[段名1], [段名2],... ,[段名n] INTO [内存块名1],[内存块名2],…,[内存块名n];

[段名1], [段名2],... ,[段名n] DISTRIBUTE_INTO [内存块名1],[内存块名2],…,[内

存块名n];

其中

·段名就是在源程序中用“#pragma”声明的数据段、常数段或代码段的名字。如果用缺省名“DEFAULT”,则默认的数据段名为DEFAULT_RAM,代码段和常数段名为DEFAULT_ROM。若程序中定义的段名没有在PLACEMENT中提及,则将被视同为DEFAULT。几个相同性质但不同名字的段可以被放置到同一个内存块中,相互之间用逗号分隔。

·INTO 是系统保留的关键词,在这里为“放入”的意思。

·DISTRIBUTE_INTO 也是系统的保留关键字。Codewarrior 具有内存自动优化的功能,但是在“Small memory”模式中,这种功能不会被启用,只有当16-bit的地址空间不能存放下所有的变量和代码时,才会启用这种功能。

在SEGMENTS-END区域中,当在内存模块的属性中加上“DATA_FAR”、“DATA_NEAR”、“IBCC_FAR”、“IBCC_NEAR”四种属性中的任何一种时,那么在PLACEMENT-END区域中,就需要指定段名“DISTRIBUTE”, “CONST_DISTRIBUTE”, “DATA_DISTRIBUTE”(系统默认的,非关键字,用户可以自行更改)所分配的内存空间,这就需要使用“DISTRIBUTE_INTO”关键字。

关于内存自动优化功能,可以参考freescale的官方技术手册“TN 262.pdf”。

·内存块名就是前面介绍的用SEGMENTS划分好的不同的内存块名字。

利用这样直观的定位描述文本可以方便灵活的将数据或代码定位到芯片内存任意可能的位置,实现某些特殊目的的应用。

下面的例子,说明了各种段名、PLACEMENT 和SEGMENTS之间的对应关系。例4 定义非自动清零的数据段

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x2FFF; RAM_NO_INIT = NO_INIT DATA_NEAR 0x3000 TO 0x3FFF;

……

END

PLACEMENT

……

DATA_PERSISTENT INTO RAM_NO_INIT;

……

END

//源程序编写:

#pragma DATA_SEG DATA_PERSISTENT //定义复位时非自定清零数据段

byte sysState;

#pragma DATA_SEG DEFAULT

4 堆栈的设置

关于堆栈的设置,Codewarrior提供了两种方式:“STACKSIZE”命令方式和“STACKTOP”命令方式。这两种方式在同一个.prm文件中,不能同时存在。当用户只关心堆栈的大小而不关心堆栈的存放位置时,推荐使用STACKSIZE方式。

系统默认的方式为使用STACKSIZE方式。

STACKSIZE命令方式:

当使用STACKSIZE命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,这样的话,堆栈区就被放在RAM区域的起始部分,下面的例子说明了这种方式:

例5

SEGMENTS

……

RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

……

END

PLACEMENT

……

SSTACK, PAGED_RAM, DEFAULT_RAM INTO RAM;

……

END

STACKSIZE 0x100

上面的例子将堆栈区域存放的地址为0x20FF-0x2000,初始的堆栈指针指向栈顶地址0x20FF。

飞思卡尔单片机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窗口

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

附录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的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼

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

基于飞思卡尔单片机的智能汽车设计 摘要 本智能车系统设计以 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

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

摘要 随着我国的电子科技的不断发展,我们生活中的自动化设备越来越多,也为嵌入式在智能化上的研究提供了一个广阔的平台。 本系统以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--) {

毕业论文--基于飞思卡尔单片机的智能车设计(含外文翻译)

毕业设计(论文)任务书 课题名称:基于飞思卡尔单片机的智能车设计 完成期限:2009年12月 1日至2010年 5月 10日

一、课题训练内容 通过以全国大学生“飞思卡尔”杯智能车竞赛为背景,设计一台能够自主循迹的小车。整个开发中,严格执行“飞思卡尔”杯智能车竞赛的比赛规则。 二、设计(论文)任务和要求 (1)查阅课题相关参考文献、技术资料,做好备份,以便以后查找; (2)充分分析相关素材,比较多个方案,选择一种完成设计任务; (3)分析和选取完成任务的技术途径和实施方法,第四周前上交毕业设计开题报 告一份。开题报告内容与学校模板要求一致,字数不少于2000字;经指导老师检查合格后才能进行后续工作; (4)补充必要的理论和技术知识,查找相关的元件、器件的参数资料; (5)给出详细的系统设计说明书,画出原理电路图,分析各部分电路功能及原理; (6)根据系统要求,进行硬件设计以及理论数据计算,给出相关参数; (7)根据系统要求,给出系统控制的流程图,编写详细程序; (8)根据系统要求,制作实物和安装调试; (9)撰写毕业设计论文,内容和格式按学校要求执行,(具体要求在学校教务网 的下载专区下载:设计论文规范、格式模板、任务书、开题报告、成绩记录等9个文件)。 三、毕业设计(论文)主要参数及主要参考资料 主要参数: (1)赛道为普通白色板,宽度为60cm,赛道正中间为2.5cm的黑色普通胶带, 铺设赛道地板颜色不作要求,它和赛道之间可以但不一定有颜色差别, 跑道最小曲率半径不小于 50 厘米,跑道可以交叉,交叉角为90 °, 赛道有一个长为1米的出发区,计时起始点两边分别有一个长度10厘米 黑色计时起始线,赛车前端通过起始线作为比赛计时开始或者结束时刻。 (2)须采用飞思卡尔半导体公司的 8 位、 16 位处理器 ( 单核 ) 作为唯一 的微控制器,推荐使用 9S12XS128 ,9S08AW60 微控制器; (3)比赛车模采用官方规定的本成品车模; (4)模型车的电源采用官方的7.2V/2000mA的电池,舵机采用制定的s3010;

基于飞思卡尔的Bootloader程序下载更新

基于飞思卡尔的Bootloader程序下载更新 前言 写这篇文档是因为大三暑假时在一家公司实习,做一个基于飞思卡尔的bootloader远程更新项目,刚开始定的技术指标是基于MC9S12XS128单片机的Bootloader程序、远程(基于GSM网络)和CAN总线通信。但因为我只是一个本科实习生而且实习时间只有一个多月,所以只完成了基于SCI的本地写入.S19文件的更新。这大概也就是这篇文档所包含的内容啦。 整个程序是存在瑕疵甚至基本上可以说是不成功的,但是我觉得自己在做这个项目的过程中确实也解决了网上没有提到或者没有答案的一些问题,特写此文档,希望大家各取所需,如果有什么高见或者发现了我明显错误的地方,也非常欢迎大家给我指出。欢迎大家前来指教。 小目录 一、Bootloader的含义---------------------------------------------------------2 二、SCI串口的使用------------------------------------------------------------3 三、Flash的擦除和写入--------------------------------------------------------5 四、.S19文件的写入-----------------------------------------------------------13 五、心得体会-----------------------------------------------------------------14

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

飞思卡尔单片机编程 之天职师大

天职师大期末必考 关于Codewarrior 中的 .prm 文件 网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。有什么错误请指正。 来源:(https://www.docsj.com/doc/0516148148.html,/s/blog_60281b700100gbp6.html) - 关于Codewarrior 中的 .prm 文件_LiangXiangTai_新浪博客 正文: 关于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; ROM_4000 = 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;

飞思卡尔讲解

哈尔滨工程大学本科生毕业论文 第1章绪论 1.1论文研究的背景 闭环控制是自动控制论的一个基本概念,也称反馈控制,在日常生活的各种控制实例中有具体的表现方式,比如常用交通工具中电车的速度控制,汽车的速度控制,冰箱的温度调节等,其中采用闭环控制方案对直流电机进行调速是生产生活中最常见的一种闭环控制实例。在工业自动化飞速发展的今天,利用高性能单片机来完成对仪器设备的自动化控制是其中最重要的一个环节。本文研究对象是基于Freescale单片机的移动小车控制系统设计,涉及到对直流电机的速度控制,倒车防撞报警器设计,LCD(Liquid Crystal Display)显示等功能,既应用了本科阶段所学的电路基础知识、自动控制理论知识,又充分利用了Freescale单片机的高性能与可靠性。 1.1.1速度闭环控制系统 随着工业自动化以及电子信息技术和自动控制技术的不断发展,电机的种类不断增加,性能也更加出色。以电机为动力的车辆的自动化程度也越来越高,对车辆自动化程度的要求也越来越高,电车近几十年来发展十分迅速,直流电机电瓶车的速度控制水平也得到了极大的提高。转速控制作为电机控制中最关键的部分,具体反映到电车就是在车体速度控制上,而速度闭环控制作为重要的控制方式,得到了最广泛的应用。 直流电机速度闭环控制系统包括以下内容: (1)直流电机在接到起动电压后起动; (2)转速达到预设速度后,利用PWM脉宽调制电路产生方波,并通过单片机设定占空比,达到无级调速; (3)采用直流电机反接制动原理来调速,在增量PID控制算法下达到稳定转速的效果。 1

哈尔滨工程大学本科生毕业论文 速度闭环控制系统硬件组成: (1)PWM脉宽调制电路 (2)测速装置(电压输出型光电码盘) (3)动力装置(直流电机) (4)直流电机驱动器 1.1.2超声波倒车防撞系统 改革开放以后,我国经济快速发展,汽车的拥有量大大增加,一些大中型城市交通拥挤,导致交通事故频发。安全驾驶逐渐成为大家关注的焦点,倒车防撞系统的需求非常迫切,因此对其进行设计生产显得非常重要。此倒车防撞系统利用了超声波的特点和优点,将超声波测距和飞思卡尔单片机结合为一体,设计出一种基于MC9S12DG128B单片机的超声波倒车防撞报警系统。 1、超声波测距模块 在本系统中,超声波模块的主要任务是:通过单片机产生40KHz的脉冲,来激发发射探头发出超声波,接收探头接收到超声波后反馈给单片机一段脉冲。单片机定时器记录发射跟接收的40KHz脉冲的时间,算出时间间隔,然后通过编程算法计算出距离。 2、防撞报警系统 本系统采用LED发光二极管作为报警器。在车体逐渐逼近障碍物的过程中,通过编程使单片机引脚产生一定频率的脉冲,驱动发光二极管。当倒车时候,如果逼近障碍物,则发光二极管闪烁频率会加快,进而判定有障碍物,达到防撞报警的作用。 1.1.3LCD液晶显示系统 在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的最大辅助功能,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交 2

单片机(飞思卡尔)课程设计

课程设计报告 课程设计名称: 系: 学生姓名: 班级: 学号: 成绩: 指导教师: 开课时间:学年学期

目录 第一章系统概要 (1) 1.1 系统背景 (1) 第二章系统硬件设计 (2) 2.1 系统原理图 (2) 2.2 单片机(MCU)模块 (3) 2.2.1 MC9S08AW60单片机性能概述 (3) 2.2.2 内部结构简图 (3) 2.3 串行通信模块 (4) 2.3.1 MAX232引脚图 (4) 2.3.2 串行通信的电路原理 (5) 2.4 液晶显示模块 (6) 第三章系统软件设计 (8) 3.1 MCU方(C)程序 (8) 3.1.1串行通信子程序 (14) 3.1.2 LCD子程序 (18) 第四章系统测试 (21) 第五章总结展望 (24) 5.1 总结 (24) 5.2 展望 (24) 参考文献 (24)

第一章系统概要 1.1 系统背景 单片机(MCU)的基本定义是:在一块芯片上集成了中央处理器(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。 Freescale的S08系列8位MCU由于稳定性高、开发周期短、成本低、型号多样、兼容性好被广泛应用。HC08是Freescale的08系列之一S08表示增强型HC08,它是在HC08基础上发展起来的,兼容HC08系列。S08是2004年左右推出8位MCU,资源丰富,功耗低,性价比很高,是08系列MCU发展趋势,其性能与许多16位MCU相当。MC9S08AW60是低成本、高性能8位微处理器S08家族中的成员,本次课程设计就是以该芯片为基础,来进行嵌入式的设计。 1.2 系统功能 当按下启动键,电子时钟从当前设定值开始走时。按秒刷新,要求在LCD 屏上显示。若按启动键,则时间暂停,再按,时间继续按秒刷新。 时间格式是”时:分:秒”(00:00:00)。通过向通用I/O端口的引脚输入高或低(1或0)电平,作为启动键,对电子钟进行控制——电子钟开始运行、暂停和继续运行。显示数据时,先把要显示的数据送到数据寄存器中,再通过发送寄存器将数据输入要LCD中显示。

飞思卡尔单片机中断序号

/**************** interrupt vector numbers ****************/ #define VectorNumber_Vsi 119 #define VectorNumber_Vsyscall 118 #define VectorNumber_VReserved118 117 #define VectorNumber_VReserved117 116 #define VectorNumber_VReserved116 115 #define VectorNumber_VReserved115 114 #define VectorNumber_VReserved114 113 #define VectorNumber_VReserved113 112 #define VectorNumber_VReserved112 111 #define VectorNumber_VReserved111 110 #define VectorNumber_VReserved110 109 #define VectorNumber_VReserved109 108 #define VectorNumber_VReserved108 107 #define VectorNumber_VReserved107 106 #define VectorNumber_VReserved106 105 #define VectorNumber_VReserved105 104 #define VectorNumber_VReserved104 103 #define VectorNumber_VReserved103 102 #define VectorNumber_VReserved102 101 #define VectorNumber_VReserved101 100 #define VectorNumber_VReserved100 99 #define VectorNumber_VReserved99 98 #define VectorNumber_VReserved98 97 #define VectorNumber_Vatd0compare 96 #define VectorNumber_VReserved96 95 #define VectorNumber_VReserved95 94 #define VectorNumber_VReserved94 93 #define VectorNumber_VReserved93 92 #define VectorNumber_VReserved92 91 #define VectorNumber_VReserved91 90 #define VectorNumber_VReserved90 89 #define VectorNumber_VReserved89 88 #define VectorNumber_VReserved88 87 #define VectorNumber_VReserved87 86 #define VectorNumber_VReserved86 85 #define VectorNumber_VReserved85 84 #define VectorNumber_VReserved84 83 #define VectorNumber_VReserved83 82 #define VectorNumber_VReserved82 81 #define VectorNumber_VReserved81 80 #define VectorNumber_VReserved79 79

相关文档
相关文档 最新文档