实验四 定时器中断实验
DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭

继续我的第四个实验;实现定时器中断函数处理LD4翻转、按键IO中断控制LD3翻转;学习目的:中断寄存器的设置,IO中断、定时器中断的使用,F28335共有三个定时器:timer0、timer1、timer2(timer2也可用于DSP/BIOS);功能描述:上电默认LD3、LD4灭;初始化完成后,LD4以1HZ(1S)频率做状态翻转;LD3接受按键控制,每触发一次按键,状态翻转一次。
电路连接说明:LD4、LD3设置为通用GPIO 上拉输出初始化后默认为输出LED灯灭状态;LD4、LD3控制LED灯的负极,如下图;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,LD4状态翻转;IO按键SW12中断控制LD3状态翻转。
定时器0中断程序设计说明:步骤一、定时器0的预定标寄存器和计数器设置:定时器输入时钟为sysclkout(=135MHz),1、如果定时1S(即1Hz)中断一次(即计数结束),1Hz=135Mhz/1350/100000预定标寄存器(即分频器)设为1350,计数器设为100000;2、如果定时1ms(即1000Hz)中断一次,计算公式为:1000Hz=135Mhz/1350/100预定标寄存器同样设为1350,计数器设为100;赋值语句如下://定时器0 设为1Hz = 135MHz/(1350*100000)CpuTimer0Regs.PRD.all= 100000;//计数周期寄存器,100000周期后计数器减为0CpuTimer0Regs.TPR.bit.TDDR= 1350& 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH = (1350>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)步骤二、a)设置定时器0相关中断寄存器使能定时器0中断,即CpuTimer0Regs.TCR.bit.TIE= 1; //使能定时器0中断b)设置PIE级相关中断寄存器定时器0中断所在PIE组使能,即PIEIERx寄存器设置c)设置CPU级中断相关寄存器CPU级使能上述PIE对应的通道,即IER寄存器设置步骤三、中断向量入口映射位置设置,如下:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr; //将中断函数物理地址赋值给中断向量入口PieVectTable.XINT3 = &key_GPIO50_isr;EDIS; // This is needed to disable write to EALLOW protected registersIO中断程序设计说明:步骤一、设置IO引脚功能复用寄存器为普通IO、设为上拉、输入状态、使能引脚滤波功能;外部中断源选择寄存器设置:如GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=50;//按键引脚编号设置步骤二、使能外部中断源中断;XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断设置触发方式:XIntruptRegs.XINT3CR.bit.POLARITY=0;//下降沿触发剩余步骤同定时器0中断的设置。
定时器中断方式实验报告

