導航:首頁 > 源碼編譯 > keil編譯器選擇外部供電

keil編譯器選擇外部供電

發布時間:2022-12-29 10:05:27

『壹』 單片機Keil問題

先回答你第一個問題:
DATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
第一條是將A中的內容放入R0所指的地址中,如果R0的數值比較大的話,用單步運行就需要很長時間。有個方法可以解決,即在KEIL調試時,修改R0里的數值,將它變成1或者01H,就可以出循環了。

第二個問題:
你的程序是實現P1循環→P3循環→P2循環→P0循環,然後又返回P1循環,連續往復。
你的程序,我用軟體調試了,邏輯上沒問題,能實現。
不過建議你用移位指令來完成。這樣更簡單。

回答完畢,謝謝。

『貳』 Keil C51下如何讓編譯器優先使用片內RAM

C51內存結構深度剖析
在編寫應用程序時,定義一個變數,一個數組,或是說一個固定表格,到底存儲在什麼地方;當定義變數大小超過MCU的內存范圍時怎麼辦;如何控制變數定義不超過存儲范圍;以及如何定義變數才能使得變數訪問速度最快,寫出的程序運行效率最高。以下將一一解答。

1 六類關鍵字(六類存儲類型)
data idata xdata pdata code bdata

code: code memory (程序存儲器也即只讀存儲器)用來保存常量或是程序。code memory 採用16位地址線編碼,可以是在片內,或是片外,大小被限制在64KB
作用:定義常量,如八段數碼表或是編程使用的常,在定義時加上code 或明確指明定義的常量保存到code memory(只讀)
使用方法:
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
此關鍵字的使用方法等同於const

data data memory (數據存儲區)只能用於聲明變數,不能用來聲明函數,該區域位於片內,採用8位地址線編碼,具有最快的存儲速度,但是數量被限制在128byte或更少。
使用方法:
unsigned char data fast_variable=0;

idata idata memory(數據存儲區)只能用於聲明變數,不能用來聲明函數. 該區域位於片內,採用8位地址線編碼,內存大小被限制在256byte或更少。該區域的低地址區與data memory地址一致;高地址區域是52系列在51系列基礎上擴展的並與特殊功能寄存器具有相同地址編碼的區域。即:data memory是idata memory的一個子集。

xdata xdata memory 只能用於聲明變數,不能用來聲明函數,該區域位於MCU
外部,採用16位地址線進行編碼,存儲大小被限制在64KB以內。
使用方法:
unsigned char xdata count=0;

pdata pdata memory 只能用於聲明變數,不能用來聲明函數,該區域位於MCU外部,採用8位地址線進行編碼。存儲大小限制在256byte. 是xdata memory的低256byte。為其子集。
使用方法
unsigned char pdata count=0;

bdata bdata memory 只能用於聲明變數,不能用來聲明函數。該區域位於8051內部位數據地址。定義的量保存在內部位地址空間,可用位指令直接讀寫。
使用方法:
unsigned char bdata varab=0

註:有些資料講,定義字元型變數時,在預設unsigned 時,字元型變數,默認為無符號,與標准C不同,但我在Keil uVision3中測試的時候發現並非如此。在預設的情況下默認為有符號。或許在以前的編譯器是默認為無符號。所以看到有的資料上面這樣講的時候,要注意一下,不同的編譯器或許不同。所以我們在寫程序的時候,還是乖乖的把unsigned signed 加上,咱也別偷這個懶。
2函數的參數和局部變數的存儲模式
C51 編譯器允許採用三種存儲器模式:SMALL,COMPACT 和LARGE。一個函數的存儲器模式確定了函數的參數的局部變數在內存中的地址空間。處於SMALL模式下的函數參數和局部變數位於8051單片機內部RAM中,處於COMPACT和LARGE模式下的函數參數和局部變數則使用單片機外部RAM。在定義一個函數時可以明確指定該函數的存儲器模式。方法是在形參表列的後面加上一存儲模式。

