日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

當前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《單片機原理與應(yīng)用》 > 第3章 MCS-51單片機指令系統(tǒng)

第6節(jié) 單片機作邏輯運算

  3.3.1 硬件電路

  硬件電路仍采用實驗開發(fā)板上的電路,如圖3.4所示。

  工作原理

  通過P0口、P2口外接的撥動開關(guān)設(shè)制運算的數(shù)據(jù),利用單片機的邏輯運算指令運算,并將結(jié)果送P1口發(fā)光二極管顯示。

  3.3.2 程序設(shè)計

  1. 邏輯“與”運算程序

  ORG 0000H

  MOV A,P0

  ANL A,P2

  MOV P1,A

  SJMP $

  END

  2. 邏輯“或”運算程序

  ORG 0000H

  MOV A,P0

  ORL A,P2

  MOV P1,A

  SJMP $

  END

  3. 邏輯“異或”運算程序

  ORG 0000H

  MOV A,P0

  XRL A,P2

  MOV P1,A

  SJMP $

  END

  3.3.3 源程序的編輯、編譯、下載

  打開“偉福”模擬仿真軟件進行程序的編輯、編譯。

  打開“ISP下載軟件”將目標文件下載到ISP-4實驗開發(fā)板上的AT89S51單片機芯片,觀察程序運行結(jié)果。

  3.3.4 相關(guān)知識

  在上面的任務(wù)中,我們可以看到隨著P0、P2口的變化,發(fā)光二極管的輸出和相關(guān)邏輯運算的結(jié)果一致,那么,到底單片機是怎樣實現(xiàn)這種變化的呢?

  1. 單片機是怎樣做邏輯運算的?

  單片機CPU內(nèi)部集成的邏輯運算部件(主要有與運算器、或運算器、異或運算器等),可以完成與、或、異或運算等,單片機的邏輯運算指令經(jīng)過指令譯碼器譯碼后產(chǎn)生的控制信號控制邏輯運算部件工作產(chǎn)生運算結(jié)果。

  2. MCS-51單片機有哪些邏輯運算指令?

  邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類指令一般不影響程序狀態(tài)字(PSW)標志。

  (1) 循環(huán)移位指令(4條)

  這4條指令的作用是將累加器中的內(nèi)容循環(huán)左或右移一位,后兩條指令是連同進位位CY一起移位。

  RL A ;累加器A中的內(nèi)容左移一位。

  RR A ;累加器A中的內(nèi)容右移一位。

  RLC A ;累加器A中的內(nèi)容連同進位位CY左移一位。

  RRC A ;累加器A中的內(nèi)容連同進位位CY右移一位。

  (2) 累加器半字節(jié)交換指令(1條)

  這條指令是將累加器中的內(nèi)容高低半字節(jié)互換,這在上一節(jié)中內(nèi)容已有介紹。

  SWAP A ; 累加器中的內(nèi)容高低半字節(jié)互換

  (3) 求反指令(1條)

  這條指令將累加器中的內(nèi)容按位取反。

  CPL A ; 累加器中的內(nèi)容按位取反

  (4) 清零指令(1條)

  這條指令將累加器中的內(nèi)容清0。

  CLR A ; 0→(A),累加器中的內(nèi)容清0

  (5) 邏輯與操作指令(6條)

  這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯與操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  ANL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器A中。

  ANL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。

  ANL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  ANL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  ANL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。

  ANL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  如任務(wù)中的ANL A,P2 指令。

  (6) 邏輯或操作指令(6條)

  這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  ORL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在寄存器A中。

  ORL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。

  ORL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  ORL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  ORL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。

  ORL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  如任務(wù)中的 ORL A,P2 指令。

  (7) 邏輯異或操作指令(6條)

  這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯異或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  XRL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器A中。

  XRL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。

  XRL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  XRL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  XRL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。

  XRL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  如任務(wù)中的 XRL A,P2 指令。

  3. 邏輯運算指令應(yīng)用舉例

  【例3.9】 16位數(shù)的算術(shù)左移。16位數(shù)在內(nèi)存中低8位存放在M1單元,高8位存放在M1+1單元。

  解:所謂算術(shù)左移就是將操作數(shù)左移一位,并使最低位補充0,相當于完成 16位數(shù)的乘務(wù)員操作,故稱算術(shù)左移。參考程序如下:

  CLR C ;進位CY清零

  MOV R1,#M1 ;操作數(shù)地址M1送R1

  MOV A,@ R1 ;低8位數(shù)送A

  RLC A, ;低8位左移,最低位補0

  MOV @ R1 ,A ;低8位左移后,回送M1存放

  INC R1 ;指向16位高8位地址M1+1

  MOV A,@ R1 ;低8位送A

  RLC A, ;高8位帶低8位進位左移

  MOV @ R1 ,A ;高8位左移后回送M1+1存放

  若要對16位數(shù)進行循環(huán)移位,則應(yīng)首先設(shè)法把最高位(D15)的值置入CY,然后再參照以上程序編寫即可。利用以后介紹的位操作指令可以很容易地實現(xiàn)將某一位的值置入CY。

?
政和县| 抚宁县| 湘潭市| 建德市| 白朗县| 陇西县| 洪江市| 翁牛特旗| 南川市| 扎兰屯市| 星子县| 扶风县| 左贡县| 夏邑县| 张家界市| 松滋市| 定结县| 陆丰市| 镇沅| 孝感市| 广水市| 承德县| 甘南县| 房产| 资中县| 祁门县| 黄梅县| 大同县| 滁州市| 扎赉特旗| 阿拉善右旗| 额济纳旗| 平南县| 腾冲县| 长兴县| 板桥市| 庄河市| 贺兰县| 尤溪县| 南漳县| 宜兰县|