版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《微機(jī)原理及應(yīng)用》教學(xué)課件適用2010級(jí)32+16學(xué)時(shí)第三章單片機(jī)常用軟件主講教師:
司楊水利電力學(xué)院電工教研室第三章單片機(jī)常用軟件第一節(jié)Keil簡(jiǎn)介第二節(jié)Proteus基礎(chǔ)第三節(jié)匯編程序簡(jiǎn)介1尋址方式2數(shù)據(jù)傳送指令3算術(shù)運(yùn)算指令4邏輯運(yùn)算指令5轉(zhuǎn)移控制指令6位處理指令第一節(jié)Keil簡(jiǎn)介一、Keil及其運(yùn)行二、在Keil中編寫程序三、在Keil中調(diào)試程序返回1.1、KeilC51基本知識(shí)KeilC51是美國(guó)KeilSoftware公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。KeilC51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到KeilC51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。1.2、KeilC51軟件開(kāi)發(fā)結(jié)構(gòu)
圖2-1C51工具包整體結(jié)構(gòu)uVision與Ishell分別是C51forWindows和forDos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)BL51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。1.3、KeilC51工具包的安裝
在Windows下直接運(yùn)行軟件安裝包,然后選擇安裝目錄即可。安裝完成之后在安裝目錄下會(huì)有下面目錄:文件夾內(nèi)容C:\KEIL\C51\ASM宏匯編器的源模板及包含文件。C:\KEIL\C51\BINμVision3/C51工具鏈的可執(zhí)行文件。C:\KEIL\C51\Examples例程C:\KEIL\C51\FlashMonFlashMonitor的配置文件及預(yù)配置版本。C:\KEIL\C51\HLPμVision3/C51在線幫助文檔.C:\KEIL\C51\INCC編譯器的包含文件.C:\KEIL\C51\ISD51針對(duì)ISD51在系統(tǒng)調(diào)試器的文件及預(yù)配置版本。C:\KEIL\C51\LIB運(yùn)行時(shí)庫(kù)及CPU啟動(dòng)文件。C:\KEIL\C51\Mon51Monitor-51配置文件(針對(duì)傳統(tǒng)8051設(shè)備)。C:\KEIL\C51\Mon390Monitor-390配置文件(針對(duì)DallasContiguous模式).C:\KEIL\C51\RtxTiny2RTX51微型版本2實(shí)時(shí)操作系統(tǒng)。1.4、KeilC51功能及使用簡(jiǎn)介
1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-Files源文件創(chuàng)建完后,可以在工程里加入這個(gè)文件。在工程里加入源文件,μVision3提供了幾種方式,例如:可以在ProjectWorkspace–Files頁(yè)面選擇要加入的文件組,單擊鼠標(biāo)右鍵打開(kāi)局部菜單,選擇AddFiles選項(xiàng)會(huì)打開(kāi)一個(gè)標(biāo)準(zhǔn)的文件對(duì)話框,在對(duì)話框里選擇上面創(chuàng)建的MAIN.C源文件。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-Group為CPU配置文件創(chuàng)建一個(gè)新文件組是一種好方法。例如:用戶在Project–>Components,Environment,Books…對(duì)話框中,使用New(Insert)按鈕可在目標(biāo)工程中為CPU配置文件加入一個(gè)名為StartupCode的文件組。通過(guò)使用按鈕AddFiles還可將其它源文件加入到工程里。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-CPU寄存器在在ProjectWorkspace->Regs頁(yè)中,列出了CPU的寄存器,選中指定寄存器并單擊,或按F2鍵便可以出現(xiàn)一個(gè)編輯框,從而可以改變此寄存器的值。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-手冊(cè)在設(shè)備數(shù)據(jù)庫(kù)里選擇一款CPU后,可以在ProjectWorkspace–Books里打開(kāi)相應(yīng)的工具集以及設(shè)備的用戶手冊(cè)。大部分用戶手冊(cè)是工具集的一部分,可以在Keil開(kāi)發(fā)工具的CD-ROM里獲得。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-函數(shù)可以在ProjectWorkspace–函數(shù)里查看到各個(gè)文件中的函數(shù)。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.1ProjectWorkspace-Edit-Configuration-Templates工程窗口-Templates頁(yè)中顯示用戶定義的文本塊(模板)。先按Ctrl+空格鍵然后輸入模板名字的幾個(gè)首字母或者單擊模板頁(yè)面中的條目,可在用戶源文件中插入一個(gè)模板。用戶在Edit-Configuration-Templates對(duì)話框中可以定義模板。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.2OutputWindow-編譯工程在Options–Target中包含了創(chuàng)建一個(gè)新應(yīng)用程序所需的所有設(shè)置。接下來(lái)的工作是編譯鏈接工程,單擊工具欄中BuildTarget圖標(biāo)可編譯鏈接工程文件。如果源程序中存在語(yǔ)法錯(cuò)誤,μVision則會(huì)在OutputWindow->Build窗口中顯示出錯(cuò)誤和警告信息。雙擊提示信息所在行,就會(huì)在μVision3編輯窗口里打開(kāi)并顯示相應(yīng)的出錯(cuò)源文件,光標(biāo)會(huì)定位在該文件的出錯(cuò)行上,以方便用戶快速定位出錯(cuò)位置。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.2OutputWindow-調(diào)試命令μVision3支持大量命令,可以通過(guò)OutputWindow–CommandLine
鍵入命令。根據(jù)命令的功能,可以將這些命令分為如下幾類:斷點(diǎn)命令允許創(chuàng)建和刪除斷點(diǎn)。當(dāng)遇到一個(gè)特定指令時(shí)可以使用斷點(diǎn)停止程序執(zhí)行或執(zhí)行μVision3命令或用戶函數(shù)。普通命令可以執(zhí)行一些混合的調(diào)試操作。存儲(chǔ)器命令顯示和改變存儲(chǔ)器內(nèi)容1.4、KeilC51功能及使用簡(jiǎn)介
1.4.2OutputWindow-文本搜索文本搜索對(duì)話框可實(shí)現(xiàn)指定文件中的文本搜索。在μVisionIDE中,選擇Edit->FindinFiles,將彈出下圖所示的文本搜索對(duì)話框。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.3MemoryWindow內(nèi)存窗口-通過(guò)內(nèi)存窗口可以查看存儲(chǔ)器內(nèi)容。內(nèi)存窗口可以顯示不同的存儲(chǔ)域內(nèi)容,最多可將四個(gè)不同的存儲(chǔ)域顯示在不同的頁(yè)中,窗口中的右鍵菜單可以選擇輸出格式。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.4Watch&CallStackWindow(觀測(cè)及調(diào)用棧窗口)Watch窗口用于查看和修改程序中變量的值,并可列出當(dāng)前函數(shù)調(diào)用關(guān)系。在程序運(yùn)行結(jié)束后Watch窗口中的內(nèi)容自動(dòng)更新??赡芡ㄟ^(guò)設(shè)置View->
PeriodicWindowUpdate來(lái)實(shí)現(xiàn)程序運(yùn)行時(shí)實(shí)時(shí)更新變量的值。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.5
Workspace(工作區(qū))用于文件編輯、反匯編輸出和一些調(diào)試信息顯示。1.4、KeilC51功能及使用簡(jiǎn)介
1.4.5
PeripheralDialogs(外設(shè)對(duì)話框)幫助設(shè)計(jì)者觀察片內(nèi)外圍接口的工作狀態(tài)。1.5、KeilC51菜單說(shuō)明
菜單命令、工具欄、快捷鍵
菜單欄提供如下菜單功能:編輯、工程維護(hù)、開(kāi)發(fā)工具配置、程序調(diào)試、外部工具控制、窗口選擇及操作及在線幫助等。工具欄按鈕可以快速執(zhí)行μVision3的命令。狀態(tài)欄StatusBar顯示了編輯和調(diào)試信息。在ViewMenu中可以控制工具欄和狀態(tài)欄是否顯示。通過(guò)鍵盤快捷鍵可以快速執(zhí)行μVision3的命令,快捷鍵可以通過(guò)菜單命令Edit–Configuration-ShortcutKey來(lái)進(jìn)行配置。1.5、KeilC51菜單說(shuō)明
1.5.1狀態(tài)欄StatusBar
顯示了編輯和調(diào)試信息。DebugChannel:顯示了當(dāng)前的調(diào)試工具;ExecutionTime:顯示了執(zhí)行時(shí)間;CursorPosition:顯示光標(biāo)位置;EditorandKeyboardStatusInformation顯示:CAP:Caps鍵有效NUM:Num鍵有效SCRL:Scroll鍵有效OVR:
Insert鍵有效R/WorR/O:顯示了當(dāng)前編輯的文件的屬性。R/W表示可讀寫、R/O表示只讀。
1.5、KeilC51菜單說(shuō)明
1.5.2File菜單和File命令
1.5、KeilC51菜單說(shuō)明
1.5.3Edit菜單和Edit命令
1.5、KeilC51菜單說(shuō)明
1.5.3Edit菜單和Edit命令
1.5、KeilC51菜單說(shuō)明
1.5.3Edit菜單和Edit命令
1.5、KeilC51菜單說(shuō)明
1.5.3Edit菜單和Edit命令
選擇文本命令在μVision3中,可以通過(guò)按住SHIFT并按住相應(yīng)的光標(biāo)鍵選擇文本。例如Ctrl+RightArrow可以將光標(biāo)移動(dòng)到下一個(gè)單詞,Shift+Ctrl+RightArrow可以選擇從光標(biāo)的當(dāng)前位置到下一個(gè)單詞的開(kāi)始.同樣可以使用鼠標(biāo)選擇文本.1.5、KeilC51菜單說(shuō)明
1.5.4View菜單(視圖)其他工具條工具窗口都可以在這里打開(kāi)和關(guān)閉。1.5、KeilC51菜單說(shuō)明
1.5.4View菜單(視圖)其他工具條工具窗口都可以在這里打開(kāi)和關(guān)閉。1.5、KeilC51菜單說(shuō)明
1.5.4View菜單(視圖)PerformanceAnalyzer??梢栽讦蘓ision3中使用性能分析儀將目標(biāo)程序調(diào)整為最佳性能??梢灾付ǔ绦蛑邢胍治龅牟糠?,性能分析儀會(huì)在程序執(zhí)行期間收集它們的執(zhí)行統(tǒng)計(jì)信息。針對(duì)所分析程序部分,可提供最快的、最慢的和平均的執(zhí)行時(shí)間等信息。最多可以分析多達(dá)256個(gè)代碼域,性能分析儀會(huì)記錄每塊代碼被執(zhí)行的次數(shù)及每個(gè)區(qū)域所消耗的全部時(shí)間。區(qū)域就是一個(gè)簡(jiǎn)單的地址域。它通常以一個(gè)函數(shù)的第一條指令為起點(diǎn),以此函數(shù)最后一條指令為終點(diǎn)。然而,也可以指定目標(biāo)程序中僅包含幾條指令的一個(gè)區(qū)域。隨著程序的運(yùn)行,性能分析的結(jié)果在性能分析儀窗口中顯示。1.5、KeilC51菜單說(shuō)明
1.5.4View菜單(視圖)邏輯分析儀。μVision3邏輯分析儀可以將指定的變量或VTREGs值的變化以圖形方式表示出來(lái)。1.5、KeilC51菜單說(shuō)明
1.5.5Project菜單和Project命令1.5、KeilC51菜單說(shuō)明
1.5.6Debug菜單和Debug命令1.5、KeilC51菜單說(shuō)明
1.5.6Debug菜單和Debug命令1.5、KeilC51菜單說(shuō)明
1.5.7Flash菜單Flash菜單可以配置和運(yùn)行Flash編程設(shè)備。通過(guò)ConfigureFlashTools,可選擇并被配置編程工具,細(xì)節(jié)請(qǐng)參考配置Flash菜單小節(jié)。Flash菜單下的條目如下表所示:1.5、KeilC51菜單說(shuō)明
1.5.8Peripherals菜單外設(shè)菜單,可以模擬中斷,串口,定時(shí)器和IO口的操作。1.5、KeilC51菜單說(shuō)明
1.5.9Tool菜單Tool菜單能夠配置和運(yùn)行GimpelPC-Lint及自定義程序。通過(guò)Tools-CustomizeToolsMenu…,用戶程序可以添加到此菜單下。詳情請(qǐng)查閱RunExternalPrograms。Tool菜單下的條目如下表所示:(Gimpel軟件公司的PC-Lint可以檢查應(yīng)用程序所有模塊的C語(yǔ)法和語(yǔ)意錯(cuò)誤。PC-Lint可以標(biāo)記可能的錯(cuò)誤或不一致的、定位不清晰的、錯(cuò)誤的或不合理的代碼。因此,PC-Lint可以有效的提高目標(biāo)應(yīng)用程序的調(diào)試效率。)1.5、KeilC51菜單說(shuō)明
1.5.10SVCS菜單SVCS菜單可以配置及添加SVCS命令。詳情請(qǐng)查閱UsingtheSVCSMenu.Tool菜單下的條目如下表所示:(μVision3為軟件版本控制系統(tǒng)SVCS(SoftwareVersionControlSystems)提供了一個(gè)可編程的接口,可為IntersolvPVCS、MicrosoftSourceSafe、MKSSourceIntegrity和RationalClearCase提供了預(yù)配置模板文件。μVision3集成的CVS(ConcurrentVersionsSystem)是一個(gè)遵守GNUGPL協(xié)議的軟件版本控制系統(tǒng),可以自由使用,詳細(xì)信息請(qǐng)參考應(yīng)用筆記179:μVision3可集成的CVS
。)1.5、KeilC51菜單說(shuō)明
1.5.11Window菜單1.5、KeilC51菜單說(shuō)明
1.5.12Help菜單第二節(jié)Proteus基礎(chǔ)一、Proteus及其運(yùn)行二、用Proteus繪制電路圖三、Proteus中程序的裝載四、Proteus虛擬儀器的使用五、Proteus與Keil的聯(lián)合調(diào)試返回第三節(jié)匯編程序簡(jiǎn)介51系列單片機(jī)指令集含有111條指令每條指令在程序存儲(chǔ)器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:?jiǎn)巫止?jié)(49條);雙字節(jié)(46條);3字節(jié)(16條)每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。按指令執(zhí)行時(shí)間分類:?jiǎn)沃芷?64條);雙周期(45條);4周期(2條)返回ASM-51指令的格式方括符[]表示可選項(xiàng)標(biāo)號(hào)代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋,以“;”開(kāi)頭[標(biāo)號(hào):]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]一、51單片機(jī)指令的尋址方式寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對(duì)尋址位尋址尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式1.寄存器尋址從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器例:MOVA,B;(A)←(B)
MOV30H,R0
;(30H)←(R0)
MOVA,R1;(A)←(R1)2.立即尋址操作數(shù)直接就出現(xiàn)在指令中例:MOVA,#64H;(A)←立即數(shù)64H
ADDA,#05H
;(A)←(A)+立即數(shù)05H注意:符號(hào)“#”表明其后跟的是立即數(shù),
立即數(shù)——就是數(shù)字量本身。3.寄存器間接尋址寄存器中的內(nèi)容是一個(gè)地址,由該地址單元尋址到所需的操作數(shù)注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個(gè)“單元地址”,這個(gè)地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號(hào)“@”表示“在…”,其含義與讀音皆同“at”。例:[MOVR1,#30H;(R1)←立即數(shù)30H
]
[MOVR1,#30H;(R1)←立即數(shù)30H
]
MOV@R1,#0FH;(30H)←立即數(shù)0FH
MOVA,@R1;(A)←((30H))=#0FH4.直接尋址指令中直接給出了操作數(shù)所在單元的地址或名稱例:MOVR1,1FH
;(R1)←(1FH)
MOV30H,4AH
;(30H)←(4AH)在本單片機(jī)中規(guī)定:訪問(wèn)特殊功能寄存器SFR只能采用直接尋址方式。例如:MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)
MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)
MOVB,30H;(B)←(30H)SFR的地址見(jiàn)教材相同相同在本單片機(jī)中訪問(wèn)特殊功能寄存器SFR只能采用直接尋址方式的原因:SFR分布在80H~0FFH范圍內(nèi),而52系列單片機(jī)有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。MOVA,90H
等效于MOVA,
P1屬直接尋址MOVA,@R0
;[事先已知(R0)=#90H]
執(zhí)行的操作:A←(90H)
屬寄存器間接尋址,隨意寫的指令如:MOVA,85H
則是非法的!于是規(guī)定:80H~0FFH范圍內(nèi)的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問(wèn)題。例如:5.變址尋址也稱為:基址寄存器+變址寄存器間接尋址以16位的地址指針寄存器DPTR或16位的PC寄存器為基址寄存器,以累加器A為變址寄存器,兩者中的“內(nèi)容”形成一個(gè)16位的“地址”,該“地址”所指的存儲(chǔ)單元中的內(nèi)容才是操作數(shù)。P47例:[設(shè):A中已存有#A4H,DPTR中已存有#1234H]
MOVCA,@A+DPTR;(A)←((A)+(DPTR))操作:將A4H+1234H=12D8H單元中的數(shù)放進(jìn)累加器A6.相對(duì)尋址當(dāng)前PC值加上指令中規(guī)定的偏移量rel,構(gòu)成實(shí)際的操作數(shù)地址例:SJMPrel
操作:跳轉(zhuǎn)到的目的地址
=
當(dāng)前16位PC值+rel注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個(gè)16位數(shù);2)符號(hào)“rel”表示“偏移量”,是一個(gè)帶符號(hào)的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH),在實(shí)際編程中,“rel”
通常用標(biāo)號(hào)代替7.位尋址指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0
;(P1.0)←0
SETBACC.7
;(ACC.7)←1
CPLC
;(C)←NOT(C)注意:
1)位地址里的數(shù)據(jù)只可能是一個(gè)
0
或
1
2)有的位地址十分明確,如
P1.0,ACC.7等,
有的位地址則“不太明確”,如:
[MOVA,17H;(A)←(17H),17H是字節(jié)地址]
MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0
是位地址所以該指令中的17H是22H單元的第7位8.存儲(chǔ)器配置(片內(nèi)RAM)89C51片內(nèi)RAM128字節(jié)(00H—7FH)89C52片內(nèi)RAM256字節(jié)(00H—0FFH)00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)SFR分布在80H-FFH其中92個(gè)位可位尋址80HFFH89C51128字節(jié)89C52256字節(jié)只能直接尋址只能寄存器間接尋址片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另外,在SFR中還有92個(gè)位可按位尋址00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)27H22H21H20H26H24H25H23H28H07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241402FH7F7E7D7C7B7A7978位地址總共128個(gè)可按位尋址的位單元地址17D7D6D5D4D3D2D1D0二、數(shù)據(jù)傳送指令按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(29條);算術(shù)運(yùn)算類(24條)邏輯運(yùn)算及移位類(24);控制轉(zhuǎn)移類(17條)位操作類(布爾操作)
(17條)返回內(nèi)部存儲(chǔ)器間傳送:(MOV——16條)外部數(shù)據(jù)存儲(chǔ)器與累加器間傳送:
(MOVX——4條)程序存儲(chǔ)器向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP——5條)堆棧操作:(PUSH,POP——2條)數(shù)據(jù)傳送類指令(5種/29條)Acc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)Rn:R0—R7@Ri:@R0,@R1#data:8位立即數(shù)#data16:16位立即數(shù)direct:直接地址rel:8位帶符號(hào)偏移量1.MOV指令內(nèi)部存儲(chǔ)器間傳送指令(16條):
MOV類指令的操作方向總是后面的操作數(shù)指向前面的操作數(shù)!例:MOVA,30H——(A)(30H)
2.MOVX指令外部數(shù)據(jù)存儲(chǔ)器與累加器間傳送(4條):MOVX類指令可在累加器與以@DPTR或@Ri所代表的外部RAM
之間進(jìn)行數(shù)據(jù)傳送。例如:
MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)
((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)程序存儲(chǔ)器向累加器傳送指令(2條):
MOVCA,@A+DPTR
MOVCA,@A+PC
——通常稱為查表指令,尋址方式屬:
“基址寄存器
+變址寄存器間接尋址”3.MOVC指令@A+DPTR或@A+PC指向程序存儲(chǔ)器中的某單元。擬傳送給累加器ACC的數(shù)據(jù)就是程序中事先寫進(jìn)去的表格數(shù)據(jù)。這些表格數(shù)據(jù)往往用偽指令DB,DW等定義在程序中。4.數(shù)據(jù)交換指令數(shù)據(jù)交換指令(5條):XCHA,direct(字節(jié)互換)XCHA,@Ri(字節(jié)互換)XCHA,Rn(字節(jié)互換)(A)(direct)[或((Ri)),或(Rn)]XCHDA,@Ri
累加器Acc的低4位與((Ri))的低4位互換,各自的高4位不變SWAPA
累加器Acc的低4位與自身的高4位互換堆棧操作指令(2條):PUSH——壓棧指令POP——彈棧指令√堆棧區(qū)由特殊功能寄存器堆棧指針SP
管理√堆棧區(qū)可以安排在RAM區(qū)任意位置,一般不安排在工作寄存器區(qū)和可按位尋址的RAM區(qū),而是放在RAM區(qū)的靠后的位置√堆??偸侵赶驐m敗掏ǔUSH與POP兩條指令成對(duì)使用5.堆棧指令例如:設(shè)(A)=7BH;(35H)=11H
并且知道(SP)=60HPUSHACC;(61H)#7BHPUSH35H;(62H)(35H)
即:(62H)#11HPOPACC;(A)(62H)
即:(A)#11HPOP5AH;(5AH)(61H)
即:(5AH)#7BH三、算術(shù)運(yùn)算指令算術(shù)運(yùn)算類指令(6種/24條)加法運(yùn)算:
(ADD——4條)帶進(jìn)位加法運(yùn)算:
(ADDC——4條)帶借位減法運(yùn)算:
(SUBB——4條)加1/減1操作:
(INC,DEC——9條)單字節(jié)乘/除法運(yùn)算:(MUL,DIV——2條)十進(jìn)制調(diào)整:
(DAA——1條)返回加法運(yùn)算:
(ADD——4條)帶進(jìn)位加法運(yùn)算:
(ADDC——4條)帶借位減法運(yùn)算:
(SUBB——4條)所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以
A為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn)
A。加法(ADD)、帶進(jìn)位加法(ADDC)以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動(dòng)對(duì)PSW中的Cy標(biāo)志位置“1”
。帶進(jìn)位加法(ADDC):(A)(A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A)(A)-(Cy)-(第二操作數(shù))加1/減1操作:
(INC,DEC——9條)INC,DEC與用加/減法指令做加1/減1操作不同之處在于INC、DEC不影響標(biāo)志位.單字節(jié)乘/除運(yùn)算:(MUL,DIV——2條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MULAB:(A)與(B)相乘,積為16位數(shù),(A)積的高8位;(B)積的低8位DIVAB:(A)除以(B),結(jié)果用2字節(jié)表示,(A)商的整數(shù)部分;(B)余數(shù)BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示;也可以用十六進(jìn)制數(shù)14H表示;還可以用BCD碼00100000B或20H表示。4個(gè)二進(jìn)制位就可以表示一位BCD碼:0000~1001可表示十進(jìn)制數(shù)(BCD數(shù))0~9;
8個(gè)二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001表示00~99。十進(jìn)制調(diào)整:
(DAA——1條)用于兩個(gè)BCD碼之間的相加,這條指令只能跟在ADD或ADDC之后若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;例:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“123”。MOVA,#65HADDA,#58H
DAA結(jié)果:(A)=23H(CY)=1指令“DAA”
完成的操作:65011001015801011000
+13181926601100110若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;又如:兩個(gè)十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“97”。MOVA,#39HADDA,#58H
DAA結(jié)果:(A)=97H(CY)=039001110015801011000
+0723960110指令“DAA”
完成的操作:四、邏輯運(yùn)算指令邏輯運(yùn)算及移位類指令(5種/24條)
邏輯與運(yùn)算:(ANL——6條)邏輯或運(yùn)算:(ORL——6條)邏輯異或運(yùn)算:(XRL——6條)累加器清零/取反:(CLR,CPL——2條)累加器移位操作:(RL,RLC,RR,RRC—4條)返回邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對(duì)累加器清零1Byte1
個(gè)TmCPLA——對(duì)累加器按位取非1Byte1
個(gè)Tm指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11邏輯與ANL用于清0或者保留某些位:例:ANLA,#0FH;則(A)=0AH(已知累加器A中已存有數(shù):9AH)邏輯或ORL用于置1或者保留某些位:例:ORLA,#0FH;則(A)=9FH邏輯異或XRL用于取反或者保留某些位:例:XRLA,#0FH;則(A)=95H(A)10011010#0FH00001111
95H10010101累加器移位操作:(RL,RLC,RR,RRC——4條)RLA左環(huán)移累加器A累加器ACy累加器ACy累加器ARRCA
帶進(jìn)位位右環(huán)移RRA右環(huán)移RLCA帶進(jìn)位位左環(huán)移五、轉(zhuǎn)移控制指令控制轉(zhuǎn)移類指令(4種/17條)此類指令改變程序的執(zhí)行順序——改變當(dāng)前PC值無(wú)條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:(NOP——1條)“耗時(shí)”一個(gè)機(jī)器周期。
donothing!返回?zé)o條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長(zhǎng)跳轉(zhuǎn)指令
——可在64K范圍內(nèi)跳轉(zhuǎn)AJMPaddr11絕對(duì)跳轉(zhuǎn)指令
——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn)SJMPrel相對(duì)跳轉(zhuǎn)指令
——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)JMP@A+DPTR間接長(zhǎng)跳轉(zhuǎn)指令
——可在以DPTR為基址
+
A為偏移量
之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)條件轉(zhuǎn)移:JZ,JNZ,CJNE,DJNZ——8條JZrelJNZrel——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn)DJNZdirect,relDJNZRn,rel——將direct(或Rn)里的內(nèi)容減1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。CJNEA,
#data,relCJNEA,
direct,relCJNE@Ri,#data,relCJNERn,
#data,rel
——將A(或@Ri,或Rn)與#data(或direct)相比較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼續(xù)往下走。LCALLaddr16子程序長(zhǎng)調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)ACALLaddr11子程序絕對(duì)調(diào)用指令——可在指令所在的2K范圍內(nèi)調(diào)用子程序RET子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令RETI中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令六、位處理指令位操作類指令(17條)位操作類指令以位為單位進(jìn)行邏輯運(yùn)算及操作,可分為4種:位傳送:(MOV——2條)位清零/置位:(CLR,SETB——4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條)位條件轉(zhuǎn)移:(JC,JNC,JB,JNB,JBC——5條)返回位傳送指令(2條):
MOVC,bit——(C)(bit)
MOVbit,C——(bit)(C)
注:bit表示位地址位清零/置位指令(4條):
CLRbit(或C)——
(bit或C)“0”
SETBbit(或C)——
(bit或C)“1”
位邏輯與/或/非指令(6條):
ANLC,bit(或/bit)
ORLC,bit(或/bit)
CPLbit(或C)
注:“/bit”表示對(duì)bit位先取反然后再參加運(yùn)算判位條件轉(zhuǎn)移指令(5條):
JCrel——(Cy)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JNCrel——(Cy)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JBbit,rel
——(bit)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JNBbit,rel
——(bit)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JBCbit,rel
——(bit)=“1”就先將其清零再跳轉(zhuǎn);否則,不動(dòng)此位也不跳轉(zhuǎn)。任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性地亮/滅JOB3:CLRP1.1;P1.1清“0”
,亮綠燈REDO:SETBP1.3;將P1.3置“1”CHECK:JNBP1.3,CHECK;檢測(cè)傳感器是否被阻斷LOOP:…………;有入侵者,報(bào)警!
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電熱馬甲商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 定制眼鏡鏡片行業(yè)營(yíng)銷策略方案
- 云環(huán)境監(jiān)測(cè)服務(wù)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 心理咨詢行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 緩解昆蟲叮咬癥狀的藥物制劑市場(chǎng)分析及投資價(jià)值研究報(bào)告
- 失禁用護(hù)墊產(chǎn)品供應(yīng)鏈分析
- 關(guān)于退休的金融咨詢行業(yè)經(jīng)營(yíng)分析報(bào)告
- 可折疊自行車產(chǎn)品供應(yīng)鏈分析
- 廣告位租賃合同范本
- 建造波浪能發(fā)電廠行業(yè)經(jīng)營(yíng)分析報(bào)告
- 文創(chuàng)產(chǎn)品設(shè)計(jì)方案(2篇)
- 運(yùn)動(dòng)生理學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年湖南師范大學(xué)
- 2024年廣東中山市檢察機(jī)關(guān)勞動(dòng)合同制司法輔助人員招聘筆試參考題庫(kù)附帶答案詳解
- 米托蒽醌藥物代謝動(dòng)力學(xué)研究
- 2024年景區(qū)托管運(yùn)營(yíng)合作協(xié)議
- 國(guó)開(kāi)電大《應(yīng)用寫作(漢語(yǔ))》形考任務(wù)1-6答案
- SMW工法樁施工課件
- 2024年4月自考05755衛(wèi)生統(tǒng)計(jì)學(xué)答案及評(píng)分參考
- (2024)愛(ài)國(guó)主義教育知識(shí)競(jìng)賽題及答案
- (正式版)HGT 20656-2024 化工供暖通風(fēng)與空氣調(diào)節(jié)詳細(xì)設(shè)計(jì)內(nèi)容和深度規(guī)定
- 2024年安徽省C20教育聯(lián)盟中考二模道德與法治試題
評(píng)論
0/150
提交評(píng)論