找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 608|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STC8H1K08單片機(jī)時(shí)鐘問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65237 發(fā)表于 2025-5-20 09:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
想用STC8H1K08單片機(jī)做一個(gè)315的解碼和控制,在壇里找了一個(gè)帶學(xué)習(xí)功能,用普通51測(cè)試沒(méi)問(wèn)題,想改用STC8H1K08單片機(jī)做,發(fā)現(xiàn)解不了碼,查后發(fā)現(xiàn)時(shí)鐘不一樣,普通51是12個(gè)時(shí)鐘周期這個(gè)STC8H1K08是1個(gè)時(shí)鐘周期,壇朋們這個(gè)要怎么把STC8H1K08改有和51的一樣周期,望高手們指點(diǎn)一下
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:65237 發(fā)表于 2025-5-21 09:16 | 只看該作者
沒(méi)人用個(gè)STC的單片機(jī)嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:227818 發(fā)表于 2025-5-21 09:50 | 只看該作者
這個(gè)很簡(jiǎn)單,看你用的哪個(gè)定時(shí)器,如果是T0、T1、或T2,在AUXR中設(shè)定是12個(gè)時(shí)鐘周期或1個(gè)時(shí)鐘周期,T3或者T4,在T4T3M中設(shè)定,具體看下這個(gè)單片機(jī)的手冊(cè)。
回復(fù)

使用道具 舉報(bào)

地板
ID:72649 發(fā)表于 2025-5-21 11:58 來(lái)自觸屏版 | 只看該作者
把你的程序發(fā)上來(lái)
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2025-5-22 17:19 | 只看該作者
你在壇內(nèi)搜索的工程就那么保密么 ?
你當(dāng)大家都有你說(shuō)的代碼和硬件么 ?
不想發(fā)工程文件可以不問(wèn),畢竟這不是算命論壇玩猜猜猜
回復(fù)

使用道具 舉報(bào)

6#
ID:1110477 發(fā)表于 2025-5-23 03:31 | 只看該作者
STC的燒錄器可以修改周期,但我以前改了也沒(méi)用
回復(fù)

使用道具 舉報(bào)

7#
ID:1151360 發(fā)表于 2025-5-23 09:15 | 只看該作者
STC8H1K08是1T單片機(jī)(1個(gè)時(shí)鐘周期執(zhí)行1條指令),而傳統(tǒng)51是12T(12個(gè)時(shí)鐘周期執(zhí)行1條指令)。這導(dǎo)致原有代碼中的時(shí)序邏輯(延時(shí)、定時(shí)器)在STC8H上運(yùn)行速度快了12倍,無(wú)法正確解碼315MHz信號(hào)。  解決方案: 1. 修改定時(shí)器分頻系數(shù)(推薦) STC8H的定時(shí)器支持獨(dú)立分頻,無(wú)需降低主頻即可解決時(shí)序問(wèn)題。假設(shè)原51使用12MHz晶振,定時(shí)器配置為12分頻,移植到STC8H時(shí)需調(diào)整如下:  c // 定時(shí)器初始化示例(Timer0) void Timer0_Init(void) {     AUXR |= 0x80;       // 定時(shí)器0設(shè)置為1T模式     TMOD &= 0xF0;       // 清除定時(shí)器0模式位     TMOD |= 0x01;       // 定時(shí)器0設(shè)為模式1(16位自動(dòng)重載)     TL0 = 0x00;         // 初始化計(jì)時(shí)值     TH0 = 0x00;     ET0 = 1;            // 使能定時(shí)器0中斷     TR0 = 1;            // 啟動(dòng)定時(shí)器0     // 關(guān)鍵設(shè)置:定時(shí)器時(shí)鐘分頻(假設(shè)原51為12分頻)     T0H = (65536 - (FOSC / 12 / 1000)) >> 8;  // 舉例:1ms中斷     T0L = (65536 - (FOSC / 12 / 1000)) & 0xFF; } 2. 調(diào)整系統(tǒng)時(shí)鐘分頻 若解碼邏輯依賴全局延時(shí)(如nop循環(huán)),可降低系統(tǒng)時(shí)鐘至原51的1/12:  c // 在程序初始化時(shí)設(shè)置時(shí)鐘分頻 CLKDIV = 0x0B;          // 系統(tǒng)時(shí)鐘12分頻(主頻=外部晶振/12) 3. 修改軟件延時(shí)函數(shù) 若代碼中有基于循環(huán)的軟件延時(shí),需將延時(shí)倍數(shù)調(diào)整為12倍:  c void Delay1ms() {     unsigned int i, j;     for (i=0; i<12; i++) {  // 原循環(huán)次數(shù)乘以12         for (j=0; j<1000; j++);     } } 4. 檢查外部中斷配置 315MHz解碼通常依賴外部中斷檢測(cè)信號(hào)邊沿。確保STC8H的IO口模式配置正確(建議設(shè)置為高阻輸入):  c P1M1 |= 0x01;   // P1.0設(shè)為高阻輸入 P1M0 &= ~0x01; IT0 = 1;        // 設(shè)置INT0為下降沿觸發(fā) EX0 = 1;        // 使能INT0中斷 EA = 1;         // 全局中斷使能
回復(fù)

使用道具 舉報(bào)

8#
ID:1151360 發(fā)表于 2025-5-23 09:16 | 只看該作者
STC8H1K08是1T單片機(jī)(1個(gè)時(shí)鐘周期執(zhí)行1條指令),而傳統(tǒng)51是12T(12個(gè)時(shí)鐘周期執(zhí)行1條指令)。這導(dǎo)致原有代碼中的時(shí)序邏輯(延時(shí)、定時(shí)器)在STC8H上運(yùn)行速度快了12倍,無(wú)法正確解碼315MHz信號(hào)。

