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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc89c52單片機請問兩種延時有什么區別?

[復制鏈接]
跳轉到指定樓層
樓主
ID:592477 發表于 2019-9-16 18:36 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
12m晶振,delayus(25)等于延時55us吧?為啥在ds18b20的寫字節里用delayu(55)時不能正常顯示?

F82EB1A3-7B02-4945-BE6C-CC199CE0842C.jpeg (1.17 MB, 下載次數: 59)

F82EB1A3-7B02-4945-BE6C-CC199CE0842C.jpeg

96403920-6CAD-432A-8B20-A74C3AFACBDC.jpeg (1.15 MB, 下載次數: 55)

96403920-6CAD-432A-8B20-A74C3AFACBDC.jpeg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:277550 發表于 2019-9-16 22:38 | 只看該作者
循環的效果是一樣的,前者沒有寫 _nop_() 后者則寫,,,,,寫了_nop_()更標準一些
回復

使用道具 舉報

板凳
ID:235200 發表于 2019-9-16 23:38 | 只看該作者
delayus(55)不一定是55us,delayu(55)更加不是55us了,在C語言中的延時程序很難控制到us,只是使用延時程序能夠滿足DS18B20的讀寫時序關系就能讀出或寫入數據,你使用兩種不同的延時,肯定有一種不符合讀寫時序
回復

使用道具 舉報

地板
ID:386381 發表于 2019-9-16 23:59 來自手機 | 只看該作者
你怎么知道是55us,仿真了嗎?
回復

使用道具 舉報

5#
ID:208271 發表于 2019-9-17 10:09 | 只看該作者
直接進入調試模式,看看執行一次需要多長時間,這樣做演示函數不能理所當然的,要模擬。
回復

使用道具 舉報

6#
ID:612416 發表于 2019-9-17 10:18 | 只看該作者
肯定delayus(55)比delayu(55)延時時間更長啊。
_nop_是空操作,占用一個指令周期,while(i--)還有判斷、自減操作,是好幾個指令周期。
回復

使用道具 舉報

7#
ID:598826 發表于 2019-9-17 12:48 | 只看該作者
最好從編譯出來的匯編代碼來比較,看每個循環執行用了幾個指令周期
回復

使用道具 舉報

8#
ID:612663 發表于 2019-9-17 16:55 | 只看該作者
12m晶振下,你的delayu()執行一次就10us+了。
回復

使用道具 舉報

9#
ID:582082 發表于 2019-9-17 20:45 | 只看該作者
肯定delayus(55)比delayu(55)延時時間更長啊。 _nop_是空操作,占用一個指令周期,while(i--)還有判斷、自減操作,是好幾個指令周期
回復

使用道具 舉報

10#
ID:155507 發表于 2019-9-17 21:13 | 只看該作者
最好從編譯出來的匯編代碼來比較

  1.   20          void delayus(unsigned char i)
  2.   21          {
  3.   22   1        while(i--);
  4.   23   1      }
  5.   24          void delayu(unsigned char i)
  6.   25          {
  7.   26   1        unsigned char a;
  8.   27   1        for(a=0; a<i; a++)
  9.   28   1        {
  10.   29   2          _nop_();
  11.   30   2        }
  12.   31   1      }

  13. 下面來說說匯編的傳統計算方法:


  14. 指令周期、機器周期與時鐘周期
  15.        指令周期:CPU執行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。
  16.        時鐘周期:也稱為振蕩周期,一個時鐘周期 =晶振的倒數。
  17.        MCS-51單片機的一個機器周期=6個狀態周期=12個時鐘周期。
  18.        MCS-單片機的指令有單字節、雙字節和三字節的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執行所占時間為12*(1/12000000)=1us。

  19. 了解了上面這些我們來看一個例子

  20. 匯編延時子程序的延時計算問題
  21. 對于程序
  22.              ; FUNCTION _delayus (BEGIN)
  23.                                            ; SOURCE LINE # 20
  24. ;---- Variable 'i' assigned to Register 'R7' ----
  25.                                            ; SOURCE LINE # 21
  26.     ?C0008:
  27.                                                                                         ; SOURCE LINE # 22
  28.               MOV     R6,AR7 ;2指令周期
  29.               DEC     R7     ;1指令周期
  30.               MOV     A,R6   ;1指令周期
  31.               JNZ     ?C0008 ;2指令周期
  32.     ?C0009:
  33.                                                                                         ; SOURCE LINE # 23
  34.     ?C0010:
  35.               RET            ;2指令周期
  36.     ; FUNCTION _delayus (END)

  37. R7 * (2+1+1+2) + 2
  38. 整個循環執行完應該是 =(R7 * 6) + 2  指令周期


  39.              ; FUNCTION _delayu (BEGIN)
  40.                                            ; SOURCE LINE # 24
  41. ;---- Variable 'i' assigned to Register 'R7' ----
  42.                                            ; SOURCE LINE # 25
  43.                                            ; SOURCE LINE # 27
  44. ;---- Variable 'a' assigned to Register 'R6' ----
  45.               CLR     A       ;1指令周期
  46.               MOV     R6,A    ;1指令周期
  47.     ?C0011:
  48.               MOV     A,R6    ;1指令周期
  49.               CLR     C       ;1指令周期
  50.               SUBB    A,R7    ;1指令周期
  51.               JNC     ?C0014  ;2指令周期
  52.                                   ; SOURCE LINE # 28
  53.                                   ; SOURCE LINE # 29
  54.               NOP             ;1指令周期
  55.                                   ; SOURCE LINE # 30
  56.               INC     R6      ;1指令周期
  57.               SJMP    ?C0011  ;2指令周期
  58.                                   ; SOURCE LINE # 31
  59.     ?C0014:
  60.               RET             ;2指令周期
  61.     ; FUNCTION _delayu (END)

  62. (1+1+1+2)+ R7 *  (1+1+2+1+1+1+2) +1 +1 +2
  63. 整個循環執行完應該是        = (R7 * 9) + 9  指令周期


  64. 還說明一下:

  65. nop指令或者_nop_(); 函數占一個機器周期,
  66.    在stc單片機的12T模式下一個機器周期是一個振蕩周期的12分頻,如果你的晶振是12MHZ,那你的一個機器周期就是1微秒.一個nop指令的執行時間也就是1US

  67.    當在6T模式(下載的時候可選擇模式)下12M晶振的時候,一個nop就是0.5US了.


復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天天干 | 欧美精品一二区 | www.久久 | 欧美 日本 国产 | 九九国产在线观看 | 亚洲综合中文字幕在线观看 | 国产在线97 | 欧美激情五月 | 天堂色网| 女人av| 日本久久一区二区三区 | 亚洲91| 国产精品美女久久久久久免费 | 免费观看一级特黄欧美大片 | 免费亚洲一区二区 | 日本一区二区高清不卡 | 一级免费毛片 | 日本免费视频在线观看 | 久久国产精品-久久精品 | 国产超碰人人爽人人做人人爱 | 亚洲黄色av| 中文字幕一区二区三区精彩视频 | 看羞羞视频 | 午夜在线精品偷拍 | 国产999精品久久久久久绿帽 | 亚洲精品一级 | 日韩免费av | 91精品国产综合久久精品图片 | 日韩小视频 | 国产美女精品 | 欧美日韩中文字幕在线 | 亚洲精品91 | 欧美a区| 国产成人一区二区三区久久久 | 日本亚洲一区二区 | 伊人网综合在线 | 成人区精品一区二区婷婷 | 久久久久久久国产 | 99久久久久久99国产精品免 | 国产在线视频一区二区 | 国产成人一区二区 |