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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機延時函數實現問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:616745 發表于 2019-9-26 16:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有這樣一段單片機延時代碼實現
  1. void Delay_ms(int Cnt)
  2. {
  3.         while(Cnt--)
  4.         {
  5.                 int t=100;
  6.                 while(--t);
  7.         }
  8. }
復制代碼

如果我把這段代碼改成
  1. void Delay_ms(int Cnt)
  2. {
  3.     unsigned int t = 0;
  4.     while(Cnt) if(!t) { Cnt--; t=99; } else --t;
  5. }
復制代碼


想了解一下 這樣的修改是否等價
2段代碼傳入相同參數是否可以延時相同時長
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2019-9-27 05:56 | 只看該作者
由于CPU處理不同代碼耗時不同,所以第2段代碼傳入相同參數的延時時間比第一段代碼增加約20%。
回復

使用道具 舉報

板凳
ID:235200 發表于 2019-9-27 07:54 | 只看該作者
采用C語言編程,沒有絕對的相 同,程序會根據變量的數據類型及變量內存使用情況而編譯成不同的指令,從而導致執行時間不同
回復

使用道具 舉報

地板
ID:138097 發表于 2019-9-27 08:08 | 只看該作者
仿真試一試不就知道了?
回復

使用道具 舉報

5#
ID:616745 發表于 2019-9-27 13:49 | 只看該作者
whx.000 發表于 2019-9-27 08:08
仿真試一試不就知道了?

直接運行看不出明顯差距
但我不能確定是差距小還是 沒差距
所以想問問
回復

使用道具 舉報

6#
ID:616745 發表于 2019-9-27 13:49 | 只看該作者
wulin 發表于 2019-9-27 05:56
由于CPU處理不同代碼耗時不同,所以第2段代碼傳入相同參數的延時時間比第一段代碼增加約20%。

很感謝你的幫助
我大概明白了
回復

使用道具 舉報

7#
ID:524300 發表于 2019-9-27 14:24 | 只看該作者
完全等價
回復

使用道具 舉報

8#
ID:592524 發表于 2019-9-27 14:49 | 只看該作者
都測試一下最準確
回復

使用道具 舉報

