




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1第3章匯編語言程序設計寫入單片機的目標程序有兩種文件格式:
·BIN文件是由編譯器生成的二進制文件,是程序的機器碼.·HEX文件是由INTEL公司定義的一種格式。HEX文件需通過符號轉換程序OHS51進行轉換
目前很多公司將編輯器、匯編器、編譯器、連接/定位器、符號轉換程序做成集成軟件包,用戶進入該集成環境,編輯好程序后,只需點擊相應菜單就可以完成上述的各步,如WAVE、KEIL。第1頁/共42頁匯編的方法:匯編的方法有兩種1.手工匯編:人工查指令表,查出程序中每條指令對應的機器代碼。早期的計算機使用。2.機器匯編:用計算機中的匯編程序對用戶源程序進行匯編。用機器匯編要提供給匯編程序一些輔助信息,遵循匯編程序的一些約定。這些信息由偽指令設定。第2頁/共42頁1)確定程序中每條匯編語言指令的指令機器碼2)確定每條指令在存儲器中的存放地址3)提供錯誤信息 4)提供目標執行文件(*.OBJ/*.HEX)和列表文件(*.LST)
地址 機器碼 源程序
ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 …
匯編程序的主要工作:第3頁/共42頁1.機器指令:指令系統中的全部指令。每條機器指令都有對應的機器代碼,可以被CPU執行。2.偽指令:匯編控制指令,沒有指令代碼,只用于匯編過程,為匯編程序提供匯編信息。一.匯編語言指令類型3.宏指令
宏匯編功能:將需要反復多次執行的程序段定義成一個宏指令名(宏定義)。編程時,可在程序中使用宏指令名來替代被定義的程序段(宏調用)。第4頁/共42頁宏定義格式:宏調用格式:
…
宏指令名實際參數
…
宏指令名實際參數宏指令名MACRO
形式參數
…
;被定義的程序段
ENDM第5頁/共42頁二.常用偽指令及功能:1.起始指令ORGnn功能:定義程序或數據塊的起始地址。指示此語句后面的程序或數據塊以nn為起始地址,連續存放在程序存儲器中。
指令地址機器碼 源程序
ORG 2000H
2000H7830 MAIN: MOVR0,#30H
2002HE6 MOVA,@R0 … ORG3000H
3000H23 TAB:DB23H,100,‘A’
3001H643002H41第6頁/共42頁2.字節定義標號:DB(字節常數,或字符或表達式)功能:指示在程序存儲器中以標號為起始地址的單元里存放的數為字節數據。例如
LN:DB32,’C’,25H,-1;LN~LN+3地址單元依次存放
地址
數據LN20LN+143LN+225LN+3FF3.字定義標號:DW(字常數或表達式)作用:指示在程序存儲器中以標號為起始地址的單元里存放的數為字數據例如:GH
:DW1234H,5678H,08GH1234GH+25678GH+40008第7頁/共42頁5.等值指令標號EQU(數值表達式)
定義常量,一般用于為標號或標識符賦值。
例如:X1 EQU2000H
X2 EQU0FH
…
MAIN: MOVDPTR,#X1;DPTR=2000H ADDA,#X2;A=A+0FH4.保留字節標號:DS(數值表達式)作用:
指示在程序存儲器中保留以標號為起始地址的若干字節單元,其單元個數由數值表達式指定。例如L1:DS32;從L1地址開始保留32個存儲單元。第8頁/共42頁6.位定義
標號
BIT[位地址]作用:
同EQU指令,不過定義的是位操作地址。例如
AICBITP1.1。7.匯編結束END作用:
指示源程序段結束。
END指令放在程序的最后。第9頁/共42頁3-2匯編語言程序設計步驟一.確定方案和計算方法二.了解應用系統的硬件配置、性能指標三.建立系統數學模型,確定控制算法和操作步驟四.合理分配存儲器單元和了解I/O接口地址五.編制源程序1.按功能設計程序,明確各程序之間的相互關系2.用流程圖表示程序結構和功能開始1YN?3.程序中用注釋說明指令在程序中的作用,方便閱讀、調試和修改第10頁/共42頁
順序程序設計例3-1編程將外部數據存儲器的000EH和000FH單元的內容相換。
常用程序結構
順序程序、分支程序、
循環程序、子程序000EH000FH000EH000FH000EH000FH000EH000FH分析:外部數據存儲器的數據操作只能用MOVX指令,且只能和A之間傳送,因此必須用一個中間環節作暫存,設用20H單元。用R0、R1指示兩單元的低八位地址,高八位地址由P2指示。編程過程如下:000EH000FH000EH000FH000EH000FH第11頁/共42頁ORG0000HMOVP2,#0H;送地址高八位至P2口
MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVXA,@R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,@R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVX@R1,AMOVA,20HMOVX@R0,A;交換后的數送各單元
SJMP$END第12頁/共42頁3-3順序程序設計順序程序(簡單程序),程序走向只有一條路徑。如前面介紹的查表法求平方值等第13頁/共42頁例3-3分解壓縮型BCD碼,使其成為非壓縮型BCD碼。ORG0100HMOV R0,#40H ;設指針MOV A,@R0 ;取一個字節MOV R2,A ;暫存ANL A,#0FH ;高四位清0INC R0MOV @R0,A ;保存個位數據片內RAM42H41H40H65MOV A,R2SWAPA ;十位換到低四位ANL A,#0FHINC R0MOV @R0,A ;保存十位數據END0506第14頁/共42頁地址數據TAB0TAB+11TAB+24TAB+39TAB+416HTAB+525H例3-5設變量放在片內RAM的20H單元,其值為00H~05H之間,要求編查表程序,查出變量的平方值,并放入片內RAM的21H單元。ORG0000HMOVDPTR,#TABMOVA,20HMOVCA,@A+DPTR;查表
MOV21H,ASJMP$TAB2:DB00H,01H,04H,09H,16H,25HEND分析:在程序存儲器安排一張平方表,首地址為TAB,以DPTR指向表首址,A存放變量值,利用查表指令MOVCA,@A+DPTR,即可求得。表中數據用BCD碼存放合乎人們的習慣.如果平方值為兩個字節,程序應如何編。DPTRA第15頁/共42頁
ORG0100HMOVA,R2
JNBACC.7,N;為正數?
CPLA ;負數變補
INCA
MOVR2,AN:SJMP$ ;結束3.4分支程序的設計
由條件轉移指令構成程序判斷框部分,形成分支結構3.5.1單分支程序一個判斷決策框,兩種分支結構圖。條件滿足?N影響條件Y處理段條件滿足?N影響條件Y處理1處理2例1求8位有符號數的絕對值。方法:正數不變,負數變補(按位取反,末位加1)第16頁/共42頁
例2用單片機加重力傳感器作磅秤,秤出重量后算出行李運費價格,其秤出的重量以10kg為1個計價單位G,G已存入40H單元。計價方法
為50kg以內按3元,50kg以上
分段計價:50kg按3元計價
,超過部分按2元計價。
由此列出算式:G×3+(G-5)×2;當G>5M=G×3;當G≤53G因重復使用,先暫存在R2。流程見左,程序如下:第17頁/共42頁ORG0100HFRT:MOVA,40H ;取行李重量計價單位G MOVR3,A MOVB,#03H ;運費M=G×3 MULAB MOVR2,A ;暫存3G
MOVA,R3 ;取回G CJNEA,#05H,L1 ;G≤5? SJMPWETC L1:JC WETC ;是,轉至WETC SUBBA,#05H ;否則M=3G+2(G-5)
RLCA ADDA,R2 MOVR2,AWETC:MOV41H,R2 ;存運費M RET第18頁/共42頁
多分支散轉程序的設計
有一類分支程序,它根據不同的輸入條件或不同的運算結果,轉向不同的處理程序,稱之為散轉程序。有如下兩種設計方法:
1.查轉移地址表:
將轉移地址列成表格,將表格的內容作轉移的目標地址。
2.查轉移指令表:
將轉移到不同程序的轉移指令列成表,判斷條件后查表,轉到表中指令執行。第19頁/共42頁1.利用轉移地址表實現轉移
例3-7
根據R3的內容轉向對應的程序,R3的內容為0~n(n<128),處理程序的入口地址(符號地址)分別為PR0~PRn。分析:將PR0—PRn入口地址(16位)存在表格中,每一項占兩個字節,PRi在表中的偏移量為2i,因此將R3的內容乘2即得PRi在表中的偏移地址,從偏移地址2i和2i+1兩個單元分別取出PRi的高八位地址和低八位地址送DPTR寄存器,用間接轉移指令JMP即轉移到PRi入口地址執行。
這里設PR0-PRn值
PR0
EQU0110H;用偽指令org定義PRn的具體地址
PR1EQU0220H
PR2EQU0330H第20頁/共42頁ORG0000HMOVA,R3;R3→AADDA,ACC;A*2MOVDPTR,#TABPUSHACCMOVCA,@A+DPTR;取地址表中高字節MOVB,A;暫存于BINCDPLPOPACCMOVCA,@A+DPTR;取地址表中低字節MOVDPL,AMOVDPH,B;DPTR=0220HCLRA;A=0JMP@A+DPTR;轉移TAB:DWPR0,PR1,PR2,…..,PRn;轉移地址表END01100220..TABTAB+2DPHDPL例如R3=1的操作0220第21頁/共42頁2.利用轉移指令表實現轉移
例3-8設有五個按鍵0、1、2、3、4其編碼分別為3AH、47H、65H、70H、8BH,要求根據按下的鍵轉向不同的處理程序,分別為PR0、PR1、PR2、PR3、PR4,設按鍵的編碼已在B寄存器中,編出程序。分析:將鍵碼排成表,將鍵碼表中的值和B中的鍵編碼比對,記下在鍵碼表中和B中的鍵編碼相等的序號,另安排一個轉移表,安排AJMP指令(機器碼),因每條AJMP指令占二字節,將剛才記下的序號乘2即為轉移表的偏移地址,利用JMP@A+DPTR執行表內的AJMP指令,從而實現多分支轉移,設JPT的地址為001AH、PR0入口地址為0110H、,參考2.4.2節,求AJMPPR0的機器碼
0000000100010000001000010000(2110h)a10a9a8a7a6a5a4a3a2a1a0第22頁/共42頁AJMPPR0的機器碼為2110H,PR1入口地址為0220HAJMPPR1的機器碼為4120H,轉移指令表JPT的內容如下所示。設B=65H,鍵值為2:2041JPT+42002JPT+21021JPTAJMPPR0AJMPPR1AJMPPR2TAB3AHTAB+147HTAB+265HTAB+370H轉移指令表JPT鍵碼表TAB65HA2B2×AA=1A=2A=065H65H第23頁/共42頁ORG0000HMOVDPTR,#TAB;置鍵碼表首址
MOVA,#0;表的起始位的偏移量為0NEXT:PUSHACCMOVCA,@A+DPTR;A=鍵碼表的編碼
CJNEA,B,AGAN;將B中值和鍵碼表的值比較
POPACCRLA;如相等,序號乘2得分支表內偏移量
MOVDPTR,#JPT;置分支表首址
JMP@A+DPTRAGAN:POPACC;不相等比較下一個
INCA;序號加1CJNEA,#5,NEXTSJMP$;鍵碼查完還沒有B中按鍵編碼程序結束
JPT:AJMPPR0;分支轉移表
AJMPPR1AJMPPR2AJMPPR3AJMPPR4TAB:DB3AH,47H,65H,70H,8BH;鍵碼表
END
第24頁/共42頁
當程序中的某些指令需要反復執行多次時,采用循環程序的方式,這樣會使程序縮短,節省存儲單元。循環程序的類型:第一種先判斷后執行:即先判斷是否滿足循環條件,滿足則執行第二種先執行后判斷:即循環執行一遍后,再判斷條件是否滿足。3.5循環程序設計第25頁/共42頁例3-9設計一個延時10ms的延時子程序,已知單片機使用的晶振為6MHz。
采用循環實現軟件延時,精挑一些指令,通過計算指令周期,然后乘以循環次數。一般采用雙循環實現。延時時間與兩個因素有關:晶振頻率和循環次數。由于晶振采用6MHz,一個機器周期是2μs,可用內循環實現1ms延時,外循環10次即可達10ms延時。內循環實現1ms延時,內循環的次數用未知數MT表示,從附錄A查每條指令機器周期,計算程序的執行時間。第26頁/共42頁ORG0020HMOVR0,#0AH;外循環10次
DL2:MOVR1,#MT;內循環次數待定
DL1:NOPNOP;空操作指令
DJNZR1,DL1DJNZR0,DL2
RET111122內循環DL1到指令DJNZR1,DL1的計算:(1+1+2)×2μS×MT=1000μSMT=125=7DH將7DH代入上面程序的MT,計算總的延時時間:
{1+[1+(1+1+2)×125+2]×10}×2μS=10062μS=10.062mS若需要延時更長時間,可以采用多重循環。機器周期數內外第27頁/共42頁例3-10編寫多字節數×10程序。
內部RAM以20H為首址的一片單元中存放著一個多字節符號數,字節數存放在R7中,存放方式為低位字節在低地址,高位字節在高地址,要求乘10后的積仍存放在這一片單元中。
分析用R1作該多字節的
地址指針,部分積的低位仍
存放于本單元,部分積的高
位存放于R2,以便和下一
位的部分積的低位相加。
以R7作字節數計數。
編程如下:
345H0AH32H28H2BH1EH20BH第28頁/共42頁ORG0000HCLRC;清進位位CMOVR1,#20H;R1指示地址
MOVR2,#00H;存積的高八位寄存器R2清0S10:MOVA,@R1;取一字節送AMOVB,#0AH;10送BPUSHPSWMULAB;字節乘10POPPSWADDCA,R2;上次積高八位加本次積低八位
MOV@R1,A;送原存儲單元
MOVR2,B;積的高八位送R2INCR1;指向下一字節
DJNZR7,S10;未乘完去SH10,否則向下執行
MOV@R1,B;存最高字節積的高位
SJMP$第29頁/共42頁例如1223650989比較大小不交換(0)12236509191223650919交換(1)122309
6519不交換(0)交換(1)12236509191223
091965最大交換(1)不交換(0)12230919651209
2319
65交換(1)120919
23
65不交換(0)交換(1)12230919651209192365最大12091923650912192365091219236509121923650912192365第30頁/共42頁第31頁/共42頁MCS-51單片機有著優異的位邏輯功能,可以方便的實現各種復雜的邏輯運算.這種用軟件替代硬件的方法,可以大大簡化甚至完全不用硬件,但比硬件要多花運算時間。例3-17編寫一程序,以實現圖3-7中的邏輯運算電路.3.6位操作程序設計第32頁/共42頁
其中P1.1和P2.2分別是端口線上的信息,TF0和IE1分別是定時器定時溢出標志和外部中請求標志,25H和26H分別是兩個位地址,運算結果由端口線P1.3輸出。.圖3-4硬件邏輯運算電路第33頁/共42頁程序如下:START:MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/25HANLC,F0ANLC,/26HMOVP1.3,CSJMP$第34頁/共42頁例3-18
設累加器A的各位ACC.0~ACC.7分別記為X0~X7,編制程序用軟件實現下式:
Y=X0X1X2+X0X1X2+X0X1X2X3+X4X5X6X7X0BITACC.0X1BITACC.1X2BITACC.2X3BITACC.3X4BITACC.4X5BITACC.5X6BITACC.6X7BITACC.7第35頁/共42頁ORG0000HMOVC,X0ANLC,X1ANLC,X2MOV00H,C;X0X1X2MOVC,X0ANLC,/X1MOV01H,C;X0X1ANLC,/X2ORLC,00HMOV00H,C
MOVC,X2ANLC,01H
ANLC,X3;X0X1X2X3ORLC,/00HMOV00H,CMOVC,X7ANLC,/X6ANLC,/X5ANLC,/X4;X4X5X6X7ORLC,00H;最終結果
Y→CSJMP$第36頁/共42頁1.子程序是構成單片機應用程序必不可少的部分,通過ACALL和LCALL兩條子程序調用指令。2.子程序的優點:節省存儲單元,程序結構清晰,易于維護。3.子程序必須以RET指令結束。4.在調用子程序時,應
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西師大版一年級語文下冊期末考試水平檢測
- 2025-2030安全校車市場發展現狀分析及行業投資戰略研究報告
- 2025-2030孕婦奶粉行業市場發展分析及競爭格局與投資戰略研究報告
- 浙教版五年級下學期語文期中知識點歸納復習真題
- 2025-2030復合材料市場發展現狀分析及行業投資戰略研究報告
- 2025-2030塑料與聚合物行業市場現狀供需分析及投資評估規劃分析研究報告
- 會場安保合同樣本
- 2025-2030商用車行業風險投資發展分析及投資融資策略研究報告
- 2025-2030商業投幣式洗衣設備行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 2025五年級北師大版語文下學期期中綜合復習周末練習單
- 計算豬單位體重總產熱量的計算公式
- 2023年4月自考00540外國文學史試題及答案含評分標準
- 中國志愿服務發展指數報告
- 畜牧業經營預測與決策 畜牧業經營預測(畜牧業經營管理)
- MBTI 英文介紹課件
- 認識平面圖上的方向
- 液氮安全培訓資料課件
- 陜西省公務員招聘面試真題和考官題本及答案102套
- 鐵路工務巡道工崗位作業標準(崗位職責、崗位風險)
- 幼兒園紅色故事繪本:《雞毛信》 課件
- 監理畢業論文開題報告(文獻綜述+計劃書),開題報告
評論
0/150
提交評論