• 51单片机基于定时器0的硬件延时代码


     1 //晶振的频率
     2 #define OSC_FREQ (11059200UL)
     3 
     4 //每个指令的振荡周期数(4,6,12),注意,这里一定要仔细查看芯片手册
     5 //*12 - 早期的8051、8052及当前的绝大部分51单片机
     6 //*6 - Philips 的芯片
     7 //*4 - Dallas
     8 #define OSC_PER_INST (12)
     9 
    10 //TIME 为定时时间 单位MS
    11 #define PRELOAD1MS (65536 - 1*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))
    12 #define PRELOAD5MS (65536 - 5*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))
    13 
    14 void start_Timeout1ms(){
    15     TH0 = PRELOAD1MS / 256;
    16     TL0 = PRELOAD1MS % 256;
    17     TF0 = 0 ;//清溢出标志位
    18 
    19     ET0 = 0;    //关定时器0的中断
    20 
    21     TR0 = 1;    //启动定时器
    22 
    23 }
    24 
    25 void start_Timeout5ms(){
    26     //TMOD = ;
    27 
    28     TH0 = PRELOAD5MS / 256;
    29     TL0 = PRELOAD5MS % 256;
    30     TF0 = 0 ;//清溢出标志位
    31 
    32     ET0 = 0;    //关定时器0的中断
    33 
    34     TR0 = 1;    //启动定时器
    35 
    36 }
    37 
    38 void stop_Timeout(){
    39     TR0 = 0;
    40 }
    41 
    42 void Delay5ms(){
    43     start_Timeout5ms();
    44     while(!_testbit_(TF0));
    45     stop_Timeout();
    46 }
    47 
    48 /* 用法 
    49 start_Timeout1ms();
    50 while(!TF0);    //等待T0超时
    51 stop_Timeout();
    52 */

    以上为转载,没经过验证

  • 相关阅读:
    vue数组和对象不能直接赋值
    数组内部的对象监听问题
    vue知识点(工作中遇到)
    Array数组
    js对象操作
    Vue-router
    sublime text 3 常用插件 —— SFTP
    Python中的线程和进程
    python中的sockeserver模块简单实用
    python利用socket写一个文件上传
  • 原文地址:https://www.cnblogs.com/scdyxcc/p/2876107.html
Copyright © 2020-2023  润新知