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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2036|回復: 8
打印 上一主題 下一主題
收起左側

51單片機LED延時程序問題

[復制鏈接]
跳轉到指定樓層
樓主
關于51單片機LED延時問題:
如圖:STC89C52RC,11.0592晶振,如果用unsigned int對變量進行定義delayms(50000)延時大約是0.489s,而用long對變量進行定義delayms(100000)延時大約是4.34s,為什么不是2倍關系呢,差的太多了吧,實驗板上跑過程序,真的是4s多

51hei截圖_20220411230035.png (60.18 KB, 下載次數: 55)

51hei截圖_20220411230035.png

51hei截圖_20220411230516.png (61.69 KB, 下載次數: 44)

51hei截圖_20220411230516.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:401564 發表于 2022-4-11 23:52 | 只看該作者
別看仿真
STC下載器有現成代碼
Keil是傳統8051內核,它是按AT系列的8051走的
STC的指令時間和AT的是不一樣的
至于為什么不是兩倍關系,你先去了解一下單片機的編譯原理吧,這是基礎
回復

使用道具 舉報

板凳
ID:624769 發表于 2022-4-11 23:56 | 只看該作者
延時要準, 就要 用多個 char 嵌套, 不能簡單用 long 或 INT
回復

使用道具 舉報

地板
ID:123289 發表于 2022-4-12 11:15 | 只看該作者
1、對單片機的數據結構沒有真正明白的原理。
2、不懂匯編。
建議:
將程序進行編譯,看編譯后的匯編代碼,或許你就明白了。
提示:硬延時,雖然每次動作都是減1或加1的累計。但對于不同的數據結構,加減1的復雜程序是不同的,即運行復雜程度是不一樣的,所以時間不同。
回復

使用道具 舉報

5#
ID:121859 發表于 2022-4-12 12:34 | 只看該作者
不可能是2倍關系的,int是兩個字節,long是4個字節,如果轉為匯編,那么前者是2個循環,后者則是4個循環,因為51單片機是8位機,所以各個指令的轉移判據最高也是8位。

評分

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

查看全部評分

回復

使用道具 舉報

6#
ID:61883 發表于 2022-4-12 17:57 | 只看該作者
因為你的單片機是8位的,如果使用long這種類型,編譯出來代碼會很大很大(可以看反匯編),這樣延時執行起來,時間就長很多了。
回復

使用道具 舉報

7#
ID:123289 發表于 2022-4-13 16:32 | 只看該作者
long 是浮點數,浮點數有:底數(3個字節)和階碼(一個字節)組成,類似于科學記數法。做加減法時,要先對階(相當于浮點轉定點),而后再加減,且是帶符號計算,最后再計算階碼,還原成浮點格式。比定點運算復雜許多倍。
不懂匯編的師兄們,是很難理解這些的。
回復

使用道具 舉報

8#
ID:282519 發表于 2022-4-13 17:57 | 只看該作者
謝謝各位指點,不過還是不是很理解,匯編這塊不懂
回復

使用道具 舉報

9#
ID:624769 發表于 2022-4-13 21:39 | 只看該作者
海盜船 發表于 2022-4-13 17:57
謝謝各位指點,不過還是不是很理解,匯編這塊不懂

因為, 你不懂匯編, 也不懂  char  int   long 的判斷, 對于 51核 的單片機來說 根本上的區別是什么。
所以,你無法理解  INT 延時  和 long 延時 為什么不是兩倍關系。
如果,一定要弄懂,就去補知識, 如果不愿意去補,就把 這個“為什么” 先放一邊,只要知道,“就是這樣的”。就好了。

你要相對 準確的延時,就用unsigned char 來嵌套,如:
void Delay100us(unsigned char x)      // x個 100us  @11.0592MHz
{
unsigned char i;
while(--x)
   {
        i = 43;
        while (--i);
   }
}

void Delay10ms(unsigned char x)       // x 個10ms  @11.0592MHz
{
       while(--x)Delay100us(100);
}

void Delay1s(unsigned char x)           // x 個1s  @11.0592MHz
{
       while(--x)Delay10ms(100);
}


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲一区二区三区在线 | 欧美福利久久 | 不卡视频一区二区三区 | 国产精品99| 亚洲精品国产电影 | 超碰美女在线 | 欧美一区二区三区久久精品 | 美女毛片| 国产91网站在线观看 | 国产精品久久久乱弄 | 嫩草视频入口 | 久久久久久久久久久丰满 | 免费在线黄 | 粉嫩一区二区三区四区公司1 | 日本免费黄色一级片 | 91视频麻豆 | 九九天堂网 | 国产成人av一区二区三区 | 久久国产精品一区二区三区 | 国产丝袜人妖cd露出 | 亚洲日本国产 | 国产成人精品久久二区二区 | 日韩欧美综合在线视频 | 精品视频一区二区三区 | 中文字幕日韩欧美 | 91精品中文字幕一区二区三区 | 久久中文字幕一区 | 日韩一区二区福利视频 | 成人精品视频 | 91精品国产色综合久久 | 中文字幕一区二区三区日韩精品 | 亚洲成av人片在线观看 | 91亚洲国产 | 欧美激情一区二区 | 欧美日本亚洲 | 国产一区二区三区 | 久久国产一区二区 | 亚洲综合网站 | 日韩三级在线 | 日韩精品视频在线免费观看 | 亚洲精品1区2区3区 91免费看片 |