久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25863|回復: 26
收起左側

單片機延時程序到底怎么算的啊?

  [復制鏈接]
ID:242547 發表于 2018-5-10 22:50 | 顯示全部樓層 |閱讀模式
百度的1s的
void delayms()        
// 單片機延時子程序   對應12M晶振
{                                                
        unsigned int ms=1000;
        while(ms--)                                //每一次循環1ms
        {
                for(i = 0; i < 120; i++);
        }
}這個每次循環為什么是1ms?每次不是120*2個機器周期*1us=0.24ms嗎?


回復

使用道具 舉報

ID:327731 發表于 2018-5-11 17:46 來自觸屏版 | 顯示全部樓層
如果有條件,用示波器打一下,執行這個程序前把一個IO口拉低,進入函數把這個IO口拉高,退出函數時將IO口拉低,測量電平時間,就可以為實際運行時間。如果沒條件,就用軟件仿真,晶振頻率設對,然后記錄函數執行前的時間和執行后的時間,算一下就可以了!如果說要問怎么來的,翻譯成為機器代碼后再看吧,這個for大概有一次賦值,120次比較,120次自增,一次賦值2個機器周期,一次判斷4個機器周期,一次自增一個機器周期,一個機器周期占用時間1us,你算一下?

評分

參與人數 2黑幣 +28 收起 理由
Double4X + 8 很給力!
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:277550 發表于 2018-5-11 00:28 | 顯示全部樓層
不同類型的單片機,差別很大的。。。如果是使用STC單片機,那麼在其下載工具中,有軟件延時生成工具。

評分

參與人數 2黑幣 +25 收起 理由
Double4X + 5 很給力!
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:327277 發表于 2018-5-11 01:25 | 顯示全部樓層
你算的是正確的
回復

使用道具 舉報

ID:327277 發表于 2018-5-11 01:27 | 顯示全部樓層
百度錯了他少了一個循環
回復

使用道具 舉報

ID:327277 發表于 2018-5-11 01:28 | 顯示全部樓層
這樣算出來的只有0.24ms
回復

使用道具 舉報

ID:327290 發表于 2018-5-11 02:44 | 顯示全部樓層
我覺得你算得是對的
回復

使用道具 舉報

ID:326301 發表于 2018-5-11 11:09 | 顯示全部樓層
執行語句也是需要時間的,你可以直接編譯看下這個延時函數到底需要多少時間,keil里有這個功能,這個延時函數大概是0.97 0.98左右

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:293977 發表于 2018-5-11 17:07 | 顯示全部樓層
這個東西一般都是用軟件算的,而且while、for等這些指令執行一次要花不止一個指令周期,具體要花幾個指令周期要把它弄成匯編才看得出來。我只記得for語句好像執行一次是3個指令周期,while不清楚。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:111634 發表于 2018-5-11 21:36 | 顯示全部樓層
用c編寫的延時函數一般無法計算,與編譯器和變量類型都有關,但可在keil運行后查看寄存器窗口中,系統特殊寄存器組“Sys”中有一項“sec”和“states”,可查看程序執行時間和運行周期數。例如,執行到延時子程序時,記錄進入該子程序的sec值,然后按過程單步鍵,快速執行該子程序完畢,再讀取sec值,兩者之差,即為該子程序執行時間。也可根據周期數states與圖2-8中設置的晶振頻率計算程序運行時間。(摘自張志良編著的:《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學,可從零基礎c語言開始學習。)。
回復

使用道具 舉報

ID:327527 發表于 2018-5-11 23:48 | 顯示全部樓層
你算的沒錯
回復

使用道具 舉報

ID:328086 發表于 2018-5-12 10:36 | 顯示全部樓層
給樓主提供一個毫秒級延時程序
void delay(uint x) //延時X毫秒
{
uint y,z;
for(z=x;z>0;z--)
for(y=110;y>0;y--);
}

void delay_ms(uint n)   //延時n毫秒
{
   uchar i;
   while(n--)
   {
     for(i=0;i<120;i++);
}
}
回復

使用道具 舉報

ID:317135 發表于 2018-5-28 15:44 | 顯示全部樓層
你算得是對的
回復

使用道具 舉報

ID:339882 發表于 2018-5-28 16:39 | 顯示全部樓層
for循環嵌套,通過程序計算數據時間來進行延時
回復

使用道具 舉報

ID:338173 發表于 2018-5-28 21:30 | 顯示全部樓層
兄dei,以我學習stc51 ,12,15系列單片機的經驗來說,軟件延時很扯!除非你匯編學得好。建議用_nop_()延時或者定時器計時,要不寫IIC驅動,單總線驅動,你會煩死!!!
回復

