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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc8h單片機的延時為什么不準?

  [復制鏈接]
跳轉到指定樓層
樓主
使用的是stc8h8k64u單片機,需要延時3秒,代碼由stc-isp生成,延時程序名Delay3000ms(),
在keil調試,顯示的卻是54秒,(見圖)。


程序下載運行,實測是4.5秒,相差太大了。
為什么keil調試顯示是54?我用的是單片機內部晶振,頻率調至12。

另外,我用以前在stc89c52時寫的延時程序(載圖中被注銷的delay1ms(3000)),
在keil調試時顯示是3秒,很準,但下載運行,根本看不出有延時效果。

stc單片機的延時怎么才能準?在keil 顯示怎么才能準確?
以前在stc89c52和atmel 單片機上用的延時程序怎么才能繼續使用?畢竟很好用。
請高手們幫助解惑!謝謝!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:468878 發表于 2025-4-21 18:07 | 只看該作者
用STC的ISP軟件直接生成延時試試。STC是有1T的模式,也有12T模式,會影響延時。Atmel的都是12T的。
回復

使用道具 舉報

板凳
ID:401564 發表于 2025-4-21 18:09 | 只看該作者
超過1mS的延時,正常來說都是要用定時器或者PCA計數器來延時的,而不是讓程序死等,雖然說你程序可能 很簡單,不需要什么效率,但是,一個良好的編程習慣還是要有的
Keil是傳統8051指令,跟STC的指令是不同的,除非你用硬件在線仿真
回復

使用道具 舉報

地板
ID:1085441 發表于 2025-4-21 18:13 | 只看該作者
現在單片機都是1T的,還有中斷等影響,我一般都是用示波器實測調整。
回復

使用道具 舉報

5#
ID:584814 發表于 2025-4-21 19:55 | 只看該作者
降低stc8h的速度至stc89c52一樣,這時你會發現又比較準了。
還有個辦法就是外接晶振,加用示波器一類的輔助調節。
回復

使用道具 舉報

6#
ID:1133081 發表于 2025-4-21 20:49 | 只看該作者

回復

使用道具 舉報

7#
ID:654797 發表于 2025-4-22 07:19 | 只看該作者
指命的延時都不一樣
回復

使用道具 舉報

8#
ID:230500 發表于 2025-4-22 08:11 | 只看該作者
阻塞延時我很少用, 一般只用幾個nop 延時;正常使用都是用定時器,   所以你這個情況沒有試過也沒有碰到過,   但是分析一下 主要是 編譯器不能識別是1T還是12T, 默認都是以12T在模擬運行, 所以54/12=4.5秒 就是正常的; 另外4.5秒與軟件設置的3秒有誤差, 這個可能就是軟件延時本身的誤差, 或者程序中還有其他的地方影響到了延時; 比如定時器等等。  可以試試注釋掉其他的所有函數,主程序就只寫個延時點燈的測試下。
回復

使用道具 舉報

9#
ID:879348 發表于 2025-4-22 13:27 | 只看該作者
ms級以上延時,開一個定時器才能準確,因為不同編譯會產生不同效果,改一點代碼又會改變
回復

使用道具 舉報

10#
ID:134430 發表于 2025-4-22 17:04 | 只看該作者
首先感謝大家的回復指點!

我又進行了測試,情況如下:
1、我的程序很簡單,只是一個電機的正反轉控制,是從一個程序中拿出來的,用了調試限位開關的位置,
因此不會有其他程序的影響。

2、我的stc-isp的8051指令集與6樓朋友的不一樣,分4個,Y1,3,5,6,  Y6對應stc8h,
奇怪的是Y3和Y5的延時程序代碼完全一樣。




3、在keil 上調試顯示分別為   sec Y1:9    Y3:54   Y5:54   Y6:72,   都不是 3。
4、下載運行實測,為  Y1:1   Y3:4.5   Y6:9  秒
5、看資料,用戶只要輸入晶振頻率數,單片機自動調整頻率,我選擇都是12
6、想上stc  官網尋求幫助


不行了,還是用stc89 或者atmel  吧。

截圖31.png (78.82 KB, 下載次數: 0)

截圖31.png
回復

使用道具 舉報

11#
ID:1034262 發表于 2025-4-22 21:13 | 只看該作者
軟仿真吧?那是12T模式的老51的時間。STC51大部分指令都1T的了。
回復

使用道具 舉報

12#
ID:401564 發表于 2025-4-23 09:19 | 只看該作者
wh8010jky 發表于 2025-4-22 17:04
首先感謝大家的回復指點!

我又進行了測試,情況如下:

為什么對仿真這么執著呢?
程序最終是要用來運行的,不是用來仿真的
設置一個u8全局變量,開啟一個定時器中斷,在中斷對這個變量進行++運算,然后在所有函數中都可以通過讀取這個變量來進行延時之類的時間操作
不推薦用上古時期的8051了,功能少,燒錄不方便,片上資源少,運行速度慢,價格又高,資料也少,出了問題找不到相關資料,這都完美的避開了STC的所有優點
回復

使用道具 舉報

13#
ID:1057978 發表于 2025-4-23 10:01 | 只看該作者
你還是用stc89吧,老老實實呆在舒適區,8h太新了,不適合你
回復

使用道具 舉報

14#
ID:134430 發表于 2025-4-23 17:43 | 只看該作者
謝謝大家!繼續學習。
回復

