定时器基本功能实验(定时器中断)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二、定时器基本功能实验(定时器中断)
班级:
学号:
姓名:
一、实验目的
熟悉LPC2000 系列ARM7 微控制器的定时器0的基本设置及定时中断应用。二、实验设备
硬件:PC 机、LPC2131 教学实验开发平台
软件:Windows98/XP系统,ADS 1.2 集成开发环境
三、实验内容
使用定时器 0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。备注:EasyARM2131 实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200。
四、实验步骤
1、启动 ADS 1.2,使用ARM Executable Image for lpc2131 工程模板建立一个工程TimeOut_C;
2、在 user 组中的main.c 中编写主程序代码;
3、主程序中使用IRQEnable( )使能IRQ 中断;
4、选用 DebugInExram 生成目标,然后编译连接工程;
5、将 LPC2131 实验板上的Beep 跳线短接到P0.7;
6、选择
7、全速运行程序,蜂鸣器会响一秒,停一秒,依次循环。
五、实验参考程序
#include "config.h"
#define BEEP 1 << 7 /* P0.7 控制BEEP,低电平蜂鸣 */
/*
********************************************************************* ** 函数名称:IRQ_Timer0()
** 函数功能:定时器 0 中断服务程序,取反LED9 控制口。
** 入口参数:无
** 出口参数:无
********************************************************************* */
void __irq IRQ_Timer0 (void)
{
if ((IO0SET & BEEP) == 0)
IO0SET = BEEP; /* 关闭BEEP */
else
IO0CLR = BEEP;
T0IR = 0x01; /* 清除中断标志 */
VICVectAddr = 0x00; /* 通知VIC 中断处理结束 */
}
/*
********************************************************************* ** 函数名称:main()
** 函数功能:使用定时器实现 1 秒钟定时,控制LED9 闪烁。中断方式。
** 调试说明:需要将跳线 JP11 连接BEEP。
********************************************************************* */
int main (void)
{
PINSEL1 = 0x00000000; /* 设置管脚连接GPIO */
IO0DIR = BEEP; /* 设置BEEP 控制口输出 */
IRQEnable(); /* IRQ中断使能 */
/* 定时器0 初始化 */
T0TC = 0; /* 定时器设置为0 */
T0PR = 0; /* 时钟不分频 */
T0MCR = 0x03; /* 设置T0MR0 匹配后复位T0TC,并产生中断标志 */
T0MR0 = Fpclk; /* 1 秒钟定时;系统中已定义Fpclk = 11059200 */
T0TCR = 0x01; /* 启动定时器 */
/* 设置定时器0 中断IRQ */
VICIntSelect = 0x00; /* 所有中断通道设置为IRQ 中断 */
VICVectCntl0 = 0x20 | 0x04; /* 设置定时器0 中断通道分配最高优先级 */ VICVectAddr0 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址 */
VICIntEnable = 1 << 0x04; /* 使能定时器0 中断 */
while (1);
return 0;
}
六、思考
(1)、主函数中的 while (1); 语句起什么作用?
答:等待Time0中断。
(2)、程序中的 __irq 起何作用?
(3)、编程使用 VIC 时,主要的设置有哪些?