飞思卡尔 freescale 端口寄存器干嘛用的设置 .B .R

飞思卡尔mc9s12的prm文件详解之二
关于Codewarrior 中的 .prm 文件
要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于 Codewarrior 5.0 编译器,单片机采用MC9S12XS128。
通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings-&Linker Files文件夹下。一个标准的基于XS128的.prm文件起始内容如下:
.prm文件范例:
/* This is a linker parameter file for the MC9S12XS128 */
/*This file is setup to use the HCS12X core only.If you plan to also use the XGATE in your project, best create a new project with the'New Project Wizard' (File|New... menu in the CodeWarrior IDE) and choose the appropriateproject parameters.*/
NAMES /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your dditional files */
SEGMENTS /* here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. All addresses are logical' */
/* Register space */
/* IO_SEG = PAGED 0x0000 TO 0x07FF; intentionally not defined */
/* non-paged RAM */
RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;
/* non-banked FLASH */
ROM_4000 = READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF;
/* VECTORS = READ_ONLY 0xFF00 TO 0xFFFF; intentionally not defined: used for VECTOR commands below */
//OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF; /* OSEK interrupt vectors (use your vector.o) */
/* paged EEPROM 0x0800 TO 0x0BFF; addressed through EPAGE */
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;
/* paged RAM: 0x1000 TO 0x1FFF; addressed through RPAGE */
/* RAM_FE = READ_WRITE 0xFE1000 TO 0xFE1FFF; intentionally not defined: equivalent to RAM: 0xFFF */
/* RAM_FF = READ_WRITE 0xFF1000 TO 0xFF1FFF; intentionally not defined: equivalent to RAM: 0xFFF */
/* paged FLASH: 0x8000 TO 0xBFFF; addressed through PPAGE */
PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF;
PAGE_F9 = 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_FD = READ_ONLY 0xFD8000 TO 0xFDBFFF; intentionally not defined: equivalent to ROM_4000 */
PAGE_FE = READ_ONLY DATA_FAR IBCC_FAR 0xFE8000 TO 0xFEBFFF;
/* PAGE_FF = READ_ONLY 0xFF8000 TO 0xFFBFFF; intentionally not defined: equivalent to ROM_C000 */
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* eventually OSEK code */
DEFAULT_ROM, NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000 /*, ROM_4000*/ ;
OTHER_ROM INTO PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;
//.stackstart, /* eventually used for OSEK kernel awareness: Main-Stack Start */
SSTACK, /* allocate stack first to avoid overwriting variables on overflow */
//.stackend, /* eventually used for OSEK kernel awareness: Main-Stack End */
PAGED_RAM, /* there is no need for paged data accesses on this derivative */
DEFAULT_RAM /* all variables, the default RAM location */
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
//.vectors INTO OSVECTORS; /* OSEK vector table */
ENTRIES /* keep the following unreferenced variables */
/* OSEK: always allocate the vector table and all dependent objects */
//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
STACKSIZE 0x100 /* size of the stack (will be allocated in DEFAULT_RAM) */
/* use these definitions in plane of the vector table ('vectors') above */
VECTOR 0 _Startup /* reset vector: this is the default entry point for a C/C++ application. */
//VECTOR 0 Entry /* reset vector: this is the default entry point for an Assembly application. */
//INIT Entry /* for assembly applications: that this is as well the initialization entry point */
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”两种,这正好验证了上一篇文章()中所提到的,RAM、Flash中都有固定页,但是EEPROM中全部是非固定页。
· 起始地址和结束地址决定了一内存块的物理位置,对于固定页,用4位16进制数表示,而对于非固定页,则用6位16进制表示,多出来的两位其实是寄存器EPAGE、RPAGE或PPAGE的值,可见,对于分页的资源,是通过寄存器(EPAGE、RPAGE或PPAGE)和16位的地址总线的组合来进行寻址的。
“TO”是系统保留的关键字,必须大写。
下面,根据上面范例提供的内容,举几个例子:
例1 RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;
上面这句话的意思是:分配0xFFF的区域的块名为“RAM”(当然可以定义别的名称),由上一篇文章而知,这一区域的物理内存的性质为RAM,属性应该为“READ_WRITE”,并且这一区域中的两页都为固定页,所以为“DATA_NEAR”。
例2 将8K字节RAM的后面4K字节定义成非自动清零的数据保留区,则应如下定义:
RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x2FFF;
RAM_NO_INIT = NO_INIT DATA_NEAR 0x3000 TO 0x3FFF;
注意,各部分RAM的分配地址不应该存在重叠的部分,否则会发生错误。
例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的官方技术手册“”。
· 内存块名就是前面介绍的用SEGMENTS划分好的不同的内存块名字。
利用这样直观的定位描述文本可以方便灵活的将数据或代码定位到芯片内存任意可能的位置,实现某些特殊目的的应用。
下面的例子,说明了各种段名、PLACEMENT 和SEGMENTS之间的对应关系。
例4 定义非自动清零的数据段
RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x2FFF;
RAM_NO_INIT = NO_INIT DATA_NEAR 0x3000 TO 0x3FFF;
DATA_PERSISTENT INTO RAM_NO_INIT;
//源程序编写:
#pragma DATA_SEG DATA_PERSISTENT //定义复位时非自定清零数据段
#pragma DATA_SEG DEFAULT
4 堆栈的设置
关于堆栈的设置,Codewarrior提供了两种方式:“STACKSIZE”命令方式和“STACKTOP”命令方式。这两种方式在同一个.prm文件中,不能同时存在。当用户只关心堆栈的大小而不关心堆栈的存放位置时,推荐使用STACKSIZE方式。
系统默认的方式为使用STACKSIZE方式。
STACKSIZE命令方式:
当使用STACKSIZE命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,这样的话,堆栈区就被放在RAM区域的起始部分,下面的例子说明了这种方式:
RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;
SSTACK, PAGED_RAM, DEFAULT_RAM INTO RAM;
STACKSIZE 0x100
上面的例子将堆栈区域存放的地址为0x20FF-0x2000,初始的堆栈指针指向栈顶地址0x20FF。
相反,如果在PLACEMENT-END部分没有声明“SSTACK INTO RAM”,则堆栈被分配在RAM区域中已分配空间的后面。请参见例6。
RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;
PAGED_RAM, DEFAULT_RAM INTO RAM;
STACKSIZE 0x100
在这个例子中,如果RAM区域中已经分配的变量占用了4个字节(从0x3),则堆栈放在这四个字节的后面,从0x4,初始的堆栈指针指向0x2103。
STACKYOP命令方式:
当使用STACKTOP命令方式时,如果在PLACEMENT-END部分声明了“SSTACK INTO RAM”,同样,堆栈区就被放在RAM区域的起始部分,初始的栈顶则由STACKTOP指定。若没有相应的声明,则初始的栈顶由STACKTOP指定,而堆栈的大小则根据处理器的不同由编译器自行设定,其大小足够装下处理器的PC寄存器的值。
关注微信公众号你的位置:
&& 详细内容
飞思卡尔MC9S08AW60最小系统设计与实现
热度1票&&浏览209次
时间:日 10:31
飞思卡尔MC9S08AW60最小系统设计与实现
(苏州大学计算机科学与技术学院,江苏苏州215006)
摘要:Freesca]e公司的HCS08系列MC9S08AW60是一款高性能的8位微控制器。评估板包含MC9S08A W60最小
系统、BDM写入调试接口、串行通信接口、与扩展板亟接的扩展插口。介绍MC9S08AW60最小系统的硬件设计及软
件调试,并给出软件程序设计思想主体流程。
关键词:MC9S08AW60;HCS08;最小系统
中图分类号:TP311.52 文献标识码:A 文章编号:(3--04
Freeseale公司的HCs08系列M嗍AW60是一款高性
能的8位微控制器。是首个能支持5V而基于高性能HCS08核
系列成员。它包含众多有价值的特性,包括60K flash存储器、
2K RAM、灵活而无需外部元件的内部时钟发生器、低压检测、
高性能、模数转换器、串行通信模块等。即使在各类恶劣环境
下,9S08AW系列亦达到极佳的EMC性能。它提供了不丽的引
脚数、封装选项及温度范围。飞思卡尔还提供DEM09S08AW6
0E,它是整合了演示板和具开发功能的USB MULTILINK
BDM于一身的经济型开发工具。该器件适于工业与汽车应用。
最小系统是指可以使内部程序运行起来的所必须的外围
电路。MC9s08AW60芯片的最小系统包括电源电路、复位电
路、晶振电路、BDM调试接121电路和IRQ电路等。如图1所
示,AW60评估板原理图。图中也给出了最小系统元件的参考
后即可弹出对话框,此维修工艺的难易性如图3所示。..
参考文献:
圈3维修难易判定窗口
[1】姜启源.数学模型[M】.北京:高等教育出版社。1993.
[2]张春来.船用设备适修性指标的选取[J】.大连海事大学学报。
【3】樊东.Oracle与PowerBuilder实战演练【M].北京:人民邮电出版
社.2000.
(责任编辑:周晓辉)
The Assessment Model of Repair-ability for Ship
and the Realization of System
Abstract:The paper 8111118 up the guidline of ship-repair which is difficult or easy by analysising the character of ship—rear.and cornputers
the weigh--v目tlues to all the guidline of ship-repair by building the model of AHP.then aB$ess∞the repair—ability for ship by the
grade which is given by expert.According to this,we developed a system of assessment.
Key Words:Ship;Repair-Ability;Analytic Hierarchy Process;Assessment
作者简介:倪肖(1985一),女,江苏无锡人,硕士。苏州大学计算机科学与技术学院教师,研究方向为嵌入式软件工程。
·跗· 软件导刊2010矩
蝣一d幽吲:≮i.々i制
“口靠口;
“口.日;
‰。:÷: m·审:
圈l AW60评估板原理圈
1.1电源电路
电路中需要大量引脚用来提供足够的电流容量。所有的电
源引脚必须有适当的旁路电容,来抑制高频噪音。
一些VDD和VSS引脚仅用于噪音旁路。图l中的电源电
路显示了一个典型的电源连接图。电源电路部分的电容构成滤
波电路,可以改善系统的电磁兼容性,降低电源波动对系统的
影响,增强电路工作稳定性。为标识系统通电与否。可以增加一
个电源指示灯。注意那些仅连接电容的引脚,不要将它们直接
连接电源电压。
1.2复位电路
在响应各种外部或侦测到的内部系统故障时可进行系统
复位。当MCU检测到需要复位时,它将寄存器和控制位设置成
已知的起始默认值。系统复位的用途是错误恢复。即当MCU检
测到内部故障时.它尝试回到一个已知的、明确的状态而从故
障中恢复。多种事件可以触发系统复位:如上电复位、看门狗定
时器复位和软件复位等。
接在MCU第3脚(雨丽)的电路为芯片硬件复位电路。正
常工作时该脚通过IOK电阻接到电源正极(这里设为5V电源
供电),所以应为高电平。若按下复位按钮lIST,则第3脚接地,
为低电平,芯片复位。
1.3量振电路
晶体振荡器也分为无源晶振和有源晶振两种类型。需要外
接电源的晶振称为有源晶振。无源晶振与有源晶振的英文名称
不同.无源晶振为crystal,而有源晶振则叫做oscillator。无源晶
振是有两个引脚的无极性元件,需要借助于时钟电路才能产生
振荡信号。自身无法振荡起来。这里使用无源晶振。图l的最小
系统电路中的晶振电路部分使用的是无源晶振。
晶振信号包括EXTAL、XTAL。用于片上时钟产生器电
1.4 BDM调试接口电路
背景调试模式BDM是由Freescale半导体公司自定义的
片上调试规范。BDM调试方式为开发人员提供了底层的调试
手段。开发人员可以通过它初次向目标板下载程序,同时也可
以通过BDM调试器对目标板MCU的Flash进行写入、擦除等
操作。用户也可以通过它进行应用程序的下载和在线更新、在
线动态调试和编程、读取CPU各个寄存器的内容、MCU内部
资源的配置与修复、程序的加密处理等操作。而这些仅需要向
CPU发送几个简单的指令就可以实现。从而使调试软件的编
写变得非常简单。BDM硬件调试插头的设计也非常简单。关键
是要满足通信时序关系和电平转换要求。
1.5 IRQ电路
IRQ中断引脚。平时要上拉。如图1所示,该引脚通过IOK
电阻上拉.同时并联0.1uF的电容滤波。
1.6与扩展板的接口
AW60核心板与扩展板的接口分别如图2所示:
;一匕.-l
田2与扩晨板的接口
2.1程序设计思想
程序设计遵循面向硬件对象模块的封装原则。即对系统中
的每个硬件对象建立相对应的头文件和硬件驱动程序文件。头
文件中主要包含该硬件的接口和相应的寄存器设置参数。硬件
驱动程序文件主要是对该硬件的驱动,同时标注出各个功能模
块的功能,人口、出口和堆栈深度。这样做剩下的编程工作就只
是面向变量和PC的编程,屏蔽的具体硬件对象的差异性.提
高了程序的移植性和复用性。工程中的各个模块的子程序均源
些塑嚣霉啪萄孝¨
第5期倪肖:飞思卡尔MC9S08AW60最小系统设计与实现·85·
于系统中给出的子程序.这也进一步验证了面向硬件对象模块
的封装思想提高的程序的移植性和复用性。
由于在集成开发套件中已给出硬件模块的驱动程序。因
此。程序设计主要任务是在对将各硬件模块整合在一起,并建
立好与Pc方的数据通信的接口。
2.2程序设计流程
程序主要可分为两个部分。分别是主控制函数部分和中断
处理程序部分。该部分的主要任务包括:系统初始化、各硬件对
象初始化、各变量初始化以及将对各硬件模块的操作按一定的
时间顺序组合在一起。其主要程序如下所示:
Mainlnit::,,复位后从此处执行
SEI //关总中断
,,1.堆栈初始化为RAM最高端
LDHX赧AMEndAddr+l,,HX-#RAMEndAddr+l
’ⅨS,,HX—l一&SP
,,2.系统初始化
JSR MCUlnit
,,3.串行口初始化
JSR SCIInit
BSET鼻5.SCC2
//4.,J、灯初始化
JSR light_init
,,设置接收中断允许
BSET#5.SCC2
,,5.定时器l初始化
mSR Timerl init
j81"Timer2init
//6.Pwm初始化
isr PWMlnit
/广7.刖D初始化
S11IA ADCLK
/砌始化各变量
,,设置接收中断允许
//用内部总线时钟,2分频
,,设置时间信号标志符
,,给Time[1—3]I.时分秒”以及中间变量Timemid赋初值
s,rA*Time+#1
s11A*Time+#2
S1【1A·Time+#3
STA*Time.mid
,,8.读取两个开关状态。初始化ll和12
j盯switch light
JSR SCISendl//发送第一个开关状态
JSR SCISendl,/发送第二个开关状态
,/初始化温度数组
sta·adjemp+#1
sta·M_mid
sta木adjemp
CU ,/开放总中断
,雇序总循环入口
MainLoop:
jsr switehJight
,,先读取开关状态,若有变化则将新的状态返回给pc端
,,JSR SCIRelm
JSR SCISendl
nextl:胛阪第二个开关状态,若有变化则将新的状态返回给pc端
kq time_send
,,不等于,后面要做a和x的交换,所以先把a的内容保存
起来。此时a中的内容是开关l的状态
/,交换a and x的内容
JSR SCISendl
time_send:
,,开始判断时间有没有
Ida幸Time+#3
CMP*Time_mid
BEQ ad //”秒”没有更新,继续检测(下一轮循环)
LDA*Time+#3
STA*Time mid //更新中间变量。以便下一次比较
,/发送时间标识码。128
,,数据已经更新,发送”时分秒”以及标识码
ldhx稍;000f
j盯DelayHX
·86· 软件导刊2010年
JSR SCISendN
bset桶.DDRA
BCLR拍.PI’A ad:
LDA#0x00 ,,采集通道0,并求20次的平均值
cmp宰ad_temp+#l
kq main_exit
sta·ad_temp+#1
main._exit:
|l璐R SCISendl
BRA Mainl_Dop
,/包含本工程的其他文件
.include”SetUp.s”/,芯片初始化
.include”SCI.S” //串行通信
.include”light.S”
.include”timer.8”
.include”ad.S”
.include”pwm.S”
.include”generalfun.S”
.include”Vectors08.8” //中断处理子程序与中断向量表
2.3中断处理程序
该部分的主要任务是对某硬件模块所产生的中断进行响
应的处理。该设计中所涉及到的中断有:SCI接收中断、定时器
溢出中断。SCI接收中断在MCU收到串口发来的数据是产生,
定时器溢出中断则在定时计数器的值与预置寄存器的值相等
(1)sCI接收中断
PC方会通过SCI串行总线将控制信号和数据传送给
MCU.当SCI接收中断发生时,中断处理程序首先根据特征码
(接收到的第一个字节的ASCII码)判断这是什么类型的数据,
然后作出相应的操作。这些数据有小灯控制信号、时间数据
(时、分、秒)、PWM数据(周期和占空比)以及通过串行线传送
的一般字符数据。
(2)定时器溢出中断
当定时/计数器中计数寄存器的值与预置寄存器的值相同
的时候就会产生溢出中断。通过这种方式就可以产生一个定时
的中断。在本设计中,单片机为了和PC方的时间保持同步,定
时器需要每隔1秒产生一个溢出中断。当该溢出中断产生时,
首先对MCU接收到的时间数据(时分秒)进行判断和变化,并
将测得的温度值发送给PC。
MC9S08AW60是首个能支持5V而基于高性能HCS08核
系列成员。它包含众多有价值的特性,如60K flash存储器、2K
RAM、灵活而无需外部元件的内部时钟发生器、低压检测、高
性能、模数转换器、串行通信模块等。
参考文献:
[1]MC9S08AW60 Technical Data Sheet Rev 2[M].Freescale Inc.2006.
[2]王宜怀,刘晓升.嵌入式技术基础与实践[M].北京:清华大学出
版社.2007.
(责任缟辑:王钊)
The Design of Basic System Based on the MC9S08AW60
Abstract:Freescah's HCS08 series MC9S08AW60 is a low-cost,hi【gh-performance 8-bit microcontrollers.Demo Board contains
MC9S08AW60 minimum system,BDM write debugging interface,serial communication interface,keyboard,AD and the expansion of the
expansion of jack—plate connections.This article describes the co把MC9S08AW60 basic system board design and software debug,and
#yes the code of the main programming procuce.
Key Words:MC9S08AW60;HCS08;Basic System

我要回帖

更多关于 寄存器 的文章

 

随机推荐