示例如下:
#pragma large //此預編譯必須放在所有頭文前面
int func0(char x,y) small;
char func1(int x) large;
int func2(char x);
註:
上面例子在第一行用了一個預編譯命令#pragma 它的意思是告訴c51編譯器在對程序進行編譯時,按該預編譯命令後面給出的編譯控制指令LARGE進行編譯,即本常式序編譯時的默認存儲模式為LARGE.隨後定義了三個函數,第一個定義為SMALL存儲模式,第二個函數定義為LARGE第三個函數未指定,在用C51進行編譯時,只有最後一個函數按LARGE存儲器模式處理,其它則分別按它們各自指定的存儲器模式處理。
本例說明,C51編譯器允許採用所謂的存儲器混合模式,即允許在一個程序中將一些函數使用一種存儲模式,而其它一些則按另一種存儲器模式,採用存儲器混合模式編程,可以充分利用8051系列單片機中有限的存儲器空間,同時還可以加快程序的執行速度。

3絕對地址訪問 absacc.h(相當重要)

#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
功能:CBYTE 定址 CODE區
DBYTE 定址 DATA區
PBYTE 定址 XDATA(低256)區
XBYTE 定址 XDATA區
例: 如下指令在對外部存儲器區域訪問地址0x1000
xvar=XBYTE[0x1000];
XBYTE[0x1000]=20;

#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)

功能:與前面的一個宏相似,只是它們指定的數據類型為unsigned int .。
通過靈活運用不同的數據類型,所有的8051地址空間都是可以進行訪問。

DWORD[0x0004]=0x12F8;
即內部數據存儲器中(0x08)=0x12; (0x09)=0xF8

註:用以上八個函數,可以完成對單片機內部任意ROM和RAM進行訪問,非常方便。還有一種方法,那就是用指鍾,後面會對C51的指針有詳細的介紹。

4寄存器變數(register)
為了提高程序的執行效率,C語言允許將一些頻率最高的那些變數,定義為能夠直接使用硬體寄存器的所謂的寄存器變數。定義一個變數時,在變數類型名前冠以「register」 即將該變數定義成為了寄存器變數。寄存器變數可以認為是一自動變數的一種。有效作用范圍也自動變數相同。由於計算機寄存器中寄存器是有限的。不能將所有變數都定義成為寄存器變數,通常在程序中定義寄存器變數時,只是給編譯器一個建議,該變數是否真正成為寄存器變數,要由編譯器根據實際情況來確定。另一方面,C51編譯器能夠識別程序中使用頻率最高的變數,在可能的情況下,即使程序中並未將該變數定義為寄存器變數,編譯器也會自動將其作為寄存器變數處理。被定義的變數是否真正能成為寄存器變數,最終是由編譯器決定的。

5內存訪問雜談
1指鍾
指鍾本身是一個變數,其中存放的內容是變數的地址,也即特定的數據。8051的地址是16位的,所以指針變數本身佔用兩個存儲單元。指針的說明與變數的說明類似,僅在指針名前加上「*」即可。
如 int *int_point; 聲明一個整型指針
char *char_point; 聲明一個字元型指針
利用指針可以間接存取變數。實現這一點要用到兩個特殊運算符
& 取變數地址
* 取指針指向單元的數據

示例一:
int a,b;
int *int_point; //定義一個指向整型變數的指針
a=15;
int_point=&a; //int_point指向 a
*int_point=5; //給int_point指向的變數a 賦值5 等同於a=5;
示例二:
char i,table[6],*char_point;
char_point=table;
for(i=0;i<6;i++)
{
char_point=i;
char_point++;
}
註:
指針可以進行運算,它可以與整數進行加減運算(移動指針)。但要注意,移動指針後,其地址的增減量是隨指針類型而異的,如,浮點指針進行自增後,其內部將在原有的基礎上加4,而字元指針當進生自增的時候,其內容將加1。原因是浮點數,佔4個內存單元,而字元佔一個位元組。

