吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機和32單片機的比較分析

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

簡介:

單片機IO口控制速度是指,在程序中對單片機的某個IO口操作,IO口需要多少時間才能真正的執行,這個數值很重要,因為在某些場合,比如刷屏,如果IO口速度夠高,就能提高屏幕的刷新速度。有些場合,比如STC89C52單片機能不能驅動WS2812,這個也是要看WS2812的IO口操作速度的。下圖為被測雙方的合影留念。兩個PCB,一個是2022年10月的作品,一個是2020年4月的作品。

圖片

1,測試對象

本文使用51單片機和32單片機進行比較。

51單片機選擇STC8H8K64U-LQFP48,使用內部IRC時鐘,主頻設定為45MHz。

32單片機選擇STM32F103VET6-LQFP100,使用外部8MHz時鐘,內部倍頻后主頻為72MHz。

2,測試方法

使用KEIL編寫代碼,程序主循環while(1)內,寫IO=1,IO=0;的翻轉程序,連續寫多個,降低while(1)執行對程序的干擾。使用示波器測量IO口的波形,測得結果后分析代碼的匯編部分,,和測得結果對比分析,得出結論。

3,51單片機測試

使用STC8H8K64U單片機,單片機初始化階段設置IO口為準雙向,進行一些必要的初始化后,單片機一直執行while1的內容,代碼如下。

圖片

測試引腳為P07引腳,代碼中連續寫了多個IO口翻轉賦值指令。大概20條指令,能讓IO口翻轉20次,周期計數為10。因為主循環是一直執行的,所以一秒內可以執行很多次。

圖片

使用STC-ISP軟件,設定本次下載需要修改硬件選項,調整IRC頻率,手動輸入數字45即可,將代碼下載進單片機。

代碼下載進單片機后,使用示波器連接單片機P07口,讀取示波器的數據。測試結果如下圖,頻率22.5MHz(頻率一直變化,選取最大值),我們看到此時的波形,不是方波,也不是正弦,接近正弦,此時應該是頻率太高導致的。不過信號頻率還是達到了主頻,也就是45M的一半。因為頻率計算,是高電平加低電平一起的倒數,所以就是主頻的一半了。

當前測試說明STC8H單片機的IO口操作速度是主頻。

圖片

4,51單片機測試分析

上述測試說明STC8單片機操作IO口的指令為但時鐘周期操作,這個也是可以通過KEIL調試驗證的,KEIL設置debug使用simulator,然后進入debug模式,就能看到匯編代碼了。

因為單片機實際執行的內容就是機器語言,基本等于匯編,我們通過觀察匯編,就能知道單片機執行了多少條指令,這個觀察C語言是看不出來的。

圖片

上圖截取的就是主循環的C代碼和匯編的混合顯示,C語言為我們實際編輯界面的內容,匯編代碼則是編譯器將C語言編譯生成的。

While1的下面是沒有匯編代碼的,while1對應的代碼是在最后一行,SJMP C:165B,這個匯編代碼就是讓CPU跳轉到0X165B的地址執行程序,也就是循環的開始位置。

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

5,32單片機測試

使用STM32F103VET6單片機進行測試,因為32單片機我使用的不多,所以測試起來比51單片機內容多不少,如果下文內容有誤,感謝指出。

32單片機有庫函數,寄存器開發,我選的一個寄存器開發的閃爍LED程序進行測試。首先就是IO口的初始化,我這里使用的PA0口進行測試,設置PA0口推挽輸出,同時為高電平

圖片

然后是主函數部分,主循環部分,我測試了3種不同的賦值方式,

圖片

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

圖片

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

圖片

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

圖片

6,32單片機測試分析

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

圖片

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

圖片

一個是B 0x080005A0,這個地址是循環結束位置的地址,

另一個是B 0x08000526,這個地址是循環開始的地址,這兩個應該是成對出現的。

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

每次IO口賦值,通用的兩個指令是

