版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第第4章章C51C51語言編程基礎語言編程基礎 2內(nèi)容概要內(nèi)容概要 本章在已掌握標準本章在已掌握標準C C語言前提下語言前提下,初步介紹如何如何使用使用C51C51來編寫來編寫89C5189C51單片機的應用程序單片機的應用程序。 C51C51是在標準是在標準C C的基礎上,根據(jù)單片機存儲器硬件的基礎上,根據(jù)單片機存儲器硬件結構及內(nèi)部資源,擴展了相應的數(shù)據(jù)類型和變量,結構及內(nèi)部資源,擴展了相應的數(shù)據(jù)類型和變量,而C51在語法規(guī)定、程序結構與設計方法上,都與標準在語法規(guī)定、程序結構與設計方法上,都與標準C C相同。相同。 本章重點介紹本章重點介紹C51C51對標準對標準C C所擴展的部分所擴展的
2、部分,并通過一些例程例程來介紹C51的程序設計思想。3單片機入門主要掌握以下知識和應用單片機入門主要掌握以下知識和應用 最小系統(tǒng)能夠運行起來的必要條件。 1.電源 2.晶振3.復位電路 對單片機任意IO口的隨意操作 1.輸出控制電平高低 2.輸入檢測電平高低。 定時器:重點掌握最常用的方式2 中斷:外部中斷、定時器中斷、串口中斷 串口通信:單片機之間、單片機與計算機間4 目前51系列單片機編程的C語言都采用Keil C51(簡稱C51),C51是在是在標準標準C C語言語言基礎上發(fā)展起來的?;A上發(fā)展起來的。C51C51編程語編程語言與標準言與標準C C語言語言相同,也有自身特點。相同,也有自
3、身特點。 軟硬件軟硬件結合!結合?。ň幊踢^程要(編程過程要始終考慮硬件系統(tǒng)始終考慮硬件系統(tǒng)。) C語言是美國國家標準協(xié)會(ANSI)制定的編程語言標準,1987年ANSI公布87 ANSI C87 ANSI C,即標準C語言。KeilKeil C51 C51語語言言是在是在ANSI CANSI C的基礎上針對的基礎上針對5151單片機的硬件特點進行的單片機的硬件特點進行的擴展,擴展,并向51單片機上移植。 經(jīng)過多年努力,C51語言已經(jīng)成為公認的高效、簡潔而又貼近51單片機硬件的實用高級編程語言。4.1 4.1 編程語言編程語言Keil C51Keil C51簡介簡介5 C 語言具有結構化和模塊
4、化特點,便于閱讀和維護。 C 語言可移植性好,很多微控制器都支持C 編譯器。功能化的代碼能夠很方便的從一個工程移植到另一個工程,從而減少了開發(fā)時間。提供的庫函數(shù)包含許多標準子程序,具有較強的數(shù)據(jù)處理能力。使用使用C C語言的優(yōu)點語言的優(yōu)點6使用使用C C語言的優(yōu)點語言的優(yōu)點 C 語言編寫的程序比匯編語言編寫的程序更符合人們的思考習慣,寄存器分配,不同存儲器的尋址及數(shù)據(jù)類型等細節(jié)交由編譯器管理,開發(fā)者可以更專心的考慮算法,而不是考慮一些細節(jié)問題。這樣可以減少編程出錯的機率,從而提高開發(fā)效率,減少調(diào)試的時間。 C 語言和微控制器是相對獨立的,開發(fā)者不必知道處理器的具體內(nèi)部結構和處理過程。當用新型的
5、微控制器開發(fā)程序時,可以很快上手,減少學習時間和程序開發(fā)時間。7C51C51與標準與標準C C的主要區(qū)別的主要區(qū)別:深入理解深入理解以及以及,是掌握,是掌握C51C51語言的語言的之一。之一。n(1 1)頭文件的差異)頭文件的差異 51系列單片機廠家有多個,它們的差異在于內(nèi)部資差異在于內(nèi)部資源如定時器、中斷、源如定時器、中斷、I/OI/O等數(shù)量以及功能的不同等數(shù)量以及功能的不同,而對使用者來說,只需要將相應的功能寄存器的頭文件加載在程序內(nèi),就可實現(xiàn)所具有的功能。因此,KeilKeil C51 C51系列的頭文件系列的頭文件集中體現(xiàn)了各系列芯片的不同資源及功能。(REG52.hREG52.h)
6、(2 2)數(shù)據(jù)類型的不同)數(shù)據(jù)類型的不同 電腦CPU是32位或64位,運算能力強,內(nèi)存大,大量使用float型與long int型變量。單片機一般為8位或16位,運算能力較弱,以char型為主,int型為輔。 51系列單片機包含位操作空間和豐富的位操作指令,與 ANSI C 相比又擴展了4種類型,以便能夠靈活地進行操作。8(3 3)數(shù)據(jù)存儲類型的不同)數(shù)據(jù)存儲類型的不同。C語言最初是為通用計算機設計的,在通用計算機中只有一個程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間。而而5151系列單片機系列單片機有片內(nèi)、有片內(nèi)、外程序存儲器,還有片內(nèi)、外數(shù)據(jù)存儲器。外程序存儲器,還有片內(nèi)、外數(shù)據(jù)存儲器。標準標準C C并沒
7、有提供這部分存儲并沒有提供這部分存儲器的地址范圍的定義。器的地址范圍的定義。此外,對于AT89S51單片機中大量的特殊功能寄存器也沒有定義。(4 4)標準)標準C C語言語言沒有沒有處理處理單片機中斷單片機中斷的定義的定義。而而C51C51中定義了專門的中斷函數(shù)。中定義了專門的中斷函數(shù)。(5 5)Keil C51與標準C的庫函數(shù)庫函數(shù)有較大的不同。 1 1)部分庫函數(shù)不適合于單片機系統(tǒng),被排除在)部分庫函數(shù)不適合于單片機系統(tǒng),被排除在C51C51語言之外,語言之外,如如圖形函圖形函 數(shù)數(shù)。2 2)有些庫)有些庫函數(shù)繼續(xù)函數(shù)繼續(xù)使用,使用,但針對單片機硬件但針對單片機硬件特點做出相應的開發(fā)。特點
8、做出相應的開發(fā)。 例如庫函數(shù)例如庫函數(shù)printfprintf和和scanfscanf。(在標準。(在標準C C中用于打印和接收字符,在中用于打印和接收字符,在C51C51中用于中用于)。)。9(6 6)有差異有差異 由于由于5151單片機硬件資源有限,它的編譯單片機硬件資源有限,它的編譯系統(tǒng)不允許太多的程序嵌套。其次,標準系統(tǒng)不允許太多的程序嵌套。其次,標準C C所具備的遞歸特性所具備的遞歸特性不被不被C51C51語言支持。語言支持。 (7 7)目標代碼)目標代碼 電腦生成.exe格式,編譯完成后直接在電腦上運行,單片機編譯生成.bin代碼文件,需要燒寫到單片機中并結合外圍電路執(zhí)行。(8 8
9、)仿真調(diào)試)仿真調(diào)試 單片機的C程序在電腦上進行編譯,然后需通過仿真器連接后進行仿真調(diào)試,近年來隨著電路仿真軟件的不斷完善,也可通過proteus等軟件直接在電腦上進行仿真調(diào)試。10 但是從數(shù)據(jù)運算操作、程序控制語句以及函數(shù)但是從數(shù)據(jù)運算操作、程序控制語句以及函數(shù)的使用上來說,的使用上來說,Keil C51Keil C51與標準與標準C C幾乎沒有什么明顯幾乎沒有什么明顯的差別。的差別。如果程序設計者具備了有關標準C的編程基礎,只要注意Keil C51與標準C的不同之處,并熟悉AT89S51單片機的硬件結構,就能夠較快地掌握Keil C51的編程。關鍵字-編程語言保留的,它們具有固定名稱和含義
10、。在程序編寫中不允許用戶自己定義的標識符與關鍵字相同!C51中的關鍵字除了有ANSI(美國國家標準協(xié)會)C標準的32個關鍵字外,還根據(jù)51單片機的特點擴展了相關的關鍵字。掌握不同之處從關鍵字開始!關鍵字關鍵字用途用途說明說明bitbit位標量聲明聲明一個位標量或位類型的函數(shù)聲明一個位標量或位類型的函數(shù)sbitsbit位標量聲明聲明一個可位尋址變量聲明一個可位尋址變量sfrsfr特殊功能寄存器聲明聲明一個特殊功能寄存器聲明一個特殊功能寄存器sfr16sfr16特殊功能寄存器聲明聲明一個聲明一個1616位的特殊功能寄存器位的特殊功能寄存器datadata存儲器類型說明直接尋址的內(nèi)部數(shù)據(jù)存儲器直接尋
11、址的內(nèi)部數(shù)據(jù)存儲器bdatabdata存儲器類型說明可位尋址的內(nèi)部數(shù)據(jù)存儲器可位尋址的內(nèi)部數(shù)據(jù)存儲器idataidata存儲器類型說明間接尋址的內(nèi)部數(shù)據(jù)存儲器間接尋址的內(nèi)部數(shù)據(jù)存儲器pdatapdata存儲器類型說明分頁尋址的外部數(shù)據(jù)存儲器分頁尋址的外部數(shù)據(jù)存儲器xdataxdata存儲器類型說明外部數(shù)據(jù)存儲器外部數(shù)據(jù)存儲器codecode存儲器類型說明程序存儲器程序存儲器interruptinterrupt中斷函數(shù)說明定義一個中斷函數(shù)定義一個中斷函數(shù)reentrantreentrant再入函數(shù)說明定義一個再入函數(shù)定義一個再入函數(shù)usingusing寄存器組選擇選擇單片機的工作寄存器組選擇單片
12、機的工作寄存器組_at_at_絕對地址說明為非位變量指定存儲空間絕對地址為非位變量指定存儲空間絕對地址smallsmall存儲模式選擇參數(shù)及局部變量放入可直接尋址的內(nèi)部參數(shù)及局部變量放入可直接尋址的內(nèi)部RAMRAMcompactcompact存儲模式選擇參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)largelarge存儲模式選擇參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)C51C51新增加的關鍵字新增加的關鍵字13:由源代碼文件生成目標文件由源代碼文件生成目標文件:包含了編譯器、鏈接器等開發(fā)工具的組合包包含了編譯器、鏈接器等開發(fā)工具的組合
13、包 將項目管理、源代碼編輯和程序編譯、鏈接、調(diào)試等各種工具組合在一個將項目管理、源代碼編輯和程序編譯、鏈接、調(diào)試等各種工具組合在一個功能強大的環(huán)境中,具有良好人機界面。功能強大的環(huán)境中,具有良好人機界面。8051單片機所使用的單片機所使用的C語言編譯器簡稱為語言編譯器簡稱為 Cx51例如包含例如包含Cx51、Ax51、BL51、LIB51、OH51、RTX51等等KEIL C51 4.2 Keil C514.2 Keil C51的開發(fā)工具的開發(fā)工具14Cx51.exe15C C語言結構特點語言結構特點 一個C程序由一個或多個函數(shù)組成,其中必須有一個用main命名的主函數(shù)。 每個函數(shù)由頭部和函數(shù)
14、體兩部分組成。 每個C語句以“;”結尾。 C程序的書寫格式比較自由。 可以在程序的任何位置用/*.*/對C程序中的任何部分作注釋。 可以在行末用/追加注釋。16(一個或若干個)(一個或若干個)n 程序的入口程序的入口 函數(shù)名固定,且與書寫的位置無關函數(shù)名固定,且與書寫的位置無關n 有且僅有一個有且僅有一個n 庫函數(shù)或用戶自定義的函數(shù)庫函數(shù)或用戶自定義的函數(shù)n 可以有若干個可以有若干個C51程序大體上是若干函數(shù)的集合17單片機控制單片機控制LEDLED(電路圖)(電路圖)XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237
15、P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52C122pFC222pFC310uFX1CRYSTALD1LED-REDR
16、1220R210k18我的第一個程序(單片機控制我的第一個程序(單片機控制LEDLED點亮)點亮)#include sbit LED = P10;void main( )/主程序 LED = 0;/點亮LED while(1);19單片機控制單片機控制LEDLED閃爍(程序)閃爍(程序)#include #define uchar unsigned char#define uint unsigned intsbit LED = P10;void delay(uint x)/延時程序 uchar i; while(x-) for(i = 0;i 120; i+); void main()/主程序
17、 while(1) LED = LED; /LED燈閃爍 delay(400); 20KEILKEIL與與PROTEUSPROTEUS快速入門快速入門 Keil C51Keil C51是美國是美國Keil SoftwareKeil Software公司出品的公司出品的5151系列兼容單系列兼容單片機片機C C語言軟件開發(fā)系統(tǒng),與匯編相比,語言軟件開發(fā)系統(tǒng),與匯編相比,C C語言在功能上、結語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用用過匯編語言后再使用C C來開發(fā),體會更加深刻。來開發(fā),體會更加深刻
18、。 Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。 21 1、建立一個新工程 單擊Project菜單,在彈出的下拉菜單中選中New Project選項,如圖3所示。圖3 新建工程文件KEIL C51KEIL C51快速入門快速入門22 2、然后選擇你要保存的路徑,輸入工程文件的名字, 如圖4所示,然后點擊保存。圖4 新建工程文件的保存路徑KEIL C51KEIL C51快速
19、入門快速入門23 3、這時會彈出一個對話框,要求你選擇單片機的型號,你可以根據(jù)你使用的單片機來選擇,keil c51幾乎支持所有的51內(nèi)核的單片機, 如圖所示,選擇89C51之后,右邊欄是對這個單片機的基本的說明,然后點擊確定。圖5 選擇單片機的型號KEIL C51KEIL C51快速入門快速入門244、完成上一步驟后,屏幕如圖6所示。圖6 完成新建工程文件KEIL C51KEIL C51快速入門快速入門25 下面可以編寫程序。 5、在圖2-7中,單擊“File”菜單,再在下拉菜單中單擊“New”選項。新建文件后屏幕如圖8所示。圖7 新建文檔圖8 完成 新建文檔KEIL C51KEIL C51
20、快速入門快速入門26 此時光標在編輯窗口里閃爍,這時可以鍵入應用程序了,建議首先保存該空白的文件,單擊菜單上的“File”,在下拉菜單中選中“Save As”選項單擊,屏幕如下圖所示,在“文件名”欄右側的編輯框中,鍵入欲使用的文件名,用C語言編寫擴展名為(.c)如果用匯編語言編寫擴展名必須為(.asm)。然后,單擊“保存”按鈕。 如圖8所示。圖8 保存新建文檔KEIL C51KEIL C51快速入門快速入門27 6、回到編輯界面后,單擊“Target 1”前面的“”號,然后在“Source Group 1”上單擊右鍵,彈出菜單9。圖9 打開添加文檔界面KEIL C51KEIL C51快速入門快
21、速入門28 然后單擊“Add File to Group Source Group 1”,屏幕如圖10所示。 圖10 添加文檔KEIL C51KEIL C51快速入門快速入門29選中main.c,然后單擊“Add ”屏幕如下圖所示。 注意到“Source Group 1”文件夾中多了一個子項“main.c”子項的多少與所增加的源程序的多少相同。 7、現(xiàn)在便可輸入程序了,輸入完畢進行調(diào)試便可運行。 圖10 完成添加文檔KEIL C51KEIL C51快速入門快速入門30Proteus Proteus 快速入門快速入門 Proteus軟件和我們手頭的其他電路設計仿真軟件最大的不同即它的功能不是單一
22、的。它的強大的元件庫可以和任何電路設計軟件相媲美;它的電路仿真功能可以和Multisim相媲美,且獨特的單片機仿真功能是Multisim及其他任何仿真軟件都不具備的;它的PCB電路制版功能可以和Protel相媲美。它的功能不但強大,而且每種功能都毫不遜于Protel,是學習電子設計難得的一個工具軟件。31 ISIS智能原理圖輸入系統(tǒng),系統(tǒng)設計與仿真的基本平臺。 ARES 高級PCB布線編輯軟件。 在Proteus中,從原理圖設計、單片機編程、系統(tǒng)仿真到PCB設計一氣呵成,真正實現(xiàn)了從概念到產(chǎn)品的完整設計。Proteus 從原理圖設計到PCB設計,再到電路板完成的流程如圖所示。32 數(shù)據(jù) 數(shù)據(jù)類
23、型、數(shù)據(jù)結構、存儲類型 運算 算術運算、關系運算、邏輯運算、位操作 控制 順序結構、選擇結構、循環(huán)結構、函數(shù)4.3 C514.3 C51語言程序設計基礎語言程序設計基礎 C51 C51語言程序設計的三大要素語言程序設計的三大要素334.3.1 C514.3.1 C51數(shù)據(jù)類型與存儲類型數(shù)據(jù)類型與存儲類型 常量與變量 常量:程序運行中值不能改變的量稱為常量,常量存在于ROM中。 變量:變量代表存貯器中的一個或多個存儲單元,用來存放數(shù)據(jù),一般來講這些值在程序運行中可以改變(只讀變量除外) 變量名命名規(guī)則:變量名只能由半角的字母、數(shù)字、下劃線組成,且第一個字符不能是數(shù)字。 變量存在的類型稱為變量存在
24、的類型稱為數(shù)據(jù)類型數(shù)據(jù)類型。34C51C51數(shù)據(jù)類型與標準數(shù)據(jù)類型與標準C C數(shù)據(jù)類型的最大不同之處:數(shù)據(jù)類型的最大不同之處:位型位型。位型(位型(bit)字符型(字符型(char)整型(整型(int)長整型(長整型(long)浮點型(浮點型(float)雙精度浮點型(雙精度浮點型(double)數(shù)組類型(數(shù)組類型(array)結構體類型(結構體類型(struct)共用體(共用體(union)枚舉(枚舉(enum)基本類型基本類型構造類型構造類型指針類型指針類型空類型空類型數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)據(jù)類型數(shù)據(jù)類型35C51C51數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型C51專用長度取值范圍signed char單字
25、節(jié)-128 to +127unsigned char單字節(jié)0 to 255signed int2字節(jié)-32768 to +32767unsigned int2字節(jié)0 to 65535signed long4字節(jié)-2147483648 to +214746483647unsigned long4字節(jié)0 to 4294967295float4字節(jié)1.175494E-38 to 3.402823E+38double8字節(jié)1.175494E-308*13字節(jié)對象的地址36數(shù)據(jù)類型C51專用長度取值范圍bit專用1位0 或 1sbit專用1位0 或 1sfr專用1字節(jié)0 255sfr16專用2字節(jié)0 6
26、5535C51C51數(shù)據(jù)類型數(shù)據(jù)類型3738C C語言的變量定義與賦值語言的變量定義與賦值 定義一個變量 先定義,后使用。例如:Int a; char b; 變量賦初值,C允許在定義變量的同時給變量賦初值。 例如: char c = a; int a = 7; int a,b,c=9; /定義a、b、c為整型變量,對c賦初值。 int a = 3,b = 3,c = 3; 錯誤:int a=b=c=3;39 定義定義變量類型變量類型應考慮如下問題:應考慮如下問題:程序運行時該變量可能的取值范圍,是否有負值,絕對值有多大,以及相應需要的存儲空間大小。在夠用的情況下,盡量選擇8位即一個字節(jié)的cha
27、r型,特別是unsiged char。對于51系列這樣的定點機而言,浮點類型變量將明顯增加運算時間和程序長度,如果可以的話,盡量使用靈活巧妙的算法來避免浮點變量的引入。40C51C51的擴展數(shù)據(jù)類型的擴展數(shù)據(jù)類型(1 1)位變量)位變量bitbitbit的值可以是1(true), 也可以是0(false)。使用關鍵字使用關鍵字bitbit例如:例如:bit lockbit lock;/ /* *將將locklock定義為位變量定義為位變量* */ /bit direntionbit dirention;/ /* *將將directiondirection定義為位變量定義為位變量* */ /41
28、42C51C51的擴展數(shù)據(jù)類型的擴展數(shù)據(jù)類型(2 2)特殊功能寄存器)特殊功能寄存器sfrsfr AT89S51特殊功能寄存器在片內(nèi)RAM區(qū)的80HFFH之間,“sfrsfr” 數(shù)據(jù)類型數(shù)據(jù)類型占用一個內(nèi)存單元。利用它可訪問AT89S51內(nèi)部的所有特殊功能寄存器。 例如:例如:sfr P1=0 x90sfr P1=0 x90這一語句定義P1口在片內(nèi)的寄存器,在后面語句中可用“P1=0 xff”(使P1的所有引腳輸出為高電平)之類的語句來操作特殊功能寄存器。 標準SFR在reg51.h、reg52.h 等頭文件中已經(jīng)被定義,只要用文件包含做出申明即可使用。43(3 3)特殊功能寄存器)特殊功能寄
29、存器sfr16sfr16 “sfr16sfr16”數(shù)據(jù)類型數(shù)據(jù)類型占用兩個內(nèi)存單元。sfr16和sfr一樣用于操作特殊功能寄存器。所不同的是它用于操作占兩個字節(jié)的特殊功能寄存器。 例如:例如: sfr16 DPTR=0 x82sfr16 DPTR=0 x82語句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H。在后面的語句中可以對DPTR進行操作。44(4 4)特殊功能位)特殊功能位 sbitsbitsbitsbit 是指AT89C51片內(nèi)特殊功能寄存器的可尋址位。例如:例如: sfr PSW=0 xd0sfr PSW=0 xd0 ;/ /* *定義定義PSWPSW寄存器地址為
30、寄存器地址為0 xd00 xd0* */ /sbit PSW 2 = 0 xd2sbit PSW 2 = 0 xd2;/ /* *定義定義OVOV位為位為PSW.2PSW.2* */ /符號“”前面是特殊功能寄存器的名字,“”的后面數(shù)字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是07。注意,不要把注意,不要把bitbit與與sbitsbit混淆?;煜?。bit用來定義普通的位變量,值只能是二進制的0或1。而sbit定義的是特殊功能位。45#include sbit D3 = P22;void main() D3 = 0 ; /點亮LED while(1) /循環(huán),掛起 ; _ _ _
31、引用含有引用含有SFRSFR符號定義的頭文件符號定義的頭文件 定義符號定義符號D3D3為為P2P2口的第口的第2 2位位 D3D3可以換為其他自定義符號,作可以換為其他自定義符號,作用相同,如:用相同,如: sbit P2_2 = P22;sbit P2_2 = P22; 點亮發(fā)光二極管的功能語句點亮發(fā)光二極管的功能語句 while(1)while(1)無限循環(huán),用于程序的無限循環(huán),用于程序的反復執(zhí)行或者程序掛起,很重要!反復執(zhí)行或者程序掛起,很重要! 使用使用tabtab或者空格,使程序結構或者空格,使程序結構清晰,便于閱讀清晰,便于閱讀 適當加入注釋,使編程思路清晰,適當加入注釋,使編程思
32、路清晰,便于閱讀和后期的修改便于閱讀和后期的修改q sbit的使用46 89S51 89S51單片機的數(shù)據(jù)存儲類型單片機的數(shù)據(jù)存儲類型 8051系列微處理器采用了哈佛結構,即程序存儲器和數(shù)據(jù)存儲器是分離的。8051系列微處理器提供了三種不同類型的存儲區(qū)域(memory areas): 程序存儲區(qū)(program memory) 內(nèi)部數(shù)據(jù)存儲區(qū)(internal data memory) 外部數(shù)據(jù)存儲區(qū)(external data memory) 這三種存儲區(qū)域均從地址0開始編址,通過采用不同的尋址指令來解決地址重疊的問題。 47存儲類型存儲類型說明說明直接尋址的片內(nèi)數(shù)據(jù)存儲器(128B),訪問
33、速度最快(00H-7FH)可位尋址的片內(nèi)數(shù)據(jù)存儲器(16B),允許位和字節(jié)混合訪問(20H-2FH)間接訪問的片內(nèi)數(shù)據(jù)存儲器(256B),全部片內(nèi)RAM空間(00H-FFH)分頁訪問的片外數(shù)據(jù)存儲器(256B) 00H-FFH片外數(shù)據(jù)存儲器(64KB),訪問速度相對比較慢 0000H-FFFFH程序存儲器(64KB) 0000H-FFFFHn C51數(shù)據(jù)的存儲類型數(shù)據(jù)的存儲類型 在討論在討論C51的數(shù)據(jù)類型的時候,必須理解數(shù)據(jù)的的數(shù)據(jù)類型的時候,必須理解數(shù)據(jù)的存儲類型存儲類型和它與和它與8051單片機單片機存儲器結構存儲器結構的關系的關系.48C51C51存儲類型存儲類型存儲器類型存儲區(qū)域大小
34、對應的匯編語句(了解)描述code程序存儲區(qū)64KBMOVC A,A+DPTR用來說明常量data直接尋址的內(nèi)部數(shù)據(jù)存儲區(qū)128BMOV XX,#ADDR訪問速度快idata間接尋址的內(nèi)部數(shù)據(jù)區(qū)256BMOV XX,Rn可訪問整個內(nèi)部數(shù)據(jù)區(qū)域bdata位尋址的內(nèi)部數(shù)據(jù)存儲區(qū)16B可使用位尋址或字節(jié)尋址來訪問這一區(qū)域xdata外部數(shù)據(jù)存儲或64KBMOVX A,DPTR使用DPTR來訪問外部數(shù)據(jù)存儲器49存儲區(qū)域的劃分存儲區(qū)域的劃分50(1 1)內(nèi)部數(shù)據(jù)存儲區(qū)()內(nèi)部數(shù)據(jù)存儲區(qū)(internal data memoryinternal data memory) 內(nèi)部數(shù)據(jù)存儲區(qū)(internal
35、data memory),共256個字節(jié)。這部分主要是作為程序的數(shù)據(jù)段。 前128 字節(jié),稱為DATA 區(qū)。該區(qū)可采用直接尋址方式來訪問。DATA區(qū)也以用R0 和R1間接尋址訪問。 后128個字節(jié),即從地址80H 開始的內(nèi)部數(shù)據(jù)存儲區(qū),用做特殊功能寄存器區(qū)(special function register memory),簡稱SFR。這些特殊功能寄存器用來控制計時器,計數(shù)器,串行I/O,I/O端口和外設的工作。只能直接尋址 注意:特殊功能寄存器并未占用特殊功能寄存器區(qū)的所有地址單元,即特殊功能寄存器是離散分布。51內(nèi)部數(shù)據(jù)存儲區(qū)的DATA區(qū)又可以細分為三個子段:四個工作寄存器組,每個寄存器組
36、包含8個寄存器,四個寄存器組共32 個字節(jié)。由PSW 的RS1 和RS0選擇四組寄存器的任意一組作為當前工作寄存器組。位尋址段BDATA, 包括16 個字節(jié),共128 位,每一位都可單獨尋址。也可以按字節(jié)進行尋址。一般數(shù)據(jù)存儲器,僅能按字節(jié)尋址,共80個字節(jié)。內(nèi)部數(shù)據(jù)存儲區(qū)(內(nèi)部數(shù)據(jù)存儲區(qū)(internal data memoryinternal data memory)52(2 2)外部數(shù)據(jù)存儲區(qū)()外部數(shù)據(jù)存儲區(qū)(external data memoryexternal data memory) 也稱為XDATA 區(qū)。XDATA區(qū)和CODE 區(qū)一樣也采用16 位地址尋址,即尋址空間可達64
37、KB。 該區(qū)通常包括一些通用數(shù)據(jù)存儲器或者一些需要通過總線接口訪問的外圍器件。 訪問外部數(shù)據(jù)區(qū)比訪問內(nèi)部數(shù)據(jù)區(qū)要慢,因為訪問外部數(shù)據(jù)區(qū)時,必須先將要訪問單元的16位地址裝載到數(shù)據(jù)指針寄存器DPTR中,然后才能通過DPTR采用間接訪問方式來訪問該單元。53 C51使用兩種修飾符來表示外部數(shù)據(jù)區(qū):xdata , pdata xdata :說明外部數(shù)據(jù)空間的所有64KB的地址空間。 pdata :指向外部數(shù)據(jù)空間中的大小為一頁(256字節(jié))的數(shù)據(jù)存儲空間。 注意:某些新型的51芯片有更大的XRAM(如16M的XRAM),一般用far類型來描述這些區(qū)域??梢苑謩e用 far 和const far 來訪問
38、位于擴充RAM空間中的變量和擴充ROM空間中的常量。 某些單片機芯片提供了片內(nèi)的XRAM空間,這種空間也使用和傳統(tǒng)的外部數(shù)據(jù)空間相同的指令來訪問外部數(shù)據(jù)存儲區(qū)(外部數(shù)據(jù)存儲區(qū)(external data memoryexternal data memory)54 說明:某些系列的單片機(如8052) 有額外的128 字節(jié)的內(nèi)部RAM, 同樣位于從80H 開始的內(nèi)部數(shù)據(jù)存儲地址空間中,稱為IDATA區(qū)。IDATA 區(qū)的地址和SFR的地址是重疊的,必須使用不同的尋址方式的指令來解決地址重疊問題。SFR區(qū)只能通過直接尋址來訪問, IDATA 區(qū)只能通過間接尋址來訪問。內(nèi)部數(shù)據(jù)存儲區(qū)(內(nèi)部數(shù)據(jù)存儲區(qū)(
39、internal data memoryinternal data memory)55(3 3)程序存儲區(qū)()程序存儲區(qū)(CODECODE) 程序存儲區(qū),也稱為CODE 區(qū),常用來存放可執(zhí)行代碼。代碼區(qū)的地址位數(shù)為16 位,即尋址空間可達64K。 一般情況,程序存儲區(qū)是只讀的,除了保存可執(zhí)行代碼,還可用于保存各種常量值,查找表等固定的數(shù)據(jù)結構。如:unsigned char code test=“hello!”;56存儲器類型的變量聲明舉例存儲器類型的變量聲明舉例char data var1;char code text = ENTER PARAMETER:;unsigned long xda
40、ta array100; float idata x,y,z;unsigned int pdata dimension;unsigned char xdata vector1044;說明:說明:聲明變量時聲明變量時存儲區(qū)修飾符和數(shù)存儲區(qū)修飾符和數(shù)據(jù)類型修飾符的位據(jù)類型修飾符的位置可以互換,即置可以互換,即char data x; 和和 data char x; 是完是完全等效的。不過從全等效的。不過從兼容性考慮,建議兼容性考慮,建議使用前一種格式。使用前一種格式。57變量類型修飾符總結變量類型修飾符總結 data: 速度最快,可以讀或寫操作,只有128字節(jié),可以省略,89C51單片機默認的變量
41、存儲位置就是128字節(jié)的片內(nèi)數(shù)據(jù)存儲區(qū)。 idata: 速度較快,可以讀或寫操作,只有128字節(jié),注意只存在于尾綴為52以上的單片機中,當data數(shù)據(jù)不夠可用idata。 xdata: 速度較慢,可以讀或寫操作,最多有64k字節(jié)(取決于外接的SRAM芯片容量),一般用于解決內(nèi)部SRAM不夠用同時對變量訪問不需要非??斓膽脠龊?。 code: 速度最慢,只讀,最多有64K字節(jié)(取決于內(nèi)部ROM與外部ROM容量之和)。一般用于存儲大量的只讀數(shù)據(jù)(如圖形液晶的數(shù)據(jù),文本數(shù)據(jù)等)58 定義數(shù)據(jù)的存儲類型通常遵循如下原則:定義數(shù)據(jù)的存儲類型通常遵循如下原則:只要條件滿足,盡量選擇內(nèi)部直接尋址的存儲類型d
42、ata,然后選擇idata即內(nèi)部間接尋址。對于那些經(jīng)常使用的變量要使用內(nèi)部尋址。在內(nèi)在內(nèi)部數(shù)據(jù)存儲器數(shù)量有限或不能滿足要求的情況下才使用外部部數(shù)據(jù)存儲器數(shù)量有限或不能滿足要求的情況下才使用外部數(shù)據(jù)存儲器。數(shù)據(jù)存儲器。選擇外部數(shù)據(jù)存儲器可先選擇pdatapdata類型,最后最后選用選用xdataxdata類型類型。 需指出,擴展片外存儲器,原理上雖很簡單,但在實際開發(fā)中,很多時候,會帶來不必要的麻煩,如可能降低系統(tǒng)穩(wěn)定性、增加成本、拉長開發(fā)和調(diào)試周期等,推薦充分利用片內(nèi)推薦充分利用片內(nèi)存儲空間。存儲空間。59另外,通常的單片機應用都是面對小型的控制,代碼比較短,對于程序存儲區(qū)的大小要求很低,常常
43、是片內(nèi)RAM很緊張而片內(nèi)Flash ROM很富裕,因此如果實時性要求不高,可考慮可考慮使用使用宏宏,以及將一些子函數(shù)的常量數(shù)據(jù)做成數(shù)據(jù)表,放置在程序存儲區(qū),當程序運行時,進入子函數(shù)動態(tài)調(diào)用下載至RAM即可,退出子函數(shù)后立即釋放該內(nèi)存空間。60定義變量時如果省略定義變量時如果省略“存儲器類型存儲器類型”選項,則按編譯時使用選項,則按編譯時使用的存儲器模式的存儲器模式來使用默認的存儲來使用默認的存儲器類型。器類型。默認存儲類型為默認存儲類型為data,訪問速度最快,容量小,訪問速度最快,容量小默認存儲類型為默認存儲類型為pdata默認存儲類型為默認存儲類型為xdata,訪問效率最低,代碼長,訪問效
44、率最低,代碼長,容量大容量大 數(shù)據(jù)存儲模式數(shù)據(jù)存儲模式61存儲模式(存儲模式(memory modelsmemory models) 如果在變量聲明時未聲明變量的存儲器類型,則該變量的存儲器類型,由程序的存儲模式來決定。 小模式(small model):默認data區(qū) 緊湊模式(compact model):默認pdata區(qū) 大模式(large model):默認xdata區(qū) 注意:除非應用在特殊的場合,否則SMALL存儲模式可以提供最快和最有效的代碼。 624.3.2 C514.3.2 C51語言的特殊功能寄存器及位變量定義語言的特殊功能寄存器及位變量定義 特殊功能器的定義 (1)使用關鍵
45、字定義sfr sfr IE = 0 xA8; (2)通過頭文件訪問SFR #include #include (3)特殊功能寄存器中的位定義 sbit CY = PSW7; sbit CY = 0 xD07; sbit CY = 0 xD7;63 位變量的C51定義 (1)位變量的C51定義 (2)函數(shù)可以包含類型為bit的參數(shù),也可將其作為返回值。 (3)位變量不能定義指針和數(shù)組。644.3.3 C514.3.3 C51語言的絕對地址訪問語言的絕對地址訪問65絕對宏絕對宏以字節(jié)形式對以字節(jié)形式對code區(qū)尋址;區(qū)尋址;以字形式對以字形式對code區(qū)尋址區(qū)尋址;以字節(jié)形式對以字節(jié)形式對data
46、區(qū)尋址區(qū)尋址;以字形式對以字形式對data區(qū)尋址;區(qū)尋址;以字節(jié)形式對以字節(jié)形式對xdata區(qū)尋址區(qū)尋址;以字形式對以字形式對xdata區(qū)尋址區(qū)尋址;以字節(jié)形式對以字節(jié)形式對pdata區(qū)尋址區(qū)尋址;以字形式對以字形式對pdata區(qū)尋址。區(qū)尋址?!纠科瑑?nèi)RAM、片外RAM及I/O的定義的程序如下:#include /*先聲明,再使用先聲明,再使用XBYTE和和DBYTE#define PORTA XBYTE0 xFFC0 /*將PORTA定義為外部I/O口,地址為0 xFFC0*/#define NRAM DBYTE0 x40 /*將NRAM定義為片內(nèi)RAM,地址為0 x40*/ main(
47、 ) PORTA=0 x3D; /*數(shù)據(jù)3DH寫入地址0 xFFC0的外部I/O端口PORTA */ NRAM=0 x01; /*將數(shù)據(jù)01H寫入片內(nèi)RAM的40H單元*/ 6667【例例】使用關鍵字_at_實現(xiàn)絕對地址的訪問,程序如下:void main(void) data unsigned char y1_at_0 x50; /*在data 區(qū)定義字節(jié)變量y1,它的地址為50H*/ xdata unsigned int y2_at_0 x4000; /*在xdata區(qū)定義字變量y2,地址為4000H*/ y1=0 xff; y1=0 x1234; while(1); 6869 C51的基
48、本運算與標準C類似,主要包括:算數(shù)運算;關系運算;邏輯運算;位運算;賦值運算及其表達式。 4.3.4 C514.3.4 C51的數(shù)據(jù)運算的數(shù)據(jù)運算70符號說明+加法運算-減法運算*乘法運算/除法運算%取模運算+自增1-自減1算術運算符及其說明算術運算符及其說明71 對于“/ /”和“% %”往往會有疑問。這兩個符號兩個符號都涉及除法運算,但“/”運算是取商,而“%” 運算為取余數(shù)。例如例如“5/35/3”的結果(商)的結果(商)為1,而“5%35%3”的結果的結果為2(余數(shù))。 自增和自減運算符是使變量自動加1或減1,自增和自減運算符放在變量前和變量之后是不同的。+i+i,-i-i:在使用:在
49、使用i i之前,先使之前,先使i i值加(減)值加(減)1 1。i+i+,i-i-:在使用:在使用i i之后,再使之后,再使i i值加(減)值加(減)1 1。72 例如:例如:若i=4,則執(zhí)行x=+i時,先使i加1,再引用結果,即x=5,運算結果為i=5,x=5。再如:再如:若i=4,則執(zhí)行x=i+時,先引用i值,即x=4,再使i加1,運算結果為i=5,x=4。73符號說明&邏輯與邏輯或!邏輯非74符號說明大于=大于或等于=小于或等于=等于!=不等于75 位運算是指進行二進制位的運算,在單片機編程中,常需要處理二進制位的問題。 例如:例如: 將寄存器的某一位或某幾位置1、清0與取反;將
50、一個存儲單元中各二進制位左移或右移N位,兩個數(shù)按位相加等等。 C語言中提供位運算的功能,更加貼近單片機硬件,與其他高級語言相比,具有很大的優(yōu)越性。76符號含義&按位與|按位或按位異或按位取反。一元運算符右移操作。右邊移出的位舍去,左邊移入的位對無符號數(shù)補0;對有符號數(shù)補符號位77 左移運算符() 用來將一個數(shù)的各二進位全部左移若干位,左高位溢出,右低位補0。 如b=a2;a=a2;a=2; a=15,左移2位等于多少? 高位左移后溢出,舍棄掉。在該數(shù)左移時被溢出舍棄的高位不包含1時,左移1位相當于該數(shù)乘以2. 152=? 143) 用來將一個數(shù)的各二進位全部右移若干位,左高位補0,右低
51、位溢出。 如b=a2;a=a2;a=2; a=15,左移2位等于多少? 低位右移后溢出,舍棄掉。 152=? 142=?79 按位異或運算符() 異或運算符的規(guī)則是參加運算的兩個二進制位相同為0(假),相異為1(真)。即 00=0;01=1;10=1;11=0; 例如:0 x2D0 x0F=0 x22,將十六進制數(shù)0 x2D與十六進制數(shù)0 x0F進行按位異或運算,高四位保持不變,低四位全部翻轉。通過按位運算可以實現(xiàn)對變量的某一位或某幾位取反操作。80取反運算符() 是一個單目運算符,用來對一個二進制數(shù)按位取反,即將0變1,1變0。例如48。 取反運算符常與移位運算符及按為與、按位或、按位異或運
52、算符結合使用以實現(xiàn)對某一位或某幾位清0、置1、取反的操作。81按位與運算符(&) 參加運算的兩個數(shù)據(jù),按二進制位進行與運算。按位或運算符(|) 參與按位或運算的二進制位中只要有一個為1,該位的結果為1 。 82編程實例編程實例( (流水燈編程演示)流水燈編程演示) 實現(xiàn)8位LED從左到右循環(huán) 實現(xiàn)8位LED左右來回循環(huán)L1L2L3L4L5L6L7L8L8L1L2L3L4L5L6L7XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P
53、0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52C122pFC222pFC310uFX1CRYSTALR910kR1220R3220R4220R5220R6220R2220R7220R8220D1LED-
54、REDD2LED-BLUED3LED-REDD4LED-BLUED5LED-REDD6LED-BLUED7LED-REDD8LED-BLUE83如何實現(xiàn)循環(huán)移位?如何實現(xiàn)循環(huán)移位?C51庫函數(shù)intrins.h函數(shù)原型 #include unsigned char _crol_(unsigned char c,unsigned char b);功能:將c向左循環(huán)移位b位函數(shù)原型 unsigned char _cror_(unsigned char c,unsigned char b);功能:將c向右循環(huán)移位b位用庫函數(shù)實現(xiàn)上述流水燈用庫函數(shù)實現(xiàn)上述流水燈例如: P0 = _cror_(P0,3
55、);/將P0帶位循環(huán)右移3位 84 例:unsigned char x=0 x55 ; unsigned char y=0 x37 ; unsigned char z; z=x&y ; 則z= z=x|y ; 則z= z=xy ; 則z= z=x; 則z= z=x1;則z=位運算符舉例位運算符舉例85位運算編程小竅門(將某一位置位運算編程小竅門(將某一位置1 1、置、置0 0、取反)、取反)將某一位置1(相應位與1進行按位或運算) 例:P0 | = (1 n); /將P0的第n位置1,其它位不變將某一位置0 (相應位與0按位進行與運算) 例:P0 & = (1 n); /將P0
56、的第n位置0,其它位不變將某一位取反(相應位與1進行按位異或運算) 例:P0 = ( 1 n ) 86按位與的用途按位與的用途某一位或某幾位清零而其它位保持原值如 原有數(shù)在P0寄存器中,為01011010,現(xiàn)要將其第一位清0,其它位保持不變。 則可與11111101進行按位與。 即 P0 = P0 & 0 xFD; 或 P0 &= 0 xFD 也可寫成 P0 &= (11);P0 & = (1 n); /將P0的第n位置0,其它位不變87按位與的用途按位與的用途取一個數(shù)中的某些指定位例:取單片機P0口的P0.2位狀態(tài)(1或0)可這樣操作: if(P0 &
57、(12) ; else.;88按位異或的用途按位異或的用途將某一位或某幾位取反(相應位與1進行按位異或運算) 例:P0 = ( 1 n )按位或的用途將某一位或某幾位置1(相應位與1進行按位或運算) 例:P0 | = (1 n); /將P0的第n位置1,其它位不變。89賦值、指針和取值運算符賦值、指針和取值運算符符號說明=賦值*指向運算符&取地址90復合賦值運算符 十種:, , , , ,。按優(yōu)先級順序結合運算。 例如: a+=b 等價于a=(a+b) x*=a+b 等價于x=(x*(a+b) a&=b 等價于a=(a&b) a=4 等價于a=(a4) 算術運算符、邏輯
58、運算符、關系運算算術運算符、邏輯運算符、關系運算符、賦值運算符的優(yōu)先級符、賦值運算符的優(yōu)先級賦值運算符的優(yōu)先級按照從右到左;其余都是從左到右。算術運算符、邏輯運算符、關系運算算術運算符、邏輯運算符、關系運算符、賦值運算符的優(yōu)先級符、賦值運算符的優(yōu)先級 【例例】 編寫程序將擴展的某編寫程序將擴展的某I/O口口PORTA()的)的PORTA.4清清0 ,PORTA.0置為置為1,程序如下:,程序如下: #define #define PORTA XBYTE0 xFFC0 void main( ) PORTA= ?; 94 計算機程序是由若干條有序的語句組成的。在程序執(zhí)行過程中一般有以下幾種情況:
59、在程序執(zhí)行過程中,程序按語句的順序逐條執(zhí)行,這稱為順序結構。 在程序執(zhí)行過程中,根據(jù)特定的條件選擇執(zhí)行某些語句,即程序執(zhí)行的順序根據(jù)條件來選擇,這稱為選擇結構。 在程序執(zhí)行過程中,根據(jù)某個條件是否成立重復執(zhí)行一段程序,直到該條件不成立為止,即程序的執(zhí)行順序在某處循環(huán),這稱為循環(huán)結構。 程序是由順序、選擇、循環(huán)這三種結構構成的復雜組合。 4.3.5 C514.3.5 C51程序設計的三種基本結構程序設計的三種基本結構95 C語言的語句用來向計算機系統(tǒng)發(fā)出操作指令,C語言中語句是以分號為結束標志的。 C語言中語句可分為以下幾類: 控制語句:控制程序運行的語句。 空語句:只有一個分號的語句,稱為空語
60、句,它不進行任何操作。 表達式語句:表達式后面加上分號就構成一個表達式語句。函數(shù)調(diào)用語句也是表達式語句,由函數(shù)調(diào)用加分號構成。 復合語句:可以把多個語句用括起來,就成為復合語句,多用于選擇或循環(huán)結構中。 注釋語句:在C51中,由/*、*/符號對包含的內(nèi)容以及雙斜杠/后面的內(nèi)容均表示注釋語句。編程人員使用注釋語句來解釋程序的功能,標注修改時間等。96語句功能ifelse條件語句for()循環(huán)語句while()循環(huán)語句dowhile()循環(huán)語句continue結束本次循環(huán)語句break中止執(zhí)行switch語句或循環(huán)語句switchcase多分支選擇語句goto轉向語句return從函數(shù)返回語句97 順序結構順序結構是從前往后依次執(zhí)行語句。從整體上看所有程序都是順序結構,只不過中間某些部分是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 飼料行業(yè)安全管理工作總結
- 2025年高考歷史一輪復習之人民當家作主
- 醫(yī)療器械行業(yè)市場推廣活動總結
- 兒科門診護理工作總結
- 網(wǎng)絡行業(yè)運營員培訓心得
- 音樂行業(yè)客服工作總結
- 美容美發(fā)店前臺服務感悟
- 2024年美術教案(匯編9篇)
- 力瓦工程合同(2篇)
- 沖刺班協(xié)議書(2篇)
- GA/T 1740.2-2024旅游景區(qū)安全防范要求第2部分:湖泊型
- 2023年開封糧食產(chǎn)業(yè)集團有限公司招聘筆試真題
- 2024年全國“紀檢監(jiān)察”業(yè)務相關知識考試題庫(附含答案)
- 2025年社區(qū)工作者考試試題庫及答案
- 期末檢測卷(三)2024-2025學年人教PEP版英語四年級上冊(含答案無聽力原文無聽力音頻)
- 2024-2030年中國兒童內(nèi)衣行業(yè)運營狀況及投資前景預測報告
- 吉首大學《高等數(shù)學》2023-2024學年第一學期期末試卷
- 打印和復印服務協(xié)議
- 針灸習題庫(附參考答案)
- 前置胎盤手術配合
- 期末試卷(試題)-2024-2025學年五年級上冊數(shù)學北師大版
評論
0/150
提交評論