程序
- 格式:doc
- 大小:2.33 MB
- 文档页数:53
程序的作用是
程序的作用是为实现预期目的而进行操作的一系列语句和指令,一般分为系统程序和应用程序两大类,计算机中的程序在港澳台地区称为程式。
程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合。
程序,香港和台湾对英文procedure的中文翻译,编程语言中的procedure在大陆翻译为“过程”,在港台和其他领域则翻译为“程序”。
在大陆于计算机科学、电脑工程、电子工程、电机工程、机器人工程学、机械工程领域中的英文术语program的中文译名也是“程序”,在港台则翻译为“程式”。
当程序为procedure的译名时,一个程序即是特定的一系列动作、行动或操作,而这些活动、动作或操作必须被执行于相同方式以为了在相同环境下恒常得出相同的结果(例如紧急应变程序)。
第2章习题1试说明进程和程序之间的区别和联系。
解进程和程序是既有区别又有联系的两个概念。
(1)进程是动态的,程序是静态的。
程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行,是一个动态的集合。
离开了程序,进程就失去了存在的意义,但同一程序在计算机上的每次运行将构成不同的进程。
程序可看作是电影的胶片,进程可以看作电影院放电影的过程。
(2)一个进程可以执行多个程序,如同一个电影院的一场电影可放映多部影片。
(3)一个程序可被多个进程执行,如同多个影院同时利用一个电影的胶片放映同一部电影。
(4)程序可以长期保存,进程只能存在于一段时间。
程序是永久存在的,而进程有从被创建到消亡的生命周期。
举例说明多道程序系统失去了封闭性和再现性。
解例如,有两个循环程序A和B,共享一个变量N。
程序A每执行一次时,都要做N:=N+1操作;程序B则每执行一次时,都要执行print(N)操作,然后再将N的值置成“0”。
程序A和B在多道程序系统中同时运行。
假定某时刻变量N的值为n,可能出现下述三种情况:(1)N:=N+1 在print(N)和N:=0之前,此时得到N值变化过程为n+1、n+1、0;(2)N:=N+1 在print(N)和N:=0之后,此时得到N值变化过程为n 、0 、1;(3)N:=N+1 在print(N)之后和N:=0之前,此时得到N值变化过程为n、n+1、0。
所以,在A、B程序多次执行过程中,虽然其每次执行时的环境和初始条件都相同,但每次得到的结果却不一定相同。
两个并发进程P1和P2的程序代码在下面给出。
其中,A、B、C、D和E均为原语。
P1: begin P2: beginA; D;B; E;C; endend请给出P1、P2两个进程的所有可能执行的过程。
解P1和P2进程以不可预知的速度推进,它们所有可能的执行过程为:(1)A→B→C→D→E (2)A→B→D→E→C(3)A→B→D→C→E (4)A→D→B→E→C(5)A→D→B→C→E (6)A→D→E→B→C(7)D→E→A→B→C (8)D→A→B→C→E(9)D→A→B→E→C (10)D→A→E→B→C在操作系统中为什么要引入进程这一概念?解在单道程序设计环境下,CPU被一道程序独占,CPU严格按该程序的指令顺序来执行。
怎样编写程序程序是计算机按照一定的算法和逻辑运行的指令集合。
编写程序是将问题转化为计算机能够理解和执行的指令的过程。
本文将介绍编写程序的基本步骤和一些常用的编写程序的技巧。
步骤一:理解需求在编写程序之前,首先需要明确程序的需求和目标。
了解用户的需求可以帮助我们选择合适的编程语言和设计程序的结构。
当我们清楚了解了需求之后,才可以开始着手编写程序。
步骤二:选择编程语言根据需求和个人的编程经验,选择一种或多种适合的编程语言。
编程语言有很多种,如Python、Java、C++等,它们各有特点和适用范围。
选择编程语言时,需要考虑语言的易用性、效率、可扩展性等因素。
步骤三:编写算法算法是程序的核心。
编写算法可以理清问题的逻辑思路,确定程序的输入、处理和输出。
在设计算法时,可以使用流程图、伪代码等方式进行描述,以便于更好地理解和实现。
良好的算法设计可以提高程序的效率和可读性。
步骤四:编写代码在编写程序代码时,可以根据选定的编程语言的语法规范进行编码。
代码应该清晰、易读、易维护,可以添加注释来解释代码的逻辑和功能,方便其他人理解代码。
编写代码需要注意规范和命名规则,合理选择变量名、函数名等,以便于后续阅读和修改。
步骤五:测试和调试编写完代码后,需要进行测试和调试来确保程序的正确性和稳定性。
测试可以分为单元测试、集成测试和系统测试等。
在测试过程中,可以利用测试框架和工具来自动化测试,以减少人工测试的工作量,提高测试的效率。
如果发现了错误或异常,需要进行调试来找出问题所在并修复。
步骤六:文档编写在程序编写完成后,还需要编写文档来记录程序的使用方法、功能和实现细节等。
文档应该包括程序的概述、输入输出说明、运行环境要求、使用示例和常见问题等。
编写好文档可以方便其他人了解和使用程序,减少沟通成本。
文档可以使用Markdown格式进行编写,方便阅读和发布。
步骤七:优化和维护编写好程序之后,可以进行优化来提高程序的性能和效率。
程序的名词解释程序是计算机科学中的一个重要概念,指的是按照特定的规则和顺序,为了实现某种功能而编写的一段指令集合。
通过程序,计算机可以按照程序中所描述的步骤完成各种任务和运算。
本文将从不同维度对程序进行解释和探讨。
一、程序与算法:程序和算法是密切相关的概念,但又有所区别。
算法可以理解为解决问题的方法和步骤,程序则是将算法转化为特定编程语言的表达方式。
算法是一种逻辑上的抽象,程序则是对算法进行具体实现的表示。
程序不仅包含了算法本身,还需要考虑语法、编程语言的规则和特性等因素。
二、程序与编程语言:程序的实现离不开编程语言的支持。
编程语言是计算机程序和指令的书写规范和工具,通过编程语言,程序员可以用相对简洁的方式描述复杂的算法和逻辑。
编程语言可以分为低级语言和高级语言。
低级语言更接近计算机底层,编写的程序更接近计算机硬件的操作。
高级语言则更加便捷和易于理解,程序员可以基于高级语言编写程序,然后通过编译器或解释器将其转化为计算机可以执行的机器码。
三、程序的执行过程:程序的执行过程一般包括三个阶段:编译、链接和运行。
编译是将程序源代码转化为机器码或者汇编代码的过程,这个过程将程序员编写的高级语言程序翻译为计算机可以理解的机器指令。
链接是将程序及其所依赖的库文件合并到一起,生成可执行文件或者共享库的过程。
运行是计算机执行可执行文件的过程,计算机根据程序的指示逐条执行,完成相应的任务。
四、程序的编写和调试:程序的编写和调试是程序开发的关键环节。
编写程序需要具备一定的编程能力和逻辑思维能力,开发者需要将问题拆解并设计相应的算法,然后通过编程语言将算法转化为可执行的代码。
在调试过程中,开发者会对程序进行测试、分析和修改,以确保程序的正确性和稳定性。
五、程序的优化和性能:程序的优化和性能提升是程序开发中的重要工作。
通过优化算法、改进数据结构、优化代码逻辑等方式,可以提高程序的执行效率和响应速度。
性能优化可以从多个层面进行,包括算法层面、编程语言层面、硬件层面等。
运行程序的方法以运行程序的方法为标题,本文将介绍如何在Windows操作系统中运行程序。
在Windows系统中,有多种方法可以运行程序,下面将逐一介绍。
方法一:使用开始菜单运行程序1. 首先,点击屏幕左下方的“开始”按钮,弹出开始菜单。
2. 在开始菜单的搜索框中输入程序的名称或关键词,系统会自动搜索匹配的程序。
3. 找到要运行的程序后,点击它的图标或名称即可运行。
方法二:使用桌面图标运行程序1. 如果程序在桌面上创建了快捷方式图标,可以直接双击该图标运行程序。
2. 如果桌面上没有快捷方式图标,可以通过以下步骤创建:a. 找到程序的安装位置,通常在“C:\Program Files”或“C:\Program Files (x86)”文件夹中。
b. 找到要创建快捷方式的程序文件,右键点击它,选择“发送到”>“桌面(快捷方式)”。
c. 回到桌面,会看到程序的快捷方式图标,双击该图标即可运行程序。
方法三:使用文件资源管理器运行程序1. 打开文件资源管理器(可以通过快捷键Win + E打开)。
2. 导航到程序所在的文件夹。
3. 找到要运行的程序文件,双击该文件即可运行程序。
方法四:使用命令行运行程序1. 打开命令提示符(可以通过快捷键Win + R,然后输入“cmd”并按下回车键打开)。
2. 使用cd命令切换到程序所在的文件夹,例如:cd "C:\Program Files\ProgramName"。
3. 输入程序的可执行文件名,并按下回车键运行程序。
方法五:使用快捷键运行程序1. 在桌面或文件资源管理器中,选中要运行的程序文件或快捷方式图标。
2. 按下回车键即可运行选中的程序。
方法六:使用任务管理器运行程序1. 按下Ctrl + Shift + Esc打开任务管理器。
2. 在任务管理器的“文件”菜单中选择“新任务”。
3. 在弹出的对话框中输入要运行的程序名称,并点击“确定”按钮。
程序名词解释程序是指一系列按照特定顺序执行的计算机指令的集合。
简单来说,程序就是告诉计算机需要执行哪些操作以达到特定的目标。
程序由程序代码组成,可以使用不同的编程语言来编写。
编程语言是一种人和计算机都能理解的语言,它用于编写程序代码,包括算法、逻辑和计算步骤。
程序执行的过程一般分为以下几个步骤:首先,将程序代码编译或解释成计算机能够理解的机器代码;然后,计算机按照指令的顺序执行这些机器代码,逐步运算并修改数据;最后,计算机输出最终的结果或者更新相关资源。
程序可以用于各种用途,如计算、数据处理、图形处理、网络通信、媒体播放等。
程序可以很简单,只包含几行代码,也可以非常复杂,拥有上百万行代码。
程序还可以分为系统程序和应用程序。
系统程序是用于管理计算机硬件和软件资源的程序,如操作系统和驱动程序等。
应用程序是用户根据自己的需求编写的程序,如文字处理程序、电子表格程序、游戏程序等。
程序还可以按照运行方式来划分,可以分为批处理程序和交互式程序。
批处理程序是无需用户干预,自动按照预定的顺序执行的程序。
交互式程序是需要用户输入指令和数据,计算机根据用户的输入进行相应的操作和响应。
程序还可以分为单线程程序和多线程程序。
单线程程序是指只能按照顺序执行指令的程序,一次只能执行一个任务。
多线程程序是指程序可以同时执行多个任务,每个任务都是一个独立的线程,可以并行执行。
程序的设计和编写遵循一定的开发流程和规范。
一般来说,程序的设计包括需求分析、算法设计和系统设计等阶段。
然后,根据设计的结果编写程序代码。
在编写代码的过程中,需要考虑代码的可读性、可维护性和性能等方面的要求。
编写完成后,需要进行代码测试和调试,以确保程序能够正常运行并达到预期的效果。
总之,程序是一系列指令的集合,用于告诉计算机如何进行处理和计算。
程序的编写需要使用编程语言,遵循一定的开发流程和规范。
通过程序的执行,计算机可以完成各种任务和操作。
程序是什么意思
程序就是事物发展的一个步骤,可以这样理解:大雁要过冬了。
它们在准备飞往南方时,都会有一段休息期,用来调整体温、新陈代谢等。
这段时间里面,大雁之间相互依靠着取暖,慢慢地形成了共同的行为习惯和规律,从而使得大雁能够顺利地度过漫长的冬天,到达南方。
程序就是事物发展的一个步骤,而且这个步骤还很重要!
当然不排除他人乱写程序,或者故意打破这种秩序;但也存在某些“程序”是确定无疑的,不管怎么变化总保持原样。
比如太阳、月亮、星球、恒星系……它们周围永远都是白色光芒照耀着,永远处于静止状态。
在银河系中间的太空上是一片漆黑。
银河系外又分布着许多巨大的气体云团,其实那只是数不清的尘埃、冰粒、彗核等,所组合成的微观宇宙。
即使把它想象成超级大盘子,放入了十几亿个星系,看起来像是银河系被吃掉了似的。
在更遥远的深空,正有几千万个黑洞转动着身躯,连接成无穷无尽的通道,似乎并没有什么东西能逃出去。
我不知道上述情况真假,毕竟是假设,难免会出现与客观实际不符合的地方。
但是从最简单的层次考虑问题,上述推论应该是正确的吧?因此说,世界本来就是这个样子的,“自己按下快门就会拍摄到自己的影子”这句话倒是很对的。
不过要做到一点,前提条件是你首先必须让自己的头脑具备足够丰富的知识储备量。
否则,就算你找好角度并且坚持拍摄几百张图片,恐怕最后的结果是你不仅啥也记录不住,甚至连记忆里存在哪儿都忘却了,跟废纸没区别。
所以才需要复杂繁琐的操作流程。
人类制造各式各样的机器来辅助工作,比如收割
机、挖掘机、建筑机械、运输车辆、电梯等等,目的是为了提高效率,节省劳力。
简述高级语言程序的运行过程。
1.编写程序:程序员使用高级编程语言编写程序,这些语言通常包括C、C++、Java、Python等。
2. 编译程序:编译器将程序源代码翻译成机器语言代码,这个过程会将源代码分析、优化和转换成可执行程序。
3. 链接程序:链接器将编译后的目标文件和库文件链接在一起,生成可执行文件。
链接程序还会处理符号表,以便将函数和变量链接在一起。
4. 加载程序:操作系统将可执行文件加载到内存中,并为其分配空间。
程序运行时需要访问内存中的数据和指令。
5. 执行程序:一旦程序被加载到内存中,CPU会按照指令执行程序。
执行过程中,程序会从内存中读取数据,进行计算,并将结果写回到内存中,同时也可能会与用户进行交互。
总的来说,高级语言程序的运行过程包括编写程序、编译程序、链接程序、加载程序和执行程序这五个步骤。
每个步骤都是必不可少的,它们共同构成了程序的完整运行过程。
- 1 -。
程序的概念指令的概念组成程序的概念:程序是一系列按照特定顺序安排的指令集合,旨在实现特定的计算或操作。
它是计算机控制人们所要求的任务执行的途径,是将人的思维逻辑通过指令转化为计算机可理解和执行的形式。
指令的概念:指令是程序中的基本单元,是计算机程序执行的最小命令单位。
它用来定义计算机的操作,指导计算机进行特定的运算、判断或控制。
指令可以分为不同类型,如算术指令、逻辑指令、数据传输指令、程序控制指令等。
每个指令一般包含操作码和操作数,操作码指明所要进行的操作,操作数则是操作所需要的数据。
程序的组成:程序的组成主要包括算法、语法和语义三个方面。
1. 算法:算法是程序的核心,是解决特定问题的步骤和方法的描述。
它描述了程序的逻辑流程和操作步骤,包括输入、处理和输出过程。
良好的算法可以提高程序的效率和可靠性。
2. 语法:语法是程序编写中的规则和约束,它定义了程序中各种基本结构和语句的组织方式。
程序必须按照语法规则编写,才能被计算机准确理解和执行。
常见的语法元素包括关键字、操作符、标识符、常量、变量和注释等。
3. 语义:语义是程序中各种语句和表达式的意义和含义。
它描述了语句和表达式所要完成的功能和操作,包括数据类型、变量声明、运算规则、控制流程等。
语义保证了程序的正确性和可靠性。
程序的概念、指令的概念和程序的组成是紧密相关的。
程序通过指令来实现特定的计算和操作,指令又是程序的基本单元。
程序的组成由算法、语法和语义三个方面共同构成。
程序的概念和指令的概念都是计算机科学的基础概念,对于理解和掌握程序设计和计算机原理非常重要。
程序的正确编写和运行需要准确理解和使用指令,同时注意程序的算法、语法和语义,以确保程序的正确性和可靠性。
通过深入研究和应用程序的概念和指令的概念,可以进一步提高程序的效率和质量,为实现各种复杂的计算和操作提供支持。
什么是进程,进程与程序的主要区别是什么?
进程是指⼀个具有⼀定独⽴功能的程序关于某个数据集合的⼀次运⾏活动。
进程与程序的区别:
1、程序是指令的有序集合,是⼀个静态概念,其本事没有任何运⾏的含义。
⽽进程是程序在处理机上的⼀次执⾏过程,是⼀动态的概念。
2、程序可以作为⼀种软件资料长期保存,⽽进程则是有⼀定⽣命周期的,它能够动态的产⽣和消亡。
3、进程是⼀个能独⽴运⾏的单位,能与其他进程并⾏活动。
4、进程是竞争计算机系统有限资源的基本单位,也是进⾏处理机调度的基本单位。
程序⽆此该概念。
5、进程与程序之间⽆⼀⼀对应关系。
不同的进程可以包含同⼀程序,同⼀程序在执⾏中也可以产⽣多个进程。
6、程序是记录在介质上指令的有序集合,⽽进程则由程序、数据和进程控制块3部分组成。
在XS128中,与定时计算有关的模块有PIT、TIM。
TIM主要包括8个通道的输入捕捉/输出比较,和一个脉冲累加器。
PIT是一个模数递减计数器。
首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。
因为总线周期是已知的,即可以通过计数器自减实现定时。
现在主要写一下PIT。
下图为PIT的模块图:PIT模块没有对应的外接引脚。
PIT的寄存器有:PITCFLMT、PITFLT、PITCE、PITMUX、PITINTE、PITTF、PITMTLD0、PITMTLD1、PITLD0、PITCNT0、PITLD1、PITCNT1、PITLD2、PITCNT2、PITLD3、PITCNT3。
下面逐个说明其用法:PITCFLMT: 该寄存器的第七位PITE是PIT模块的使能位。
置1,则使能,即此模块可以用了。
第六位PITSWAI,置1,则PIT模块在等待模式下不可用。
第五位为PITFRZ,置1,则PIT在冻结模式(freeze)下不可用。
第一,第零位为PFLMT1、PFLMT0,其置1,能使对应的8位数据寄存器PITMTLD1、PITMTLD0中的数据马上进入计数器。
PITFLT:低四位(PFLT0~PFLT3)有效,相应位置1,能使相应的16位数据寄存器PITLD0~PITLD3中的数据马上进入计数器。
PITCE: 低四位(PCE0~PCE3)有效,位置,则使能相应的计数通道(共四个通道)。
PITMUX: 低四位(PMUX0~PMUX3)有效。
相应通道的时基选择。
如模块图如示,每个通道由一个8位计数块(相应数据寄存器为PITMTLD)和一个16位计数模块(相应数据寄存器为PITLD)组成。
PITMUX相应的位上置0时,则8位计数模块0与相应的16位计数模块组合计数。
置1,则8位计数模块1与相应的16位计数模块组合计数。
PITINTE: 低四位(PINTE0~PINTE3)有效。
相应通道的计数溢出中断使能。
相应位置1后,溢出时才能产生中断。
PITTF: 低四位(PTF0~PTF3)有效。
相应通道的中断标志位。
中断时,相应位由硬件置1。
PITCNT0~PITCNT3: 16位寄存器,记录的是当前计数器中的16位计数模块中的数据。
溢出周期公式为:溢出周期=(PITMTLD+1)*(PITLD+1) / f(BUS)。
f(BUS)为总线时钟频率。
qqqq计数减到0溢出时,数据才重新装入计数器。
如果想要马上装入计数器,可以在PITFLT中的相应位写1.根据自己想要的频率配好相应的寄存器,如需中断,写好中断函数,即可用。
如:void PIT_Init(void){PITCFLMT_PITE = 0; //定时中断通道0关PITCE_PCE0 = 1; //定时器通道0使能PITMTLD0 = 160 - 1; //8位定时器初值设定,160分频PITLD0 = 0; //16位定时器初值设定,PITINTE_PINTE0 = 1; //定时器中断通道0中断使能PITCFLMT_PITE = 1; //定时器通道0使能}BY DABAO 类别:Xs128 | 评论(0) | 浏览(6 )【转】 XS128之看门狗COP2011年02月27日星期日 19:04目前接触到的单片机中都有看门狗模块,不过写过的程序也比较简单,程序能够稳定运行,所以就不怎么理会这看门狗,因此也不知道看门狗是怎么回事。
DABAO最近写了个超声波测距的程序,运行过程中程序老是会无故停止,就是死机了。
因此不得不重新面对看门狗,经过两天的奋斗,终于让看门狗顺利工作了。
下面记一下XS128的看门狗的相关寄存器及用法。
看门狗模块用于检测程序的正常运行,启动看门狗后,必须在看门狗复位之前向ARMCOP中依次写入0X55和0XAA ,这样看门狗就会重新启动计时。
如果在规定时间内没有完成向ARMCOP中依次写入0X55和0XAA的操作,就会引起看门狗复位。
这样可以使程序重新运行,减小程序跑死的危害。
看门狗的设置比较简单,只要配置好寄存器COPCTL即可用。
COPCTL的第七位为: WCOP。
若写入COPCTL_WCOP=1,则看门狗行运在窗口模式下,必须在看门狗周期的后25%时间内向ARMCOP依次写入0X55和0XAA。
若在其他时间写入,或写入其他值,都会让看门狗溢出,使单片机复位。
若写入COPCTL_WCOP=0,则看门狗运行在正常模式下。
当看门狗使能后,只要在看门狗溢出周期内依次向ARMCOP写入0X55和0XAA,使看门狗计数复零,即可。
第六位为:RSBCK,BDM模式下的COP和RTI 停止位。
若COPCTL_RSBCK=1,则只要进入BDM模式,就停止COP和RTI(实时中断)计数。
若COPCTL_RSBCK=0,则在BDM模式下允许COP和RTI运行。
低三位为:CR2、CR1、CR0。
这三位是看门狗时钟分频位。
当CR[2:0]=000时,看门狗COP不可用。
只要CR[2:0]不为000,看门狗就开启了。
当CR[2:0]=001时,分频值为(2的14次方)。
当CR[2:0]=010时,分频值为(2的16次方)。
当CR[2:0]=011时,分频值为(2的18次方)。
当CR[2:0]=100时,分频值为(2的20次方)。
当CR[2:0]=101时,分频值为(2的22次方)。
当CR[2:0]=110时,分频值为(2的23次方)。
当CR[2:0]=111时,分频值为(2的24次方)。
看门狗的溢出频率为:COP溢出频率=OSCCLK / CR[2:0]。
OSCCLK 为晶振频率。
在正常运行模式下,只要配置好COPCTL,再写好喂狗程序,看门狗COP就可以工作了。
和看门狗COP相关的寄存器还有,不过一般情况下可以不管:CLKSEL_COPWAI:当CLKSEL_COPWAI=1时,COP在等待模式下不可用。
当CLKSEL_COPWAI=0时,COP在等待模式下可继续运行。
PLLCTL_PCE:当PLLCTL_PCE=1时,COP在伪停止模式下可用。
当PLLCTL_PCE=0时,COP要伪停止模式下不可用。
看门狗的初始化如下:COPCTL_WCOP=0; //正常COP模式COPCTL_RSBCK=0; //在BDM模式下允许COP和RTI运行COPCTL_CR2=1; //CR[2:0]分频值为(2的23次方)COPCTL_CR1=1; //COP溢出周期=OSCCLK/CR[2:0]COPCTL_CR0=0;喂狗函数如下://///////////////////////////我的喂狗函数void feeddog(){ARMCOP=0X55; //在特定时间内依次向ARMCOP写入0X55,0XAA;ARMCOP=0XAA;}BY DABAO 类别:Xs128 | 评论(0) | 浏览(6 )【转】 XS128之实时中断RTI2011年02月27日星期日 19:03有些东西看过了之后不及时巩固的话,过一段时间就忘得差不多了,前段时间看了实时中断RTI,趁着还有一些余热,赶紧记下来。
之前一些以为实时中断只有在运用嵌入式实时操作系统时才会用到的,觉得是很高级的东西,所以一直没信心,不敢去看。
实时中断其实并不复杂,简单地说,就是一个定时模块,定时溢出,产生中断。
功能跟PIT差不多,都能用定时。
不过既然有了PIT可以定时了,为什么还要多此一举弄多一个实时中断RTI 呢?因为,PIT 时钟电路每固定一段时间都必须更新一次时间信息,这个更新的责任就落在MCU身上了。
对于那种比较繁重的系统而言,“进行一次更新”会耗费许多的资源。
RTI 专注于记时工作,使MCU可以空出来处理其它的工作。
外部晶振时钟可以直接“驱动”RTI。
RTI定时不会很准,因为它没有经过复杂的时钟处理,然后经过性价比极高的配置之后,可以变为a*2^b倍数。
因为a*2^b不能是任意数整数,不能配成你想要的任何频率,所以说RTI定时不会很准,不过它用起来还是很灵活的。
现在说一下RTI 是如何配置的:第一步,实时中断RTI 在默认情况下是关闭的,怎样才能让RTI 工作呢?这就用到实时中断控制寄存器 RTICTL 了。
RTICTL是一个八位寄存器,第七位没定义,只用到低七位[RTR6~RTR0]。
当RTR[6:4]=000时,实时中断被禁止,只要当RTR[6:4] 不全为0时,实时中断就开启了。
同时实时中断的溢出周期也是由该寄存器配置的。
RTI 的参考时间是外部晶振的时钟OSCCLK。
故,实时中断的溢出时钟周期=(RTR[3:0]+1) x (2的(RTR[6:4] + 9)次方)/OSCCLK。
第二步,要想在实时中断溢出时产生一个中断,则用到寄存器CRGINT 了。
当CRGINT_RTIE=1时,每个周期结束时,就会产生一个中断。
只要配置好上面说的两个寄存器,再写上相应的中断函数,实时中断就可以用了。
顺便提一下,实时中断 RTI 的中断号是 7 。
CRGFLG_RTIF 是实时中断的标志位,当 RTI 溢出时,CRGFLG_RTIF 就会由硬件置1,向CRGFLG_RTIF 写1,可以清零标志位。
这和51单片机不一样,51单片机的标志位清零是向相应的寄存器写0。
与 RTI 相关的寄存器还有 CLKSEL_RTIWAI,不过一般都不会用到。
当CLKSEL_RTIWAI=1时,只要系统进入等待模式,RTI 就停止工作。
当CLKSEL_RTIWAI=0时,在等待模式下,RTI 仍然工作。
实时中断写到这里接进尾声了,下面附些与实时中断相关的程序:#include <hidef.h> /* common defines and macros */#include <mc9s12xs128.h> /* derivative information */#pragma LINK_INFO DERIVATIVE "mc9s12xs128"void RTI_INIT() //实时中断 RTI 初始化函数{CRGINT_RTIE=1; // 允许在每个周期结束产生中断RTICTL=59; // 设置RTICTL为 0101 1001 溢出周期为(9+1)*2^(5+9)/(16M)= 10*2^14/(16M)} //实际上是10.24ms 16M是外部晶振的频率,实时中断以外部晶振时钟为参考时钟void main(){DisableInterrupts;RTI_INIT();EnableInterrupts;for(;;){}}#pragma CODE_SEG __NEAR_SEG NON_BANKED //实时中断RTI 中断函数void interrupt 7 RTI(void){CRGFLG_RTIF=1; //向CRGFLG_RTIF 写1 清除标志位}BY DABAO 类别:Xs128 | 评论(0) | 浏览(8 )【转】 XS128之锁相环PLL2011年02月27日星期日 19:03七月份的最后一天了,和同学聊了一下,感慨颇多。