跳到内容

文章类别:芯片

关于汇编的DA指令

如果随意对一个累加器A中的二进制数据进行“二进制转十进制”调整是没有任何实际意义的!

DA调整的对象是ADD或ADDC以后的结果,而且是BCD码相加以后才能够加以调整,否则没有实际意义!

比如,现在我想执行12D+39D也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以BCD码的形式存储的,也就是12H和39H(十六进制),但我们可以人为将它们看为12D和39D(十进制),而且还希望相加以后的结果为51H,也就是说符合十进制运算规则12+39=51,而不是4BH的结果),但这样的十进制加法运算在单片机中是不能够直接实现的。因为单片机只能够执行二进制加法指令,也就是所有的运算都按照二进制中的规则进行!

于是就出现了DA调整指令!

现在12H+39H,将12H放于A中,执行 ADD A,#39H指令,则结果为4BH,这不是我们希望的51H的数据形式!!这时执行DA A 指令后,就会将A中的数据调整为51H(具体调整过程和原理你可以详细看书,如果单片机书中讲的不详细,那么微机原理中一定说的非常详细),而我们按照BCD码规则就将其看为51D,符合我们的要求!

也就是说加数和被加数都是BCD码的形式,最大也只可能是99H,也就是我们十进制数中的99,只有这样才会有实际的意义!所以楼主所说的当A=# 9AH的时候的情况是不会存在的,严格的说是没有意义的!

而且DA A指令只用于十进制BCD码加法指令以后,否则是没有实际意义的!

原文链接

MCS-51 单片机的存储器地址空间

MCS-51的存储器有 片内RAM , 片外RAM , 片内ROM 和 片外ROM 三个空间.

 

片内RAM,00H-FFH,256B.

128B用户RAM.
00H-1FH,32B,分成四个工作寄存器区,每区有寄存器R0~R7,对此区域,可以使用R0~R7来操作,但是,当前只有一个区是可以这样读写的,也可以使用字节地址,来读写.
20H-2FH,16B,是位寻址区,共有128个bit.此区域,也可按照字节寻址,来读写.
30H-7FH,没有什么特色,只进行字节寻址.

128B特殊RAM.
80H-FFH,寄存器借用区.用于定义功能各异的寄存器.

 

片外RAM,0000H-FFFFH,64KB.

对片外RAM读写,需用MOVX指令。

 

片内ROM,0000H-0FFFH,4KB.

当EA为高电平时,用户在0000H-0FFFH范围内使用内部ROM,大于0FFFH后,单片机CPU自动访问外部程序存储器.对ROM读出,需用MOVC指令.

 

片外ROM,0000H-FFFFH,64KB.

当EA为低电平时,用户在0000H-FFFFH范围内全使用外部部ROM。对ROM读出,需用MOVC指令.

关于触发释抑

最近在学习同步计数器74LS163的时候,需要用到双踪示波器测时钟脉冲与输出的波形,

以时钟为触发源,由于输出波形周期较长,容易出现波形不稳定,需要调节释抑时间,

而且课前思考题也有相关题目,某同学向我提起,课前思考题有一题不会,应该就是这一题了.

上课时老师没有讲清楚,只给出了需要调节到的数据,故将资料搜索整理如下,

关于示波器原理,教科书中有详细讲解,此处不再陈列,只给出关于触发释抑的解释.

 

 

触发释抑(Holdoff)的含义是暂时将示波器的触发电路封闭一段时间(即释抑时间),

在这段时间内,即使有满足触发条件的信号波形点示波器也不会触发。

在数字示波器中也会用百分比来表示,意义是整个记录长度或者整个屏幕的百分比。

示波器的触发部分的作用就是稳定的显示波形,触发释抑也是为了稳定显示波形而设置的功能。

主要针对大周期重复而在大周期内有很多满足触发条件的不重复的波形点而专门设置的。

比如图中所示,图中红色的点都可以满足触发条件,

