0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)和32單片機(jī)的比較分析

CHANBAEK ? 來(lái)源:LYQ電子工作室 ? 作者:LYQ電子工作室 ? 2023-10-31 15:20 ? 次閱讀

簡(jiǎn)介:

單片機(jī)IO口控制速度是指,在程序中對(duì)單片機(jī)的某個(gè)IO口操作,IO口需要多少時(shí)間才能真正的執(zhí)行,這個(gè)數(shù)值很重要,因?yàn)樵谀承﹫?chǎng)合,比如刷屏,如果IO口速度夠高,就能提高屏幕的刷新速度。有些場(chǎng)合,比如STC89C52單片機(jī)能不能驅(qū)動(dòng)WS2812,這個(gè)也是要看WS2812的IO口操作速度的。下圖為被測(cè)雙方的合影留念。兩個(gè)PCB,一個(gè)是2022年10月的作品,一個(gè)是2020年4月的作品。

圖片

1,測(cè)試對(duì)象

本文使用51單片機(jī)和32單片機(jī)進(jìn)行比較。

51單片機(jī)選擇STC8H8K64U-LQFP48,使用內(nèi)部IRC時(shí)鐘,主頻設(shè)定為45MHz。

32單片機(jī)選擇STM32F103VET6-LQFP100,使用外部8MHz時(shí)鐘,內(nèi)部倍頻后主頻為72MHz。

2,測(cè)試方法

使用KEIL編寫代碼,程序主循環(huán)while(1)內(nèi),寫IO=1,IO=0;的翻轉(zhuǎn)程序,連續(xù)寫多個(gè),降低while(1)執(zhí)行對(duì)程序的干擾。使用示波器測(cè)量IO口的波形,測(cè)得結(jié)果后分析代碼的匯編部分,,和測(cè)得結(jié)果對(duì)比分析,得出結(jié)論。

3,51單片機(jī)測(cè)試

使用STC8H8K64U單片機(jī),單片機(jī)初始化階段設(shè)置IO口為準(zhǔn)雙向,進(jìn)行一些必要的初始化后,單片機(jī)一直執(zhí)行while1的內(nèi)容,代碼如下。

圖片

測(cè)試引腳為P07引腳,代碼中連續(xù)寫了多個(gè)IO口翻轉(zhuǎn)賦值指令。大概20條指令,能讓IO口翻轉(zhuǎn)20次,周期計(jì)數(shù)為10。因?yàn)橹餮h(huán)是一直執(zhí)行的,所以一秒內(nèi)可以執(zhí)行很多次。

圖片

使用STC-ISP軟件,設(shè)定本次下載需要修改硬件選項(xiàng),調(diào)整IRC頻率,手動(dòng)輸入數(shù)字45即可,將代碼下載進(jìn)單片機(jī)。

代碼下載進(jìn)單片機(jī)后,使用示波器連接單片機(jī)P07口,讀取示波器的數(shù)據(jù)。測(cè)試結(jié)果如下圖,頻率22.5MHz(頻率一直變化,選取最大值),我們看到此時(shí)的波形,不是方波,也不是正弦,接近正弦,此時(shí)應(yīng)該是頻率太高導(dǎo)致的。不過(guò)信號(hào)頻率還是達(dá)到了主頻,也就是45M的一半。因?yàn)轭l率計(jì)算,是高電平加低電平一起的倒數(shù),所以就是主頻的一半了。

當(dāng)前測(cè)試說(shuō)明STC8H單片機(jī)的IO口操作速度是主頻。

圖片

4,51單片機(jī)測(cè)試分析

上述測(cè)試說(shuō)明STC8單片機(jī)操作IO口的指令為但時(shí)鐘周期操作,這個(gè)也是可以通過(guò)KEIL調(diào)試驗(yàn)證的,KEIL設(shè)置debug使用simulator,然后進(jìn)入debug模式,就能看到匯編代碼了。

