第4章 AT89C52匯編語言程序設計解析_第1頁
第4章 AT89C52匯編語言程序設計解析_第2頁
第4章 AT89C52匯編語言程序設計解析_第3頁
第4章 AT89C52匯編語言程序設計解析_第4頁
第4章 AT89C52匯編語言程序設計解析_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

END2.多字節減法運算程序設計[例4-19]已知以BLK1和BLK2為首地址的片內RAM存儲區中分別有5字節無符號被減數和減數(低位在前、高位在后),試編寫一多字節減法子程序,把差放入以BLK1為起始地址的存儲單元。程序如下:ORGDSUBB:MOVMOVMOVCLRLOOP:MOVSUBBMOVINCINC0100HR0,#BLK1R1,#BLK2R2,#05HCA,@R0A,@R1@R0,AR0R1;被減數起始地址送R0;減數起始地址送R1;字長送R2;Cy清零;被減數送A;相減;存差DJNZR2,LOOPRETEND[例4-20]試編寫多字節壓縮BCD碼減法運算程序。解:AT89C52單片機指令系統中只有十進制加法調整指令“DAA”。該指令只有緊跟在加法指令(ADD、ADDC)后才能得到正確的結果。為了使用“DAA”指令對十進制減法進行調整,必須采用對減法求補相加的方法,以9AH為模減去減數即得到減數的補數。設被減數低字節地址存在R1,減數低字節地址存在R0,字節數存在R2;差的低字節地址存在R0,差的字節數存在R3。入口地址:(R0=減數地址指針,(R1)=被減數地址指針,(R2)=字節數出口地址:(R0)=差的地址指針,(R3)=差的字節數,借位放在07H位使用資源:A、R0~R3、內部RAM單元和07H位變量程序如下:ORGSUBCD:MOVCLRCLRSUBCD1:MOVSUBBADDDAMOVINCINCINCCPLDJNZJNC0100HR3,#00H07HCA,#9AHA,@R0A,@R1A@R0,AR0R1R3CR2,SUBCD1SUBCD2;進位求反以形成正確借位;未減完去SUBCD1,減完向下執行;無借位去SUBCD2返回主程序,否則繼續87;差字節單元清0;符號位清0;借位位清0;減數對模100求補;補碼相加;存結果SETBSUBCD2:RET07H;有借位,置“1”符號位END程序中對減數求補后與被減數相加,用“DAA”指令進行調整。若二者相加調整后結果無進位(C=0),則表示二者相減有借位;若二者相加調整后有進位(C=1),則表示二者相減無借位。所以必須對進位標志位C進行求反操作,才能得到正確結果。3.偽隨機數發生程序設計在仿真、編碼和測試等許多應用中,經常會用到隨機數序列。雖然,計算機不會產生絕對隨機的隨機數,但它能產生“偽隨機數”。常用的偽隨機數發生器有多種方法實現,在此介紹迭代線性同余法的實現。在這種方法中,每個數Xi與其下一個數Xi+1之間的關系如下:Xi+1=(AXi)modm其中,A是一定常乘數,m是一個除數。常把第一個數X0被稱為“隨機種子”,它是用來產生隨機數的一個數。在計算機中,這樣的一個“隨機種子”其實是一個無符號整形數。[例4-21]假設“隨機種子”取值為87,乘數A取值100,除數m取值為256,試編一程序產生80個偽隨機數,并將其保存在片內RAM40H單元開始的存儲區中。解:將一個16位二進制數除256所得的余數,其實就是原數中的低字節,這樣就能采用如下所示的簡單算法來代替原來的關系式。另外,當產生偽隨機數0時,按此關系式所計算的值均為0,當此情況出現時,應將0改為FFH。Xi+1=Low_byte(AXi)按此簡單算法所實現的匯編程序如下:ORGSEEDSTART:MOVMOVLOOP:MOVMOVMULCJNECONT:MOVINCMOVCJNESJMP$0100HEQU57H39H,#SEEDR0,#39HA,@R0B,#64H;取隨機種子到累加器A;乘數取100;將隨機種子作為第一個偽隨機數保存AB;AXiA,#00H,CONT;是否產生0值A,#0FFHR0@R0,A;將Xi+1保存到片內RAMR0,#90H,LOOP習題與思考題4-1編寫數據塊傳送程序,將片內RAM50H地址開始的100個字節送片外RAM3000H開始的單元。4-2編寫一個程序,其功能為:(A→(30H→(31H→(32H→??(3EH→(3FH4-3編寫一個程序,其功能為將30H(高~32H(低和33H(高~35H(低兩個3字節無符號數相加,結果存入30H(高~32H(低。4-4片內RAM40H和60H開始的單元分別存放兩個8字節BCD碼(低地址單元存放低字88節),編程將這兩個數相加,并將結果存在片外1000H開始的單元。4-5編寫程序,采用算術平均值濾波法求采樣平均值,設8次采樣值依次存放在40H~47H的連續單元中,結果保留在累加器A中。4-6片外RAM2000H地址開始存放長度為160的字符串,編程統計字符串中字符‘A’(ASCII碼為41H)出現的次數,并存入片內RAM80H單元。4-7片內RAM從地址50H開始存放一字符串,字符串以回車符(ASCII碼為0DH)作為結束符,編程計算字符串長度,并送片內RAM的FFH單元。4-8設自變量X為一無符號數,存放在片內RAM的VAX單元,函數值Y存放在FUNC單元,請編出滿足如下關系的程序:Y=X2XX>50X=505XX<504-9編寫一個子程序將字符串‘MCS-51Microcomputer’裝入外部RAM8000H開始的顯示緩沖區。4-10試設計一個子程序,其功能是應用查表指令“MOVCA,@A+PC”求累加器(A的平方值,結果送A,入口時(A<15。4-11編寫一個子程序,用查表方法,將累加器A中的數轉換為兩個ASCII字符,送入內部RAM30H、31H單元中。4-12編寫程序統計學生的英語成績,分別歸類90~100分、80~89分、70~79分、60~69分及60分以下,并將各分數段的人數送片內RAM單元。4-13設邏輯運算表達式如下:Y=(EF+)G(H)I+J其中變量E、F、G分別為P1.0、P1.4和定時器溢出標志TF0,H、I、J分別為F0、20H.3和外部中斷標志IE1,輸出變量Y為P1.5。試編寫程序用軟件方法實現上述邏輯功能。4-14在某應用系統中,有A~T共20個單字符命令,這些命令的處理程序入口地址依次存放于標號為JPTBL開始的地址表中。若輸入的命令字符存放于A累加器,試編寫一個散轉程序。其功能為:若累加器A中的字符為合法字符,則轉相應的入口地址;若累加器A中的字符為非法字符,則轉出錯處理程序ERR。4-15編寫一個子程序,其功能為將內部RAM的30H~32H單元中的壓縮BCD碼拆成6位非壓縮BCD碼,存放到33H~38H單元中。4-16編寫一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論