历史上的今天
返回首页

历史上的今天

今天是:2025年12月12日(星期五)

正在发生

2022年12月12日 | MCS-51单片机指令系统(4)

2022-12-12 来源:zhihu

某些指令说明

-“读引脚”和“读锁存器”指令的区别

  1. 关于并行I/O口的“读引脚”和“读锁存器”指令的区别

例如,当P1口的P1.0引脚外接一个发光二极管LED的阳极,LED的阴极接地。

若想查看一下单片机刚才向P1.x脚输出的信息是“0”还是“1”,如果直接读引脚,结果显然错误。

-“读引脚”和“读锁存器”指令的区别

正确做法是读D锁存器的Q端状态,那里储存的才是前一时刻送给P1.0的真实值。就是说,凡遇“读取P1口前一状态以便修改后再送出”的情形,都应当“读锁存器”的Q端信息,而不是读取引脚的信息。


当P1口外接输入设备时,要想P1口引脚上反映真实的输入信号,必须要 设法先让该引脚内部的场效应管截止才行,否则当场效应管导通时,P1口引 脚上将永远为低电平,无法正确反映外设的输入信号。让场效应管截止,就是用指令给P1口的相应位送一个“1”电平,这就是为什么读引脚之前,一 定要先送出“1”的原因。


-“读引脚”和“读锁存器”指令的区别

指令“MOV C,P1.0”读的是P1.0脚,同样,指令“MOV A,P1”也是读引脚指令,读引脚指令之前一定要有向P1.0写“1”的指令。而指令“CPL P1.0”则是“读锁存器”,也即“读-修改-写”指令,它会先读P1.0的锁存器的Q端状态,接着取反,然后再送到P1.0引脚上。而指令“ANL P1,A” 也是“读锁存器”命令。类似的“读-修改-写”指令举例如下:

INC P1

XRL P3,A

ORL P2,A

ANL P1,A

CPL P3.0

- 操作数的字节地址和位地址的区分问题

关于操作数的字节地址和位地址的区分问题

如何区别指令中出现的字节变量和位变量?

例如指令“MOV C,40H”和指令“MOV A,40H”两条指令中源操作数“40H”都是以直接地址形式给出的,“40H” 是字节地址还是位地址?对于助记符相同指令,观察操作数就可看出。显然前条指令中的“40H”肯定是位地址,因为目的操作数C是位变量。后条指令的“40H” 是字节地址,因为目的操作数A是字节变量。


- 累加器A与Acc的书写问题

  1. 关于累加器A与Acc的书写问题

累加器可写成A,或Acc,区别是什么?

Acc汇编后的机器码必有一个字节的操作数是累加器的字节地址E0H,A 汇编后则隐含在指令操作码中。例如: “INC A” 的机器码,查指令表是04H。如写成“INC Acc”后,则成了“INC direct”的格式,再查指令表,对应的机器码为“05H E0H”。


- 累加器A与Acc的书写问题

  1. 关于累加器A与Acc的书写问题

在对累加器A的直接寻址和累加器A的某一位寻址要用Acc,不能写成A。例如:

指令“POP Acc”不能写成“POP A”;

指令“SETB Acc.0”,不能写成“SETB A.0”。

- 书写两位16进制数据前要加“0"

  1. 书写两位16进制数据前要加“0”

经常遇到必须在某些数据或地址的前面多填一个“前导”0,否则汇编就通不过?这是汇编语言的严格性和规范性的体现。由于部分十六进制数是用字母来表示的,而程序内的标号也常用字母表示,为将标号和数据区分开,几乎所有的汇编语言都规定:凡是以字母开头(对十六进制数而言,就是A~F开头)的数字量,应当在前面添加一个数字“0”。至于地址量,它也是数据量的一种,前面也应该添加“0”。

例如:

MOV A,#0F0H ;“F0”以字母开头的数据量

MOV A,0F0H ;“F0”以字母开头的地址量

如不加“前导”0,就会把字母开头的数据量当作标号来处理,从而出错以及不能通过汇编。指令系统汇总

  • 指令条数多,不宜死记硬背,应在程序的编写中,多加练习,在实践中不断掌握和巩固常用的指令。

  • 下表为按功能排列的全部的指令助记符及功能简要说明,以及指令长度、执行时间和指令代码(机器代码)。读者应该熟练地查阅下表,正确理解指令的功能及特性,正确地使用指令。


推荐阅读

史海拾趣

EDDING公司的发展小趣事

在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。

Apex Tool Group公司的发展小趣事