0x0800059C 2000MOVS r0,#0x00

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

第一個指令是給寄存器r0賦值,第二個指令應該是把r0寄存器的內容傳給r1對應的位置,去實現IO口操作。這里暫時就這么理解了,暫時不想去研究STM32的內容。

這兩個指令,應該都是單時鐘周期指令(由實驗結果得出)。

所以STM32單片機操作的IO口速度能達到主頻速度的一半,但是又達不到,因為每次給IO口寫數據,還需要先定位到IO口,(這個我不清楚是否可以直接操作IO口,像51單片機那樣)這個定位,也是需要時間的,一把情況下,我們可能會來回操作幾個IO口,不知道編譯器能否在操作其他IO口是,還保留r1,申請新的寄存器。因為不少程序,比如模擬SPI,是需要操作好幾個IO口的,時鐘引腳和數據引腳使用和切換的很頻繁。

目前暫定STM32單片機操作IO口速度最高為2個時鐘周期。

7,測試總結

STC8H8K64U單片機,45M主頻,IO口翻轉速度可達22.5MHz,單片機操作IO口速度為45MHz。

STM32F103VET6單片機,72M主頻,IO口翻轉速度可達18MHz,單片機操作IO口速度為36MHz。

這個頻率已經很高了,目前輸出的波形已經失真了。所以得出的結論是51操作IO口速度是和STM32相當的(在本測試條件的情況下)

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

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

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

當然了,51單片機也有主頻上百M的(某些廠家的某些型號),32單片機主頻上百M的更多。當單片機主頻足夠高的時候,他們往往是為了提高運算速度,而非IO口的操作速度。當然IO口的操作速度也會提升。

8,結語

本文好像寫了什么,又好像啥也沒寫,操作IO口最為一個基礎的指令,難道不就是一個時鐘就能完成嗎?我也是這么覺得的。但是實際測試結果,51單片機可以,32單片機不行。但是32單片機運行的頻率夠高,所以最終的速度相當。

那么就有下一個問題了,既然速度相當,為啥不少人覺得51單片機太菜呢,這里的太菜應該是指STC89C52,我也覺得他很菜,所以我也很少去用。現在的51基本都可以單時鐘周期了,不少指令的執行速度大大提升,性能比古老的51提高很多了。這也就是不少人還能接受和使用51單片機的一個原因。

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

51單片機的速度提升呢,他是在8位數據的范圍內,但實際情況,我們要操作16位數據,32位數據,去運算,這一點51單片機是不能直接運算的,是通過將這些運算轉換為8位的運算去計算的,這樣一個計算,就需要好多條指令才能完成。

如果你需要大量的計算,建議選位數多的32位單片機。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638614
  • 示波器
    +關注

    關注

    113

    文章

    6282

    瀏覽量

    185851
  • 51單片機
    +關注

    關注

    274

    文章

    5705

    瀏覽量

    124307
  • 時鐘
    +關注

    關注

    11

    文章

    1747

    瀏覽量

    131803
  • IO口
    +關注

    關注

    3

    文章

    170

    瀏覽量

    24202
