[DemoCode下载]

唐MINI51 TIMER1初始化设置及应用

[复制链接]
768|1
手机看帖
扫描二维码
随时随地手机跟帖
天灵灵地灵灵|  楼主 | 2016-7-31 22:36 | 显示全部楼层 |阅读模式
#include "Register_Bit.h"   //包含位定义文件    

#define     TIMER1_DIV1             (uint8_t)1  
#define     TIMER1_DIV5             (uint8_t)5  
#define     TIMER1_DIV10            (uint8_t)10  
#define     TIMER1_DIV12            (uint8_t)12  
#define     TIMER1_DIV50            (uint8_t)50  

#define     TIMER1_IEN_ENB      TCSR1 |= (1<<29)   //定时器中断使能  
#define     TIMER1_IEN_DIS      TCSR1 &= ~(1<<29)   //定时器中断使能  

#define     TIMER1_CNT_ENB      TCSR1 |= (1<<30)   //定时器计数使能   
#define     TIMER1_CNT_DIS      TCSR1 &= ~(1<<30)   //定时器计数使能   

//*************************************  
// 函数名称:Init_timer0  
// 函数功能:TIMER0初始化  
// 入口参数:psc 分频系数 范围为1-255 Tcon 为计数个数  
// 出口参数:无  
//***************************************/  
void Init_Timer1(uint8_t psc,uint32_t Tcon) //SYSCLK =   
{  
    /* Reset TMR1 IP  外设先复位再使能 */  
    IPRSTC2 |= TMR1_RST;  
    IPRSTC2 &= ~TMR1_RST;   

    /* Enable Timer1 clock source */  
    APBCLK |= TMR1_CLKEN;         

    NVIC_ISER |= TMR1_INT;  //开TIMER1中断  
//  NVIC_IPR2 |= (0<<0) ; //设置中断优先级为0 ->最高优先级  

    /* Select Timer1 clock source as external 12M */   
    CLKSEL1 = (CLKSEL1 & (~TM1_CLK)) | TM1_12M_32K;      

    /* Reset the timer/counter1, after set, this bit will be clear by H/W */         
    TCSR1 |= CRST;     

    /* Pre-Scaler */  
    TCSR1 &= ~(0XFF) ;  
    TCSR1  |= ((psc-1)<<0) ;  //时钟分频     

    TCSR1 |= (1<<16) ;  //读取数据使能  
    TCSR1 &= ~(1<<24) ; //计数模式使能位 --不使能  
    TCSR1 |= (1<<27) ;  //定时器设置为周期模式  

    TISR1 |= (1<<0) ; //中断状态标志清0  

    /* Timer1 interrupt enable */  
//    TCSR1 |= TMR_IE;  

    TCMPR1 = Tcon ;  //计数个数  

    TDR1 = 0 ;  //计数器清0      

}  
//*************************************  
// 函数名称:Timer0_Cmd  
// 函数功能:TIMER0使能  
// 入口参数:使能参数  
// 出口参数:无  
//***************************************/  
void  Timer1_Cmd(uint8_t en)  
{  

    if(en == ENB)  
    {  
        TDR1 = 0 ;  //计数器清0  
        TIMER1_IEN_ENB ;  //定时器中断使能  
        TIMER1_CNT_ENB ;  //定时器计数使能   
    }  
    else  
    {  
        TIMER1_IEN_DIS ;  //定时器中断使能  
        TIMER1_CNT_DIS ;  //定时器计数使能      
    }  

}  

//---实例应用-------  
    //定时器1初始化设置  
    Init_Timer1(TIMER0_DIV1,1500) ; //12M 共计125U  
    Timer1_Cmd(ENB) ;  


yiyigirl2014| | 2018-8-13 20:32 | 显示全部楼层
学习了,多谢分享,回头再看看结构图

使用特权

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

本版积分规则

159

主题

3272

帖子

13

粉丝