因?yàn)閱纹瑱C(jī)實(shí)際執(zhí)行的內(nèi)容就是機(jī)器語(yǔ)言,基本等于匯編,我們通過(guò)觀察匯編,就能知道單片機(jī)執(zhí)行了多少條指令,這個(gè)觀察C語(yǔ)言是看不出來(lái)的。

圖片

上圖截取的就是主循環(huán)的C代碼和匯編的混合顯示,C語(yǔ)言為我們實(shí)際編輯界面的內(nèi)容,匯編代碼則是編譯器將C語(yǔ)言編譯生成的。

While1的下面是沒(méi)有匯編代碼的,while1對(duì)應(yīng)的代碼是在最后一行,SJMP C:165B,這個(gè)匯編代碼就是讓CPU跳轉(zhuǎn)到0X165B的地址執(zhí)行程序,也就是循環(huán)的開(kāi)始位置。

然后我們看到P07=0;P07=1;的C語(yǔ)言代碼,對(duì)應(yīng)的匯編代碼則是CLR P07,SETB,P07,這兩條執(zhí)行,都是單時(shí)鐘周期的指令。所以STC8H單片機(jī)IO口的操作速度和實(shí)際最高輸出速度可以達(dá)到主頻的速度。

5,32單片機(jī)測(cè)試

使用STM32F103VET6單片機(jī)進(jìn)行測(cè)試,因?yàn)?2單片機(jī)我使用的不多,所以測(cè)試起來(lái)比51單片機(jī)內(nèi)容多不少,如果下文內(nèi)容有誤,感謝指出。

32單片機(jī)有庫(kù)函數(shù),寄存器開(kāi)發(fā),我選的一個(gè)寄存器開(kāi)發(fā)的閃爍LED程序進(jìn)行測(cè)試。首先就是IO口的初始化,我這里使用的PA0口進(jìn)行測(cè)試,設(shè)置PA0口推挽輸出,同時(shí)為高電平

圖片

然后是主函數(shù)部分,主循環(huán)部分,我測(cè)試了3種不同的賦值方式,

圖片

第一種是PAout(0)=0;PAout(0)=1;示波器測(cè)得頻率為6M,那說(shuō)明32單片機(jī)使用此種方式操作IO口的速度是12M,也就是6個(gè)時(shí)鐘周期(72M/12M)

圖片

然后我又使用了初始化那里的賦值操作,GPIOA->ODR=1;GPIOA->ODR=0;這里應(yīng)該是對(duì)整個(gè)P口賦值,這個(gè)具體我沒(méi)有研究過(guò),反正是PA0口肯定實(shí)現(xiàn)了0,1變換。此時(shí)示波器測(cè)得頻率18Mhz,此時(shí)的波形和方波比較,失真了不少,快變成正弦波了。那么操作IO口的速度則是36Mhz,也就是2個(gè)時(shí)鐘周期

圖片

第三種操作方法:GPIOA->BSRR=1;GPIOA->BRR=1;這個(gè)操作方法我不熟悉,示波器測(cè)試了一下速度,12M,那么操作IO口的速度是24M,也就是3個(gè)時(shí)鐘周期。

圖片

6,32單片機(jī)測(cè)試分析

32單片機(jī)比51單片機(jī)復(fù)雜不少,操作方式也很多,上邊測(cè)試,使用了3種代碼,速度都不一樣,那這里只分析速度最快的那個(gè),也就是2個(gè)時(shí)鐘就能操作IO口的代碼。

圖片

首先看一下while1,這個(gè)while1有兩個(gè),一個(gè)是C語(yǔ)言代碼中的位置,有兩條指令。

圖片

一個(gè)是B 0x080005A0,這個(gè)地址是循環(huán)結(jié)束位置的地址,

另一個(gè)是B 0x08000526,這個(gè)地址是循環(huán)開(kāi)始的地址,這兩個(gè)應(yīng)該是成對(duì)出現(xiàn)的。

