嵌入式定时器基本功能(定时器中断)c语言代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

定时器基本功能实验(定时器中断)

1.实验内容

使用定时器0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。

备注:EasyARM2131实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200 ;

2.实验步骤

①启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程

TimeOut_C。

②在user 组中的main.c 中编写主程序代码。

③主程序中使用IRQEnable( )使能IRQ 中断。

④选用DebugInExram 生成目标,然后编译连接工程。

⑤将LPC2131实验板上的Beep跳线短接到P0.7。

⑥选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。

⑦全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。

3.实验参考程序

程序清单错误!文档中没有指定样式的文字。-1 定时器实验参考程序

#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;

}

相关文档
最新文档