• stc15单片机硬件精准延时,递归,51单片机延时


    最近做项目,写了一个硬件延时代码,喜欢的朋友请拷贝,评论一下,让我高兴一下好不

    /*---------------------------------------------------------------------*/
    /* --- STC MCU Limited ------------------------------------------------*/
    /* --- STC 1T Series MCU Demo Programme -------------------------------*/
    /* --- Mobile: (86)13922805190 ----------------------------------------*/
    /* --- Fax: 86-0513-55012956,55012947,55012969 -----------------------*/
    /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
    /* --- Web: www.STCMCU.com --------------------------------------------*/
    /* --- Web: www.GXWMCU.com --------------------------------------------*/
    /* --- QQ:  800003751 -------------------------------------------------*/
    /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
    /*---------------------------------------------------------------------*/
    
    
    #include "stc15wxx.h"
    #include "main.h"
    #include "pwm.h"
    
    #define Timer0_Rate_HZ     (1000000)       //中断频率,最小频率 FOSC/Timer0_Rate_HZ=65536,最大FOSC/Timer0_Rate_HZ=1
    #if (Timer0_Rate_HZ >FOSC)
    #error "Timer0_Rate_HZ > FOSC !!!"
    #endif
    #define Timer0_Reload   (65536UL -( FOSC/ Timer0_Rate_HZ))        //Timer 0 重装值
    /**********************************************/
    u8  flag;
    void time0_init(void)
    {
        AUXR |=  (1<<7);    // Timer0 set as 1T mode
        TMOD &= ~(1<<2);    // Timer0 set as Timer
        TMOD &= ~0x03;      // Timer0 set as 16 bits Auto Reload
        TH0 = 0 / 256;  //Timer0 Load
        TL0 = 0 % 256;
        ET0 = 0;        //Timer0 Interrupt Disable
        PT0 = 0;        //高优先级
        TR0 = 0;        //Timer0 not Run
        EA = 1;         //打开总中断
    
    }
    void timer0 (void) interrupt 1
    {
        flag = 0;
        ET0 = 0;
        TR0 = 0;
    }
    
    void timer_load(u16 load)
    {
        flag = 1;
        TH0 = load / 256;  //Timer0 Load
        TL0 = load % 256;
        ET0 = 1;
        TR0 = 1;
        while(flag);
    }
    //递归延时函数
    #define F_MHZ (24) //定义时钟是多少M
    void Hdelay_nus(u16 nus)
    {
        if(nus<=(65536/F_MHZ))
        {
            timer_load(65536UL-F_MHZ*nus);
            return;
        }
        else
        {
            timer_load(65536%F_MHZ);//接近16位定时最大延时
            nus -= (65536/F_MHZ);
            Hdelay_nus(nus);
        }
    }
    
    void Hdelay_nms(u16 nms)
    {
        while(nms--)
        {
            Hdelay_nus(1000-1);
        }
    }
  • 相关阅读:
    C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue
    Javascript在IE与Firefox下的差异
    ASP.NET状态服务及session丢失问题解决方案总结
    在Silverlight中读取指定URL图片包数据
    Cookie记住滚动条
    IHttpModule 与IHttpHandler的区别
    页面内容随滚动条滚动动态载入JavaScript脚本。
    Asp.net MVC Action大全(转)
    简单的css横向菜单
    实线表格Html
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/12032332.html
Copyright © 2020-2023  润新知