宏晶科技最新一代STC12C5A360S2系列,每一個單片機出廠時都有全球唯一身份證號碼(ID號),用戶可以在單片機上電後讀取內部RAM單元F1H~F7H的數值,來獲取此單片機的唯一身份證號碼。使用MOV @Ri 指令來讀取。下面介紹C51 獲取方法:
char id[7]={0};
char i;
char idata *point;
for(i=0;i<7;i++)
{
id[i]=*point;
point++;
}

(此處只是對指針做一個小的介紹,達到訪問內部任何空間的方式,後述有對指針使用的詳細介紹)
2對SFR,RAM ,ROM的直接存取
C51提供了一組可以直接對其操作的擴展函數
若源程序中,用#include包含頭文件,io51.h 後,就可以在擴展函數中使用特殊功能寄存器的地址名,以增強程序的可讀性:

注 此方法對SFR,RAM,ROM的直接存取不建議使用.因為,淡io51.h這個頭文件在KEIL中無法打開,可用指針,或是採用absacc.h頭文件,

『叄』 keil顯示文件被外部編譯器改變是怎麼回事

那時因為你的文件在keil項目保存後,通過其他方式(如記事本、UE、sourcesight等其他編輯器打開)編輯後保存了後,然後在keil再次打開這個工程中的文件時,就會有這樣的提示,你可以選擇載入先前的文件(即就是你keil工程最好保存是的文件),也可以選擇載入現有文件(指你在通過其他編輯器修改保存後的文件)
我對keil 比較熟悉,呵呵

『肆』 keil如何快速找到代碼

高級查找
步驟一:首先工程編譯選項中要選擇如圖一:【Browse Infomation】選項,即瀏覽信息。

全編譯工程至沒有錯誤,這一點很重要,如果有嚴重的錯誤,則可能沒有編譯完,即一般的查找可能不會查到整個工程文件的內容,選成搜索的信息不全或是沒有。



圖一:設置編譯選項

步驟二:如圖二,雙擊需要查找的內容選中後,點擊右鍵,選擇查找項:

這里為簡單的查找方式,方便與快速。可以查找到相關的定義及調用情況,在哪個文件里。這里必須是全編譯通過的工程源碼

圖二:選中並右鍵查找。

步驟三:如圖三,部分匯編函數的變數或是函數名無法找到。有時查不到,怎麼辦呢?繼續以下的方法。

圖三:簡單的查找沒有找到相關項。

步驟四:如圖四,選中後,通過Edit->Find in files..高級查找功能。這里要點就是設置搜索篩選的條件及文件范圍,如是否精確查找或是只要部分包含等選項。

圖四:打開高級查找功能:工程文件內容搜索。

步驟五:設置文件搜索的選項,尤其是工程文件夾,默認有可能不是整個工程文件夾。這里點擊瀏覽選擇整個工程文件。

圖五:設置搜索選項。

步驟六:保證搜索文件范圍為整個工程文件主目錄。選擇後,即可進行搜索了查找了。

圖六:選擇文件主目錄。

步驟七:點擊查找後,查看搜索到的信息。查看搜索到的結果,有可能很多,可以重新查找並修改查找選項等。

圖七:文件搜索到的信息。

步驟八:雙擊並定位查看指定的搜索信息。雙擊即可定位並查看查找的結果。

圖八:定位並查看指定的搜索信息。

有時需要對工程源碼進行從頭到尾的學習與消化,因此,查找功能還是比較有用的。從而讓變數定義或是函數定義等無處藏身。雖然步驟很多,其實很簡單。

最重要的,學習在於積累,有些技術的東西,就要多動手,然後再舉一返三,熟能生巧。

張世爭

微信公眾號

嵌入式開發技術經驗分享
打開CSDN,閱讀體驗更佳