解決方案:
1. 修改定時(shí)器分頻系數(shù)(推薦)
STC8H的定時(shí)器支持獨(dú)立分頻,無(wú)需降低主頻即可解決時(shí)序問(wèn)題。假設(shè)原51使用12MHz晶振,定時(shí)器配置為12分頻,移植到STC8H時(shí)需調(diào)整如下:
// 定時(shí)器初始化示例(Timer0)
void Timer0_Init(void) {
    AUXR |= 0x80;       // 定時(shí)器0設(shè)置為1T模式
    TMOD &= 0xF0;       // 清除定時(shí)器0模式位
    TMOD |= 0x01;       // 定時(shí)器0設(shè)為模式1(16位自動(dòng)重載)
    TL0 = 0x00;         // 初始化計(jì)時(shí)值
    TH0 = 0x00;
    ET0 = 1;            // 使能定時(shí)器0中斷
    TR0 = 1;            // 啟動(dòng)定時(shí)器0
    // 關(guān)鍵設(shè)置:定時(shí)器時(shí)鐘分頻(假設(shè)原51為12分頻)
    T0H = (65536 - (FOSC / 12 / 1000)) >> 8;  // 舉例:1ms中斷
    T0L = (65536 - (FOSC / 12 / 1000)) & 0xFF;
}
2. 調(diào)整系統(tǒng)時(shí)鐘分頻
若解碼邏輯依賴全局延時(shí)(如nop循環(huán)),可降低系統(tǒng)時(shí)鐘至原51的1/12:
// 在程序初始化時(shí)設(shè)置時(shí)鐘分頻
CLKDIV = 0x0B;          // 系統(tǒng)時(shí)鐘12分頻(主頻=外部晶振/12)
3. 修改軟件延時(shí)函數(shù)
若代碼中有基于循環(huán)的軟件延時(shí),需將延時(shí)倍數(shù)調(diào)整為12倍:
void Delay1ms() {
    unsigned int i, j;
    for (i=0; i<12; i++) {  // 原循環(huán)次數(shù)乘以12
        for (j=0; j<1000; j++);
    }
}
4. 檢查外部中斷配置
315MHz解碼通常依賴外部中斷檢測(cè)信號(hào)邊沿。確保STC8H的IO口模式配置正確(建議設(shè)置為高阻輸入):
P1M1 |= 0x01;   // P1.0設(shè)為高阻輸入
P1M0 &= ~0x01;
IT0 = 1;        // 設(shè)置INT0為下降沿觸發(fā)
EX0 = 1;        // 使能INT0中斷
EA = 1;         // 全局中斷使能
回復(fù)

使用道具 舉報(bào)

9#
ID:1121978 發(fā)表于 2025-5-23 10:52 | 只看該作者
你這個(gè)問(wèn)題挺關(guān)鍵的——主要是時(shí)鐘周期不同導(dǎo)致的解碼不兼容。STC8H1K08的內(nèi)部時(shí)鐘周期通常是按照1個(gè)系統(tǒng)時(shí)鐘的,而普通51(如8051)可能用的是12個(gè)時(shí)鐘周期一個(gè)指令周期。  關(guān)鍵點(diǎn):  8051/51芯片: 一個(gè)指令周期一般是12個(gè)機(jī)器時(shí)鐘(晶振),即每個(gè)指令執(zhí)行時(shí)間為12個(gè)晶振周期。 STC8H1K08: 通常一個(gè)指令周期就是一個(gè)晶振頻率(1個(gè)晶振周期)。 解決方案:  調(diào)整你的晶振頻率: 讓STC8H1K08的晶振頻率與舊的51芯片相匹配(如果原本定義的時(shí)鐘周期是基于12個(gè)晶振周期的邏輯),這樣你在程序中計(jì)時(shí)時(shí)可以復(fù)用之前的算法。  軟件模擬延時(shí):  如果你不能修改晶振,可以在程序里加入延時(shí),用軟件延時(shí)等效于原先12個(gè)時(shí)鐘周期的時(shí)間。這在解碼等時(shí)序性很強(qiáng)的應(yīng)用中常用。 使用FOSC指令或配置:  在STC芯片的配置(如FOSC)里調(diào)節(jié)時(shí)鐘源,讓其以接近12個(gè)晶振周期的方式運(yùn)行(比如調(diào)節(jié)晶振頻率),符合之前的邏輯。 程序適配:  如果解碼算法依賴于時(shí)間,你需要在代碼中調(diào)整計(jì)時(shí)器的預(yù)分頻,使它計(jì)得與舊51芯片的時(shí)鐘節(jié)奏一樣。 總結(jié): 最簡(jiǎn)單的辦法就是調(diào)整晶振頻率讓用戶的代碼能在類似的時(shí)間尺度下工作。如果硬件限制,試試在程序中加上適當(dāng)?shù)难訒r(shí)或調(diào)整預(yù)分頻器。  你也可以提供更詳細(xì)的配置和代碼片段,我?guī)湍憔唧w看看該怎么調(diào)整!
回復(fù)

使用道具 舉報(bào)

10#
ID:1034262 發(fā)表于 2025-5-23 16:08 | 只看該作者
你解碼的方法是什么?你的解碼時(shí)序是什么?
沒(méi)有基本信息,我們不是神仙,猜不到的。
回復(fù)

使用道具 舉報(bào)

11#
ID:401564 發(fā)表于 2025-5-26 09:29 | 只看該作者
你說(shuō)的這兩個(gè)單片機(jī)有兩點(diǎn)不同,一個(gè)是時(shí)鐘,另一個(gè)是端口的初始化,STC8H1K08默認(rèn)的端口模式與STC89系列是不一樣的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表