第三章

了解布尔处理机的硬件支持

布尔处理机是一种位处理机。专门用于位处理。

操作码必须有,操作数可有可无。

*****************一些易错知识:

PC : 存放下一条欲执行指令。自动加1,形成下一条指令地址;PC不能被MOV指令修改值。

SP:堆栈指针,管出栈和入栈的数据;


掌握MCS-51系列单片机指令中的常用符号的含义:#、direct、@、addr11、addr16、rel、bit、Rn、Ri、$

#:立即数前导符 ; #8000H表示立即数8000H

direct:8位直接地址;

@:间接寻址前导符 ;

addr11:11位目标地址;

addr16:16位目标地址;

rel:偏移量;

bit:位地址;

Rn:表示工作寄存器中R0-R7的任意一个寄存器;

Ri:i只能取0或1;

$:当前指令的地址;


掌握MCS-51系列单片机系统的七种寻址方式、每种寻址方式的表示形式及寻址空间

立即寻址:

直接给出操作数本身的寻址方式。

例如:

MOV DPTR,#3000H --------将立即数3000H写入DPTR中。

直接寻址:

直接给出操作数地址的寻址方式。

ps:访问SFR的唯一方式。操作码后面的一个字节是实际操作数地址。内部RAM的高128字节。

例如:

MOV ACC,60H ;

MOV 50H,65H;

MOV ACC,60H,#20H;

寄存器寻址:Rn

指出操作数所在的寄存器。相当于寄存器中放了操作数。

操作码的第三位表示的是R0-R7中的哪一个。

例如:

MOV A,B;

MOV A,#60H;

MOV B,80H;

寄存器间接寻址:Ri

指令指定的寄存器中存放的内容就是实际操作数的地址。相当于寄存器中放的是操作数的地址。

例如:

MOV A,@R1;

MOV @R0,#30H;

MOV @R0,30H;

PS:这里R只能取0或1哦。

基址变址寻址:

用DPTR或PC当成基址;用A当变址。存放8位无符号数。其中DPTR可拆成DPH,DPL两个寄存器使用,但是PC不行。

例如两条查表指令:

MOVC A,@A+DPTR;

MOVC A,@A+PC;

相对寻址:

在相对寻址指令执行时,加上偏移量rel。即 目标地址=rel+(PC);

例如:

假设指令 JNZ NEXT的地址为2000H,当前PC的值为2002H。标号NEXT的地址2040H。求JNZ NEXT的rel。

解:

2040H=2002H+rel

rel=3EH;

位寻址:

略。


