搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2010-9-28 11:09:29 | 显示全部楼层 |阅读模式
nec 0453使用tm50定时器,怎样设置成10ms的中断。新手,望老手指点。

出0入0汤圆

 楼主| 发表于 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[0];
                        break;
                case 2:
                        CR000 = array_reg[0];
                        CR010 = array_reg[1];
                        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)
{
         
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 04:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表