今天做lpc2103的定时器定时实验,相关的c语言程序如下:
/***********定时器0定时--查询方式**********************************/
//功能:用定时器0实现0.5秒定时,查询标志位等待定时时间到达,对LED进行控制,让LED每秒钟亮一次
//编写:胡峰
//说明:参照ZLG电子教案
/***********************************************************************************/
#include"inc\config.h"
#define LED 1<<17 //p0.17控制 LED,低电平亮
/***********************************************************************************
**函数名称:Init_timer0()
**函数功能:使用定时器T0实现0.5s钟定时,控制LED闪烁
***********************************************************************************/
void Init_timer0(void)
{
T0TC = 0; //定时计数器设置为0
T0PR = 0; //时钟不分频
T0MCR = 0x03; //设置T0MR0匹配后产生中断并且复位T0TC
T0MR0 = Fpclk/2; //0.5秒定时
T0TCR = 0x01; //启动定时器
}
/***********************************************************************************
**函数名称:main()
**函数功能:使用定时器T0实现0.5s钟定时,控制LED闪烁
***********************************************************************************/
void main(void)
{
PINSEL0 = 0x00000000; //设置管脚连接GPIO
IO0DIR = LED; //设置LED控制口输出
Init_timer0(); //定时器0初始化
while(1)
{
while((T0IR & 0x01)==0); //等待定时时间到
T0IR = 0x01; //清楚中断标志
if((IO0SET & LED)==0) IO0SET = LED;//LED灭
else IO0CLR = LED; //LED亮
}
//return 0;
}
运行效果请看这里:
http://player.youku.com/player.php/sid/XNzc2MDQ0NjA=/v.swf
结果我发现一个问题,按照程序中的定时时间应该是0.5秒LED就会转换一次状态,可是实际运行出来的结果并不是这样,其亮和灭的时间似乎已经大于了1s,我的程序是直接烧写到flash中的,不知道这是什么原因造成的?有人遇到过这样的情况吗?请和我交流。