zoukankan      html  css  js  c++  java
  • 定时器延时算法设计

    1.江苏宏云JMT系列芯片

    注意注释中有部分写的不太对,

    2.初始化定时器,产生1mS自加中断

    //56M时钟 

    u16,16位自加最多可以计时 1~65536/2 计时不会出错

    /*
    ;功能:在56M时钟下产生1mS中断
    */
    void timer1Init()
    {
        TMOD|=0x10;//16bit定时,不使能GATE门 
        TL1=0x40;//56M下配置0x2540即1mS
        TH1=0x25;
    }
    /*
    ;功能:timer1中断,1mS计数timer_mS_count自加一次
    */
    void ISR_timer1DelyCnt() interrupt 3
    {
        TR1=0;
        pinLed1_PA1=~pinLed1_PA1;
        timer_mS_count++;//1mS中断
        TL1=0x40;//56M下配置0x2540即1mS
        TH1=0x25;
        TR1=1;
    }
    /*
    ;功能:设置需要延时的时间,单位由timer_mS_count自加中断间隔决定,mS
    ;入参:需要的mS计时数
    ;返回值:用于作为函数checkDelay()的入参检测对应的时间是否到达
    */
    //下面两个函数配合使用达到延时作用
    u16 setDelay(u16 mySet_mS_Timer)
    {
          return(timer_mS_count + mySet_mS_Timer - 1);                                             
    }
    /*
    ;功能:用来检测是否到达所配置的时间点
    ;入参:函数setDelay()设置的mS对应的返回值
    ;返回值:0表示时间未到
    ;                1表示时间到达
    */
    u8 checkDelay (u16 mySetTimer)//返回非零表示计时结束
    {
         return(((mySetTimer - timer_mS_count) & 0x8000) >> 8);//当(t - timer_mS_count)为正则&之后为0,当变为负数后因为是无符号整数,产生无穷大,那么非零
    }
    /*
    ;功能:组合函数时间精确计时,单线程模式计时
    ;入参:计时时长,单位:mS
    */
    void delay_ms(u16 mydealyTimer)//延时多少mS
    {
         u16 timerRelCount;
         timerRelCount = setDelay(mydealyTimer);//设置mS对应的计数值
         while (!checkDelay(timerRelCount));//检测计数值一直到时间到达为止
    }

    u8,8位自加最多可以计时1 ~ 256/2计时不会出错

     
    u8 mySet_mS_Timer ;

    /*
    ;功能:在56M时钟下产生1mS中断 */ void timer1Init() { TMOD|=0x10;//16bit定时,不使能GATE门 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; } /* ;功能:timer1中断,1mS计数timer_mS_count自加一次 */ void ISR_timer1DelyCnt() interrupt 3 { TR1=0; pinLed1_PA1=~pinLed1_PA1; timer_mS_count++;//1mS中断 ,u8 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; TR1=1; } /* ;功能:设置需要延时的时间,单位由timer_mS_count自加中断间隔决定,mS ;入参:需要的mS计时数 ;返回值:用于作为函数checkDelay()的入参检测对应的时间是否到达 */ //下面两个函数配合使用达到延时作用 u8 setDelay(u8 mySet_mS_Timer) { return(timer_mS_count + mySet_mS_Timer - 1); } /* ;功能:用来检测是否到达所配置的时间点 ;入参:函数setDelay()设置的mS对应的返回值 ;返回值:0表示时间未到 ; 1表示时间到达 */ u8 checkDelay (u8 mySetTimer)//返回非零表示计时结束 { return((mySetTimer - timer_mS_count) & 0x80 );//当(t - timer_mS_count)为正则&之后为0,当变为负数后因为是无符号整数,产生无穷大,那么非零 } /* ;功能:组合函数时间精确计时,单线程模式计时 ;入参:计时时长,单位:mS */ void delay_ms(u8 mydealyTimer)//延时多少mS { u16 timerRelCount; timerRelCount = setDelay(mydealyTimer);//设置mS对应的计数值 while (!checkDelay(timerRelCount));//检测计数值一直到时间到达为止 }
  • 相关阅读:
    Luogu1309 瑞士轮(分治,归并排序)
    HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)
    Luogu 1220 关路灯(动态规划)
    HDU 2087 剪花布条(字符串匹配,KMP)
    HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP)
    HDU 1711 Number Sequence (字符串匹配,KMP算法)
    Luogu 3375 【模板】KMP字符串匹配(KMP算法)
    KMP算法(研究总结,字符串)
    CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)
    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)
  • 原文地址:https://www.cnblogs.com/fx427103/p/4744601.html
Copyright © 2011-2022 走看看