资源描述
实验6、定时器实验
【实验目的】
1、 学习LPC系列处理器定时器的功能原理;
2、 掌握定时器的功能设置及工作模式设置;
3、 掌握中断原理。
4、 了解中断服务函数的编写方法。
【实验要求】
1、 了解LPC系列处理器定时器的的功能原理。
2、 根据硬件电路,在KEIL中编写程序;
3、 下载到试验台上成功运行
4、 附加要求:请实现2秒定时,并且控制4个LED显示不同效果
【实验原理】
1、 IR 中断定时器
TCR 定时器控制定时器
TC 定时器计数器
PR 预分频寄存器
MCR 匹配控制寄存器
PC 预分频计数器
要实现定时器的功能实际上就是对定时器寄存器的控制,所以只要懂得以上寄存器的原理就可以实现定时器功能了,实际编程时只需对IR,TCR,PR, MCR操作即可
2、实验电路
实验电路如下图,使用定时器0和定时器1的定时功能。控制LED0和LED1改变状态。
#include<lpc23xx.h>
#define LEDCON0 (1<<14) /*P1.14引脚控制LED D4,高电平点亮*/
#define LEDCON1 (1<<15) /*P1.15引脚控制LED D3,高电平点亮*/
#define Fpclk 12000000 /*外设时钟*/
typedef unsigned long DWORD;
typedef unsigned char uint8;
void Timer0Handler (void) __irq //中断处理函数
{
static uint8 m;
static uint8 n;
if(n==0) n=1;
else n=0;
if(n==1)IOCLR1=LEDCON1; //控制LED熄灭
else IOSET1=LEDCON1; //控制LED点亮
if(m==0) m=1;
else m=0;
if(m==1)IOSET1=LEDCON0; //控制LED点亮
else IOCLR1=LEDCON0; //控制LED熄灭
T0IR = 1; /* clear interrupt flag */
VICVectAddr = 0; /* Acknowledge Interrupt */
}
void init_timer0 ( DWORD TimerInterval ) //定时器0初始化
{
T0MR0 = TimerInterval - 1;
T0MCR = 0X03; //产生中断,并且复位TC
T0PR=0;//不分频
T0TC=0;
}
void init_VIC(void)//中断初始化
{
/**/
VICIntSelect = 0; //中断选择
VICVectPriority4 =4; //中断优先级,
VICVectAddr4=(DWORD)Timer0Handler; //中断地址赋值中断处理函数
VICIntEnable = 1 << 4; //使能中断,定时器0为4号中断源}
}
int main (void)
{
IODIR1=(LEDCON0|LEDCON1); //设置LED控制口为输出
init_timer0((Fpclk)); //定时器初始化,1s中断
init_VIC();
T0TCR = 1; //开启定时器0
while(1);
}
展开阅读全文