ECLIPSE公司深知,要想在竞争激烈的电子行业中保持领先地位,必须不断创新和满足用户需求。因此,公司投入大量资源用于Eclipse的研发和更新,不断推出新版本和新功能。同时,ECLIPSE公司也非常重视社区建设,通过举办开发者大会、提供在线支持等方式,积极与全球开发者互动和交流。这些努力不仅增强了Eclipse的用户黏性,也为其带来了更多的创新思路和商业机会。

Giga公司的发展小趣事
通过定时控制LED灯的亮灭,实现视觉效果。
Arcolectric公司的发展小趣事

Arcolectric公司成立于1932年,作为Elektron PLC Group的一个著名品牌,它从一开始就专注于开关、指示灯及保险丝座的生产。在创立初期,Arcolectric就展现出了对技术的深厚积累和独特见解,成功研发出了一系列高质量、高性能的产品,为公司的长远发展奠定了坚实的基础。

Heidenhain Corp公司的发展小趣事

随着智能制造的兴起,海德汉公司积极转型为智能制造解决方案提供商。该公司与多家电子企业合作,共同探索智能制造的新模式和新路径。通过集成海德汉的数控系统、自动化设备和智能管理软件,这些企业成功构建了高效、灵活、智能的生产体系。海德汉的智能制造解决方案不仅提高了生产效率和产品质量,还降低了生产成本和能耗,为电子行业的可持续发展做出了积极贡献。

Cofan Usa Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的提升,Cofan Usa Inc公司开始积极拓展国内外市场。通过与各大电商平台和实体零售商建立合作关系,公司成功将产品推向更广泛的消费者群体。同时,公司注重品牌建设,通过精准的市场定位和有效的营销策略,逐渐树立了独特的品牌形象。

问答坊 | AI 解惑

小型变压器的绕制

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 小型变压器的绕制  …

查看全部问答>

大家帮忙解决下AD7721 的采集问题!谢谢

[img]https://bbs.eeworld.com.cn/[/img] 大家好! 最近在调一片AD遇到点麻烦 请大家多多指教指教 大概是这样子的 前端的模拟信号(单端信号)进AD7721 然后串行送FPGA (其实串并行均可),在FPGA内部做串转并,大概是200K的时钟,但是FPGA控制 ...…

查看全部问答>

printf 和 RETAILMSG 打印出来的消息不一致?

wince6.0 下win32 api 写的代码。 char inFilename[128]; memset(inFilename, 0x00, sizeof(inFilename)); wcscpy(inFilename,_T(\"\\\\Temp\\\\test_420_1599_1198.jpg\")); DNW串口打印消息: RETAILMSG(1,(TEXT(\"[RETAILMSG] inFilename : ...…

查看全部问答>

Linux下如何检测SATA热插拔?

我们的程序需要时钟保持着对SATA硬盘的检测,当硬盘被拔掉或者插上时,都应该要有提示信息。那么在Linux下面,我需要去读取、检测哪儿才能获取该信息呢?如果有人对USB的热插拔也比较了解的,欢迎过来帮我扫盲!(我大致看了驱动层,整个SATA的中断 ...…

查看全部问答>

ADS scatter描述文件

在ADS的“ARM Link”中设置 “-info totals -info unused -entry 0x40000000 -mangled -map -symbols -scatter D:\\work-wincetest\\uC-GUI\\ucosforphilips\\scatter.scf -info veneers -info sizes -xref  -callgraph” 生成了EXET_E ...…

查看全部问答>

PDA图像显示问题

在EVC4下做图像显示当图像大小大于1M时,图片无法加载,请问高手怎么解决~ 格式是JPG…

查看全部问答>

嵌入式要学什么啊

嵌入式要学什么啊,怎么学呢…

查看全部问答>

关于PROTEL封装的问题

LPC2131,AD9833,AD5231三款芯片,技术文档上面说它们的封装形式分别为LQFP64,uSOIC10,uSOIC16,但将这些直接填到元件footprint一栏并生成网表后,装载网表时却全部报错,说没有这种封装形式! 请问如何解决?…

查看全部问答>

dsp builder Megacore 使用问题

matlab装的是7.1的,quartus和dsp是7.2的,基本上都可以用用ip核时出错,比如用fir核,当设置完参数后,有个generate项,等产生完后,simulink栏里就会蹦出个对话框,说系统正在生成中,这当生成完后,IP核确实是生成出来了,报了个错,说生成test ...…

查看全部问答>

实习第二波

       一实习,首先碰到的是STM32,用IAR EWARM开发。 20天左右的时间,我们完成了老板交给我们的一个小任务。        当然,我们是在别人的例程的基础上做的,如果现在让我们重头 ...…

查看全部问答>