通信 0203 班 王建超 02211272
一.中断初始化及服务程序的编写
5402DSP 中断有两大类,一类是可屏蔽中断:可以用软件来屏蔽或开放的硬件和软件中断。在 5402
中有 INT3 ~INT0(外部中断),BRINT0,BXINT0(缓冲串行口中断),TRINT,TXINTW(时分多路串行口
void interrupt_init(void)
{
IFR|=0x0ffff;
//清中断标识寄存器
IMR|=0x0002;
//开放外部中断 1
asm(" RSBX INTM ");
//开放所有可屏蔽中断
} C54X 处理中断分为 3 个阶段: 第一阶段:接受终端请求,IFR 中相应的中断标志位置 1 第二阶段:对于软件中断和非屏蔽中断,CPU 立即响应。对于可屏蔽中断,只有满足几 个条件后才能响应:
void set_clock(u16 plldiv); void set_wait_states(void); void init_io_reg(void);
//set system clock mode //set wait state register //initialize CPLD I/O control register
转指令转到相应的中断服务程序,其余的空位用 NOP 填充;未使用的向量直接用 RETE 中
断返回指令返回,是为了防止意外进入未用中断,同样其余的空位用 NOP 填充。
在中断向量表中.sect ".vectors" ;定义的中断向量段,中断向量表即放在此段当中
.ref _c_int00 ;定义 C 语言的初始化入口地址
实验四定时器中断实验

定时中断周期=CLKOUT×(TDDR+1)×(PRD+1)
四、实验步骤 (1)使用定时器首先要对它初始化,基本步骤如下: 1、关掉中断 2、停止定时器运行。 3、设定时器的定时长度 4、允许定时器中断 5、运行定时器 6、打开中断 本实验的部分程序代码如下: #include "vc5416.h" #include "usr.h" //载入头文件 unsigned int count=0,temp=0; main() { system_init(); //系统初始化 timer0_init(); //定时器0初始化,使定时器每 10ms中断一次 while(1) { if(count==0x0064) { ST1=sbit_reverse(ST1,b13_msk); //改变XF引脚的状态, 使指示灯闪烁 count=0x0000; //对计数值清0 } } } /*interrupt serve program*/ void interrupt tint0() //中断服务程序,每次中断到来 时对计数值加一 { count++; } /*定时器0初始化*/
from one nmi NOP NOP NOP ; software interrupts sint17 .space 4*16 ;软件中断使用较少,简单起见用0填 充 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: RETE ;外部中断0 NOP NOP NOP int1: RETE ;外部中断1 NOP NOP NOP int2: RETE ;外部中断2 NOP NOP NOP tint0: bd _tintபைடு நூலகம் ;定时器0中断 NOP NOP rint0: RETE ;mcbsp0接收中断 NOP
定时器中断程序设计实验

定时器中断程序设计实验正文:1、引言本文档旨在提供一个定时器中断程序设计实验的详细指南。
通过本实验,我们将学习如何设计和实现一个基于定时器中断的程序。
本文档将详细介绍实验的目标、实验环境、实验步骤以及实验结果分析等内容。
2、实验目标本实验的目标是设计一个定时器中断程序,实现定时器中断功能。
具体来说,我们将学习如何设置定时器中断的时间间隔和中断处理程序,在每个中断周期内执行特定的操作。
3、实验环境为了完成本实验,我们需要以下环境和工具:- 开发板:x- 软件开发工具:x- 相关文档和参考资料:x4、实验步骤本节将介绍具体的实验步骤,包括硬件连接和软件编程等。
4.1 硬件连接首先,我们需要将定时器与处理器连接起来。
具体连接方式请参考开发板的相关文档。
4.2 软件编程在开始编写程序之前,我们需要了解一些关于定时器中断的基本知识。
首先,我们需要设置定时器的工作模式和中断时间间隔。
然后,我们需要编写中断处理程序,以响应定时器中断事件。
最后,我们需要在主程序中初始化定时器,并启动中断。
下面是一个示例的软件编程步骤:1、设置定时器的工作模式和中断时间间隔。
2、编写定时器中断处理程序。
3、在主程序中初始化定时器,并启动中断。
4、检测和处理定时器中断事件。
注意:以上步骤只是一个示例,具体步骤可能因实验环境和要求而有所不同。
请根据实际情况进行调整和修改。
5、实验结果分析在完成实验后,我们需要对实验结果进行分析和总结。
具体来说,我们需要评估定时器中断程序的性能和稳定性,检查是否存在任何问题或错误。
如果有需要,我们还可以对程序进行优化和改进。
6、附件本文档的附录部分包括以下附件:- 附件1:定时器中断程序源代码- 附件2:实验数据记录表请查阅附件以获取更详细的信息。
7、法律名词及注释本文档所涉及的法律名词及其注释如下:- 法律名词1:注释1- 法律名词2:注释2- :::请注意,在实际应用中,如果涉及到法律问题,请咨询专业法律顾问以获取正确的法律解释。
定时器中断程序设计实验

定时器中断程序设计实验定时器中断程序设计实验简介定时器中断是嵌入式系统中的常见应用之一,通过配置定时器的相关寄存器,可以定时产生中断信号,从而实现定时功能。
本文档将介绍定时器中断的基本概念和在实验中如何设计和实现定时器中断程序。
一、定时器中断的概念定时器中断是通过硬件定时器产生的中断信号,可以用于在嵌入式系统中实现定时功能。
定时器中断的原理是定时器内部的计数器自动递增,并在计数到一个特定值时产生中断信号。
通过配置定时器的相关寄存器,可以设置定时器的计数范围、计数速度和中断触发条件等参数。
二、定时器中断的实验设计步骤以下是一个基本的定时器中断程序设计实验的步骤:1. 确定定时器的类型和工作模式根据实际需求和硬件平台的支持情况,选择合适的定时器类型和工作模式。
常见的定时器类型包括定时器/计数器和看门狗定时器,常见的工作模式包括定时模式和计数模式。
2. 配置定时器的相关寄存器根据定时器的类型和工作模式,配置定时器的相关寄存器。
主要包括计数范围、计数速度和中断触发条件等参数的设置。
3. 初始化中断控制器如果使用的嵌入式系统具有中断控制器,需要初始化中断控制器,并使能相应的中断通道。
4. 编写中断服务程序通过注册中断处理函数,并在其中编写中断服务程序。
中断服务程序主要包括对中断标志位的清除、中断处理、中断函数返回等操作。
5. 启动定时器配置完成后,启动定时器开始计数。
定时器将根据配置的参数自动递增,并在计数到设定的特定值时产生中断信号。
6. 整合定时器中断功能到主程序在主程序中,可以使用定时器中断提供的功能来实现定时任务。
可以通过在中断服务程序中设置标志位,并在主循环中检测该标志位来执行相应的任务。
三、实验注意事项在设计和实现定时器中断程序时,需要注意以下事项:1. 根据实际需求进行定时器的配置,确保定时器的参数设置合理。
2. 在中断服务程序中应尽量减少对全局变量和共享资源的访问,以避免竞态条件和数据不一致等问题的发生。
实验报告四中断系统实验

实验报告四中断系统实验实验报告四:中断系统实验一、实验目的本次中断系统实验的主要目的是深入理解计算机中断系统的工作原理和机制,掌握中断的处理过程,以及学会如何在实际编程中有效地运用中断来提高系统的性能和响应能力。
二、实验原理中断是指计算机在执行程序的过程中,当出现某种随机事件或异常情况时,暂停现行程序的执行,转而执行相应的中断处理程序,处理完后再返回原程序继续执行的过程。
中断系统主要由中断源、中断控制器和中断处理程序组成。
中断源可以是外部设备(如键盘、鼠标、打印机等)发送的信号,也可以是内部事件(如定时器溢出、算术运算错误等)产生的条件。
中断控制器负责对多个中断源进行优先级管理和分配,确定哪个中断请求能够被响应。
中断处理程序则是用于处理具体中断事件的一段代码。
在中断处理过程中,计算机需要保存当前程序的上下文(包括程序计数器、寄存器等),以便在中断处理完成后能够正确地恢复原程序的执行。
同时,中断处理程序需要尽快完成处理任务,以减少对系统性能的影响。
三、实验设备与环境本次实验使用的设备包括一台计算机、开发板以及相应的编程软件。
开发板上集成了中断控制器和相关的外部设备接口,以便进行中断实验的操作和观察。
编程软件采用了常见的集成开发环境(IDE),如 Keil、IAR 等,用于编写和调试中断处理程序。
四、实验步骤1、硬件连接首先,将开发板与计算机通过数据线连接,并确保连接稳定。
然后,根据实验要求,将外部设备(如按键、传感器等)正确连接到开发板的相应接口上。
2、软件开发(1)在编程软件中创建一个新的项目,并选择适合开发板的芯片型号。
(2)配置中断控制器的相关参数,如中断优先级、触发方式等。
(3)编写中断处理程序,在程序中实现对中断事件的具体处理逻辑。
例如,当按键被按下时,控制 LED 灯的亮灭;当传感器检测到特定值时,进行数据采集和处理。
(4)编写主程序,在主程序中初始化系统,并开启中断功能。
3、编译与下载完成程序编写后,对代码进行编译,确保没有语法错误和逻辑错误。
定时器中断实验报告

定时器中断实验报告一、实验目的通过定时器中断实验,掌握定时器的基本原理和应用,了解中断的概念和实现,学习如何使用汇编和C语言编写中断服务程序。
二、实验原理1. 定时器的基本原理定时器是一种能够精确控制时间的功能模块,其主要功能是在一定的时间间隔内产生一次中断信号。
定时器一般由计数器和控制逻辑电路组成。
计数器向控制逻辑电路传递计数值,控制逻辑电路对计数器进行控制,当计数值达到设定值时,控制逻辑电路会产生中断信号。
2. 中断的概念和实现中断是指CPU在执行某个程序的过程中,由于某些特定事件的发生,需要立即停止正在执行的程序,转而去执行与特定事件相关的处理程序的过程。
中断信号通常是由外部设备产生的,例如定时器中断、串口中断等,也可以由软件产生。
中断的实现需要安装中断服务程序,中断服务程序是指与中断处理相关的程序段。
中断发生时,CPU会暂停当前的执行,转而执行中断服务程序。
中断服务程序完成处理后,CPU会返回到原来的执行状态。
中断服务程序通常由汇编或C语言编写,需要遵循一定的规则和约定。
三、实验材料1. STC89C52单片机板;2. 电脑、Keil μVision5软件;3. 串口调试助手软件。
四、实验过程1. 硬件连接将STC89C52单片机板上的P3口与LED灯连接,通过拨码开关设定定时器的时钟频率。
2. 编写程序在Keil μVision5软件中编写程序,在程序中设置定时器的时钟频率和中断周期。
在中断服务程序中控制LED灯的闪烁。
3. 烧录程序将编写好的程序烧录到STC89C52单片机板中。
4. 测试启动单片机板,观察LED灯是否按照预定的周期闪烁。
通过串口调试助手软件,可以实时观察定时器中断的触发情况。
五、实验结果经过测试,程序能够正常运行,LED灯按照预定的周期闪烁,定时器中断触发正常,符合预期要求。
六、实验总结通过本次实验,我掌握了定时器的基本原理和应用,了解了中断的概念和实现,学习了如何使用汇编和C语言编写中断服务程序。
实验四中断系统实验报告格式(PDF)

实验四中断系统一、实验目的1.掌握单片机中断系统的结构;2.掌握单片机的5个中断源、中断过程及中断源编号;3.掌握C51中断服务函数的编写。
二、实验设备PC机(含Proteus和Keil软件)三、实验原理中断是一个过程,当CPU在处理某件事情时,外部又发生了另一紧急事件,请求CPU 暂停当前的工作而去迅速处理该紧急事件。
处理结束后,再回到原来被中断的地方,继续原来的工作。
引起中断的原因或发出中断请求的来源,称为中断源。
MCS-51单片机有5个中断源,分为2个中断优先级,每个中断源的优先级都可以由软件来设定,可实现两级中断嵌套。
5个中断源分别是:1.外部中断请求源:即外部中断0和1,由外部引脚INT0(P3.2)/INT1(P3.3)引入。
2.内部中断请求源TF0/TF1:定时/计数器T0/T1的溢出中断标志。
3.内部中断请求源TI、RI:串行口发送、接收中断标志。
MCS-51单片机有4个与中断有关的特殊功能寄存器:中断允许寄存器IE、中断优先级寄存器IP、TCON、SCON(TCON、SCON的相关位作中断源的标志位)。
在TCON中有四位是与外部中断有关的。
IT0/IT1:INT0/INT1触发方式控制位,可由软件进和置位和复位,IT0/IT1,INT0/INT1为低电平触发方式,IT0/IT1,INT0/INT1为负跳变触发方式。
IE0/IE1:INT0/INT1中断请求标志位。
当有外部的中断请求时,该就会置1(由硬件来完成),在CPU 响应中断后,由硬件将IE0/IE1清0。
四、实验内容1.编程实现:8个LED一直熄灭,每按一次按键,LED闪烁6次。
2.编程实现:8个LED一直闪烁,每按一次按键,8个LED流水一次。
3.编程实现:按一次单脉冲,8个LED闪烁;再按一次按键,8个LED流水;以此循环往复。
硬件连接:外设单片机引脚8个LED P1按键外部0中断P3.2五、实验结果1.画出单片机与8个LED、按键的连接电路原理图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 定时器中断实验一:实验目的1.熟悉定时器初始化的步骤;2.熟悉定时器控制寄存器(TCR )的含义和使用;3.熟悉定时器的原理和应用。
二:实验内容本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF 引脚相连的LCD 指示灯。
当定时器中断产生时可以观察到LCD 周期性闪烁。
三:实验原理1.定时器.C54xx 系列的DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。
定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。
应用中可以用定时器来产生周期性的CPU 中断或脉冲输出。
定时器的功能方框图如图9.1所示,其中有一个主计数器(TIM )和一个预定标计数器(PSC )。
TIM 用于重装载周期寄存器PRD 的值,PSC 用于重装载周期寄存器TDDR 的值。
图5.1信号,是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。
定时器实际上是有20bit 的周期寄存器。
它对CLKOUT 信号计数,先将PSC (TCR 中的D6~D9位)减1,直至PSC 为0,然后把TDDR (TCR 中的低4位)重新装载入PSC ,同时将TIM 减1,直到TIM 减为0。
这时CPU 发出TINT 中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度与CLKOUT 一致,然后将PRD 重新装入TIM ,重复下去直到系统或定时器复位。
定时器产生中断的计算公式如下:TINT t c 为 CLKOUT 的周期)定时器由三个寄存器组成:TIM 、PRD 、TCR 。
TIM :定时器寄存器,用于装载周期寄存器值并自减1。
PRD :周期寄存器,用于装载定时器寄存器。
TCR :定时器控制寄存器,包含定时器的控制状态位。
定时器是一个片内减计数器,用于周期地产生发,后者每个CPU 时钟周期减1,当计数器减至0周期计数器被定时周期值重新装载。
在正常操作模式下,当TIM 自减至0时,TIM 将被PRD 内的数值重装载。
在硬件复位或定时器单独复位(TCR 中TRB 位置1)的情况下,主定时器模块输出的是定时器中断(TINT )信号。
该中断被发送至CPU ,同时由TOUT 引脚输出。
TOUT 脉冲的宽度等于CLKOUT 的时钟宽度。
预定标模块由两个类似TIM 和PRD 的单元构成。
它们是预定标计数器(PSC )和定时器分频寄存器(TDDR )。
PSC 、TDDR 是RCR 寄存器的字段。
在正常操作时PSC 自减为0,TDDR 值装入PSC ,同样在硬件复位或定时器单独复位的情况下,TDDR 也被装入PSC 。
PSC 被CPU 时钟定时,即每个CPU 时钟使PSC 自减1。
PSC 可被TCR 读取,但不能直接写入。
当TSS 置位时,定时器停止工作。
若不需要定时器,终止定时操作,可使芯片工作在低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM 和PRD )作为通用的存储器单元,可以在任意周期对它们进行读或写操作。
TIM 的当前值可被读取,PSC 也可以通过TCR 读取。
因为读取这两个存储器需要两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC 两次读的结果可能有差别,不够准确。
若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS 置1和清0后,可重新开始定时。
通过TOUT 信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。
对于有多个定时器的DSP ,由寄存器GPIOCR 中的第15位控制使用某一个定时器产生的TOUT 信号。
2.定时器初始化(1)定时器初始化步骤●TCR 的TSS 位写1,定时器停止工作;●装载TRD ;●初始化TCR 中的TDDR ,并对TCR 中的TSS 置0,对TRB 置1来重装载定时器周期。
(2)初始化定时器中断方法(INTM =1)●FIR 中的TINT 写1,以清除挂起的定时器中断;●IMR 中的TINT 置1,启动定时器中断;●启动全部中断,INTM 置0;●在重启(RESET )后,TIM 和PRD 被设置为最大值(FFFFH ),TCR 中的TDDR 置0。
(3)定时控制寄存器(TCR )TCR 为一个映射到片内的16位寄存器,它可以控制:●定时器的工作方式;●设定预定标计数器中的当前数值;●启动或停止定时器;●重新装载定时器;●设置定时器的分频值。
TCR 的位描述如图5.2●第15~12位●第11~10位SOFT 、FREE :特殊的仿真位。
高级语言调试程序中出现一个断点时,该仿真位决定定时器的状态。
如果FREE 位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下,SOFT 被忽略。
但是,如果FREE 为0,则SOFT 有效。
在此情况下,如果SOFT =0,则定时器停止,下一次TIM 的值递减;如果SOFT =1,则当TIM 减到0,定时器停止工作。
●第9~6位PSC :定时器预定标计数器。
这4位用来保存定时器的当前预定标计数器。
每个CLKOUT 周期内,若PSC 值大于0,PSC 减1,在PSC 减到0后的下个CLKOUT 周期内,装载TDDR 的内容,并且TIM 减1。
每当软件设置了定时器重载位(TRB )时,PSC 也被重新装载。
可通过TCE 检测PSC ,但PSC 不能直接设置,PSC 值必须从TDDR 中提取。
复位时,PSC 设为0。
●第5位TRB :定时器重载位。
当TRB 写入1时,TIM 装载PRD 中的值,并且PSC 装载TDDR 中的值。
TRB 位总被读为0。
●第4位TSS :定时器停止状态位。
TSS 停止或重新启动定时器。
复位时,TSS 清零,并且立即启动定时器。
TSS =0,启动或重新启动定时器;TSS =1,停止定时。
注意,此位为只读位,读出的值永远为0。
●第3~0位TDDR :定时器分频比寄存器。
每经过(TDDR +1)个CLKOUT 周期,TIM 减1。
复位时,TDDR 位清0。
如果想通过一个整数因子增加总的定时计数值,则将整数因子减1后写入这4位。
当PCS 值为0时,在随后的一个CLKOUT 周期内,TDDR 内容将被重新装入PSC,并且TIM减1。
每当TRB重载入时,TDDR也将被PSC重新装载。
3:定时器应用:C54x定时器所能计计时的长度可通过公式T x(TDDR+1)×(PRD+1)来计算,其中,TDDR 最大值为0FH,PDR最大值为0FFFFH,所以能计时的最长长度为T×1048576,由所采用的机器周期T决定,例如f=4MHz,T=250,则最长定时时间为:T max=250×1048576=262.144(ms) 例如若需要更长的计时时间,则可以在中断程序中设计一个计数器。
设计一个周期为40s的方波,可将定时器设置为100ms,程序计数器设为200,当计数200×100ms=20s时输出取值一次,可形成所要求的波形。
四:实验步骤本实验的步骤为:(1)连接好实验板,选择相应的CCS运行环境。
(2)新建工程,添加TIME文件及其配制文件,用编译链接工具条对文件进行编译链接,如果编译链接错误提示为“0Errors”,则把.out文件下载到目标板,然后再单击图6.3中的运行工具运行程序,这时可以看到目标板上和XF引脚的LED在周期性闪烁。
(3)选择菜单View→CPURegisters→CPU Registers命令,可以观察到累加器A在不断加1,如图5.3所示。
图5.3 CPU 寄存器(4)参考程序如下;.mmregs.global mainintktcr .set 0029hktcrstop .set 0010h;TCR 定时器控制寄存器各位含义如下:;RES SOFT FREE PSC TRB TSS TDDR;00000 0 0000 1 0 (TSS=1时停止定时)1001;**********************定时器参数定义*************************************** Tim0 .set 24h ;timer0 registerPrd0 .set 25h ; timer0 period counterTcr0 .set 26h ; timer0 control registerperiod .set 99 ;定时器周期;***************************************************************************** .sect "vectors";**********************中断向量表***************************************** vector: b mainintnopnopnmi: retenopnopnopsint17: retenopnopnopsint18: retenopnopnopsint19: retenopnopnopsint20: retenopnopnopsint21: retenopnopnopsint22: retenopnopnop sint23: retenopnopnop sint24: retenopnopnop sint25: retenopnopnop sint26: retenopnopnop sint27: retenopnopnop sint28: retenopnopnop sint29: retenopnopnop sint30: retenopnopnop int0: retenopnopnopint1: retenopnopnopint2: retenopnopnopb tint0nopnopbrint0: retenopnopnopbxint0: retenopnopnoptrint: retenopnopnoptxint: retenopnopnopint3: retenopnopnop hpint: retenopnopnopq26: .word 0ff80h.word 0,0,0q27: .word 0ff80h.word 0,0,0q28: .word 0ff80h.word 0,0,0q29: .word 0ff80h.word 0,0,0q30: .word 0ff80h.word 0,0,0q31: .word 0ff80h.word 0,0,0;************************************************************************* .textmainint: stm #203FH,PMST ;从定位中断向量表到2000H处ssbx intm ;关中断ssbx sxmssbx frct ;允许小数乘法ld #0,dpstm #0008h,imr ;允许定时器0中断;**************************************************************************;允许定时器0中断,IMR 寄存器各位含义如下:;RES DMAC5 DMAC4 BXINT1 BRINT1 HINT INT3 TINT DMAC0 BXINT0 BRINT0 TINT0 INT2 INT1 INT0 ;00 0 0 0 0 0 0 0 0 0 0 1 0 0 0 ;*************************************************************************** stm #ktcrstop,tcr ;停止定时stm #period,tim ;设定定时器寄存器stm #period,prd ;设定定时器周期寄存器stm #ktcr,tcr ;启动定时器stm #0008h,imr ;允许TIMER0中断stm #0ffffh,ifr ;清中断rsbx intm ;开中断wait: nop ;循环,等中断b wait;**************************定时器中断程序*********************************;*************************************************************************tint0:add #1,A ;A寄存器加1操作stm #20,*ar2stm #20,*ar1aa:ssbx xf ;XF引脚置高,LCD亮rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待banz aa,*ar1-bb:rsbx xf ;XF引脚置低,LCD灭rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待banz bb ,*ar2-rete ;中断返回.end配置文件如下:time.obj-o time.out-m time.map-e mainintMEMORY{PAGE 0:EPROM :org=2000h,len=1000hPAGE 1:SPRAM :org=0060h,len=100h}SECTIONS{vectors :> EPROM PAGE 0.text :> EPROM PAGE 0}五:实验报告要求:1.运行源程序,观察实验结果,看到XF引脚的LED周期性地变化,修改定时器参数,改变LED闪烁周期。