定时器基本功能实验(定时器中断)
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.实验参考程序
              程序清单 Error! No text of specified style in document.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中断处理结束 */
}
/*
*****************************************************************************************
timeout on t2 timer** 函数名称 :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;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。