使用道具 舉報

15#
ID:1042619 發表于 2025-4-24 14:17 | 只看該作者
必須直接設置3000ms,不能1ms 3000次,否則會累積3000個誤差


8b0381a8b59509b5b4f04d4351c8576.jpg (62.39 KB, 下載次數: 0)

8b0381a8b59509b5b4f04d4351c8576.jpg
回復

使用道具 舉報

16#
ID:1042619 發表于 2025-4-24 14:20 | 只看該作者
89系列太古老了,建議直接用Ai8051U,USB 型 1T 8051,支持32位和8位指令集, RMB2.3,支持硬件USB下載 硬件USB仿真
管腳兼容天王級別的:  89C52RC,  12C5A60S2
要兼容 8位8051指令集,  可以用 Keil C51/IAR/SDCC 編譯器
===就相當于更強大的 8H8K64U
要兼容 32位8051指令集,可以用 Keil C251 編譯器,雙核兼容設計
===就相當于更強大的 32G12K128, 32G8K64
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz, 硬件浮點/硬件三角函數 運算器
DMA支持PWM, DMA支持外設直接到外設, P2P
120MHz-PWM支持硬件移相,16位PWM; 真12位ADC
USB, 4組串口,12位ADC, 軌到軌比較器
QSPI, SPI, I2S, I2C,  TFT-i8080/M6800 接口
PDIP40,LQFP44,LQFP44




回復

使用道具 舉報

17#
ID:292876 發表于 2025-4-24 22:35 | 只看該作者
程序中不要用delay1ms(XXX),初始化可以用倒無所謂!要么定時器開滴答做系統時間分片基準,要么定時器中做個時間基準。多任務分時執行時候,或RTOS時候,用delay1ms(XXX)都會出很多莫名其妙的問題,特別模擬SPI,I2C等通訊,要做好delay1ms(XXX)規劃,能用硬SPI,I2C等外設,最好不要用模擬,出問題不好找出問題點啦!除非你能把握每一處細節,做到入微,那么用倒無所謂。目前MCU項目都做多任務的,delay1ms(XXX)能不用盡量別用,養好習慣
回復

使用道具 舉報

18#
ID:108361 發表于 2025-4-25 10:07 | 只看該作者
ziyueboy 發表于 2025-4-24 22:35
程序中不要用delay1ms(XXX),初始化可以用倒無所謂!要么定時器開滴答做系統時間分片基準,要么定時器中做 ...

還在用89C52芯片的人,還談啥非阻塞啊,RTOS啊
回復

使用道具 舉報

19#
ID:595237 發表于 2025-4-25 12:02 | 只看該作者
晶振11.0592MHz請參考,自己調試一下

#include <intrins.h>

void Delay3000ms() {
    unsigned int i, j;
   
    for (i = 0; i < 628; i++) {       // 外層循環628次
        for (j = 0; j < 0x2A4; j++) { // 內層循環0x2A4(十進制676)次
            _nop_();                  // 每個空指令占用1個時鐘周期
        }
    }
}




// 或使用更精確的定時器方法(推薦)
void Delay3000ms() {
    TMOD &= 0xF0;    // 設置定時器模式:T1為16位定時器模式
    TMOD |= 0x10;
    TH1 = 0xDC;      // 初始化定時值(11.0592MHz下,定時50ms)
    TL1 = 0x00;
   
    ET1 = 0;         // 禁用定時器中斷
    TR1 = 1;         // 啟動定時器
   
    for (unsigned int count = 0; count < 60; count++) { // 60*50ms=3000ms
        while (!TF1);  // 等待定時器溢出
        TF1 = 0;       // 清除溢出標志
        TH1 = 0xDC;    // 重載初值
        TL1 = 0x00;
    }
   
    TR1 = 0;         // 停止定時器
}

晶振12MHz

void Delay3000ms() //@12.000MHz
{
    unsigned char i, j, k;
   
    i = 224;
    do {
        j = 200;
        do {
            k = 200;
            do {
                // 空循環,由k--操作實現
            } while (--k);
        } while (--j);
    } while (--i);
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线一区二区三区 | 一区二区国产精品 | www精品美女久久久tv | 精品国产免费人成在线观看 | 欧美精产国品一二三区 | 欧美伊人久久久久久久久影院 | 99这里只有精品 | 97精品国产97久久久久久免费 | 天天干夜夜操视频 | 午夜99| 最新毛片网站 | 精品国产精品一区二区夜夜嗨 | 一区二区三区视频播放 | 色吧久久 | 91在线精品一区二区 | 国产精品久久国产精品久久 | 亚洲精品91| 欧美综合一区 | 国产一区二区不卡 | 中文字幕在线视频免费视频 | 看真人视频一级毛片 | 欧美视频在线免费 | 91av在线免费看 | 日韩在线欧美 | 国产成人午夜电影网 | 精品国产乱码一区二区三区 | 色一情一乱一伦一区二区三区 | 在线观看www视频 | 夜夜爽99久久国产综合精品女不卡 | www.久草 | 一区二区三区四区国产 | 草逼网站| 亚洲电影一区 | 国产原创在线观看 | 男人午夜视频 | 性色av香蕉一区二区 | 日韩精品中文字幕一区二区三区 | 欧美日韩电影一区 | 中文字幕国产一区 | 日韩精品在线播放 | 色一情一乱一伦一区二区三区 |