收藏 人收藏

    評論

    相關推薦

    51單片機匯編語言教程_單片機延時程序分析

    51單片機匯編語言教程:5課單片機延時程序分析
    發表于 01-19 15:26 ?0次下載

    51單片機教程

    51單片機學習詳細教程,學習51單片機必備
    發表于 08-31 17:02 ?97次下載

    51單片機、AVR單片機和PIC單片機的IO口操作

    和PIC單片機IO口的操作的方法。 一.51單片機IO口的操作 51單片機IO口的結構比較簡單,
    發表于 02-20 20:25 ?1.1w次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>、AVR<b class='flag-5'>單片機</b>和PIC<b class='flag-5'>單片機</b>的IO口操作

    凌陽十六位單片機51單片機比較分析

    本文首先介紹了凌陽十六位單片機51單片機的優點,其次詳細的從硬件、性能和功能這三個方面來闡述了凌陽十六位單片機51
    發表于 04-11 11:44 ?7201次閱讀

    什么是單片機51單片機教程之單片機的詳細資料概述免費下載

    本文檔的主要內容詳細介紹的是51單片機教程之單片機的詳細資料概述免費下載主要內容包括了:一,什么是單片機二,單片機的特點及應用領域三,
    發表于 11-21 08:00 ?85次下載
    什么是<b class='flag-5'>單片機</b><b class='flag-5'>51</b><b class='flag-5'>單片機</b>教程之<b class='flag-5'>單片機</b>的詳細資料概述免費下載

    51單片機和STM32單片機有哪些區別

    大部分朋友可能都知道51單片機和stm32單片機也知道一般入門會先學習51單片機在學習stm32單片機
    發表于 08-13 17:32 ?17次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>和STM32<b class='flag-5'>單片機</b>有哪些區別

    51單片機是什么_51單片機入門自學

    51單片機是對所有兼容Intel8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flashrom技術
    發表于 09-09 15:36 ?1.1w次閱讀

    什么是51單片機?又該如何自學51單片機

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

    51單片機是什么?應該如何學習51單片機

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

    51單片機與AVR單片機

    51單片機與AVR單片機區別于不同區別于不同51單片機本身種類繁多,各種國產變種,增強型51等等
    發表于 11-11 17:36 ?18次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>與AVR<b class='flag-5'>單片機</b>

    51單片機(一)—— 51單片機簡介

    一、51單片機標識信息 通常我們所說的51單片機是指以51內核擴展出的單片機。生產
    發表于 11-11 18:06 ?245次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>(一)—— <b class='flag-5'>51</b><b class='flag-5'>單片機</b>簡介

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

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

    51單片機auxr寄存器_pic單片機51單片機,誰更易于學習?

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

    51單片機如何跳出wile循環_51單片機(九)匯編指令

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

    增強型51單片機和傳統51單片機對比分析

    前面的內容,我們從傳統的51單片機出發,從硬件的基礎上,一步步衍生出了增強型51單片機所增強的地方。現在我們可以清楚地了解,增強型51
    的頭像 發表于 01-17 14:35 ?5455次閱讀
    增強型<b class='flag-5'>51</b><b class='flag-5'>單片機</b>和傳統<b class='flag-5'>51</b><b class='flag-5'>單片機</b>對比<b class='flag-5'>分析</b>
    太阳城百家乐官网如何看路 | 百家乐官网天天乐娱乐场| 游戏厅百家乐技巧| 旅百家乐赢钱律| 免佣百家乐官网赌场优势| 真人百家乐赌城| 博彩乐百家乐官网平台| 百家乐庄闲对冲| 百家乐官网不倒翁缺点| 百家乐桌布橡胶| 百家乐官网网站加盟| 百家乐凯时娱乐场| 百家乐官网太阳城球讯网| 百家乐六亿财富| 百家乐官网赌缆注码运用| 红宝石百家乐的玩法技巧和规则 | 太阳城娱乐官方网站| 百家乐官网出千手法| 麻将二八杠技巧| 波浪百家乐官网游戏中| 大发888游戏下载官方下载| 如何打百家乐官网的玩法技巧和规则 | 百家乐官网三跳| 大发888娱乐场网页版| 赌王百家乐官网的玩法技巧和规则 | 壹贰博网址| 百家乐最常见的路子| 怎么玩百家乐官网能赢钱| 威尼斯人娱乐场棋牌| 百家乐官网路单| 顶级赌场连环夺宝| 百家乐投注必胜法| 百家乐官网技术交流群| 威尼斯人娱乐网代理注| 红9百家乐官网的玩法技巧和规则| 国际环球娱乐| 民宅24方位| 百家乐官网有没有绝| 全讯网新闻| 属兔魔羯女在哪个方位做生意| 定州市|