使用道具 舉報

ID:537232 發表于 2019-5-17 09:36 | 顯示全部樓層
芝麻團子 發表于 2018-5-11 17:46
如果有條件,用示波器打一下,執行這個程序前把一個IO口拉低,進入函數把這個IO口拉高,退出函數時將IO口拉 ...

為什么題主算的還要乘2呢?
回復

使用道具 舉報

ID:540563 發表于 2019-5-17 11:43 | 顯示全部樓層
delay延時的基本原理是:讓單片機什么也不干,一直空轉,延時的時間等于空轉的周期數,具體的時間要看你的單片機的晶振頻率的高低。
回復

使用道具 舉報

ID:424408 發表于 2019-5-17 12:53 | 顯示全部樓層
生成一個匯編文件,計算匯編指令周期 這樣更精準哦
回復

使用道具 舉報

ID:446841 發表于 2019-5-17 14:59 來自觸屏版 | 顯示全部樓層
這個時間是用軟件慢慢調試出來的  你確定你程序每一行所用的時間是相同的   
回復

使用道具 舉報

ID:530977 發表于 2019-5-17 20:53 | 顯示全部樓層
void delay()unsigned
回復

使用道具 舉報

ID:93224 發表于 2019-5-17 23:35 | 顯示全部樓層
執行空指令
回復

使用道具 舉報

ID:541189 發表于 2019-5-18 10:20 來自觸屏版 | 顯示全部樓層
芝麻團子 發表于 2018-5-11 17:46
如果有條件,用示波器打一下,執行這個程序前把一個IO口拉低,進入函數把這個IO口拉高,退出函數時將IO口拉 ...

高手,領教了
回復

使用道具 舉報

ID:393193 發表于 2019-5-20 22:11 | 顯示全部樓層
可以參考一下本論壇一位大神發過的文章:http://www.zg4o1577.cn/mcu/4163.html
回復

使用道具 舉報

ID:495323 發表于 2019-10-6 00:35 來自觸屏版 | 顯示全部樓層
lzr513 發表于 2018-5-12 10:36
給樓主提供一個毫秒級延時程序
void delay(uint x) //延時X毫秒
{

要看具體的晶振,一條匯編語句一般執行時間是一個機器周期,一個機器周期是晶振的倒數。一條語句要運行多長時間要看這條語句有多少條反匯編語句。
回復

使用道具 舉報

ID:612180 發表于 2019-10-7 14:36 | 顯示全部樓層
如果單片機的晶振周期不一樣,那么時間也就不一樣,從而單片機的處理程序時間也就不同,所以要對照單片機的晶振頻率,從而計算時間。
回復

使用道具 舉報

ID:609989 發表于 2019-10-8 17:23 | 顯示全部樓層
晶振:11.0592
1ms
void dealyms(int x)
    {
           int i,y;
         for(i=0;i<x;i++)
                    for(y=0;y<112;y++);
    }
回復

使用道具 舉報

ID:222006 發表于 2019-10-8 19:04 | 顯示全部樓層
算法沒問題,但是你要知道單片機的執行時間不單單只執行while里面的延時
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲第一区国产精品 | 天堂网色| 国产成人99久久亚洲综合精品 | 成人性生交大片免费看r链接 | 中文字幕 在线观看 | 阿v视频在线观看 | 欧美在线视频a | 玖玖国产 | 国产一区二区三区免费观看视频 | 日韩一区二区在线视频 | 精国产品一区二区三区四季综 | 久久精品亚洲精品国产欧美 | 国产成人99久久亚洲综合精品 | 亚洲精品视频一区 | 成人高清视频在线观看 | 欧美高清视频一区 | 亚洲精品国产区 | 精品国产视频 | 欧美 视频 | 日韩国产专区 | 天天综合网天天综合 | 精品一区二区久久久久久久网精 | 国产精品一区二区三区免费观看 | 亚洲精品乱码久久久久久蜜桃 | 国产成人99久久亚洲综合精品 | 婷婷在线网站 | 天堂网中文字幕在线观看 | 免费网站在线 | 亚洲一一在线 | 久久精品中文 | 91色视频在线观看 | 久草.com | 精品国产乱码久久久久久牛牛 | 午夜免费 | 久久精品无码一区二区三区 | 99精品国产一区二区青青牛奶 | 欧美日韩国产中文 | 99免费 | 成人h电影在线观看 | 日本亚洲一区 | 一级网站|