yzvip7 发表于 2010-9-28 11:09:29

nec 0453使用tm50定时器,怎样设置成10ms的中断。新手,望老手指点。

nec 0453使用tm50定时器,怎样设置成10ms的中断。新手,望老手指点。

yzvip7 发表于 2010-12-15 09:24:12

/******************************************************************************
                        定时/计数器TM00驱动
******************************************************************************/
void TM00_Init(void)
{
        TMC00 = TM0_CLEAR_BY_MATCH_CR00;       //=0X0C 定时器模式
        TMMK000 = 1;        // disable INTTM000         000中断屏蔽
        TMIF000 = 0;        // clear INTTM000 flag      000中断标志清零
        TMMK010 = 1;        // disable INTTM010         010中断屏蔽
        TMIF010 = 0;        // clear INTTM010 flag      010中断标志清零
        TMPR000 = 1;        //set INTTM000 low priority 000中断优先级 低
        //TM00 interval timer
        PRM00 = TM0_INTER_CLOCK_2;//=0x00 /分频系数选择
        CRC00 = TM0_CR00_COMPARE;   //=0X00 即cr000 cr010作比较器用,比较器和触发器选择
        CR000 = 40000;   //初始值cr000
        CR010 = TM00_CR010_VALUE;   //初始值cr010
    TM00_Start();
}

void TM00_Start(void)
{
        TMIF000 = 0;        // clear INTTM000 flag
        TMMK000 = 0;        // enable INTTM000
        TMC00 &= (UCHAR)~TM0_OPERATE;
        TMC00 |= TM0_CLEAR_BY_MATCH_CR00;
}

void TM00_Stop(void)
{
        TMC00 = TM0_OPERATE_DISABLE;
        TMMK000 = 1;        // disable INTTM000
        TMIF000 = 0;        // clear INTTM000 flag
}

MD_STATUS TM00_ChangeTimerCondition(USHORT* array_reg, UCHAR array_num)
{
        MD_STATUS status = MD_OK;

        switch (array_num)
        {
                case 1:
                        CR000 = array_reg;
                        break;
                case 2:
                        CR000 = array_reg;
                        CR010 = array_reg;
                        break;
                default:
                        status = MD_ARGERROR;
                        break;
        }

        return (status);
}

/******************************************************************************
                        定时/计数器50驱动
******************************************************************************/
void TM50_Init(void)
{
        TCE50   = 0;        //关闭TM50控制,并清零TM50
        TMMK50        = 1;        //屏蔽掉TM50中断
        TMIF50        = 0;        //清除TM50中断标志
        TMPR50        = 1;        //中断优先级设置,为低
       
        TCL50 = TM5_INTER_CLOCK_6;    //定时器时钟配置,有TCL502 TCL501 TCL500配置低3位,分频系数分别为Fprs/2^0 ,2^1 ,2^2 ,2^6, 2^8 ,2^13
        CR50= 0x09;                   //定时器初值设置,需要定时器停止操作的时候才能更改此值,如果已经设置好了定时值,就不需要再次修改相同的值,除非有不同的值,输入才再次修改,会一直保持写入的值。
    TMC50 = 0X00;               //TMC50 = TM5_OPT_MODE_OTHER | TM5_OUTPUT_FF_DISABLE;
    TM50_Start();
}

void TM50_Start(void)
{
        TMIF50        = 0;        /* clear INTTM50 flag */
        TMMK50        = 0;        /* enable INTTM50 */
        TCE50   = 1;        /* enable TM50 counter */
}

void TM50_Stop(void)
{
        TCE50   = 0;        /* disable TM50 counter */
        TMMK50        = 1;        /* disable INTTM50 */
        TMIF50        = 0;        /* clear INTTM50 flag */
}

#pragma vector = INTTM50_vect
__interrupt void MD_INTTM50(void)
{
    ;
}

/******************************************************************************
                        定时/计数器 51驱动
******************************************************************************/
void TM51_Init(void)
{
        TCE51   = 0;        // disable TM51 counter
        TMMK51        = 1;        // disable INTTM51
        TMIF51        = 0;        // clear INTTM51 flag
        TMPR51        = 1;        //set INTTM51 low priority
        // TM51 interval mode
        TCL51 = TM5_INTER_CLOCK_5;
        CR51 = TM51_CR51_VALUE;
        TMC51 = TM5_OPT_MODE_OTHER;
    TM51_Start();
}

void TM51_Start(void)
{
        TMIF51        = 0;        // clear INTTM51 flag
        TMMK51        = 0;        // enable INTTM51
        TCE51   = 1;        // enable TM51 counter
}

void TM51_Stop(void)
{
        TCE51   = 0;        // disable TM51 counter
        TMMK51        = 1;        // disable INTTM51
        TMIF51        = 0;        // clear INTTM51 flag
}


#pragma vector = INTTM51_vect
__interrupt void MD_INTTM51(void)
{
       
}
页: [1]
查看完整版本: nec 0453使用tm50定时器,怎样设置成10ms的中断。新手,望老手指点。