如果不用释抑功能,触发点将不固定,造成显示不稳定,使用触发释抑后,每次都在同一个点触发,因此可以稳定显示。

对于数字示波器,不论是否触发,示波器实际上都是在不断地采集波形,但是如果只有稳定的触发才能有稳定的显示。

也会出现这种状况,示波器触发电路的模式出于“自动”模式,即不论是否满足触发条件都进行波形显示。

如果使用“通常”Normal模式,不满足触发条件就不会显示波形。

关于holdoff,如果在水平时间分辨率不变的前提下,百分比设置越大(对应信号显示逐渐稳定)那么就意味着信号的周期越长。

AT89系列单片机后缀的意义

89系列单片机的型号编码由三个部分组成,它们是前缀、型号和后缀。格式如下:

AT89C XXXXXXXX其中,AT是前缀,89CXXXX是型号,XXXX是后缀。

下面分别对这三个部分进行说明,并且对其中有关参数的表示和意义作相应的解释。

(l)前缀 由字母“AT”组成,表示该器件是ATMEL公司的产品。

(2)型号 由“89CXXXX”或“89LVXXXX”或“89SXXXX”等表示。

“89CXXXX”中,9是表示内部含 Flash存储器,C表示为 CMOS产品。
“89LVXXXX”中,LV表示低压产品。
“89SXXXX”中,S表示含有串行下载 Flash存储器。
在这个部分的“XXXX”表示器件型号数,如51、1051、8252等。

(3)后缀由“XXXX”四个参数组成,每个参数的表示和意义不同。在型号与后缀部分有“—”号隔开。

后缀中的第一个参数 X用于表示速度,它的意义如下:
X=12,表示速度为12 MHz。 X=20,表示速度为20 MHz。
X=16,表示速度为16 MHz。 X=24,表示速度为24 MHz。

后缀中的第二个参数 X用于表示封装,它的意义如下:
X=D,表示陶瓷封装。 X=Q,表示 PQFP封装。’
X=J,表示 PLCC封装。 X=A,表示 TQFP封装。
X=P,表示塑料双列直插 DIP封装。 X=W,表示裸芯片。
X=S,表示 SOIC封装。

后缀中第三个参数 X用于表示温度范围,它的意义如下:
X=C,表示商业用产品,温度范围为0~+ 70℃。
X=I,表示工业用产品,温度范围为-40~+ 85℃。
X=A,表示汽车用产品,温度范围为-40~+ 125℃。
X=M,表示军用产品,温度范围为-55~+150℃。

后缀中第四个参数 X用于说明产品的处理情况,它的意义如下:
X为空,表示处理工艺是标准工艺。
X=/883,表示处理工艺采用 MIL—STD—883标准。

例如:
有一个单片机型号为“AT89C51—12PI”,则表示意义为该单片机是 ATMEL公司的Flash单片机,内部是 CMOS结构,速度为12 MHz,封装为塑封 DIP,是工业用产品,按标准处理工艺生产。

AT89S51与AT89S52的区别

89S51:4KROM、128bRAM、4个中断源、2个定时器
89S52:8KROM、256bRAM、5个中断源、3个定时器(比51多出的定时器具有捕获功能)

1.所谓捕获功能将T2的当前计数值捕捉到陷阱寄存器(RCAP2L,RCAP2H)中去。T2EX端有一个下降负跳变时,扑捉当前的计数值(TH2,TL2)送入陷阱寄存器(RCAP2L,RCAP2H)。同时EXF2置位,象TF2一样产生内部中断请求。但应注意此时的T2定时、计数器并没有停止计时。当下次下降延发生时,数据会重新载入,这样就可以通过数值比较,计算出两次事件的时间差。

2.89S52有256 byte内存资源,其中高128位的地址和特殊寄存器地址重合,在使用的时候要使用间址寻址的方式进行数据读写。
MOV A, @Rj
MOV @Rj, A

3.虽然89S51 有 128 字节的内存,但不能全部给全局变量使用,需要预留20~30字节给堆栈使用,否则程序当然会跑飞。