keil c51 關鍵字_行知zzz的博客_c51擴展關鍵字
keil c51 關鍵字 一:KeilCx51擴展的關鍵字: •at•alien •bdata •bit •code •compac •data •far •idata •interrupt •large •pdata •priority•reentrant...
繼續訪問
KeilC51基本關鍵字_dylan_zhouhailiang的博客_c51關鍵字
KeilC51基本關鍵字 一、由ANSI標準定義的共32個: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof ...
繼續訪問
keil編輯環境下_「搜索」功能窗口中_Bookmark All命令的便捷之處
在keil編輯環境下,有時候調用一個函數,這個函數有執行的前提條件,比如要執行函數體內容得滿足:if (cmdArrived) 條件; 可是變數:cmdArrived在哪裡定義的? 在哪個函數里變數:cmdArrived滿足條件,要怎麼找比較快呢。 ctrl + F 打開搜索框,輸入「cmdArrived」,再點擊「Bookmark All」命令,所有的「cmdArrived」調用行全部使用了書簽,這樣就比較好著了; keil編輯環境工具欄搜索框輸入cmdArrived,點擊右邊搜索命令,再點擊「Book
繼續訪問
Keil 查找功能的使用
keil中如何查找和替換以及一個工程里所有文件所包含查找和替換的內容: 1、點擊 edit-find或者快捷鍵 ctrl+f; 2、在look in中 選擇current document就是查找或替換本文件的內容, 選擇current project就是查找或替換整個工程的包含的內容 ...
繼續訪問

MDK keiluvision Volatile關鍵字的用法_點點墨的博客
MDK keiluvision Volatile關鍵字的用法 在定義變數時,變數前面加volatile修飾,作用是防止相關變數被優化。 例如對外部寄存器的讀寫。對有些外部設備的寄存器來說,讀寫操作可能都會引發一定硬體操作,但是如果不加volatile,編譯器會把這些...
繼續訪問
Keil中的code關鍵字_weixin_30823001的博客
Keil中的code關鍵字 一般說來,我們在C語言中定義的每一個變數初始化後都會佔用一定的內存(RAM)空間。但是在keil中提供了一個特殊的關鍵字「code」,這個關鍵字在標准C中是沒有的。其語法舉例如下:...
繼續訪問
keil C51 中的庫函數
非常有用的keil c51 庫函數文檔,受益匪淺,
Keil C51 V9.00/uVision 4基礎
<br /> <br />Keil C51 V9.00 即09年發布的最新版本uVision 4,版本外觀改變比較大<br />可以使用以前的注冊文件<br />如果全新安裝,在VISTA或者WIN 7系統下,請使用管理員方式運行,然後注冊即可無限制運行<br />注冊方法:<br /> 1. 安裝Keil C51 V9.00版本,即uV4<br /> 2. 打開uVision4,點擊File---License Management...,打開License Management窗口,復制右上
繼續訪問
解決Keil 搜索關鍵字時不能跳轉到所在位置的問題
問題:KEIL搜索結果不能跳轉的問題分析過程:最近遇到一個問題:在keil5.1中ctrl+shift+s全局搜索,雙擊搜索結果後無法跳轉。重裝軟體,換版本,修復電腦我都試了,都沒用。最後發現,原先的程序可以跳轉,而後來修改的不行。相同的工程在相同的目錄下為什麼一個可以一個不行呢?發現唯一的區別就是兩個工程文件夾名稱不同,由於修改過的版本我在工程文件名附加了 「(0922)」,我把括弧去掉後就可以...
繼續訪問
keil5尋找自定義函數的位置
keil中想快速的找到自定義函數的位置,如下所示: 想找到CAN定義的函數位置: 第一步:先對程序進行build(第一步非常重要,如果不build,就不能用後面的快捷鍵與go to!!!) 第二步:可以游標放到函數的位置右擊,然後點擊go to definition…或者按F12 ...
繼續訪問

KEIL5 全局搜索關鍵字功能用不了的解決辦法(CTRL+F)
CTRL+F跳出搜索界面 點擊Find in Files 項目卡,選擇Current Project即可。
繼續訪問

STM32F4工程--KEIL--搜索關鍵字
STM32F4工程--KEIL--搜索關鍵字 在.C文件或.H文件中搜索一個關鍵字 方法: ctrl+F 輸入關鍵字即可查詢 (問題解決,如果對大佬您有幫助的話,給小丁個贊唄,謝謝大佬)
繼續訪問
最新發布 如何通過KEIL查看所定義函數入口在內存的地址
如何通過KEIL查看所定義函數入口在內存的地址
繼續訪問

