① keil編譯51單片機 c程序採用不同存儲器模式生成的hex文件在同一個單片機上運行的效果不一樣
你把數組unsigned char data1[][16]設成unsigned char code data1[][16]就可以了,
② 不同型號的單片機二進制指令一樣嗎
單片機的區分主要是IP核。其實就是內核。
目前有,51,PIC,ARM等。他們的內核不同,也就是指令不同。這是基於硬體電路的層次。
如果從編程角度講,匯編語句可能類似,C語句更是絕似。
③ 不同單片機的指令系統不一樣嗎
1.型號不同,但是核心一樣的話,這樣的單片機指令系統是一樣的。比如基於MCS-51核心的單片機AT89C51、AT89S52、SST89C58、W77E058、C8051F020等,都是一樣的指令系統。
但是有點例外,比如AVR核心單片機,對於AT90、Attiny和Atmega系列都有基礎的79條指令,後面隨著單片機的發展而出現擴展指令集,比如Attiny單片機為79條指令,AT90系列為118條指令、Atmega8有130條指令,而Atmega128以上的擴展為133條指令。即相同的核心,但是因為結構越來越高級而增加的指令就越多。
2.「有沒有一種不同型號單片機通用的統一指令系統,從而只需要學一種語言然後經過編譯後就可以對它們進行操作?」——這問題已經回答了,如果型號不同,但是核心相同,那指令就一樣,不用重復學習;但是核心和型號都不相同,那就沒辦法了,只有老老實實的學習。
3。C語言可以越過匯編語言的問題,但是你要注意C程序移植和編寫時仍需要注意單片機構架,比如電腦使用的C語言的printf()函數是在屏幕上顯示內容,但是在單片機中的這個函數就會是別的情況,這點是非常需要注意的。
④ 不同的單片機如(stc AT PIC) 他們的編譯器是否一樣,還是要到生產廠家要的編譯器才可以把程序編進單片機里
用VC++6.0肯定不行的,用KEILC可以,基本上所有的單片機都可以用KEILC編譯。至於下載到單片機那就不一樣了,PIC有廠家提供的MPLAB ICD,STC也有廠家提供的專用下載軟體。還有部分晶元可用通用編程器寫入晶元的。
⑤ 51單片機的編譯 從繁從簡的區別
從繁從簡對最後的編譯結果運行結果沒有影響,希望再確認下自己兩個程序表達的意思是否真的一樣。建議以後能用簡單語句表示的,就用簡單表示,不同的程序,雖然表達的意思一樣,當程序大了,最後系統運行的速度就會有大差別。
⑥ 單片機編程和"一般編程"區別
如果你是想學計算機軟體開發的話,就不要去理會什麼單片機編程了。
但如果你是想學電子產品開發(嵌入式系統開發),那麼單片機編程就是基礎了。
電腦和單片機的區別是:電腦屬於通用計算機,而單片機是嵌入式微機。
通用計算機上的C語言和匯編編寫出來的程序是在本台計算機上運行的,當然你也可以讓它在其他電腦上運行。而單片機編程就不同了,單片機編程有專門的編譯器,不同的單片機編程軟體是不同的,而不像電腦上的c++6.0、TC或其他什麼編程軟體寫出來的程序就在本台電腦上運行,單片機的編程是在電腦上編寫程序並生成可執行文件。讓後把可執行文件下載到單片機裡面,也就是說單片機編程是面向單片機的,而通用計算機編程時面向通用計算機的。這就說明了為什麼不同的單片機需要不同的編程軟體,因為編程生成的可執行代碼都需要硬體的支持,通用機的硬體是「通用的」「兼容的」,而單片機型號不同硬體就會有差別
,所以需要不同的編譯器來支持了。
你會發現單片機編程的C語言和標准C會有差別,很多單片機C語言在標准C里是不被承認的,這個也能說明單片機和電腦的區別吧。
⑦ 主流C51單片機編譯器比對
int short 的大小是因機器而異嘛(准確點應該是編譯器)。你都說了人家規定的是「最小」為16位,又不是只能是16位,也沒有說兩者應該相等(事實上是short不超過int就OK啦)。所以當然可以short類型為半個機器字長,而int類型則為一個機器字長的啦。
「C++標准規定了每個算術類型的最小存儲空間,但他並不自知編譯器使用更大的存儲空間 」
說簡單點就是C++規定了個最小的值,但是將你的代碼編譯成機器碼的編譯器則確定了你這個長度值為多少。因為C++是一種語言,一個規范,或者說只是一種規定,然後要將你按這種規范寫的代碼編譯成能在機器上運行的代碼的是編譯器。而在不同的機器上運行的程序的實際結構是不一樣的,比如單片機與PC相差就很大。要將按相同規范寫的程序在各種各樣亂七八糟的機器上運行,就需要相應的編譯器了。所以實際的大小是由你編譯代碼的編譯器確定的。
PS:當然當前一般的PC上int都是32位,short16位的。因為現在32位的機子是主流嘛。如果你不寫什麼單片機的程序可以不用太在意這個問題。但是寫單片機程序時就要注意了,因為一般一個單片機的編譯器可以編譯很多種型號晶元的代碼,而這些型號有可能從8位到32位都有……
⑧ 51單片機的程序其他單片機可以用嗎
只要是51單片機,基本上應該都可以用。但是有的程序需要做修改才能用!不是說一點不改就能用。例如18B20,或者用到定時器的。
⑨ 求助不同的單片機,編程的方式都不一樣嗎
這個要看「不同」是什麼了,如果是不同類的單片機,編程方式肯定相差很大,比如51、AVR、PIC,結構、
指令系統
都不同,編程的方式肯定不同。但在同類下的「不同」,那麼編程方式基本上差不多,比如同在51類別下的STC、AT、Winbond等。
⑩ C語言與單片機C語言的區別 急求
單片機c語言比起普通C語言增加了一些基本的指令,變數的賦值是16進制,當然單片機c語言只牽涉到普通c語言的基礎部分。具體體現在:
1、單片機中C的語法一般都對 ANSI C有些擴展,及一些特殊寫法 如C51擴展的 data xdata bit sbit 一類的,還有一些中斷程序寫法 void int() interrput 1 一類的。
2、C是一門語言,由對應平台的編譯器編譯成對應平台匯編的程序,各平台的匯編不一樣,當然編譯器也不一樣 DOS上的TC2 TC3 WINDOWS上的VC 8051的C51都有自已的編譯器 。具體區別是由編譯器決的,只能參考對應的編譯手冊,即使同種平台不同的編譯器對C的擴展也有不同。
3、單片機c語言編程是基於C語言的單片機編程。單片機的C語言採用C51編譯器(簡稱C51)。由C51產生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言PL/M51語言目標代碼混合使用。
C51本質就是C,是為在單片機上使用C而出來的,如果C不牢固,還是多掌握一點C再學C51,不過新增的知識也不少,而且基本上跟C無關。
4、C只是一種高級語言。它除具有一般高級語言的功能特性外,它可以很好的操作底層的硬體介面。在C語言的基礎上,如果你把一些單片機的埠或特殊功能寄存器加於定義,使之方便於在 寫語句的時候,直接直觀的編寫。這樣就差不多是單片機C語言。
C語言的特性差不多都可以用於單片機C語言,因為它們的編譯機理都是一樣的。
(10)不同的單片機編譯一樣嗎擴展閱讀:
C語言:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
單片機的C語言:
單片機軟體設計使用C語言作為編程開發軟體,採用模塊化的程序結構,設計了按鍵模塊程序、RFID模塊程序、日歷時鍾模塊程序、GPRS模塊程序、顯示存儲模塊程序等,並編寫系統主程序,將五個程序模塊組合在一起,實現單片機控制系統的整體功能。
51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數據類型及運算符豐富,並具有良好的程序結構,適用於各種應用的程序設計,是目前使用較廣的單片機編程語言。
單片機的C語言採用C51編譯器(簡稱C51)。有C51產生的目標代碼短,運行速度高,所需存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言或PL/M51語言目標代碼混合使用
C語言-網路
單片機C語言-網路