打印
[菜农助学交流]

菜鸟学习第三帖:用定时器做的一个延时程序

[复制链接]
2569|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2011-9-12 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "Drvtimer.h"

void Timer0_Callback(void)
{
    if (DrvGPIO_GetBit(E_GPA,4))
        DrvGPIO_ClrBit(E_GPA,4);
        else
        DrvGPIO_SetBit(E_GPA,4);  
        DrvTIMER_ClearIntFlag(E_TMR0);
}

void delay_ms(unsigned int ms)

{
        unsigned int i ;
         
        for(i=0;i<ms;i++)
        {
         DrvTIMER_EnableInt(E_TMR0);
         while(DrvTIMER_GetIntFlag(E_TMR0)==0);         
         DrvTIMER_DisableInt(E_TMR0);
        }

}

int main (void)
{

        UNLOCKREG();                                                                                                                 
    SYSCLK->PWRCON.XTL12M_EN = 1;                                                                               

    DrvSYS_Delay(5000);                                                                                                         
        DrvTIMER_Init();
       
        /*定时器初始化函数*/
       
        DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0);
       
        /*TIMER0 时钟源选择:000 =外部12MHz 晶振 、001 =外部 32KHz 晶振 、010 = HCLK 、011 = 外部触发时钟 、1xx =内部 22MHz 振荡器 */
       
        DrvTIMER_Open(E_TMR0,10,E_PERIODIC_MODE);
        /*此处可以设定每次循环延时的长度!!!修改*/        /*设定定时器 tick 周期并且启动定时器:定时器通道 TMR0 每秒1次 周期模式*/
       
        DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK) Timer0_Callback,0);
       
        /* 隔1个tick执行事件,parameter3-事件处理函数指针,4-传递参数*/
         DrvTIMER_Start(E_TMR0);

        DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT);                        DrvGPIO_ClrBit(E_GPB, 10);                                                                                         //  清GPB10端口  蜂鸣器不叫唤                                 
  
   while(1)   
    {   
                DrvGPIO_ClrBit(E_GPA, 2);
                DrvGPIO_ClrBit(E_GPA, 3);
                DrvGPIO_ClrBit(E_GPA, 5);
                delay_ms(5);
                DrvGPIO_SetBit(E_GPA, 2);                                                                 //  关灯
                DrvGPIO_SetBit(E_GPA, 3);
                DrvGPIO_SetBit(E_GPA, 5);
                delay_ms(5);  
                     
    }                          
       
}

第4个例程--定时器设置延时.zip (2.5 MB)

相关帖子

沙发
hotpower| | 2011-9-12 21:10 | 只看该作者
有时间整理成汇编,最近比较忙~~~
主要升级HotISP,先实现网络串口

使用特权

评论回复
板凳
mbydyjj| | 2011-9-30 13:15 | 只看该作者
收了

使用特权

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

本版积分规则

1051

主题

11300

帖子

26

粉丝