我們看一下IO口賦值部分,前6次賦值,對(duì)應(yīng)的是13條匯編指令,后邊的6次賦值,都是12條指令,多了一個(gè)LDR r1,[PC,#120];@0x080005A4,這條指令應(yīng)該是定位PA口的,之后對(duì)PA口操作,不需要再定位。這條指令執(zhí)行需要多少時(shí)鐘周期暫不清楚

每次IO口賦值,通用的兩個(gè)指令是

0x0800059C 2000MOVS r0,#0x00

0x0800059E 6008STR r0,[r1,#0x00]

第一個(gè)指令是給寄存器r0賦值,第二個(gè)指令應(yīng)該是把r0寄存器的內(nèi)容傳給r1對(duì)應(yīng)的位置,去實(shí)現(xiàn)IO口操作。這里暫時(shí)就這么理解了,暫時(shí)不想去研究STM32的內(nèi)容。

這兩個(gè)指令,應(yīng)該都是單時(shí)鐘周期指令(由實(shí)驗(yàn)結(jié)果得出)。

所以STM32單片機(jī)操作的IO口速度能達(dá)到主頻速度的一半,但是又達(dá)不到,因?yàn)槊看谓oIO口寫數(shù)據(jù),還需要先定位到IO口,(這個(gè)我不清楚是否可以直接操作IO口,像51單片機(jī)那樣)這個(gè)定位,也是需要時(shí)間的,一把情況下,我們可能會(huì)來(lái)回操作幾個(gè)IO口,不知道編譯器能否在操作其他IO口是,還保留r1,申請(qǐng)新的寄存器。因?yàn)椴簧俪绦?,比?a href="http://www.ttokpm.com/analog/" target="_blank">模擬SPI,是需要操作好幾個(gè)IO口的,時(shí)鐘引腳和數(shù)據(jù)引腳使用和切換的很頻繁。

目前暫定STM32單片機(jī)操作IO口速度最高為2個(gè)時(shí)鐘周期。

7,測(cè)試總結(jié)

STC8H8K64U單片機(jī),45M主頻,IO口翻轉(zhuǎn)速度可達(dá)22.5MHz,單片機(jī)操作IO口速度為45MHz。

STM32F103VET6單片機(jī),72M主頻,IO口翻轉(zhuǎn)速度可達(dá)18MHz,單片機(jī)操作IO口速度為36MHz。

這個(gè)頻率已經(jīng)很高了,目前輸出的波形已經(jīng)失真了。所以得出的結(jié)論是51操作IO口速度是和STM32相當(dāng)?shù)模ㄔ诒緶y(cè)試條件的情況下)

本測(cè)試條件是指:STC8H8K單片機(jī)45M頻率(基本是最高頻率),STM32F103,72M頻率,這個(gè)應(yīng)該是常用的頻率。

STC的51單片機(jī)呢,除了古老的STC89/STC90系列,基本都是單時(shí)鐘周期操作。(STC32G也是單時(shí)鐘周期)

STC89/90系列,在使用12M外置晶振的情況下,下載的時(shí)候設(shè)置雙倍速,操作IO口的速度為2M,使用更高頻率的外置晶振可以達(dá)到更高的IO口操作速度。

當(dāng)然了,51單片機(jī)也有主頻上百M(fèi)的(某些廠家的某些型號(hào)),32單片機(jī)主頻上百M(fèi)的更多。當(dāng)單片機(jī)主頻足夠高的時(shí)候,他們往往是為了提高運(yùn)算速度,而非IO口的操作速度。當(dāng)然IO口的操作速度也會(huì)提升。

8,結(jié)語(yǔ)

本文好像寫了什么,又好像啥也沒(méi)寫,操作IO口最為一個(gè)基礎(chǔ)的指令,難道不就是一個(gè)時(shí)鐘就能完成嗎?我也是這么覺(jué)得的。但是實(shí)際測(cè)試結(jié)果,51單片機(jī)可以,32單片機(jī)不行。但是32單片機(jī)運(yùn)行的頻率夠高,所以最終的速度相當(dāng)。

