微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 能让汇编转到C51的初学者有更清晰的认识的一篇文章

能让汇编转到C51的初学者有更清晰的认识的一篇文章

时间:06-29 来源:互联网 点击:
8051是傳統CISC架構微控制器的代表,而PIC則是現代RISC架構微控制器的佳作。
雖然說RISC架構是公認未來微控制器的主流,但是8051藉著累積多年的發展環境與資
源,特別是CCompiler的成熟,在未來仍然有相當大的想像空間。
希望這是一本可以活用的互動式電子書,以討論及分享KEILC51的程式設計經驗為目的。
目前的內容有…

記憶體
8051特有的記憶體型態
特殊資料型態
指定絕對位址的變數
隱藏的初始化程序

程式範例

軟體模擬的SingleMasterI2C介面程式

下載KEILC51試用版

8051特有的記憶體型態


code以MOVC@A+DPTR讀取的程式記憶體
data可以直接存取的內部資料記憶體
idata以Mov@Rn存取的內部資料記憶體
bdata可以位元定址(BitAddressable)的內部記憶體
xdata以MOVX@DPTR存取的外部資料記憶體
pdata以MOVX@Rn存取的外部資料記憶體

特殊資料型態


bit一般位元(bit)變數

sbit絕對定址的位元(bit)變數

語法
sbitmy_flag=location;(location範圍從0x00~0x7F)

範例
sbitEA=0xAF;

或是配合bdata宣告的位元(bit)變數

charbdatamy_flags;
sbitflag0=my_flags^0;

(注意sbit前不可以加static)

sfr特殊功能暫存器(SpecialFunctionRegister)

語法
sfrmy_sfr=location;(location範圍從0x80~0xFF)

範例
sfrP0=0x80;

指定絕對位址的變數


在單一模組內可以使用下面的語法宣告

[memory_space]typevariable_name_at_location

範例
pdatacharmy_pdata_at_0x80;

如果該變數必須為多個模組所使用(GlobalVariable)則以

抽象指標(AbstractPointer)的方式在標頭檔(HeaderFile)定義較為方便。

#definevariable_name*((data_type*)location)

範例
#definemy_pdata*((charpdata*)0x80)

(注意char與pdata的順序)

ABSACC.H提供了下列方便的巨集(Macro)定義。

#defineCBYTE((unsignedcharvolatilecode*)0)
#defineDBYTE((unsignedcharvolatiledata*)0)
#definePBYTE((unsignedcharvolatilepdata*)0)
#defineXBYTE((unsignedcharvolatilexdata*)0)
#defineCWORD((unsignedintvolatilecode*)0)
#defineDWORD((unsignedintvolatiledata*)0)
#definePWORD((unsignedintvolatilepdata*)0)
#defineXWORD((unsignedintvolatilexdata*)0)

隱藏的初始化程序

80C51在電源重置後(PowerOnReset)所執行的第一個程式模組並不是使用者的主程式
main(),而是一個隱藏在KEIL-C51標準程式庫中稱為startup.a51的程式模組。
startup.a51的主要工作是把包含idata、xdata、pdata在內的記憶體區塊清除為0,並
且初始化遞迴指標。接著startup.a51被執行的仍然是一個隱藏在KEIL-C51標準程式庫
中稱為init.a51的程式模組。而init.a51的主要工作則是初始化具有非零初始值設定的
變數。

在完成上述的初始化程序之後,80C51的控制權才會交給main()開始執行使用者的程式。
研究在C51\Lib目錄下相關模組的組合語言程式碼,使用者將會對KEIL-C51的架構有進
一步的了解,同時更能掌握不同的高階應用技巧。

程式範例

軟體模擬的SingleMasterI2C介面程式:C51-I2C.C

暫存器庫(RegisterBank)切換的應用

暫存器庫(RegisterBank)切換的最大應用是在中斷程序的處理。一般的軟體設計會在程
式進入中斷之後,利用切換暫存器庫的方式保持主程式R0~R7暫存器的內容,不受中斷
程序的影響而改變。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top