freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機(jī)交通燈控制器設(shè)計(jì)(編輯修改稿)

2024-11-27 13:36 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 第 三 章 軟件系統(tǒng)設(shè)計(jì)介紹 為了使匯編程序段和 C 程序能夠兼容,必須為匯編語(yǔ)言編寫(xiě)的程序段指定段名并進(jìn)行定義。如果要在它們之間傳遞函數(shù),則必須保證匯編程序用來(lái)傳遞函數(shù)的存儲(chǔ)區(qū)和 C 函數(shù)使用的存儲(chǔ)區(qū)是一樣的。被調(diào)用的匯編函數(shù)不僅要在匯編程序中使用偽指令以使 CODE 選項(xiàng)有效,并聲明為可再定位的段類(lèi)型,而且還要在調(diào)用它的 C 語(yǔ)言主程序中進(jìn)行聲明。函數(shù)名的轉(zhuǎn)換規(guī)律如表 所示。段名的轉(zhuǎn)換規(guī)律如表 所 示 。 表 函數(shù)名的轉(zhuǎn)換規(guī)律 主函數(shù)中的聲明 匯編符號(hào)名 說(shuō)明 Void funs(void) FUNC 無(wú)參數(shù)傳遞或不含寄存器的函數(shù)名不作改變轉(zhuǎn)入目標(biāo)文件中,名字只是簡(jiǎn)單地轉(zhuǎn)為大寫(xiě)形式 Void funs(char) _FUNC 帶寄存器參數(shù)的函數(shù)名,前面加“ _”前綴,它表明這類(lèi)函數(shù)包含寄存器內(nèi)的參數(shù)傳遞 Void funs(void) reentrant _?FUNC 對(duì)于重入函數(shù),前面加“ _?”前綴,它表明該函數(shù)包含棧內(nèi)的參數(shù)傳遞 表 段名的轉(zhuǎn)換規(guī)律 存儲(chǔ)區(qū) 命名轉(zhuǎn)換 CODE ?PR?CO XDATA ?XD DDATA ?DT BIT ?BI PDATA ?PD 3. Keil C51 與匯編的接口 (1)模塊內(nèi)接口 有時(shí)候,需要使用匯編語(yǔ)言來(lái)編寫(xiě)程序,比如對(duì)硬件進(jìn)行操作或在一些對(duì)時(shí)鐘要求很?chē)?yán)格的場(chǎng)合,但又不希望用匯編語(yǔ)言來(lái)編寫(xiě)全部程序或調(diào)用匯編語(yǔ)言編寫(xiě)的函數(shù),那么可以通過(guò)預(yù)編譯指令“ asm”,在 C 代碼中插入?yún)R編代碼。 方法是用 pragma 語(yǔ)句 ,具體結(jié)構(gòu)是 : pragma asm 匯編行 pragma endasm 這種方法是通過(guò) asm與 endasm告訴 C51 編 譯器中問(wèn)行不用編譯為匯編行。 (2)模塊間接口 基于 51 單片機(jī)交通燈控制器設(shè)計(jì) 17 C 模塊與匯編模塊的接口較簡(jiǎn)單,分別用 C51 與 A51 對(duì)源文件進(jìn)行編譯,然后用 L51 連接 obj 文件即可。 (3)SRC 控制 該控制指令將 C 文件編譯生成匯編文件 (.SRC),該匯編文件在改名后,生成匯編 .ASM 文件,再用 A51 進(jìn)行編譯。 C51 對(duì)標(biāo)準(zhǔn) C 語(yǔ)言的擴(kuò)展 C51 語(yǔ)言的特色主要體現(xiàn)在以下幾方面 : (1)1 雖然繼承了標(biāo)準(zhǔn) C 語(yǔ)言的絕大部分的特性,而且基本語(yǔ)法相同,但其本身又在特定的硬件結(jié)構(gòu)上有所擴(kuò)展,如關(guān)鍵字 sbit, data, idata, pdata,xdata,code 等。 (2)應(yīng)用 C51 更要注重對(duì)系統(tǒng)資源的理解,因?yàn)閱纹瑱C(jī)的系統(tǒng)資源相對(duì) PC 機(jī)來(lái)說(shuō)很貧乏,對(duì)于 RAM,ROM 中的每一字節(jié)都要充分利用。可以通過(guò)多看編譯生成的 .m51 文件來(lái)了解自己程序中資源的利用情況。 (3)程序上應(yīng)用的各種算法要精簡(jiǎn),不要對(duì)系統(tǒng)構(gòu)成過(guò)重的負(fù)擔(dān)。盡量少用浮點(diǎn)運(yùn)算,可以用 unsigned 無(wú)符號(hào)型數(shù)據(jù)的就不要用有符號(hào)型數(shù)據(jù),盡量避免多字節(jié)的乘除運(yùn)算,多使用移位運(yùn)算等。 1. 數(shù)據(jù)類(lèi)型 C51 具有標(biāo)準(zhǔn) C 語(yǔ)言的所有標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型,除此之外,為了更加有效地利用8051 的 結(jié)構(gòu),還加入了以下特殊的數(shù)據(jù)類(lèi)型。 ? bit 位變量值為 0或 1。 ? sbit 從字節(jié)中聲明的位變量 0或 1。 ? sfr 特殊功能寄存器, sfr 字節(jié)地址為 0~ 255 ? sfr16 同上,只是 sfr 字地址為 0~ 65535 其余數(shù)據(jù)類(lèi)型如 char,enum,short,int,long,float 等與標(biāo)準(zhǔn)語(yǔ)言 C 相同 。 完整的數(shù)據(jù)類(lèi)型表如表 所示。 表 數(shù)據(jù)類(lèi)型 數(shù)據(jù)類(lèi)型 位數(shù) 字節(jié)數(shù) 數(shù)值范圍 bit 1 0~ 1 char 8 1 128~ +127 unsigned char 8 1 0~ 255 18 第 三 章 軟件系統(tǒng)設(shè)計(jì)介紹 enum 16 2 32768~ +32767 short 16 2 32768~ +32767 unsigned short 16 2 0~ 65535 int 16 2 32768~ +32767 unsigned int 16 2 0~ 65535 long 32 4 2147483648~+2147483647 unsigned long 32 4 0~ 4294967295 float 32 4 177。 ~177。 +38 sbit 1 0~ 1 sfr 8 1 0~ 255 sfr 16 16 2 0~ 65535 bit,sbit,sfr 和 sfr16 數(shù)據(jù)類(lèi)型專(zhuān)門(mén)用于 8051 硬件和 C51 編譯器,并不是標(biāo)準(zhǔn) C語(yǔ)言的一部分,不能通過(guò)指針進(jìn)行訪問(wèn)。 bit,sbit,sfr 和 sfr16 數(shù)據(jù)類(lèi)型用于訪問(wèn) 8051的特殊功能寄存器,例如 sfr P0=0x80,表示聲明變量 P0,并為其分配特殊功能寄存器地址 0x80。 當(dāng)結(jié)果為不同的數(shù)據(jù)類(lèi)型時(shí), C51 編譯器自動(dòng)轉(zhuǎn)換數(shù)據(jù)類(lèi)型。除了數(shù)據(jù)類(lèi)型的轉(zhuǎn)換之外,帶符號(hào)變量的符號(hào)擴(kuò)展也是自動(dòng)完成的。 2. 存儲(chǔ)類(lèi)型及存儲(chǔ)區(qū) C51 編譯 器支持 8051 及其擴(kuò)展系列,并提供對(duì) 8051 所有存儲(chǔ)區(qū)的訪問(wèn)。存儲(chǔ)區(qū)可分為內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)、外部數(shù)據(jù)存儲(chǔ)區(qū)以及程序存儲(chǔ)區(qū)。 8051 CPU 內(nèi)部的數(shù)據(jù)存儲(chǔ)區(qū)是可讀寫(xiě)的, 8051 派生系列最多可有 256 字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),其中低 128 字節(jié)可直接尋址,高 128 字節(jié) (從 0x80 到 0xff)只能間接尋址,從 20H 開(kāi)始的 16 字節(jié)可位尋址。內(nèi)部數(shù)據(jù)區(qū)又可以分成 3 個(gè)不同的存儲(chǔ)類(lèi)型 :data、 idata 和bdata。外部數(shù)據(jù)區(qū)也是可讀寫(xiě)的,訪問(wèn)外部數(shù)據(jù)區(qū)比訪問(wèn)內(nèi)部數(shù)據(jù)區(qū)慢,因?yàn)橥獠繑?shù)據(jù)區(qū)是通過(guò)數(shù)據(jù)指針加載地址來(lái)間接訪問(wèn)的。 C51 編譯器提供兩種不同的存儲(chǔ)類(lèi)型 xdata 和 pdata 訪問(wèn)外部數(shù)據(jù)。程序 CODE 存儲(chǔ)區(qū)是只讀的,不能寫(xiě)。程序存儲(chǔ)區(qū)可能在 8051CPU 內(nèi)或者在外部或者內(nèi)外都有,這由 8051 派生的硬件決定。 每個(gè)變量可以明確地分配到指定的存儲(chǔ)空間,對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器的訪問(wèn)比對(duì)外部數(shù)據(jù)存儲(chǔ)器的訪問(wèn)快許多,因此應(yīng)當(dāng)將頻繁使用的變量放在內(nèi)部數(shù)據(jù)存儲(chǔ)器中,而把較少使用的變量放在外部數(shù)據(jù)存儲(chǔ)器中。各存儲(chǔ)區(qū)的簡(jiǎn)單描述如表 所示。 變量的聲明中還包括了對(duì)存儲(chǔ)器類(lèi)型的指定,即指定變量存放的位置。 基于 51 單片機(jī)交通燈控制器設(shè)計(jì) 19 表 存儲(chǔ)區(qū)的簡(jiǎn)單描述 存儲(chǔ)區(qū) 描述 DATA RAM 的低 128 字節(jié),可在一個(gè)周期內(nèi)直接尋址 BDATA DATA 區(qū)可字節(jié)、位混合尋址的 16 字節(jié)區(qū) IDATA RAM 區(qū)的高 128 字節(jié),必須采用間接尋址 XDATA 外部存儲(chǔ)區(qū),使用 DPTR 間接尋址 PDATA 外部存儲(chǔ)區(qū)的 256 字節(jié),通過(guò) P0 口的地址對(duì)其尋址。 使用指令 MovX @Rn,需要兩個(gè)指令周期 CODE 程序存儲(chǔ)區(qū)使用 DPTR 尋址 ? DATA 區(qū) DATA 區(qū)的尋址是最快的,所以應(yīng)該把經(jīng)常使用的變量放在 DATA區(qū) 。但是 DATA 區(qū)的空間是有限的, DATA 區(qū)除了包含程序 變量外,還包含了堆棧和寄存器組。 DATA 區(qū)聲明中的存儲(chǔ)類(lèi)型標(biāo)識(shí)符為 data,通常指低 128 字節(jié)的內(nèi)部數(shù)據(jù)區(qū)存儲(chǔ)的變量,可直接尋址。 ? BDATA 區(qū) BDATA 區(qū)實(shí)際就是 DATA 區(qū)中的位尋址區(qū),在這個(gè)區(qū)聲明變量就可進(jìn)行位尋址。位變量的聲明對(duì)狀態(tài)寄存器來(lái)說(shuō)是十分有用的,因?yàn)樗赡軆H僅需要使用某一位,而不是鵝字節(jié)。 BDATA 區(qū)聲明中的存儲(chǔ)類(lèi)型標(biāo)識(shí)符為bdata,指內(nèi)部可位尋址的 1字節(jié)存儲(chǔ)區(qū) (20H到 2FH)可位尋址變量的數(shù)據(jù)類(lèi)型。編譯器不允許在 BDATA 區(qū)中聲明 float 和 double 型的變量。如果想對(duì)浮點(diǎn)數(shù)的每 一位進(jìn)行尋址,可以通過(guò)包含 float 和 long 的聯(lián)合體來(lái)實(shí)現(xiàn) . ? IDATA 區(qū) IDATA 區(qū)存放使用比較頻繁的變量,使用寄存器作為指針進(jìn)行尋址,即在寄存器中設(shè)置 8 位地址進(jìn)行間接尋址。與外部存儲(chǔ)器尋址相比它的指令執(zhí)行周期和代碼長(zhǎng)度都比較短。 IDATA 區(qū)聲明中的存儲(chǔ)類(lèi)型標(biāo)識(shí)為 idata,指內(nèi)部的 256 字節(jié)的存儲(chǔ)區(qū),但是只能間接尋址,速度比直接尋址慢。 ? PDATA 和 XDATA 區(qū) PDATA 和 XDATA 區(qū)屬于外部存儲(chǔ)區(qū),外部數(shù)據(jù)區(qū)是可讀寫(xiě)的存儲(chǔ)區(qū),最多可有 64KB ,當(dāng)然這些地址不是必須用作存儲(chǔ)區(qū)的。訪問(wèn)外部數(shù)據(jù) 存儲(chǔ)區(qū)比訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)慢,因?yàn)橥獠繑?shù)據(jù)存儲(chǔ)區(qū)是通過(guò)數(shù)據(jù)指針加載地址來(lái)間接訪問(wèn)的。 程序存儲(chǔ)區(qū) CODE 程序存儲(chǔ)區(qū)的數(shù)據(jù)是不可改變的,跳轉(zhuǎn)向量和狀態(tài)表對(duì)CODE 段的訪問(wèn)和對(duì) XDATA 區(qū)的訪問(wèn)時(shí)間是一樣的。編譯的時(shí)候要對(duì)程序存儲(chǔ)區(qū)中的對(duì)象進(jìn)行初始化,否則就會(huì)產(chǎn)生錯(cuò)誤,程序存儲(chǔ)區(qū) CODE 聲明中的標(biāo)識(shí)符為 code,在 C51 編譯器中可用 code 存儲(chǔ)區(qū)類(lèi)型標(biāo)識(shí)符來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。 20 第 三 章 軟件系統(tǒng)設(shè)計(jì)介紹 3. 存儲(chǔ)器模式 存儲(chǔ)器模式是函數(shù)自變量、自動(dòng)變量和沒(méi)有明確規(guī)定存儲(chǔ)類(lèi)型的變量的默認(rèn)存儲(chǔ)器類(lèi)型,指定存儲(chǔ)器類(lèi)型需要在命令行中使用 SMALL,COMPACT 和 LARGE3個(gè)控制命令中的 1 個(gè)。 ? SMALL 在該模式中,所有變量都默認(rèn)地位于 51內(nèi)部數(shù)據(jù)存儲(chǔ)器,這和使用data 指定存儲(chǔ)器類(lèi)型的方式一樣。在此模式下,變靈訪問(wèn)的效率很高,但所有的數(shù)據(jù)對(duì)象和堆棧必須適合內(nèi)部 RAM。 ? COMPACT 當(dāng)使用 COMPACT 模式時(shí),所有變量都被默認(rèn)為在外部數(shù)據(jù)存儲(chǔ)器的頁(yè)內(nèi),這和使用 pdata 指定存儲(chǔ)器類(lèi) 型 是一樣的。該存儲(chǔ)器類(lèi)型適用于變量不超過(guò) 256 字節(jié)的情況,此限制是由尋址方式所決定的。和 SMALL 模式相比,該存儲(chǔ)器模型的效率比較低,對(duì)變量訪問(wèn)的速度也慢 一些,但比 LARGE模式快。地址的高字節(jié)通常通過(guò) P2 口設(shè)置,編譯器沒(méi)有設(shè)置該口。 LARGE 在 LARGE 模式中,所有變量都默認(rèn)為位于外部數(shù)據(jù)存儲(chǔ)器 (這和使用xdata 指定存儲(chǔ)器類(lèi)型是一樣的 ),并使用數(shù)據(jù)指針 DPTR 進(jìn)行尋址。通過(guò)數(shù)據(jù)指針訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的效率較低,特別是當(dāng)變量為 2 字節(jié)或更多字節(jié)時(shí),該模式要比 SMALL 和 COMPACT 產(chǎn)生更多的代碼。 4. 特殊功能寄存器 (SFR) 51 單片機(jī)提供 128 字節(jié)的 SFR 尋址區(qū),地址為 80H~ FFH 。 51 單片機(jī)中,除了程序計(jì)數(shù)器 PC 和 4 組通用寄存器組之外,其 他所有的寄存器均為 SFR,并位于片內(nèi)特殊寄存器區(qū)。這個(gè)區(qū)域可位尋址、字節(jié)尋址或字尋址,用以控制定時(shí)器、計(jì)數(shù)器、串口、 I/O 及其他部件。特殊功能寄存器可山以下幾種關(guān)鍵字說(shuō)明。 (1) sfr 聲明字節(jié)尋址的特殊功能寄存器,比如 sfr P0=0x80;表示 P0 口地址為 80H。注意:“ sfr”后面必須跟一個(gè)特殊寄存器名 。“ =”后面的地址必須是常數(shù),不允許帶有運(yùn)算符的表達(dá)式,這個(gè)常數(shù)值的范圍必須在特殊功能寄存器地址范圍內(nèi),位于 0x80H 到 0xFFH 之間。 (2) sfr16 許多新的 8051派生系列單片機(jī)用兩個(gè)連續(xù)地址的 SFR來(lái)指定 16位值,例如 8052 用地址 0xCC 和 0xCD 表示定時(shí)器 /計(jì)數(shù)器 2的低和高字節(jié),如 sfr 16 T2=0xCC;表示 T2 口地址的低地址 T2L=0xCC,高地址 T2H=0xCD。 sfr16 聲明和 sfr 聲明遵循相同的原則,任何符號(hào)名都可用在 sfr16 的聲明中。聲明中名字后面不是賦值語(yǔ)句。而是一個(gè) SFR 地基于 51 單片機(jī)交通燈控制器設(shè)計(jì) 21 址,其高字節(jié)必須位于低字節(jié)之后。這種聲明適用于所有新的 SFR,但不能用于定時(shí) /計(jì)數(shù)器 0和計(jì)數(shù)器 1。 (3) sbit 聲明可位尋址的特殊功能寄存器和別的可位尋址的目標(biāo)?!?=”號(hào)后將絕對(duì)地址賦給變量名, 3 種變量聲明 形式如下。 5. C51 指針 (1) 通用指針 C51 提供一個(gè) 3字節(jié)的通用指針,通用指針的聲明和使用均與標(biāo)準(zhǔn)C語(yǔ)言相同,但它同時(shí)還可以說(shuō)明指針的存儲(chǔ)類(lèi)型。 (2) 指定存儲(chǔ)區(qū)指針 C51 允許使用者規(guī)定指針指向的存儲(chǔ)段,這種指針叫指定存儲(chǔ)區(qū)指針 。 (3) 指針轉(zhuǎn)換 C51 編譯器可以在指定存儲(chǔ)區(qū)指針和通用指針之間轉(zhuǎn)換,指針轉(zhuǎn)換可以用類(lèi)型轉(zhuǎn)換的直接程序代碼來(lái)強(qiáng)迫轉(zhuǎn)換,或在編譯器內(nèi)部強(qiáng)制轉(zhuǎn)換。當(dāng)把指定存儲(chǔ)區(qū)指針作為參數(shù)傳遞給要求使用通用指針的函數(shù)時(shí), C51 編譯器就把指定存儲(chǔ)區(qū)指針轉(zhuǎn)換為通用指針。 (4) 絕對(duì) 指針 絕對(duì)指針類(lèi)型可訪問(wèn)任何存儲(chǔ)區(qū)的存儲(chǔ)區(qū)地址,也可用絕對(duì)指針調(diào)用定位在絕對(duì)或固定地址的函數(shù)。 6. 函數(shù) (1) 函數(shù)聲明 Keil C51 編譯器擴(kuò)展了標(biāo)準(zhǔn) C 函數(shù)聲明,這些擴(kuò)展有: 1)指定一個(gè)函數(shù)作為一個(gè)中斷函數(shù) 。 2)選擇所用的寄存器組 : 3)選擇存儲(chǔ)模式 : 4)指定重入 。 5)指定 ALIEN PL
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1