Keil軟體開啟「查找變數定義」功能方法
在使用Keil軟體編寫程序時,有可能將程序的變數定義和使用放在了不同的位置, 有時候想要查看變數的定義,可以使用Keil軟體的查找功能。 1、使用Find功能一個個查找變數,在Keil界面輸入 Ctrl+F,彈出查找界面。 將要查找的內容輸入[Find what]查找框,[Look in]框選擇"Current Document",然後點擊"Find Next"就可以在當前文件一...
繼續訪問

Keil使用技巧及常見問題
文章目錄Keil的使用快捷鍵Keil中使用Ctrl+Shift+F:在多個文件中搜索變數/函數(Find in files) Keil的使用快捷鍵 Keil中使用Ctrl+Shift+F:在多個文件中搜索變數/函數(Find in files) 搜索條件 說明 Find what 輸入要搜索的關鍵字 指定要搜索的文件類型 指定要搜索的文件夾/工程 搜索屬性...
繼續訪問
keil的主要功能和作用_keil進階教程
前言keil只懂得創建軟體工程是遠遠不夠的,如果要想順心使用,應該要懂得部分配置,這樣使用心情順暢,碼代碼也會越發高效。設置字型大小字體點擊編輯菜單,會出現很多子目錄,找到配置,點擊進入設置頁面。看到上方的子欄目,去選擇colors,進入新界面,單片機用C語言編寫·,那就點擊編輯c文件,右邊會出現字型大小,字體,字色設置,按照個人需求自行設置。改正錯誤有時候各種因素會出現編程錯誤,但自行又找不到錯誤在何處...
繼續訪問

KEIL5全局搜索,在find in files框內雙擊搜索內容,不能跳到相應位置
文件名包含了()括弧,去掉就可以了。
繼續訪問
熱門推薦 keil編程關鍵字沒有彩色,找不到Keyword和 C++files解決辦法
打開顏色設置,如果沒有C/C++ Editor files 你就無法修改你的代碼界面關鍵字顏色。 這種情況,很有可能是你的Keil安裝目錄下含有中文路徑(一般國外專業軟體我都放在D盤第一目錄下的新建英文文件夾(Softwares)中,養成文件夾存放的好習慣,日後無論是安裝還是找路徑都會方便許多。),將你的Keil安裝文件整個拖到英文目錄下,或者修改目錄名為英文。 接下來重啟軟體,就可以設置關鍵字了。 注意:修改前關閉keil,如果文件名無法修改,說明當前有文件里的東西正在運行。需關閉」修改目錄「所在文件里的
繼續訪問

Keil代碼整體偏移和查找功能
選中要偏移的代碼,然後按TAB鍵,所有被選中的代碼就會向後偏移TAB,TAB等於多少個空格,可以在「Edit」-「Editor」-「C/C++ Files」下面設置。 如果要返回,則選中目標代碼,按Shift+TAB就行了。 Keil的查找功能
繼續訪問
Keil如何查看函數或變數調用---非Ctrl F
今天公司新人問我,Keil這個編譯器怎麼查看一個函數都在哪裡被調用?我脫口而出 辣雞軟體只能用Ctrl F慢慢找。。要麼你就先用SourceInsight編輯代碼,改好了再去編譯吧。 好好的編譯器怎麼會沒有這個最基本的功能呀?? 想著這個問題,於是就有了今天的意外之喜。 操作方法如下: 在View中調出SourceBrowser這個窗口,將需要查找定義及調用位置的 函數、變數、宏等復制到Symbol處,回車 你就可以看到Definitions&References了,雙擊可以跳轉到對應的代碼位置。這
繼續訪問

keil查找函數引用的方法
1.快捷鍵ctrl+f 2在Find in Files中填要找的,Find all. 3.ojbk
繼續訪問
如何在KEIL裡面搜索一個函數名或者字元串
使用Ctrl + F 會出現如下彈窗,這個就是一個搜索窗口。 這個彈窗的搜索內容會和你之前選中的字元串一樣,同時可以選擇在一個文件下找,也可以選擇查找那個文件含有這個字元串 查找含有某一個字元串的文件 ...
繼續訪問

