你知道真正的“读引脚”和“读锁存器”指令的区别吗

2022-05-16   大方老师单片机

原标题:你知道真正的“读引脚”和“读锁存器”指令的区别吗

你知道真正的读引读锁存指令的区别

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免费的,私信我就可以~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比///

某些指令说明

-读引读锁存指令的区别

.关于并I/O读引读锁存指令的区别

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

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

-读引读锁存指令的区别

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

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

-读引读锁存指令的区别

MOV CP1.0读的P1.0脚,同样,指MOV AP1也是读引脚指令,读引脚指令之前一定要有P1.01的指令。而指CPL P1.0读锁存,也--指令,它会先P1.0的锁存器Q端状态,接着取反,然后再送P1.0引脚上。而指ANL P1A读锁存命令。类似--指令举例如下:

INC P1

XRL P3A

ORL P2A

ANL P1A

CPL P3.0

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

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

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

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

-累加AAcc的书写问题

.关于累加AAcc的书写问题

累加器可写AAcc,区别是什么?

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

-累加AAcc的书写问题

.关于累加AAcc的书写问题

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

POP Acc不能写POP A

SETB Acc.0,不能写SETB A.0

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

.书写两16进制数据前要0

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

:

MOV A0F0HF0以字母开头的数据量

MOV A0F0HF0以字母开头的地址量

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

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