掌握MCS-51系列单片机的指令系统(能读懂指令的功能、能写出指令的助记符、能判断指令的正误、能分析和写出程序段的执行结果。

数据传送指令:

内部RAM和寄存器之间的数据传送:16 MOV

MOV :

//能够根据上表写出16条基本的MOV指令

外部RAM和累加器A之间的数据传送:4 MOVX

CPU与外部RAM或者扩展的IO之间进行数据交换时,必须使用MOVX指令,外部数据的传送与接收必须用过寄存器A,只能采用寄存器间接寻址。

MOVX A,@DPTR

MOVX A,Ri

MOVX Ri,A

MOVX @DPTR,A

例如:

MOV 30H,#44H;

MOV R1,#30H;

MOVX A,@R1;

MOV DPTR,#1234H;

MOV @DPTR,A;

求最后A和外部RAM中1234H的内容?

最后A=44H;(1234H)=44H;

程序存储器ROM和累加器A之间的数据传输:2 MOVC

MOVC A,@DPTR+A;

MOVC A,@PC+A;

数据交换指令:3

SWAP:

半字节交换指令。

MOV A,#78H;

SWAP A;

(A)=87H

XCHD:

低四位交换指令。

MOV R1,#55H;

MOV 55H,#23H;

MOV A,#67H;

XCHD A,@R1;

(A)=63H (R1)=27H

XCH:

全字节交换指令。

MOV R1,#55H;

MOV 55H,#23H;

MOV A,#67H;

XCH A,@R1;

(A)=67H (R1)=23H

堆栈指令:2

PUSH direct ;

POP direct;

ps:只能是直接寻址。同SFR。

对于PUSH:先移动指针+1,再放数据;

对于POP:先取出数据,再让指针-1;

PUSH,POP只能保护现场数据,不能保护断点。

例如:

MOV A,#12H;

PUSH ACC;

PUSH 30H,#50H;

POP 30H;

POP ACC;

(30H)=50H

(ACC)=12H

例如:

MOV A,#12H;

PUSH ACC;

PUSH 30H,#50H;

POP ACC;

POP 30H;

(30H)=12H

(ACC)=50H

练习:
在执行下列指令后,求A,R0,(60H);
MOV A,#45H
MOV R0,#60H
MOV @R0,A
XCH A,R0
----------------------
A=60H R0=45H (60H)=45H
设RAM中(2456H)=66H,(2457H)=34H,ROM中(2456H)=55H,(2457H)=64H.则(A),(DPTR)?
MOV A,#1
MOV DPTR,#2456H
MOVC A,@A+DPTR
----------------------
(A)=64H  (DPTR)=2456H
//DPTR是一个存放地址的16位寄存器。

三条传送MOV、MOVX、MOVC的格式、功能及它们访问的存储器类型和地址空间,能熟悉使用两条查表指令MOVC指令进行查表:MOVC A,@A+PC和MOVC A,@A+DPTR,可参考P90例4.24中的方法一和方法二;

MOV : 内部RAM;

MOVX : 外部RAM;

MOVC : ROM。

1010H: 30H
1011H: 31H
1012H: 32H
1013H: 33H
1014H: 34H
执行子程序:
1000H: MOV A,#0DH       // (A)=0DH
1002H: MOV A,@A+PC      //(PC)=1003H,@(A+PC)=1010H,等于 MOV A,@1010H = MOV A,30H. (A)=30H
1003H: MOV RO,A         // MOV R0,#30H
A,RO,PC的内容为多少?
A=30H,RO=30H,PC=1004H.

SWAP A,PUSH和POP指令的格式和功能及其操作数的寻址方式;

ADD、ADDC、DA A、SUBB、INC、DEC、MUL、DIV指令的格式和功能;

加法指令:

ADD : 不带进位的加指令。

ADDC:带进位的加指令。

格式:

ADD A,#data ADD A,direct ADD A,Rn ADD A,@Ri

ADDC A,#data ADDC A,direct ADDC A,Rn ADDC A,@Ri

减法指令:【没有不带借位的减法指令。】

SUBB:带借位的减法指令。

SUBB A,#data SUBB A,direct SUBB A,Rn SUBB A,@Ri

在执行SUBB之前,需要使用CLR C 对Cy清零。

十进制调整指令:

DA A

将A中的内容调整为合适的BCD码。

如果累加器A的低四位大于9或者(AC)=1 : (A)=(A)+06H;

如果累加器A的高四位大于9或者(Cy)=1 : (A)=(A)+ 60H;

MOV A,#33H
ADD A,#49H    // (A)=33H+49H=7CH
MOV B,A       //  (B)=7CH
DA A          //  (A)=7CH+06H=82H
求(A),(B)?
----------------------------
(B)=7CH   (A)=7CH+06H=82H

加一指令:

INC A

INC direct

INC Rn

INC @Ri

INC DPTR

INC不影响Cy,ADD/ADDC会影响Cy。

减一指令:

DEC A

DEC direct

DEC Rn

DEC @Ri

编程实现DPTR的减一操作。
思路:先对低四位减一,在对高四位减一。
CLR Cy
MOV A,DPL;//先送低四位进入中转站A
SUBB A,#01H;
MOV DPL,A;
MOV A,DPH;
SUBB A,#00H
MOV DPH,A

乘除指令:

MUL AB

DIV AB

MUL AB : A*B=BA;高八位放在B中,低八位放在A中。

DIV AB:A/B=A...B


ANL、ORL、XRL、RL、RR、RLC、RRC、CPL A、CLR A指令的格式和功能以及ANL、ORL、XRL的用途:对一个操作数中的部分位置1、清0、求反;

逻辑与指令:

ANL A,#data

ANL A,direct

ANL A,Rn

ANL A,@Ri

ANL direct,A

ANL direct,#data

作用:对某些位清零,另外一些不变。

例如:

ANL A,#01010101B

对A中1,3,5,7位清零。

逻辑或指令:

ORL A,#data

ORL A,direct

ORL A,Rn

ORL A,@Ri

ORL direct,A

ORL direct,#data

作用:对某些位置1,另外一些不变。

例如:

ORL A,#01010101B

对A中1,3,5,7位置1。

逻辑异或指令:

XRL A,#data

XRL A,direct

XRL A,Rn

XRL A,@Ri

XRL direct,A

XRL direct,#data

作用:对和1异或的取反,对和0异或的不变。

例如:

MOV A,#0111 1101B

XRL A,#0101 0101B

结果是:(A)=0010 1000B

循环移位指令:

RL : 不带Cy的循环左移指令。

RLC:带Cy的循环左移指令。

RR : 不带Cy的循环右移指令。

RRC:带Cy的循环右移指令。

左移一次相当于乘以2,右移一次相当于除以2。只能对累加器ACC做移位处理。

例如:

MOV A,#40H // 0100 0000

RL A // A=80H 1000 0000

RR A // A =20H 0010 0000

累加器清零与取反指令:

CLR A

CPL A

LJMP、AJMP、SJMP、JMP指令的格式、功能以及跳转范围;

无条件转移指令:4

长转移指令:3BYTE

LJMP addr16

ADDR0-15--->PC

短转移指令:

SJMP rel

PC=PC+rel;

SJMP $ //死循环

绝对转移指令:2BYTE

AJMP addr11

PC=PC+2;

PC0-10<-----addr11

要求转移后的指令地址与原地址高五位不变。

散转指令:

JMP @A+DPTR

(DPTR)+(A)----->PC


JZ/JNZ、CJNE、DJNZ、LCALL、ACALL、RET、RETI指令的格式、功能;

JZ:

JZ rel;

累加器判0转移。

若(A)=0,则PC=PC+rel。若(A)!=0,则顺序执行。

JNZ: not zero

JNZ rel;

累加器不判0转移。

若(A)!=0,则PC=PC+rel。若(A)=0,则顺序执行。

CJNE:

CJNE A,direct,rel

CJNE A,#data,rel

CJNE Rn,#data,rel

CJNE @Ri,#data,rel

比较转移指令。

若(A)=direct,则顺序执行。若(A)>direct,则(PC)=(PC)+rel,Cy=0;若(A)<direct,则(PC)=(PC)+rel,Cy=1.

DJNZ:

DJNZ Rn,rel

DJNZ direct,rel

减一不为0指令。

Rn=Rn-1,若此时Rn!=0,则PC=PC+rel,否则顺序执行。

子程序调用与返回指令:

ps:必须成对出现。

LCALL addr11

PC=PC+3

SP=SP+1 //低八位压栈

PC0-7---->SP

SP=SP+1 //高八位压栈

PC8-15---->SP

ADDR16---->PC0-15

ACALL addr16

PC=PC+2

SP=SP+1 //低八位压栈

PC0-7---->SP

SP=SP+1 //高八位压栈

PC8-15---->SP

ADDR16---->PC0-15

可在2KB的范围内调用子程序。

RET:

从堆栈中退出PC的高八位和低八位。将指针减去2,不影响任何标志。

先退高八位,再退低八位。

RETI: 中断返回

从堆栈中退出PC的高八位和低八位。将指针减去2,不影响任何标志。

先退高八位,再退低八位。

NOP:

空指令,占用1个机器周期。


位操作指令:MOV、SETB、CLR、CPL、JB、JNB指令的格式、功能。

MOV C,bit

MOV bit,C

***C指的是Cy。

CLR C C=0

CLR bit bit=0

SETB C C=1

SETB bit bit=1

开中断: CLR EA

关中断: STEB EA

JC rel

C=1,则PC=PC+rel.

JNC rel

C=0,则PC=PC+rel.

JB rel

bit=1,则PC=PC+rel.

JNB rel

bit=0,则PC=PC+rel.

JBC rel

C=1,则PC=PC+rel且C=0。

综合:能根据要求写汇编指令

例如:将片内RAM30H中的压缩的两位BCD码转换成二进制数送到片内RAM40H单元中。

已知:BCD转换二进制:10*A1+A0

ORG 0000H
AJMP START
---------以上是固定格式,背住即可-------------
ORG 40H
START: MOV A,30HSWAP AANL A,#0FHMOV B,#10MUL BAMOV B,AMOV 30HANL A,#0FHADD A,BMOV 40H,ASJMP $
/*可不可以这样写呢?想想*/
START: MOV A,30HANL A,#0F0HMOV B,#10MUL BAMOV B,AMOV 30HANL A,#0FHADD A,BMOV 40H,ASJMP $ 

求出内部RAM30H中数据含有1的个数,将结果送入32H。

ORG 0000H
AJMP START
START:CLR CMOV R2,#8MOV R1,#0MOV A,30H
LOOP: RCC AJNC NEXTINC R1
NEXT: DJNZ R2,LOOPMOV 32H,R1SJMP $
END

单片机复习知识点总结相关推荐

  1. 计算机软考知识点总结,历年计算机软考《系统分析师》复习知识点总结(8)

    点击查看:历年计算机软考<系统分析师>复习知识点总结 1. 专业英语 Discipline n.学科,几率,训练,惩罚;vt.规范,定义,使有条理 Cottage n.小屋,村舍;农舍式小 ...

  2. 微型计算机dec al,微机原理复习知识点

    复习知识点 第1章 1.8086是一种16位微处理器,80486是一种32位微处理器. 2.CPU由运算器和控制器组成.运算器的主要功能是算术运算与逻辑运算.运算器的逻辑部件为算 数逻辑单元. 3.A ...

  3. 计算机二级 java和web_2020年全国计算机二级WEB程序复习知识点:JavaBean

    [摘要] 即将参加全国计算机等级考试的考生们,考试即将到来,大家的备考工作进行得如何了?考必过为大家精心整理了2020年全国计算机二级WEB程序复习知识点:JavaBean,希望能够助力全国计算机等级 ...

  4. 二级c语言需要知道的知识点,2020年全国计算机二级C语言复习知识点:C语言基本知识(...

    [摘要] 即将参加全国计算机等级考试的考生们,考试即将到来,大家的备考工作进行得如何了?考必过为大家精心整理了2020年全国计算机二级C语言复习知识点:C语言基本知识(,希望能够助力全国计算机等级考试 ...

  5. 计算机二级ms office知识点讲解,全国计算机二级MSOffice复习知识点

    计算机内部电路组成,可以高速准确地完成各种算术运算.当今计算机系统的运算速度已达到每秒万亿次,微机也可达每秒亿次以上,使大量复杂的科学计算问题得以解决.下面是小编整理的关于全国计算机二级MSOffic ...

  6. 七年级计算机考试知识点,七年级语文期中考试复习知识点整理

    合理的总结,合理的归纳,对于考试成绩会有很大的帮助,下文为大家推荐了七年级语文期中考试复习知识点,祝大家期中考试顺利. .文章体裁 此文是一篇:诗歌.小说.散文(抒情散文.叙事散文).剧本.说明文.议 ...

  7. 数据库期末复习知识点:(仅供参考)

    数据库期末复习知识点: 一运用SQL 基本sql语句 授权sql语句: 实体完整性sql语句: 二 ER 画出ER图,并转换成关系模式. 三.范式 范式 存储结构 一运用SQL 基本sql语句 (1) ...

  8. 计算机职称考试知识点,职称计算机考试复习知识点

    职称计算机考试复习知识点 全国职称计算机考试可以提高计算机和网络的普及应用程度,加强"信息资源的开发和利用"的精神,落实国家加快信息化建设的要求,引导全国专业技术人员学习掌握计算机 ...

  9. 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具

    [摘要] 即将参加全国计算机等级考试的考生们,考试即将到来,大家的备考工作进行得如何了?考必过为大家精心整理了2020年全国计算机二级MySQL复习知识点:优化工具,希望能够助力全国计算机等级考试,相 ...

最新文章

  1. MYSQL忘记登录密码
  2. Cisco路由器的口令恢復
  3. Altium designer关于铺铜的操作
  4. 【CPP 小技巧 (一)FPS】统计处理一张图像算法消耗的时间 3 种方法
  5. HOW-TO:带有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler
  6. 用 Python 和 werobot 框架开发公众号
  7. 【学习OpenCV4】滚动条Trackbar的创建与使用详解
  8. 第六章 Realm及相关对象——《跟我学Shiro》[张开涛]
  9. Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
  10. 导致Android手机崩溃的壁纸,一张壁纸导致安卓手机崩溃作者首发声:绝非故意...
  11. 年末去字节跳动面试,居然被面试官问的哑口无言,原因竟然是这个!!!
  12. 解决真机识别为虚拟机,Sorry, this application cannot be run under a Virtual Machine
  13. 计算机专业必读哪两本经典书籍?
  14. win10动态壁纸怎么设置_酷狗也能设置动态壁纸???
  15. sparklines_Sparklines入门200年来功能强大的数据可视化形式
  16. bit、Byte、bps、Bps、pps、Gbps的详细说明及换算
  17. Base58原理及代码
  18. Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)——计算机毕业设计
  19. topcoder srm 390 div1
  20. 输出1到2000之间的双胞胎数。双胞胎数:两质数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。

热门文章

  1. 短视频运营的目标是什么?
  2. 【京东】职级、薪酬、绩效全认知
  3. 互联网大厂薪资最全揭秘:京东
  4. Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
  5. mysql安装 真难啊!
  6. 体验完老罗的直播,我再也不敢了...
  7. 区块链时代正开启 中原精英探讨区块链未来 ----2018华中首届区块链论坛郑州开幕
  8. (21)打鸡儿教你Vue.js
  9. 学不止境,学然后知不足,教然后知困
  10. 企业线上培训平台哪个比较好