当前位置:首页 > 单片机教案 - 图文
C51单片机教案
(3)C3有进位.则Ac=1 补充说明: 程序状态字PSW是一个8位的标志寄存器,它保存指令执行结果的特征信息,以供程序查询和判别。其各位的定义如下: ①进位标志位C(PSW.7):在执行某些算术操作类、逻辑操作类指令时,可被硬件或软件置位或清零。它表示运算结果是否有进位或借位。如果在最高位有进位(加法时)或有借位(减法时),则C=1,否则C=0。 ②辅助进位(或称半进位)标志位AC(PSW.6):它表示两个8位数运算,低4位有无进(借)位的状况。当低4位相加(或相减)时,若D3位向D4位有进位(或借位),则AC=1,否则AC=0。 ③用户自定义标志位F0(PSW.5):用户可根据自己的需要对F0赋予一定的含义,通过软件置位或清零,并根据F0=1或0来决定程序的执行方式,或反映系统某一种工作状态。 ④工作寄存器组选择位RS1、RS0(PSW.4、PSW.3):可用软件置位或清零,用于选定当前使用的4个工作寄存器组中的某一组。 ⑤溢出标志位OV(PSW.2):做加法或减法时,由硬件置位或清零,以指示运算结果是否溢出。OV=1反映运算结果超出了累加器的数值范围(无符号数的范围为0~255,以补码形式表示一个有符号数的范围为-128~+127)。进行无符号数的加法或减法时,OV的值与进位位C的值相同;进行有符号数的加法时,如最高位、次高位之一有进位,或做减法时,如最高位、次高位之一有借位,OV被置位,即OV的值为最高位和次高位的异或(C7⊕C6)。 执行乘法指令MULAB也会影响OV标志,积大于255时OV=1,否则OV=0。 执行除法指令DIVAB也会影响OV标志,如B中所放除数为0,OV=1,否则OV=0。 ⑥奇偶标志位P(PSW.0):在执行指令后,单片机根据累加器A中1的个数的奇偶性自动给该标志置位或清零。若A中1的个数为奇数,则P=1,否则P=0。该标志对串行通信的数据传输非常有用,通过奇偶校验可检验传输的可靠性。 【例10】设A=0C3H,R0=0AAH,执行如下指令: ADD A,R0 结果为:A=6DH。 标志位为:Cy=1,OV=D6CY⊕D7CY=0⊕1=1,AC=0,P=1。 运算过程如下: (2)带进位加法指令(4条)。 ADDC A,Rn; A←A+Rn+Cy ADDC A,@Ri;A←A+(Ri)+Cy ADDC A,direct;A←A+(direct)+Cy 37
C51单片机教案
ADDC A,#data;A←A+data+Cy 这4条指令的功能是把源操作数所指示的内容和A中的内容及进位Cy相加,结果存入A中。运算结果对PSW的影响同上述4条ADD指令。 (3)带借位减法指令(4条)。 SUBB A,Rn;A←A-Rn-Cy SUBB A,direct;A←A-(direct)-Cy SUBB A,@Ri;A←A-(Ri)-Cy SUBB A,#data;A←A-data-Cy 这4条指令的功能是把A中的内容减去源操作数所指示的内容及进位Cy,将差存入A中。 加减法运算对PSW中的状态标志位影响情况如下:当加法运算结果的最高位有进位,或减法运算的最高位有借位时,进位Cy置位,否则Cy清零;当加法运算中低4位向高4位有进位,或减法运算中低4位向高4位有借位时,辅助进位位AC置位,否则AC清零;在加减运算过程中,位6和位7不同产生进位或借位时,溢出标志位OV置位,否则清零;当运算结果A中各位的“1”的个数为奇数时,奇偶校验位P置位,否则清零。 【例11】设A=85H,(20H)=6DH,Cy=1,执行如下指令: ADDC A,20H 结果为:A=F3H。 标志位为:Cy=0,OV=0,AC=1,P=0。 运算过程如下: 例:设A=49H,Cy=1,执行如下指令: SUBB A,#54H 结果为:A=F4H。 标志位为:Cy=1,OV=0,AC=0,P=1。 运算过程如下: 2.加1减1指令 (1)加1指令(5条)。 INC A;A←A+1 INC Rn;Rn←Rn+1 38
C51单片机教案
INC direct;(direct)←(direct)+1 INC @Ri;(Ri)←(Ri)+1 INC DPTR;DPTR←DPTR+1 加1指令的功能是将指定单元的内容加1再送回该单元,这类指令不影响标志位。即使加1溢出时也不进位,不影响Cy。 (2)减1指令(4条)。 DEC A;A←A-1 DEC Rn;Rn←Rn-1 DEC direct;(direct)←(direct)-1 DEC @Ri;(Ri)←(Ri)-1 减1指令的功能是将指定单元的内容减1再送回该单元,这类指令不影响标志位。 【例3-13】两个3字节数相减。设被减数放于10H起始的连续3个单元中(低位在前),减数放于30H起始的连续3个单元中(低位在前),相减的结果仍放于10H起始的单元中。 解:CLR C;Cy清零 MOV R0,#10H;被减数首地址 MOV R1,#30H;减数首地址 MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 MOV A,@R0 SUBB A,@R1 MOV @R0,A 3.BCD码调整指令 指令代码为:DA A 这条指令是在进行BCD码加法运算时,用来对BCD码的加法运算结果自动进行调整的。但对BCD码的减法运算不能用此指令来调整(只用于加法,跟在加法指令后面,减法不适用)。 (1)调整的目的。 在计算机中,十进制数字0~9一般可用BCD码表示,它是以4位二进制编码的形式出现的。在运算过程中,计算机按二进制规则进行运算。但因为对于4位二进制数可有16种状态,从0000~1111,运算时逢16进位,而对于十进制数只有10种状态,从0000~0101,运算时逢10进位。这样,如果十进制BCD码按二进制规则运算时,其结果就可能不正确,必须进行调整,以使运算的结果恢复为十进制数。 39
C51单片机教案
(2)调整方法。该指令执行过程如下。 当A3~0大于9时,或AC=1,则A3~0+6→A3~0。 当A7~4大于9或Cy=1时,则A7~4+6→A7~4。 总之,对十进制加法进行加06H、60H或66H的操作。但这个过程是在计算机内部自动进行的,是执行DA A指令的结果。在计算机的ALU硬件中设有十进制调整电路,由它完成这些操作。 【例14】执行下列指令后是如何调整的。 MOV A,#98D MOV R0,#89D ADD A,R0 DA A 解:第一步:A+R0→A 所以Cy=1,AC=1。 第二步:因为AC=1,所以加6调整低4位。 第三步:因Cy=1,所以加6调整高4位。 结果为:A=87D,Cy=1,相当于为187D。 在进行十进制加法运算时,只需在加法指令后紧跟一条DA A指令即可。 4.乘除法指令 (1)乘法指令(1条)。 MUL AB;BA←A×B 这条指令的功能是实现两个8位无符号数的乘法操作。两个无符号数分别存放在A和B中,乘积为16位,积的低8位存于A中,积的高8位存于B中。如果积大于255,即B≠0,则OV置1,否则OV清零,而该指令执行后,Cy总是清零。 【例16】设A=4EH,B=50H,执行如下指令: MUL AB 结果为:B=18H,A=60H,OV=1,Cy=0。 (2)除法指令(1条)。 DIV AB ;A←A/B(商),B←A/B(余数) 40
共分享92篇相关文档