打印
[菜农助学交流]

助学板入手把玩,第二帖---定时器那些事

[复制链接]
2129|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
毅如靳往|  楼主 | 2011-8-17 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 毅如靳往 于 2011-8-17 21:12 编辑

在各种MCU中  定时器都占着很重要的一份额,很多情况下用定时器是不二的选择。

PS: 这里推荐下   从单片机初学者迈向单片机工程师   我打包在文件里了 大家可以看看  内容呢 回头再讨论  这里不表



/*---------------------------------------------------------------------------------------------------------
定时器程序,led灯 1s一闪烁 并且伴随着蜂鸣器的响声
---------------------------------------------------------------------------------------------------*/
//下面是标准函数 NUC的寄存器表述 啥的头文件 初学者飘过
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvTIMER.h"


//定时中断的函数 一共没几行 有C知识的都能看懂吧 其中GPA,3是LED灯 GPB10
//是蜂鸣器 大家看看原理图就知道了
void Timer0_Callback (void)
{
if(DrvGPIO_GetBit(E_GPA,3))
{
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_ClrBit(E_GPB,10);
}
else
{
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPB,10);
}
}
//其实新唐的函数 很多从函数名称就能猜出来是干啥的 都不用查这个函数是干啥的
//当然 平时我们自己写程序的时候也要主意标准化以及可读性 切记不要为了省事而
//随便取个名字 以后再调试的时候会很惨的
void Init_Timer0( void )
{
DrvTIMER_Init();
/*定时器初始化函数*/
DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0);
/*TIMER0 时钟源选择:000 =外部12MHz 晶振 、001 =外部 32KHz 晶振 、010 = HCLK 、011 = 外部触发时钟 、1xx =内部 22MHz 振荡器 */
DrvTIMER_Open(E_TMR0,1,E_PERIODIC_MODE);
/*设定定时器 tick 周期并且启动定时器:定时器通道 TMR0 每秒1次 周期模式*/
DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK) Timer0_Callback,0);
/* 隔1个tick执行事件,parameter3-事件处理函数指针,4-传递参数*/
DrvTIMER_EnableInt(E_TMR0); //使能定时器中断
DrvTIMER_Start(E_TMR0); //启动定时器

}


/******************************************************************************
** Function name: delay_loop
** Descriptions: 延时子程序
** input parameters: 无
** output parameters: 无
** Returned value: 无
******************************************************************************/
void delay_loop(void)
{
uint32_t i,j;
for(i=800;i>0;i--)
for(j=500;j>0;j--);

}

/******************************************************************************
** Function name: main
** Descriptions: LED2跟随LED1的亮灭而灭亮测试程序
** 现 象:下载代码,运行程序,则LED1亮LED2灭 LED1灭LED2亮循环反复
** input parameters: 无
** output parameters: 无
** Returned value: 无
******************************************************************************/
int main (void)
{
/* SYSCLK =>12Mhz*/
UNLOCKREG();
SYSCLK->WRCON.XTL12M_EN = 1;
LOCKREG();
Init_Timer0();

DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
/*和众多MCU一样 这个就是定义IO口的函数*/
DrvGPIO_ClrBit( E_GPA, 2 );
/*从函数名称中可以看出来 就是对IO的 CLREAN 清零
当然还有一个DrvGPIO_SetBit( E_GPA,2 )就是置位函数啦(set)*/
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );

DrvGPIO_Open( E_GPB, 10, E_IO_OUTPUT );
DrvGPIO_ClrBit( E_GPB, 10 );
/* 别说俺啰嗦,看这种帖子的都不是老鸟 菜鸟们需要各处注释
GPA,2 GPA,3 这两个IO口是 控制LED灯的
GAB,10 这个IO是控制蜂鸣器的
个人有个习惯 就是 在定义IO的时候把不同功能的IO 之间留有空行 以后好检查
当然个人有个人的编程习惯 俺就是说说俺的而已*/

while(1);
}




由于这是个   声光电  的实验    就不上图了昂


我们共同进步   毅如靳往  ceanking7@163.com


这里谢谢  网友   Swallow_0322   的建议    使代码更加美观~~~   感激不尽啊   俺又进步了~~

从单片机初学者迈向单片机工程师.rar

4.68 MB

助学板入手把玩,第二帖----------毅如靳往.rar

993.54 KB

相关帖子

沙发
hotpower| | 2011-8-17 17:26 | 只看该作者
是的,GPIO,TIMER这两个要先学习的。

使用特权

评论回复
板凳
Swallow_0322| | 2011-8-17 17:35 | 只看该作者
顶!
程序以源码形式贴出看着会舒服点!(编辑帖子时选择插入代码<>)
 /******************************************************************************
** Function name:
delay_loop
** Descriptions:
延时子程序
** input parameters:

** output parameters:

** Returned value:

******************************************************************************/
void delay_loop(void)
{

uint32_t i,j;

for(i=800;i>0;i--)


for(j=500;j>0;j--);


}

使用特权

评论回复
地板
hotpower| | 2011-8-17 19:39 | 只看该作者
三心的意见很好!

使用特权

评论回复
5
毅如靳往|  楼主 | 2011-8-17 20:44 | 只看该作者
3# Swallow_0322


谢谢哈~  我还想着找这个方法呢·    您就附上了     
感激不尽

使用特权

评论回复
6
毅如靳往|  楼主 | 2011-8-17 20:45 | 只看该作者
4# hotpower

嗯~  当时有心学习来着  
还没来得及搞  
三心就指点了   
亲人啊~~

使用特权

评论回复
7
毅如靳往|  楼主 | 2011-8-17 21:08 | 只看该作者
本帖最后由 毅如靳往 于 2011-8-17 21:14 编辑

搞了半天没成功 原来当时我为了去掉代码中的表情   把  discuz!那个代码禁止了~  汗~

使用特权

评论回复
8
hdp7891000| | 2011-8-18 08:28 | 只看该作者
mark

使用特权

评论回复
9
tendence| | 2011-11-14 16:09 | 只看该作者
我学习了,感觉最烦的就是初始化了,但是如果对应着已有的程序初始化,应该会简单多了。

使用特权

评论回复
10
hotpower| | 2011-11-14 16:58 | 只看该作者
模块的关键的关键就是初始化。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

176

帖子

1

粉丝