版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機原理與應(yīng)用第3章指令系統(tǒng)與匯編語言程序設(shè)計內(nèi)容指南:單片機的工作就是執(zhí)行程序,而程序是指令的有序集合。匯編語言是最基本的編程方式,而C語言則是單片機程序開發(fā)的主流。對于應(yīng)用C語言程序開發(fā)的讀者來說,了解單片機的指令系統(tǒng)和匯編語言也是十分必要的。本章主要介紹AT89S51單片機的指令系統(tǒng)與匯編語言程序設(shè)計。學習目標:掌握51單片機指令系統(tǒng)與匯編語言程序的基本概念。了解51單片機匯編指令的分類、語法規(guī)則、功能及程序用法。了解匯編語言程序設(shè)計步驟及編程方法。第3章指令系統(tǒng)與匯編語言程序設(shè)計3.1指令系統(tǒng)概述3.2尋址方式3.3指令詳解3.4匯編語言程序設(shè)計
第3章指令系統(tǒng)與匯編語言程序設(shè)計數(shù)據(jù)傳送類(28條)算術(shù)運算類(24條)邏輯運算類(25條)控制轉(zhuǎn)移類(17條)位操作類(17條)指令系統(tǒng)——計算機中全部指令的集合51單片機共有111條指令,按功能可劃分為五大類:指令——CPU用于指揮功能部件完成某一指定動作的指示
和命令第3章指令系統(tǒng)與匯編語言程序設(shè)計CPU能直接識別并執(zhí)行的指令是機器語言指令,表現(xiàn)形式為二進制編碼。例如:0111010010101011機器語言指令顯然不利于閱讀與編程第3章指令系統(tǒng)與匯編語言程序設(shè)計為了改善可讀性約定了一些能反應(yīng)機器指令功能的單詞來代表該機器指令把內(nèi)部的各種資源符號化!!0111010010101011MOVA,#0ABH匯編指令機器指令第3章指令系統(tǒng)與匯編語言程序設(shè)計易懂的單詞ADDCLRSETBRETJMPSWAPNOPACCBDPTRP0TMODSBUF資源符號化第3章指令系統(tǒng)與匯編語言程序設(shè)計編譯器就是將“高級語言”翻譯為“機器語言”的程序KeiluVision4MicrosoftVisualC++6.0第3章指令系統(tǒng)與匯編語言程序設(shè)計匯編語言:用助記符號表示指令的計算機語言匯編指令集、偽指令和使用他們的規(guī)則的統(tǒng)稱特點1.與機器相關(guān)性不同型號CPU有不同的機器指令系統(tǒng),也就有不同的匯編語言2.執(zhí)行效率高匯編直接對硬件操作3.編寫程序較為復雜匯編語言要安排運算的每一個細節(jié)4.匯編語言用到大量的各類轉(zhuǎn)移指令,這些跳轉(zhuǎn)指令加大了調(diào)試的難度第3章指令系統(tǒng)與匯編語言程序設(shè)計使用領(lǐng)域:要求執(zhí)行效率高,反應(yīng)快的領(lǐng)域如:操作系統(tǒng)內(nèi)核,實時系統(tǒng)與硬件資源密切相關(guān)的軟件開發(fā)如:設(shè)備驅(qū)動程序受存儲容量限制的應(yīng)用領(lǐng)域如:家用電器的計算機控制功能沒有適當?shù)母呒壵Z言開發(fā)環(huán)境不宜使用的領(lǐng)域:大型軟件的整體開發(fā)第3章指令系統(tǒng)與匯編語言程序設(shè)計匯編語言(AssemblyLanguage)——用助記(字)符代替操作碼,用地址符號代替地址碼的一種面向機器的程序設(shè)計語言;本章學習目標:了解匯編語言的一般規(guī)則,借助指令手冊能讀懂匯編程序。匯編語言特點——代碼精煉、執(zhí)行速度快,但不便于編寫較復雜的程序;匯編程序處理過程——輸入源程序→檢查語法正確性(如有語法錯誤,輸出錯誤信息)→翻譯成二進制目標程序。第3章指令系統(tǒng)與匯編語言程序設(shè)計一條匯編語言指令中最多包含4個區(qū)段,其一般格式為:
[標號:]操作碼[操作數(shù)][;注釋]標號(標識符)當前指令行的符號地址,其值為
該指令的機器碼首字節(jié)在ROM中的存放地址;標號由英文字母開頭的1~6個字符組成,不區(qū)分大小寫;標號與(英文)冒號可以同時省略。………….…….0122H0123H0124H…….
xxH
xxH
xxH
74H
12HROMSTART→
[標號:]
操作碼[操作數(shù)][;注釋] ……START:MOVA,#12H;機器碼7412H ……例如:第3章指令系統(tǒng)與匯編語言程序設(shè)計
[標號:]
操作碼
[操作數(shù)][;注釋]操作碼是指令的操作行為,由操作碼助記字符表征;51單片機共有42種操作碼助記符,不區(qū)分大小寫。MOVA,#12H;
move(傳送)SETBP1.0 ;setbit(置位)CJNEA,R0,START;compareandjumpifnotequal(比較跳轉(zhuǎn))舉例:第3章指令系統(tǒng)與匯編語言程序設(shè)計
[標號:]操作碼
[操作數(shù)]
[;注釋]操作數(shù)是指令的操作對象,用操作數(shù)簡記符表示,不區(qū)分大小寫;操作數(shù)可以是3個、2個、1個或沒有操作數(shù);操作數(shù)大于1時要用(英文)逗號隔開。CJNEA,R0,START;若A≠R0,轉(zhuǎn)STARTADDA,#10H ;A+10H→ACRLA ;A←0RET ;子程序返回舉例:第3章指令系統(tǒng)與匯編語言程序設(shè)計
[標號:]操作碼[操作數(shù)]
[;注釋]注釋是對指令的解釋性說明,用以提高程序的可讀性;可用任何文字或符號描述,可以省略;由(英文)分號開始,無需結(jié)束符號。MOVA,#12H;立即數(shù)12H→ASETBP1.0 ;P1.0←1CJNEA,R0,START;若A≠R0,轉(zhuǎn)START
舉例:第3章指令系統(tǒng)與匯編語言程序設(shè)計指令手冊中,每條指令的操作數(shù)卻是以簡記符號表示的。掌握簡記符號規(guī)則→便于閱讀源程序(查指令手冊)真實指令中一般都含有具體的操作數(shù),例如:MOVA,R3或MOVA,#35H第3章指令系統(tǒng)與匯編語言程序設(shè)計簡記符號Rn(n=0~7)-當前工作寄存器組中的寄存器R0~R7之一Ri(i=0,1)-當前工作寄存器組中的寄存器R0或R1@----------間址寄存器前綴#data------8位立即數(shù)/#data16-----16位立即數(shù)direct------片內(nèi)低128個RAM單元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范圍:-128~+127bit---------片內(nèi)RAM位地址、SFR的位地址(X)------表示X地址單元或寄存器中的內(nèi)容((X))------由X間接尋址的單元中的內(nèi)容←----------箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所取代/----------位操作數(shù)的取反操作前綴第3章指令系統(tǒng)與匯編語言程序設(shè)計尋址方式是對操作數(shù)存在規(guī)律的歸納,一條指令究竟屬于哪種尋址方式往往并不重要,也不會影響它的使用,因而不必過意追究。51單片機共有七種尋址方式:直接尋址、寄存器尋址、寄存器間接尋址、立即尋址、變址尋址、位尋址、相對尋址。尋址方式越多,單片機的功能就越強;CPU取得操作數(shù)的方法稱為尋址方法
尋址方式第3章指令系統(tǒng)與匯編語言程序設(shè)計立即尋址操作數(shù)在指令編碼中尋址空間:ROM對于MOVDPTR,#2100H指令,立即數(shù)高8位“21H”裝入DPH
【例】執(zhí)行MOVA,#50H
結(jié)果:(A)=50H
MOV A,#100MOV 33H,#10H
MOV R0,#0FFH
第3章指令系統(tǒng)與匯編語言程序設(shè)計寄存器尋址操作數(shù)在寄存器中尋址范圍:R0~R7、A、B、DPTR【例】若(R0)=30H,
執(zhí)行MOVA,R0后,(A)=30H
MOV A,R0
ADD A,R5
MOV
R7,A INCDPTR
第3章指令系統(tǒng)與匯編語言程序設(shè)計直接尋址指令中的操作數(shù)直接以單元地址的形式給出尋址空間:片內(nèi)RAM低128字節(jié);SFR(符號形式)另一類直接尋址是轉(zhuǎn)移目標地址的尋址。如:LJMPADDR16【例】若(50H)=3AH,
執(zhí)行MOVA,50H后,(A)=3AH
MOV A,30HMOV 50H,BADD A,60HMOVA,P1第3章指令系統(tǒng)與匯編語言程序設(shè)計寄存器間接尋址寄存器中的內(nèi)容是操作數(shù)的地址尋址空間:片內(nèi)RAM(@Ri、SP) 片外RAM(@Ri、@DPTR)【例】若(R0)=30H,(30H)=5AH
執(zhí)行MOVA,@R0后,(A)=5AH
MOV A,@R0MOV @R1,AADD A,@R0MOVXA,@DPTR第3章指令系統(tǒng)與匯編語言程序設(shè)計位尋址(實質(zhì)屬于位的直接尋址)尋址位數(shù)據(jù)尋址空間:片內(nèi)RAM位空間、SFR位空間【例】位地址00H內(nèi)容為1,MOVC,00H執(zhí)行后,位地址PSW.7的內(nèi)容為1。位地址的表示方法:用位名稱如P1.5,Cy用位地址如95HMOV C,30HCLRCSETB20HCPLP1.0第3章指令系統(tǒng)與匯編語言程序設(shè)計變址尋址操作數(shù)地址:基地址+偏移量尋址空間:ROM【例】(A)=0FH,(DPTR)=2400H
執(zhí)行MOVCA,@A+DPTR(A)=88HMOVC
A,@A+DPTRMOVC
A,@A+PCJMP@A+DPTR第3章指令系統(tǒng)與匯編語言程序設(shè)計相對尋址用于跳轉(zhuǎn)指令,實現(xiàn)程序分支Rel常用符號地址表示,離源地址不要超過(-128~+127)
【例】若rel為75H,PSW.7為1,JCrel存于1000H開始的單元。執(zhí)行JCrel指令后,程序?qū)⑻D(zhuǎn)到1077H單元取指令并執(zhí)行。
JCrelJBP1.3,ALARMJZNEXTDJNZR7,LOOP第3章指令系統(tǒng)與匯編語言程序設(shè)計——可實現(xiàn)RAM、SFR和ROM之間的數(shù)據(jù)互傳或交換數(shù)據(jù)傳送與交換類指令
指令分類介紹第3章指令系統(tǒng)與匯編語言程序設(shè)計第3章指令系統(tǒng)與匯編語言程序設(shè)計數(shù)據(jù)傳送與交換類指令共有8種操作碼: MOV用于訪問片內(nèi)RAM MOVX用于訪問片外RAM MOVC用于訪問程序存儲器 XCH和XCHD用于字節(jié)交換 SWAP用于A內(nèi)半字節(jié)交換 PUSH和POP用于堆棧操作第3章指令系統(tǒng)與匯編語言程序設(shè)計數(shù)據(jù)傳送類指令的基本通式為:
<
transfer>
<dest>,<src>表示將源操作數(shù)(src)的內(nèi)容傳送給目的操作數(shù)
(dest),傳送后源操作數(shù)中內(nèi)容不變。transfer具有三種具體形式:MOV——數(shù)據(jù)在片內(nèi)RAM范圍內(nèi)傳送MOVX——數(shù)據(jù)在A與片外RAM之間傳送MOVC——數(shù)據(jù)在A與ROM之間傳送第3章指令系統(tǒng)與匯編語言程序設(shè)計單向箭頭表示只能從源到目的雙向箭頭表示源和目的可以互換位置弧線箭頭表示源和目的相同(唯一)箭頭線旁邊的文字是相應(yīng)的操作碼基本規(guī)律:①立即數(shù)和ROM地址只能作為源操作數(shù)(單向箭頭);②內(nèi)外ROM與A的數(shù)據(jù)傳送只能用MOVC操作碼助記符;③片外RAM與A的數(shù)據(jù)傳送只能用MOVX操作碼助記符;④PUSH、POP、SWAP只有1個操作數(shù)(弧線箭頭);⑤位數(shù)據(jù)傳送只能在C(即Cy標志位)與bit間進行。數(shù)據(jù)傳送目的和源的快捷記憶法第3章指令系統(tǒng)與匯編語言程序設(shè)計算術(shù)運算類指令
——可實現(xiàn)加、減、乘、除和增1、減1等運算功能第3章指令系統(tǒng)與匯編語言程序設(shè)計算術(shù)運算類指令共有8種操作碼: ADD用于不帶進位加法 ADDC用于帶進位加法 SUBB用于帶借位減法 INC和DEC用于加1和減1 MUL用于乘法 DIV用于除法
DA用于十進制加法調(diào)整第3章指令系統(tǒng)與匯編語言程序設(shè)計特點:①除加1和減1外,都需以累加器A為目的操作數(shù);②一般都會影響PSW中的CY、AC、OV和P四個標志位。AC算術(shù)運算類指令快捷記憶法第3章指令系統(tǒng)與匯編語言程序設(shè)計邏輯運算及移位類指令
——可實現(xiàn)與、或、異或、求反、置1、清0、移位等功能第3章指令系統(tǒng)與匯編語言程序設(shè)計邏輯運算及移位類指令共有10種操作碼: ANL用于邏輯與運算 ORL用于邏輯或運算 XRL用于邏輯異或運算 SETB和CLR用于置1和清0 CPL用于取反 RL和RR于循環(huán)左移和循環(huán)右移
RLC和RRC用于帶C循環(huán)左移和帶C循環(huán)右移第3章指令系統(tǒng)與匯編語言程序設(shè)計特點:字節(jié)運算以A為目的操作數(shù)(#data與direct的運算例外),位運算以C為目的操作數(shù)。CLRCPLCLRSETB邏輯運算指令快捷記憶法第3章指令系統(tǒng)與匯編語言程序設(shè)計特點:只能針對A進行操作左移1位相當于乘2,右移1位相當于除2。功能:對累加器A進行循環(huán)移位操作循環(huán)移位指令的四種移位關(guān)系第3章指令系統(tǒng)與匯編語言程序設(shè)計控制轉(zhuǎn)移類指令
——通過改變程序計數(shù)器PC值,實現(xiàn)程序轉(zhuǎn)移功能
第3章指令系統(tǒng)與匯編語言程序設(shè)計控制轉(zhuǎn)移類指令共有18種操作碼:AJMP、SJMP、LJMP、JMP用于無條件轉(zhuǎn)移ACALL和LCALL用于子程序調(diào)用RET和RETI用于子程序和中斷返回JZ、JNZ、CJNE和DJNZ用于字節(jié)條件轉(zhuǎn)移
JC、JNC、JB、JNB和JBC用于位條件轉(zhuǎn)移NOP用于空操作第3章指令系統(tǒng)與匯編語言程序設(shè)計功能:根據(jù)轉(zhuǎn)移地址修改PC當前值;轉(zhuǎn)移地址:LJMP——16位;AJMP——11位;
SJMP——8位;JMP——16位特點:前三項都可用語句標號代替具體地址;
(例如LJMPSTART或SJMP$)
第四項為變址尋址轉(zhuǎn)移指令
PC←A+@DPTR無條件轉(zhuǎn)移第3章指令系統(tǒng)與匯編語言程序設(shè)計功能:根據(jù)轉(zhuǎn)移地址(rel)修改PC當前值;特點:rel值為-128~127,可用語句標號代替;
例如JCSMALL以rel表示操作數(shù)的存在方式——相對尋址條件轉(zhuǎn)移指令快捷記憶法
第3章指令系統(tǒng)與匯編語言程序設(shè)計偽指令
匯編語言指令的兩類指令:真指令(指令性語句)——匯編后可以產(chǎn)生機器碼的指令,如前介紹的111條指令;偽指令(指示性語句)——用于指示匯編系統(tǒng)軟件要完成的操作,一般不產(chǎn)生機器碼常用的偽指令:
ORG、END、EQU、DATA、BIT、DB第3章指令系統(tǒng)與匯編語言程序設(shè)計
MCS-51常用偽指令偽指令名稱格式功能描述ORG(Oringin)程序起始地址ORG16位地址用于定義匯編程序或數(shù)據(jù)在ROM中存放的起始地址EQU(Equate)等值指令標識符EQU數(shù)或匯編符號用于將一個數(shù)值或匯編符號賦給該標示符DATA(Data)數(shù)據(jù)地址賦值標識符DATA內(nèi)存字節(jié)地址用于將一個內(nèi)部RAM的地址賦給該標示符BIT(Bit)位地址賦值標識符DATA位地址或位名稱用于將一個位地址或位名稱賦給該標示符DB(DefineByte)定義字節(jié)[標號:]DB<項或項表>用于把項或項表中的字節(jié)(8位)數(shù)值依次存入標號開始的存儲單元中END(End)結(jié)束匯編END用于指示匯編源程序段結(jié)束第3章指令系統(tǒng)與匯編語言程序設(shè)計匯編語言程序設(shè)計步驟
分析問題,確定算法或解題思路
畫程序流程圖編寫匯編程序程序調(diào)試與修改用匯編語言進行程序設(shè)計的過程和用高級語言進行程序設(shè)計的過程類似,一般需要經(jīng)過以下幾個步驟:第3章指令系統(tǒng)與匯編語言程序設(shè)計流程圖(程序框圖)表示程序的執(zhí)行過程或解題步驟和方法給出程序的結(jié)構(gòu),體現(xiàn)整體與部分之間的關(guān)系便于閱讀、理解程序,查找錯誤起始第3章指令系統(tǒng)與匯編語言程序設(shè)計【例3-17】電路如圖3-8所示,AT89S51單片機的P2口作輸出,經(jīng)上拉電阻驅(qū)動連接8只發(fā)光二極管D1~D8,當輸出位為1時發(fā)光二極管點亮;輸出位為0時發(fā)光二極管熄滅。試編制程序?qū)崿F(xiàn)以下發(fā)光二極管點亮的功能:D1D8亮其余滅→延時→D2D7亮其余滅→延時→D3D6亮其余滅→延時→D4D5亮其余滅→延時→D3D6亮其余滅→延時→D2D7亮其余滅→延時→D1D8亮其余滅,重復上述過程。第3章指令系統(tǒng)與匯編語言程序設(shè)計①確定解決方案高電平驅(qū)動的發(fā)光二極管,寫1燈亮,寫0燈滅;循環(huán)改寫P2.0~P2.7;通過軟件延時子程序調(diào)節(jié)P2口輸出頻率。第3章指令系統(tǒng)與匯編語言程序設(shè)計②畫程序流程圖盡可能詳細地表示出每一相關(guān)環(huán)節(jié)的內(nèi)容
③編寫匯編程序第3章指令系統(tǒng)與匯編語言程序設(shè)計④程序編譯調(diào)試第3章指令系統(tǒng)與匯編語言程序設(shè)計實際運行效果:第3章指令系統(tǒng)與匯編語言程序設(shè)計單片機原理與應(yīng)用第4章單片機的C語言程序設(shè)計內(nèi)容指南本章主要介紹C51語言的數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)、C51語言的運算符與表達式、C51語言的函數(shù)等編程基礎(chǔ),在此基礎(chǔ)上結(jié)合Keil
uVision編譯調(diào)試環(huán)境和Proteus仿真設(shè)計環(huán)境,重點討論了單片機并行I/O口的C51編程應(yīng)用。學習目標掌握C51語言的數(shù)據(jù)結(jié)構(gòu)和編程相關(guān)基礎(chǔ)。熟悉KeiluVision編譯調(diào)試環(huán)境和Proteus仿真設(shè)計環(huán)境的使用。掌握常用外設(shè)和單片機I/O的連接原理及編程方法。第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計匯編語言能直接操作單片機的系統(tǒng)硬件,程序代碼效率高。但其程序可讀性差,且編寫、移植困難。
C51是為51內(nèi)核單片機設(shè)計的一種C語言,其特點:C51語言已成為51系列單片機程序開發(fā)的主流軟件方法。結(jié)構(gòu)化語言,代碼緊湊——效率可與匯編語言媲美接近真實語言,程序可讀性強——易于調(diào)試、維護庫函數(shù)豐富,編程工作量小——產(chǎn)品開發(fā)周期短機器級控制能力,功能很強——適合于嵌入式系統(tǒng)開發(fā)與匯編指令無關(guān),易于掌握——在單片機基礎(chǔ)上上手快第4章單片機的C語言程序設(shè)計4.1C51語言的數(shù)據(jù)結(jié)構(gòu)4.2C51語言的運算符與表達式
4.3C51語言的函數(shù)4.4C51的程序結(jié)構(gòu)4.5C51開發(fā)調(diào)試環(huán)境4.6并行I/O口的應(yīng)用編程
第4章單片機的C語言程序設(shè)計4.1C51的數(shù)據(jù)結(jié)構(gòu)、C51的數(shù)據(jù)類型C51支持標準C中的基本數(shù)據(jù)類型,包括字符型char、整型int、長整型long和浮點型float。對整數(shù)類型,又可以分為signed(有符號數(shù))和unsigned(無符號數(shù))兩種。若聲明為signed,編譯器會將整數(shù)部分的最高位解釋為符號位。此外,根據(jù)51內(nèi)核單片機存儲結(jié)構(gòu)的特點,C51增加了一些特有的數(shù)據(jù)類型,包括普通位類型bit、特殊功能寄存器可尋址位sbit、特殊功能寄存器sfr和sfr16。普通位類型bitAT89S51/S52單片機中,片內(nèi)RAM地址0x20~0x2f共16個字節(jié)是可以位尋址的。因此,C51中專門規(guī)定了位變量類型來方便這部分內(nèi)存的訪問。在C51中,用關(guān)鍵詞bit定義一個位變量,格式如下: bit
bit_name[=0或1]; 例如:bitdoor=0;//定義一個叫door的位變量且初值為0 可見與標準C的數(shù)據(jù)類型聲明的語法規(guī)則是一致的。第4章單片機的C語言程序設(shè)計
特殊功能寄存器可尋址位sbit對于可位尋址的特殊功能寄存器,可以使用sbit關(guān)鍵字將特殊功能寄存器位聲明為位變量以方便訪問。C51提供了以下三種方法聲明特殊功能寄存器位變量:(1)第1種方法
sbit
位名=特殊功能寄存器名^位置;(2)第2種方法
sbit
位名=字節(jié)地址^位置;(3)第3種方法
sbit
位名=位地址;第4章單片機的C語言程序設(shè)計例:
sfrPSW=0xD0;
sbitOV=PSW^2;
sbitOV=0xD0^2;
sbitOV=0xD2;第4章單片機的C語言程序設(shè)計特殊功能寄存器sfr和sfr16關(guān)鍵詞sfr或sfr16用于定義SFR字節(jié)地址變量,格式如下:sfr
sfr_name=
字節(jié)地址常數(shù);sfr16sfr_name=
字節(jié)地址常數(shù);例如, sfrP0=0x80;//定義P0口地址80H
sfrPCON=0x87;//定義PCON地址87H sfr16DPTR=0x82;//定義DPTR的低地址82H第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計2.C51的變量
在程序執(zhí)行過程中,數(shù)值可以發(fā)生改變的量稱為變量。變量的基本屬性是變量名和變量值。變量名與存儲單元地址相對應(yīng)(變量名就是數(shù)據(jù)的符號地址),變量值與存儲單元的內(nèi)容相對應(yīng)。例如第4章單片機的C語言程序設(shè)計【存儲種類】
數(shù)據(jù)類型
【存儲類型】
變量名;(標準C)(標準C)C51變量定義的四要素:(C51特有)(標準C+C51)括號項【】——可以缺省數(shù)據(jù)類型和變量名不能缺省要在C51程序中使用變量必須先對其進行定義。第4章單片機的C語言程序設(shè)計【存儲種類】
數(shù)據(jù)類型
【存儲類型】
變量名存儲種類用于說明變量的作用范圍:1、auto(自動型)——變量的作用范圍在定義它的函數(shù)體或語句塊內(nèi)。執(zhí)行結(jié)束后,變量所占內(nèi)存即被釋放。2、extern(外部型)——在一個源文件中被定義為外部型的變量,在其它源文件中需要通過extern說明方可使用。3、static(靜態(tài)型)——利用static可使變量定義所在的函數(shù)或語句塊執(zhí)行結(jié)束后,其分配的內(nèi)存單元繼續(xù)保留。4、register(寄存器型)——目前已不推薦使用。缺省存儲種類為auto(自動)型變量第4章單片機的C語言程序設(shè)計數(shù)據(jù)類型用于表示數(shù)據(jù)存放格式,C51支持的基本數(shù)據(jù)類型與標準C相同:*有符號數(shù)類型可以忽略signed標識符【存儲種類】
數(shù)據(jù)類型
【存儲類型】
變量名C51編譯器在頭文件“REG51.H”中定義了全部sfr/sfr16和sbit類型變量。用一條預(yù)處理命令#include<REG51.H>把這個頭文件包含到C51程序中,無需重新定義即可直接使用它們的名稱。第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計編程舉例:【存儲種類】
數(shù)據(jù)類型
【存儲類型】
變量名存儲類型體現(xiàn)了變量的存放區(qū)域。51系列單片機共有6個存儲類型(分布在3個邏輯存儲空間中)。data區(qū)code區(qū)xdata區(qū)bdata區(qū)pdata區(qū)idata區(qū)第4章單片機的C語言程序設(shè)計不同存儲類型的特點SMALL系統(tǒng)COMPACT系統(tǒng)LARGE系統(tǒng)編譯模式第4章單片機的C語言程序設(shè)計三種編譯模式分別對應(yīng)于三種缺省存儲類型:如果定義變量時省略存儲類型,編譯器會自動默認存儲類型(由編譯模式?jīng)Q定存儲類型,默認SMALL模式)3種編譯模式分別對應(yīng)于3種缺省存儲類型:第4章單片機的C語言程序設(shè)計【存儲種類】
數(shù)據(jù)類型
【存儲類型】
變量名C51編譯器可根據(jù)當前采取的編譯模式自動認定默認的存儲類型約定:若無特殊聲明,一般均為“SMALL編譯模式”變量名可以由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線,變量名長度隨編譯系統(tǒng)而定。變量名具有字母大小寫的敏感性,如SUM和sum代表不同的變量。強調(diào):頭文件中定義的變量都是大寫的,若程序采取小寫變量則需要重新定義?!敬鎯ΨN類】
數(shù)據(jù)類型
【存儲類型】
變量名第4章單片機的C語言程序設(shè)計C51擴展的若干關(guān)鍵字一覽表
變量名不得使用標準C語言和C51語言的關(guān)鍵字。第4章單片機的C語言程序設(shè)計unsignedchardatasystem_status=0;
//定義system_status為無符號字符型自動變量,該變量位于data區(qū)中且初值為0。數(shù)據(jù)結(jié)構(gòu)定義舉例變量名為system_status位與片內(nèi)RAM區(qū)無符號字符型自動型初值為零第4章單片機的C語言程序設(shè)計unsignedcharbdata
status_byte;
unsignedintcodeunit_id[2]={0x1234,0x89ab};
staticcharm,n;
//定義status_byte為無符號字符型自動變量,該變量位于bdata區(qū)//定義unit_id[2]為無符號整型自動變量,該變量位于code區(qū)中,是長度為2的數(shù)組,且初值為0x1234和0x89ab。//定義m和n為2個位于data區(qū)中的有符號字符型靜態(tài)變量。第4章單片機的C語言程序設(shè)計3、C51的數(shù)組構(gòu)造數(shù)據(jù)類型之一數(shù)組:有序數(shù)據(jù)的集合,用數(shù)組名標識元素:屬同一數(shù)據(jù)類型,用數(shù)組名和下標確定第4章單片機的C語言程序設(shè)計一維數(shù)組的定義:數(shù)據(jù)類型數(shù)組名[常量表達式];
合法標識符表示元素個數(shù)例
inta[6];a[0]a[1]a[2]a[3]a[4]a[5]a編譯時分配連續(xù)存儲地址存儲字節(jié)數(shù)=數(shù)組維數(shù)*
sizeof(元素數(shù)據(jù)類型)數(shù)組名是表示數(shù)組首地址的地址常量第4章單片機的C語言程序設(shè)計一維數(shù)組的初始化
inta[5]={1,2,3,4,5};等價于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;說明:數(shù)組不初始化,其元素值為隨機數(shù)當全部數(shù)組元素賦初值時,可不指定數(shù)組長度
inta[]={1,2,3,4,5,6};編譯系統(tǒng)根據(jù)初值個數(shù)確定數(shù)組維數(shù)注意:數(shù)組的下標是從0開始第4章單片機的C語言程序設(shè)計一維數(shù)組的引用數(shù)組必須先定義,后使用只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組引用形式:數(shù)組名[下標]其中:下標從0開始到n-1,不能越界,下標可以是變量、常量或整型表達式。例inta[10];
printf(“%d”,a);(
)必須for(j=0;j<10;j++)
printf(“%d\t”,a[j]);(
)第4章單片機的C語言程序設(shè)計數(shù)組元素也可以用指針來引用指向數(shù)組元素的指針變量例intarray[10];
int*p=&array[0](或int*p=array);array[0]array[1]array[2]array[3]array[9]...整型指針p&array[0]parray[i]
*(p+i)這里的*是取值運算符第4章單片機的C語言程序設(shè)計4、C51的指針
指針:一個變量的地址稱為該變量的“指針”指針變量:存儲變量地址(指針)的變量稱為“指針變量”指針的值:某個變量在內(nèi)存中的首地址指針的類型:該指針所指向的變量的類型直接訪問(直接尋址):通過變量名來訪問間接訪問(間接尋址):通過變量的指針來訪問第4章單片機的C語言程序設(shè)計指針指針變量指針的值指針的類型直接尋址間接尋址第4章單片機的C語言程序設(shè)計chara,b;char*p;p=&a;*p=10;b=*p指針有關(guān)的運算符*取值運算符&取地址運算符(直接尋址)(間接尋址)char*p=&a;標準C語言指針的一般定義形式為:
數(shù)據(jù)類型*指針變量名[=&被指向變量名];其中,數(shù)據(jù)類型說明了該指針變量所指向的變量的類型。第4章單片機的C語言程序設(shè)計例:int*pointer;//定義一個指向整型變量的指針變量pointer注意:指針變量名前的“*”號表示該變量為指針變量,但指針變量名是pointer而不是*pointer。例:inta=’A’;int*p1=&a;這表示p1是一個指向int型變量的指針變量,此時p1的值為int型變量a的地址。對于C51,除了數(shù)據(jù)類型外,指針定義中還應(yīng)包含以下信息:1)指針變量自身位于哪個存儲區(qū)中?
2)被指向變量位于哪個存儲區(qū)中?故C51指針的一般定義形式:數(shù)據(jù)類型[存儲類型1]*[存儲類型2]指針變量名[=&被指向變量名]數(shù)據(jù)類型——被指向變量的類型,如int型或char型存儲類型1——被指向變量所在的存儲區(qū),缺省時由地址賦值關(guān)系決定存儲類型2——指針變量所在的存儲區(qū),缺省時為編譯器默認的存儲區(qū)第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計如缺省存儲類型,C51編譯器會根據(jù)當前編譯模式默認存儲類型,例如:
inta=’A’; int*p1=&a;這表示p1是一個指向int型變量的指針變量,此時p1的值為int型變量a的地址,而a和p1兩個變量都位于C編譯器默認的內(nèi)存區(qū)中。第4章單片機的C語言程序設(shè)計4.2C51語言的運算符與表達式1.算術(shù)運算符C51語言的運算符與表達式與標準C語言相同C51語言中的算術(shù)運算符有:+加法運算符-減法運算符*乘法運算符。/除法運算符。%模(求余)運算符。用算術(shù)運算符和括號將運算對象連接起來的式子稱為算術(shù)表達式,其中的運算對象包括常量,變量,函數(shù),數(shù)組等等。算術(shù)運算符的優(yōu)先級規(guī)定為先乘除模,后加減,括號最優(yōu)先。第4章單片機的C語言程序設(shè)計4.2C51語言的運算符與表達式2.賦值運算符C51語言的運算符與表達式與標準C語言相同 在C51語言中,賦值運算符有兩類,一類是基本賦值運算符“=”,一類是基本賦值運算符派生出來的復合賦值運算符,包括:+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=。 賦值運算符將運算符右側(cè)操作數(shù)的值賦給左側(cè)操作數(shù)或變量。復合賦值運算符則首先對變量進行某種運算之后再將運算結(jié)果賦給該變量。利用賦值運算符將一個變量與一個表達式連接起來的式子稱為賦值表達式。第4章單片機的C語言程序設(shè)計4.2C51語言的運算符與表達式3.關(guān)系運算符C51語言的運算符與表達式與標準C語言相同C51的關(guān)系運算符有6種:<(小于)>(大于)<=(小于等于)>=(大于等于)==(等于)!=(不等于)前四種關(guān)系運算符(<,>,<=,>=)的優(yōu)先級相同,后兩種也相同;前四種優(yōu)先級高于后兩種。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。第4章單片機的C語言程序設(shè)計4.2C51語言的運算符與表達式4.邏輯運算符C51語言的運算符與表達式與標準C語言相同C51的邏輯運算符有3種:&& 邏輯與(AND)|| 邏輯或(OR)! 邏輯非(NOT)邏輯與&&和邏輯或||是雙目運算符,要求有兩個運算對象;而邏輯非!是單目運算符,只要求一個運算對象。C51邏輯運算符與算術(shù)運算符、關(guān)系運算符、賦值運算符之間優(yōu)先級的次序為:邏輯非!運算符優(yōu)先級最高,關(guān)系運算符低于算術(shù)運算符但高于邏輯與&&和邏輯或||運算符,最低的是賦值運算符。第4章單片機的C語言程序設(shè)計4.2C51語言的運算符與表達式5.位操作運算符C51語言的運算符與表達式與標準C語言相同 C51有如下位操作運算符: &按位與 |接位或 ^接位異或 ~按位取反 <<位左移 >>位右移除了按位取反運算符~以外,以上位操作運算符都是兩目運算符,即要求運算符兩側(cè)各有一個運算對象。位運算對象只能是整型或字符型數(shù),不能為實型數(shù)據(jù)。第4章單片機的C語言程序設(shè)計4.3C51語言的函數(shù)標準庫函數(shù):標準庫函數(shù)是由C51編譯器提供的,用戶可直接調(diào)用C51庫函數(shù)而不需為這個函數(shù)編寫任何代碼,只需要包含具有該函數(shù)說明的頭文件即可。例如調(diào)用正弦計算函數(shù)sin(x)時,要包含數(shù)學運算庫文件: #include<math.h>用戶自定義函數(shù):用戶自定義函數(shù)是用戶根據(jù)需要所編寫的函數(shù)。從函數(shù)定義的形式分為無參函數(shù)、有參函數(shù)和空函數(shù)。中斷函數(shù):中斷函數(shù)是C51所特有的,使用interrupt關(guān)鍵字可以將一個函數(shù)定義成中斷服務(wù)函數(shù)。①預(yù)處理命令(文件包含、宏定義)全局變量定義、函數(shù)原型說明;②程序由函數(shù)組成,函數(shù)由局部變量定義和語句(程序體)組成;③程序從主函數(shù)開始執(zhí)行,主函數(shù)中的所有語句執(zhí)行完畢,則程序結(jié)束。④函數(shù)和變量都需遵循先定義后使用的基本原則;第4章單片機的C語言程序設(shè)計C51與標準C程序結(jié)構(gòu)完全相同4.4C51的程序結(jié)構(gòu)
函數(shù)原型聲明C語言程序的結(jié)構(gòu)特點:1.一個程序由一個或多個源程序文件組成小程序往往只包括一個源程序文件一個源程序文件中可以包括三個部分:預(yù)處理指令全局聲明若干個函數(shù)#include<stdio.h>等全局變量及函數(shù)原型的聲明每個函數(shù)用來實現(xiàn)一定的功能第4章單片機的C語言程序設(shè)計2.函數(shù)是C程序的組成部分一個C程序是由一個或多個函數(shù)組成的.必須包含一個main函數(shù)(且只能有一個).每個函數(shù)都用來實現(xiàn)一個或幾個特定功能被調(diào)用的函數(shù)可以是庫函數(shù),也可以是自己編制設(shè)計的函數(shù).第4章單片機的C語言程序設(shè)計3.一個函數(shù)包括兩個部分:函數(shù)首部intmax(intx,
inty)函數(shù)的第1行函數(shù)類型函數(shù)名參數(shù)類型參數(shù)名若函數(shù)無參,在括弧中寫void或空括弧函數(shù)體
{}括起來部分聲明部分定義在本函數(shù)中所用到的變量執(zhí)行部分:由若干個語句組成,指定在函數(shù)中所進行的操作;語句以;結(jié)束。第4章單片機的C語言程序設(shè)計4.程序總是從main函數(shù)開始執(zhí)行5.C程序?qū)C器的操作由C語句完成C程序書寫格式是比較自由的一行內(nèi)可以寫幾個語句一個語句可以分寫在多行上為清晰起見,習慣上每行只寫一個語句6.數(shù)據(jù)聲明和語句最后必須有分號7.程序應(yīng)當包含注釋,增加可讀性第4章單片機的C語言程序設(shè)計C程序格式特點:習慣用小寫字母不使用行號,無程序行概念可使用空行和空格常用鋸齒形書寫格式main(){
inti,j,sum;sum=0;
for(i=1;i<10;i++){
for(j=1;j<10;j++){sum+=i*j;}}
printf(“%d\n”,sum);}優(yōu)秀程序員的素質(zhì)之一:使用TAB縮進{}對齊有足夠的注釋有合適的空行第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計舉例:LED閃爍控制功能LOOP:CLRP1.0ACALLDEL50SETBP1.0ACALLDEL50SJMPLOOPDEL50:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RETEND30p30p第4章單片機的C語言程序設(shè)計預(yù)處理命令---------函數(shù)聲明------------全局變量定義------
主函數(shù)------------自定義函數(shù)---------局部變量定義---------
程序體
程序體------將P1.0端口定義為p1_0位變量第4章單片機的C語言程序設(shè)計1、將Keil編譯形成的*.hex文件加載到*.DSN文件中,通過proteus控制仿真運行(無法在運行過程中進行調(diào)試)在Keil
uVision進行程序開發(fā)調(diào)試的步驟我們在第一章進行了介紹。這里我們結(jié)合單片機仿真軟件Proteus來說明仿真開發(fā)運行的兩種方式。4.5C51的程序開發(fā)與仿真調(diào)試
第4章單片機的C語言程序設(shè)計2、在Keil軟件里控制Proteus仿真運行(可以在運行過程中進行調(diào)試)步驟:下載()→運行()→停止()第4章單片機的C語言程序設(shè)計4.1C51語言的數(shù)據(jù)結(jié)構(gòu)4.2C51語言的運算符與表達式
4.3C51語言的函數(shù)4.4C51的程序結(jié)構(gòu)4.5C51開發(fā)調(diào)試環(huán)境4.6并行I/O口的C51編程應(yīng)用第4章單片機的C語言程序設(shè)計基本輸出元件:發(fā)光二極管(LightEmittingDiode)低電平驅(qū)動高電平驅(qū)動灌電流拉電流基本I/O設(shè)備與單片機的連接灌入的最大電流為
10mA
拉出的最大電流為
1mA
單片機輸出低電平時驅(qū)動能力尚可,輸出高電平時驅(qū)動能力很差。
基本輸入元件:按鈕(Button)或開關(guān)(Switch)第4章單片機的C語言程序設(shè)計當按鍵未按下壓時,Px.n端口為高電平;按壓按鍵后為低電平?!纠?-1】如圖4-11單片機I/O引腳連接一開關(guān)和一LED,編程實現(xiàn)K1合上時L1點亮,K1斷開時L1熄滅(模擬開關(guān)燈)。
while(1) {L1=K1;}第4章單片機的C語言程序設(shè)計【例4-2】如圖4-13,P0口低四位連接了4個按鈕,P2口低四位連接了4個LED,開機時LED全熄,編程要求根據(jù)按鍵的動作使相應(yīng)的燈亮,并將亮燈狀態(tài)保持到按壓其它鍵時為止。第4章單片機的C語言程序設(shè)計程序分析:為使按鍵抬起后LED能保持先前的點亮狀態(tài),需要在按鍵未壓下期間禁止向P2輸出P0狀態(tài)值。第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計仿真運行效果【例4-3】如圖4-14所示,8個發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P2口的P2.0~P2.7引腳上,陽極共同接高電平。編程來實現(xiàn)發(fā)光二極管的從上到下然后從下到上的流水點亮,重復循環(huán)。第4章單片機的C語言程序設(shè)計程序分析:此例中是將P2口循環(huán)送出的亮燈碼構(gòu)造為一個數(shù)組tab[],通過主函數(shù)中的循環(huán)控制變量i作為數(shù)組的下標來引用數(shù)組中的數(shù)據(jù)tab[i],依次送出到P2口。第4章單片機的C語言程序設(shè)計例4-4鍵控流水燈
第4章單片機的C語言程序設(shè)計【要求】K1為“啟動鍵”,首次按壓K1可產(chǎn)生“自下向上”的流水燈運動;K2為“停止鍵”,按壓K2可終止流水燈的運動;
K3和K4為“方向鍵”,分別產(chǎn)生“自上向下”和“自下向上”運動。第4章單片機的C語言程序設(shè)計思路分析:設(shè)立狀態(tài)變量→根據(jù)鍵值修改變量值→根據(jù)變量值控制燈的亮滅第4章單片機的C語言程序設(shè)計按鍵狀態(tài)值:無按鍵——xxxx1111B按壓K1——xxxx1110B按壓K2——xxxx1101B按壓K3——xxxx1011B按壓K4——xxxx0111B按鍵動作判斷——(P0&0x0f)是否等于0x0f?若是,說明無按鍵動作,反之則有按鍵動作?!?x0f→0x0e→0x0d→0x0b→0x07獲取按鍵狀態(tài)第4章單片機的C語言程序設(shè)計修改方向和啟停標志值
switch語句是多分支選擇語句,switch語句的一般形式如下:switch(表達式){ case常量表達式1:{語句1;}break; case常量表達式2:{語句2;}break;
…… case常量表達式n:{語句n;}break; default:{語句n+1;}}第4章單片機的C語言程序設(shè)計P2口亮燈編碼:xxxx1110xxxx1101xxxx1011xxxx0111D1~D4循環(huán)方向控制
charled[]={0xfe,0xfd,0xfb,0xf7};for(i=0;i<=3;i++){P2=led[i];}//↓移動for(i=3;i>=0;i--){P2=led[i];}//↑移動查表方法第4章單片機的C語言程序設(shè)計if(表達式){語句1;}else{語句2;}相當于雙分支選擇結(jié)構(gòu)voidmain(){bitdir=0,run=0;chari;while(1){switch(P0&0x0f){ //讀取鍵值case0x0e:run=1;break; //K1動作,設(shè)run=1case0x0d:run=0,dir=0;break;//K2動作,設(shè)run=dir=0case0x0b:dir=1;break; //K3動作,設(shè)dir=1case0x07:dir=0;break;}//K4動作,設(shè)dir=0
if(run) //若run=dir=1,自上而下
if(dir)
for(i=0;i<=3;i++) {P2=led[i]; delay(200); }else //若run=1,dir=0,自下而上
for(i=3;i>=0;i--) {P2=led[i]; delay(200);}elseP2=0xff; //若run=0,燈全滅}}#include"reg51.h"unsignedcharled[]={0xfe,0xfd,0xfb,0xf7};voiddelay(unsignedchartime){unsignedintj=15000;
for(;time>0;time--)
for(;j>0;j--);}程序運行效果第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計LED數(shù)碼管原理與應(yīng)用
LED顯示元件——人機交互輸出設(shè)備,其作用是指示中間運行結(jié)果與運行狀態(tài)。點式字段式點陣式光柱式LED的類型第4章單片機的C語言程序設(shè)計引腳配置七段式LED數(shù)碼管(Proteus:7-SegmentDisplay)共陽極型共陰極型公共端接“0”公共端接“1”字符的顯示碼或字模與數(shù)碼管的類型有關(guān)第4章單片機的C語言程序設(shè)計顯示字符dpgfedcba字型碼共陰極共陽極0001111113FC010000011006F92010110115BA43010011114FB040110011066995011011016D926011111017D8270000011107F88011111117F809011011116F90第4章單片機的C語言程序設(shè)計【例4-5】如圖4-19所示,在P0口連接一個共陰極數(shù)碼管,編程使數(shù)碼管循環(huán)顯示0~9數(shù)字。分析:將顯示碼循環(huán)輸出到P0口即可實現(xiàn)循環(huán)顯示。但由于數(shù)字0~9的顯示段碼沒有規(guī)律可循,需要采取查表方式進行操作:第4章單片機的C語言程序設(shè)計①將顯示碼按序存放在一個數(shù)組中,順序號與代表的顯示字符相對應(yīng)(如,charled_mod[]={x1,x2,….,xn);②通過查表語句(如,P0=led_mode[i])輸出顯示碼。第4章單片機的C語言程序設(shè)計參考程序第4章單片機的C語言程序設(shè)計仿真運行效果第4章單片機的C語言程序設(shè)計【例4-6】計數(shù)顯示器根據(jù)如下共陰極型數(shù)碼管電路,編程實現(xiàn)計數(shù)顯示功能,即以十進制形式顯示擊鍵次數(shù),次數(shù)大于99后重新由0開始。個位LED接P2口,十位LED接P0口按鈕接P3.2,抬起時為1電平,按壓時為0電平。第4章單片機的C語言程序設(shè)計編程分析:兩個問題:1:如何將計數(shù)值拆解成個位和十位兩個數(shù)?2:如何避免按鍵壓下時被連續(xù)計數(shù)?第4章單片機的C語言程序設(shè)計初始化:P2=P0=table[0];取模運算(%10)→個位整除10運算(/10)→十位P2=table[count%10];P0=table[count/10];拆解計數(shù)值方法:第4章單片機的C語言程序設(shè)計避免連續(xù)計數(shù)——等待按鍵釋放時才統(tǒng)計一次計數(shù)第4章單片機的C語言程序設(shè)計參考程序程序運行效果
第4章單片機的C語言程序設(shè)計第4章單片機的C語言程序設(shè)計按鍵在閉合和斷開瞬間會因彈簧開
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紀錄片制作合作合同
- 房屋買賣合同起草注意事項
- 物業(yè)垃圾清運服務(wù)協(xié)議
- 皮鞋購銷合同簽字生效
- 牲畜銷售合同案例分析
- 芒果批發(fā)采購合同
- 綜合采購合作協(xié)議
- 戶口轉(zhuǎn)入服務(wù)合同范例
- 建設(shè)借款合同范本
- 法律服務(wù)合同協(xié)議格式
- 山東省濟南市2023-2024學年高一上學期1月期末考試 物理 含答案
- 科研設(shè)計及研究生論文撰寫智慧樹知到期末考試答案章節(jié)答案2024年浙江中醫(yī)藥大學
- 地形對聚落及交通線路分布影響
- 合成抗菌藥醫(yī)學知識培訓培訓課件
- 部編版道德與法治五年級上冊期末試卷4
- 橋面鋪裝施工質(zhì)量控制培訓
- 醫(yī)院護理品管圈成果匯報提高24小時出入量準確率完整版本PPT易修改
- 閱讀《合作學習:實用技能、基本原則及常見問題》的體會
- T梁預(yù)制臺座占用時間及資源配置分析
- 名中醫(yī)工作室跟師醫(yī)案記錄 (15)
- 2022機要密碼工作總結(jié)機要室工作總結(jié).doc
評論
0/150
提交評論