那么就有下一個(gè)問(wèn)題了,既然速度相當(dāng),為啥不少人覺(jué)得51單片機(jī)太菜呢,這里的太菜應(yīng)該是指STC89C52,我也覺(jué)得他很菜,所以我也很少去用?,F(xiàn)在的51基本都可以單時(shí)鐘周期了,不少指令的執(zhí)行速度大大提升,性能比古老的51提高很多了。這也就是不少人還能接受和使用51單片機(jī)的一個(gè)原因。

那既然51單片機(jī)速度可以這么快了,那為啥還比不上32單片機(jī)呢?

51單片機(jī)的速度提升呢,他是在8位數(shù)據(jù)的范圍內(nèi),但實(shí)際情況,我們要操作16位數(shù)據(jù),32位數(shù)據(jù),去運(yùn)算,這一點(diǎn)51單片機(jī)是不能直接運(yùn)算的,是通過(guò)將這些運(yùn)算轉(zhuǎn)換為8位的運(yùn)算去計(jì)算的,這樣一個(gè)計(jì)算,就需要好多條指令才能完成。

如果你需要大量的計(jì)算,建議選位數(shù)多的32位單片機(jī)。

如果你就是操作IO口完成一些內(nèi)容,不需要大量的計(jì)算,51單片機(jī)可以完成。當(dāng)然了,基于慣性原因,使用32單片機(jī)的可能還是選擇32單片機(jī)(選擇一些低價(jià),高性價(jià)比的)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628391
  • 示波器
    +關(guān)注

    關(guān)注

    113

    文章

    6104

    瀏覽量

    183395
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    272

    文章

    5689

    瀏覽量

    122167
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1673

    瀏覽量

    130959
  • IO口
    +關(guān)注

    關(guān)注

    3

    文章

    168

    瀏覽量

    23889
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    51單片機(jī)匯編語(yǔ)言教程_單片機(jī)延時(shí)程序分析

    51單片機(jī)匯編語(yǔ)言教程:5課單片機(jī)延時(shí)程序分析
    發(fā)表于 01-19 15:26 ?0次下載

    51單片機(jī)教程

    51單片機(jī)學(xué)習(xí)詳細(xì)教程,學(xué)習(xí)51單片機(jī)必備
    發(fā)表于 08-31 17:02 ?95次下載

    51單片機(jī)、AVR單片機(jī)和PIC單片機(jī)的IO口操作

    和PIC單片機(jī)IO口的操作的方法。 一.51單片機(jī)IO口的操作 51單片機(jī)IO口的結(jié)構(gòu)比較簡(jiǎn)單,
    發(fā)表于 02-20 20:25 ?1w次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>、AVR<b class='flag-5'>單片機(jī)</b>和PIC<b class='flag-5'>單片機(jī)</b>的IO口操作

    凌陽(yáng)十六位單片機(jī)51單片機(jī)比較分析

    本文首先介紹了凌陽(yáng)十六位單片機(jī)51單片機(jī)的優(yōu)點(diǎn),其次詳細(xì)的從硬件、性能和功能這三個(gè)方面來(lái)闡述了凌陽(yáng)十六位單片機(jī)51
    發(fā)表于 04-11 11:44 ?6870次閱讀

    什么是單片機(jī)51單片機(jī)教程之單片機(jī)的詳細(xì)資料概述免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)教程之單片機(jī)的詳細(xì)資料概述免費(fèi)下載主要內(nèi)容包括了:一,什么是單片機(jī)二,單片機(jī)的特點(diǎn)及應(yīng)用領(lǐng)域三,
    發(fā)表于 11-21 08:00 ?85次下載
    什么是<b class='flag-5'>單片機(jī)</b><b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>教程之<b class='flag-5'>單片機(jī)</b>的詳細(xì)資料概述免費(fèi)下載

    51單片機(jī)和STM32單片機(jī)有哪些區(qū)別

    大部分朋友可能都知道51單片機(jī)和stm32單片機(jī)也知道一般入門會(huì)先學(xué)習(xí)51單片機(jī)在學(xué)習(xí)stm32單片機(jī)
    發(fā)表于 08-13 17:32 ?17次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>和STM32<b class='flag-5'>單片機(jī)</b>有哪些區(qū)別

    51單片機(jī)是什么_51單片機(jī)入門自學(xué)

    51單片機(jī)是對(duì)所有兼容Intel8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是Intel的8004單片機(jī),后來(lái)隨著Flashrom技術(shù)
    發(fā)表于 09-09 15:36 ?1w次閱讀

    什么是51單片機(jī)?又該如何自學(xué)51單片機(jī)

    51 單片機(jī)是目前使用最多的單片機(jī)之一,那么什么是 51 單片機(jī)呢?作為新手,又該如何自學(xué) 51
    的頭像 發(fā)表于 11-03 21:14 ?6585次閱讀

    51單片機(jī)是什么?應(yīng)該如何學(xué)習(xí)51單片機(jī)

    51 單片機(jī)是目前使用最多的單片機(jī)之一,那么什么是 51 單片機(jī)呢?作為新手,又該如何自學(xué) 51
    發(fā)表于 12-23 07:57 ?73次下載

    51單片機(jī)與AVR單片機(jī)

    51單片機(jī)與AVR單片機(jī)區(qū)別于不同區(qū)別于不同51單片機(jī)本身種類繁多,各種國(guó)產(chǎn)變種,增強(qiáng)型51等等
    發(fā)表于 11-11 17:36 ?18次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>與AVR<b class='flag-5'>單片機(jī)</b>

    51單片機(jī)(一)—— 51單片機(jī)簡(jiǎn)介

    一、51單片機(jī)標(biāo)識(shí)信息 通常我們所說(shuō)的51單片機(jī)是指以51內(nèi)核擴(kuò)展出的單片機(jī)。生產(chǎn)
    發(fā)表于 11-11 18:06 ?245次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(一)—— <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>簡(jiǎn)介

    51單片機(jī)(3)-------單片機(jī)的種類

    1.51單片機(jī)發(fā)展史?Intel公司最早推出51系列單片機(jī),后將51內(nèi)核免費(fèi)開(kāi)放,由各個(gè)廠商設(shè)計(jì)兼容型的51
    發(fā)表于 11-15 12:06 ?21次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(3)-------<b class='flag-5'>單片機(jī)</b>的種類

    51單片機(jī)auxr寄存器_pic單片機(jī)51單片機(jī),誰(shuí)更易于學(xué)習(xí)?

    51 單片機(jī),二者誰(shuí)更易于學(xué)習(xí),一起來(lái)了解下吧。 一、概述51 好學(xué)一些,但是 PIC 也沒(méi)比 51 難多少。首先,PIC 比 51
    發(fā)表于 11-20 16:21 ?14次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>auxr寄存器_pic<b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>,誰(shuí)更易于學(xué)習(xí)?

    51單片機(jī)如何跳出wile循環(huán)_51單片機(jī)(九)匯編指令

    1 往期鏈接Chenglin Li:51單片機(jī)(一)Visual Basic串口通信程序Chenglin Li:51單片機(jī)(二)匯編語(yǔ)言設(shè)計(jì)流水燈Chenglin Li:
    發(fā)表于 11-22 20:21 ?73次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>如何跳出wile循環(huán)_<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(九)匯編指令

    增強(qiáng)型51單片機(jī)和傳統(tǒng)51單片機(jī)對(duì)比分析

    前面的內(nèi)容,我們從傳統(tǒng)的51單片機(jī)出發(fā),從硬件的基礎(chǔ)上,一步步衍生出了增強(qiáng)型51單片機(jī)所增強(qiáng)的地方?,F(xiàn)在我們可以清楚地了解,增強(qiáng)型51
    的頭像 發(fā)表于 01-17 14:35 ?4844次閱讀
    增強(qiáng)型<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>和傳統(tǒng)<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>對(duì)比<b class='flag-5'>分析</b>