找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4931|回复: 1
收起左侧

关于单片机延时程序的延时时间是怎么计算的?

[复制链接]
ID:457429 发表于 2018-12-28 16:35 | 显示全部楼层 |阅读模式
………………………………
sbit key1=P3^2;           //布防
sbit key2=P3^3;           //撤防
sbit key3=P3^4;           //紧急报警
sbit BUZZ=P0^4;           //蜂鸣器
sbit rsd=P2^4;           //热释电输入
sbit yanwu=P2^5;
sbit LED_B=P2^3;   //布防指示灯
sbit LED_S=P2^0;   //发送消息指示灯

uint TIME_50ms=0;           //计时的最小分辨率50ms
uint time_continue;
uchar TIME_ALAM=0;
bit flag=0,flag_BF=0;
bit flag_time_start=0;
bit again=0;
bit flag_alam;
bit SOS;
bit flag_continue;
bit into_BF=0;

void delay(uint z)//延时函数
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

………………………………………………………………以上省略了一些无关定义初始化。以下程序的如何计时,延时多少是我不明白的。
void TIME()
{
        if(flag==0)
        {
                delay(50);
                TIME_50ms++;
                if(TIME_50ms%10==0)
                LED_B=!LED_B;
                if(TIME_50ms>=400)
                {
                        TIME_50ms=0;
                        flag_BF=1;
                        LED_B=0;
                        flag_time_start=0;
                        again=1;
                }        
        }
        else
        {
                delay(50);
                TIME_50ms++;
                if(TIME_50ms%10==0)
                {
                        LED_B=!LED_B;
                        if(flag_alam==1)
                        {
                                if(flag_continue==0)
                                {
                                        flag_continue=1;
                                        time_continue=TIME_50ms;
                                }
                                BUZZ=!BUZZ;
                                if(TIME_50ms>=time_continue+100)
                                {
                                        BUZZ=1;
                                        flag_continue=0;
                                        flag_alam=0;
                                        time_continue=0;
                                }        
                        }
                }
                if(TIME_50ms>=1200)
                {
                        LED_B=0;
                        TIME_50ms=0;
                        flag_time_start=0;
                        again=1;
                }
        }
}

原理图

原理图
回复

使用道具 举报

ID:439075 发表于 2018-12-28 20:57 | 显示全部楼层
就是根据时钟和单片机每条指令消耗的机器周期来计算,软件延时只能是个大概的值,不会很精准。想要精准的延时值,必须用硬件定时器。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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