9#
ID:155507 發表于 2019-9-27 21:29 | 只看該作者
我給你來個試試


  1.   16          void Delay_ms01(int Cnt)
  2.   17          {
  3.   18   1              while(Cnt--)
  4.   19   1              {
  5.   20   2                      int t=100;
  6.   21   2                      while(--t);
  7.   22   2              }
  8.   23   1      }
  9.   24         


  10. 匯編的傳統計算方法:

  11.              ; FUNCTION _Delay_ms01 (BEGIN)
  12.                                            ; SOURCE LINE # 16
  13. ;---- Variable 'Cnt' assigned to Register 'R6/R7' ----
  14.                                            ; SOURCE LINE # 17
  15. 0000         ?C0001:
  16.                                            ; SOURCE LINE # 18
  17. 0000 EF                MOV     A,R7   ;1指令周期
  18. 0001 1F                DEC     R7     ;1指令周期
  19. 0002 AC06              MOV     R4,AR6 ;2指令周期
  20. 0004 7001              JNZ     ?C0051 ;2指令周期
  21. 0006 1E                DEC     R6     ;1指令周期
  22. 0007         ?C0051:
  23. 0007 4C                ORL     A,R4   ;1指令周期
  24. 0008 6015              JZ      ?C0005 ;2指令周期
  25.                                            ; SOURCE LINE # 19
  26.                                            ; SOURCE LINE # 20
  27. 000A 750000      R     MOV     t,#00H      ;3指令周期
  28. 000D 750064      R     MOV     t+01H,#064H ;3指令周期
  29. 0010         ?C0003:
  30.                                            ; SOURCE LINE # 21
  31. 0010 E500        R     MOV     A,t+01H  ;2指令周期
  32. 0012 1500        R     DEC     t+01H    ;2指令周期
  33. 0014 7002              JNZ     ?C0052   ;2指令周期
  34. 0016 1500        R     DEC     t        ;2指令周期
  35. 0018         ?C0052:
  36. 0018 14                DEC     A        ;1指令周期
  37. 0019 4500        R     ORL     A,t      ;2指令周期
  38. 001B 60E3              JZ      ?C0001   ;2指令周期
  39. 001D 80F1              SJMP    ?C0003   ;2指令周期
  40.                                            ; SOURCE LINE # 23
  41. 001F         ?C0005:
  42. 001F 22                RET              ;1指令周期
  43.              ; FUNCTION _Delay_ms01 (END)


  44.   25          void Delay_ms02(int Cnt)
  45.   26          {
  46.   27   1          unsigned int t = 0;
  47.   28   1          while(Cnt) if(!t) { Cnt--; t=99; } else --t;
  48.   29   1      }



  49.              ; FUNCTION _Delay_ms02 (BEGIN)
  50.                                            ; SOURCE LINE # 25
  51. ;---- Variable 'Cnt' assigned to Register 'R6/R7' ----
  52.                                            ; SOURCE LINE # 26
  53.                                            ; SOURCE LINE # 27
  54. ;---- Variable 't' assigned to Register 'R4/R5' ----
  55. 0000 E4                CLR     A    ;1指令周期
  56. 0001 FD                MOV     R5,A ;1指令周期
  57. 0002 FC                MOV     R4,A ;1指令周期
  58. 0003         ?C0006:
  59.                                            ; SOURCE LINE # 28
  60. 0003 EF                MOV     A,R7    ;1指令周期
  61. 0004 4E                ORL     A,R6    ;1指令周期
  62. 0005 6016              JZ      ?C0010  ;2指令周期
  63. 0007 ED                MOV     A,R5    ;1指令周期
  64. 0008 4C                ORL     A,R4    ;1指令周期
  65. 0009 700B              JNZ     ?C0008  ;2指令周期
  66. 000B EF                MOV     A,R7    ;1指令周期
  67. 000C 1F                DEC     R7      ;1指令周期
  68. 000D 7001              JNZ     ?C0053  ;2指令周期
  69. 000F 1E                DEC     R6      ;1指令周期
  70. 0010         ?C0053:
  71. 0010 7C00              MOV     R4,#00H  ;2指令周期
  72. 0012 7D63              MOV     R5,#063H ;2指令周期
  73. 0014 80ED              SJMP    ?C0006   ;2指令周期
  74. 0016         ?C0008:
  75. 0016 ED                MOV     A,R5     ;1指令周期
  76. 0017 1D                DEC     R5       ;1指令周期
  77. 0018 70E9              JNZ     ?C0006   ;2指令周期
  78. 001A 1C                DEC     R4       ;1指令周期
  79. 001B         ?C0054:
  80. 001B 80E6              SJMP    ?C0006   ;2指令周期
  81.                                            ; SOURCE LINE # 29
  82. 001D         ?C0010:
  83. 001D 22                RET              ;1指令周期
  84.              ; FUNCTION _Delay_ms02 (END)



  85.         Delay_ms01(10);  //5.063 ms
  86.         Delay_ms02(10);  //5.4325 ms
  87. 0.00019450
  88. 0.00525750 5.063 ms
  89. 0.01069000 5.4325 ms



復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线观看免费 | 欧美一二区 | 色网在线看 | 国产日韩欧美精品一区二区三区 | 99精品福利视频 | 精品久久影院 | 精品区一区二区 | 久久久国产精品 | 久久精品亚洲欧美日韩久久 | 日本又色又爽又黄又高潮 | 天天躁日日躁狠狠躁白人 | 欧美一区在线视频 | 午夜无码国产理论在线 | 最新毛片网站 | 在线日韩福利 | 精品一区二区三区四区外站 | 波多野结衣一区二区三区在线观看 | 欧美日韩中文在线 | 国产无套一区二区三区久久 | 国产成人在线观看免费 | 亚洲第一免费播放区 | 精品成人免费视频 | 亚洲一区二区三区四区五区午夜 | 日韩成人影院 | 欧美 视频 | 欧美激情一区二区三区 | av三级在线观看 | 欧美成人a | 亚洲欧美中文字幕在线观看 | 国产一区二区自拍 | 国产成人在线免费 | 亚洲精品视频在线观看免费 | 久久骚| 欧美精品一区二区三区在线播放 | 成人在线国产 | 国产欧美一区二区三区国产幕精品 | 美女国产精品 | 欧美一区永久视频免费观看 | 免费在线观看av的网站 | 日韩电影免费在线观看中文字幕 | 亚洲一区二区三区免费观看 |