STC8H 相較與STC15 STC8A/G 程式設計的注意點

FBshark發表於2024-10-11

推薦看論壇《STC8H8K64U與STC8A8K64D4與STC15W4K48S4的一些區別》

連結:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5709
(出處: 國芯技術交流網站)

主要的不同點

IO 口:預設為高阻輸入態,和原來預設的雙向IO不同,需要注意初始化配置。

復位引腳:STC8H 復位引腳低電平時為復位狀態,與STC15、STC8A、STC8G等微控制器不同。

ADC(單獨相較於STC15):新增加了兩個暫存器 ADC_CFG,ADC_TIM. 原來STC15 ADC的配置暫存器 ADC_CONTR, CLK_DIV 的一些位放在了 ADC_CFG暫存器.

STC8H 相較與STC15 STC8A/G 程式設計的注意點

ADC這裡STC15W的區別可就太大了,大跨步的大。

STC8H 相較與STC15 STC8A/G 程式設計的注意點

圖 STC15的ADC相關暫存器

STC15W 是10位精度8個通道加一個內部通道的ADC;而STC8AD4與STC8H均是12位精度15個通道加一個內部通道的ADC

在對ADC的操作上也有很大區別,所以再寫這部分程式碼的時候,就分開寫的兩邊不再混用。

STC15W微控制器的ADC在配置時還需要配置一個P1口模擬功能控制暫存器,在配置時需要置位對應通道的P1ASF位。不僅如此ADC轉換結果調整暫存器位還塞到了CLK_DIV暫存器裡,在使用的時候需要注意一下賦值方式.千萬別一不小心把這個暫存器的其他位置的資料給改了..

STC8H 相較與STC15 STC8A/G 程式設計的注意點

圖 STC8H的ADC相關暫存器

到了STC8AD4與STC8H的時候就沒有那麼多的事兒了,只需要配置正確的IO工作模式就可以。其次,ADC功能相關的暫存器也沒有東塞一個西塞一個了。而且,還可以使用PWM觸發ADC的採集。再而且增加了ADC的時序控制和硬體自動求平均的功能。實際體驗自動求平均確實再一定程度上抑制了ADC結果的波動。這東西有就用上..

而對於相同功能的暫存器位在不同微控制器上的位置不同的問題,直接使用宏定義替換掉就OK了。實際上在程式碼開發的時候也推薦使用宏定義的方式替換掉魔法數字。

EEPROM:

STC8H 相較與STC15 STC8A/G 程式設計的注意點

其他不同點:

定時器

第五部分,定時器。
STC8H 相較與STC15 STC8A/G 程式設計的注意點

圖 STC15 定時器相關的暫存器

從STC15W開始到STC8H T0 與 T1定時器使用上完全一樣,應該是從8051傳下來的傳統。

STC8H 相較與STC15 STC8A/G 程式設計的注意點

圖 STC8H 定時器相關的暫存器

而到了T2 T3 T4這裡出現了區別。最大的區別,在STC8系列微控制器上,這裡增加了8位預分頻,這樣就可以用定時器定更長的時間,從而減少微控制器進入中斷的次數。而之前的STC15W微控制器沒有這個預分頻暫存器,如果想要定更長的時間就需要使用軟體變數累加計數的方式來定時需求的時間。
其次就是定時器中斷標誌在STC8系列上可以軟體讀取,清除。但實際使用中這些標誌是在中斷服務函式中,由硬體自動清除。程式碼上完全不用處理。

(PS:由於定時器1 2 3 4都有可能要作為串列埠1 2 3 4的波特率發生器,所以自己在寫程式碼的時候為了更好的程式碼可移植性和易維護性,都是儘量避免使用定時器1 2 3 4來定時。選擇其他的可以用來作為定時器功能的外設。例如:STC15W和STC8AD4上的PCA,STC8H上的PWM(還是16位的哦!),當然這個是和我自身工作的需求相關。)

參考文章:

STC8H8K64U與STC8A8K64D4與STC15W4K48S4的一些區別
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5709
(出處: 國芯技術交流網站)

相關文章