[菜农助学交流] 助学板入手把玩,第二帖---定时器那些事

[复制链接]
 楼主| 毅如靳往 发表于 2011-8-17 17:22 | 显示全部楼层 |阅读模式
本帖最后由 毅如靳往 于 2011-8-17 21:12 编辑

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

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



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


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

  40. }


  41. /******************************************************************************
  42. ** Function name: delay_loop
  43. ** Descriptions: 延时子程序
  44. ** input parameters: 无
  45. ** output parameters: 无
  46. ** Returned value: 无
  47. ******************************************************************************/
  48. void delay_loop(void)
  49. {
  50. uint32_t i,j;
  51. for(i=800;i>0;i--)
  52. for(j=500;j>0;j--);

  53. }

  54. /******************************************************************************
  55. ** Function name: main
  56. ** Descriptions: LED2跟随LED1的亮灭而灭亮测试程序
  57. ** 现 象:下载代码,运行程序,则LED1亮LED2灭 LED1灭LED2亮循环反复
  58. ** input parameters: 无
  59. ** output parameters: 无
  60. ** Returned value: 无
  61. ******************************************************************************/
  62. int main (void)
  63. {
  64. /* SYSCLK =>12Mhz*/
  65. UNLOCKREG();
  66. SYSCLK->WRCON.XTL12M_EN = 1;
  67. LOCKREG();
  68. Init_Timer0();

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

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

  82. while(1);
  83. }




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


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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2011-8-17 17:26 | 显示全部楼层
是的,GPIO,TIMER这两个要先学习的。
Swallow_0322 发表于 2011-8-17 17:35 | 显示全部楼层
顶!
程序以源码形式贴出看着会舒服点!(编辑帖子时选择插入代码<>)
  1. /******************************************************************************
  2. ** Function name:
  3. delay_loop
  4. ** Descriptions:
  5. 延时子程序
  6. ** input parameters:

  7. ** output parameters:

  8. ** Returned value:

  9. ******************************************************************************/
  10. void delay_loop(void)
  11. {

  12. uint32_t i,j;

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


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


  15. }
hotpower 发表于 2011-8-17 19:39 | 显示全部楼层
三心的意见很好!
 楼主| 毅如靳往 发表于 2011-8-17 20:44 | 显示全部楼层
3# Swallow_0322


谢谢哈~  我还想着找这个方法呢·    您就附上了     
感激不尽
 楼主| 毅如靳往 发表于 2011-8-17 20:45 | 显示全部楼层
4# hotpower

嗯~  当时有心学习来着  
还没来得及搞  
三心就指点了   
亲人啊~~
 楼主| 毅如靳往 发表于 2011-8-17 21:08 | 显示全部楼层
本帖最后由 毅如靳往 于 2011-8-17 21:14 编辑

搞了半天没成功 原来当时我为了去掉代码中的表情   把  discuz!那个代码禁止了~  汗~
hdp7891000 发表于 2011-8-18 08:28 | 显示全部楼层
tendence 发表于 2011-11-14 16:09 | 显示全部楼层
我学习了,感觉最烦的就是初始化了,但是如果对应着已有的程序初始化,应该会简单多了。
hotpower 发表于 2011-11-14 16:58 | 显示全部楼层
模块的关键的关键就是初始化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

176

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

176

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部