實驗一 單片機 繪制原理圖
實驗一 2.2繪制原理圖 1.首先在開始菜單欄裡面輸入「ISIS」打開軟體; 2.1)單擊元器件列表窗口上邊的按鈕P,彈出圖2.1所示元器件選擇窗口; 圖2.1 2)在該窗口左上方的關鍵字文本框內輸入8051,在窗口右上方的欄中將顯示出80C51圖形符號,同時顯示該器件的虛擬模擬模型VSM DLL model(MCS8051.DLL)如圖2.2; 圖2.2 3) 用滑鼠從器件選擇窗口中選中需要的器件,單機確定按鈕後,選擇的器件將出現在預覽窗口中如圖2.3; 圖2.3 4)將滑鼠指向編輯窗口並單
繼續訪問

keil查找關鍵字
Keil

『伍』 如何讓KEIL和PROTEUS聯調連接

一、工具/原料

windowsXP

PROTEUS

生成的HEX文件

二、方法/步驟

1、PROTEUS安裝好後,默認不會在桌面上產生快捷方式。先打開開始菜單,依次點擊「程序、Proteus 7 Professional、ISIS 7 Professional」打開PROTEUS

三、注意事項

HEX文件生成需要用編譯器,比如常用的KEIL

『陸』 keil c 編譯器的問題

進入編輯界面後,點EDIT--CONFIGUATION,出現配置對話框,再選COLORS&FONTS,看來你是用C語言的,在WINDOWS選框中就點第二項(EIDTOR C FILES),在元素ELENENTS選框中點KEYWORD,最右邊有一個COLORS選項,點擊下面FOREGROUND下面的顏色,自己選擇喜歡的顏色,OK。再用左鍵點一下編輯界面,以前關鍵字是黑色的,現在就會變成你設置的顏色了。

『柒』 keil c51編寫程序的問題,

看到你的提問沒有人回答,我看不過去這個問題以前都有人提問過了,這個問題不是編譯器設置問題,可能是你系統軟體沖突引起的,你仔細分析一下你電腦, keil編譯器是不是一開始裝上去,就是這個問題,編譯代碼後底部帶有下劃線,如果是可能是編譯器問題,如果不是自從電腦裝了某個軟體引起的,建議把某軟體卸載掉看看,是不是還是這個問題,如果編譯器問題,我發我做51開發用地keil4編譯器,希望我的回答對你有幫助!

『捌』 proteus模擬過程畫原理圖,載入程序,然後模擬那程序是HEX文件還是keil文件怎樣設置供電電壓謝謝

先畫原理圖,再載入HEX文件,再點界面左下方的模擬按鈕就可以模擬了。
設置供電電源,可以選左邊的工具欄的Terminals Mode選項,選POWER,模擬電源,再雙擊電源,就可以設置電壓值了。

閱讀全文

與keil編譯器選擇外部供電相關的資料

熱點內容
現代鋼琴教程pdf 瀏覽:25
客戶端框架源碼 瀏覽:210
python自動辦公能幹嘛 瀏覽:873
程序員追愛 瀏覽:252
程序員邏輯故事 瀏覽:768
加密icsot23i2c 瀏覽:713
你們有什麼好的解壓軟體 瀏覽:607
常州空氣壓縮機廠家 瀏覽:241
安卓如何關閉app內彈出的更新提示 瀏覽:409
e4a寫的app怎麼裝蘋果手機 瀏覽:201
海立壓縮機海信系 瀏覽:210
社保如何在app上合並 瀏覽:220
小米加密照片後綴 瀏覽:236
我的世界網易手機怎麼創伺服器 瀏覽:978
載入單頁源碼 瀏覽:930
阿里雲伺服器seo 瀏覽:777
海洋斗什麼時候上線安卓 瀏覽:86
中行app如何查每日匯款限額 瀏覽:840
輸入伺服器sn是什麼意思 瀏覽:725
sha1演算法java 瀏覽:90