AVR单片机状态寄存器SREG.ppt_第1页
AVR单片机状态寄存器SREG.ppt_第2页
AVR单片机状态寄存器SREG.ppt_第3页
AVR单片机状态寄存器SREG.ppt_第4页
AVR单片机状态寄存器SREG.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR单片机原理及应用,陈渊睿 Tel:E-mail: 华南理工大学电力学院,关于状态寄存器SREG,1 状态寄存器SREG (MCS51类似的寄存器为程序状态字PSW,有进位/借位CY, 辅助进位AC, 用户标志F0, 溢出OV, 奇偶标志P等) 其各标志位意义如下: :全局中断触发禁止位,为中断总控制开关。将其清除,则禁止一切中断(但在异步工作方式下的 T/C2 的中断唤醒MCU功能除外) :通用标志位,可将一对程序执行起重要作用(或常用)的标志位放在此处,通过对它测试,实现执行不同功能。如:可用BLD指令将T标志,送至寄存器某位,或用BST指令将寄存器某位存于T标志位,实现快速检测判断 :半进位标志位,指示加、减运算时,低四位向高四位产生的进(借)位。以其与进位C配合,可实现十进制加减法运算软件调整(DAA)功能;或用于十进制数增(如数字钟)调整场合 :符号标志位,在正常运算条件下(,不溢出),即运算结果最高位作为符号是正确的。而当产生溢出时,此时 已不能正确指示运算结果之正负,但 仍是正确的。对于单(或多)字节有符号数据来说,执行减法或比较操作之后,标志能正确指示参与相减或比较的两个数的大小,:溢出标志位,模补码(即符号数)加、减运算溢出之标志,溢出表示运算结果超过了符号数所能表示的范围(-128+127)。加法溢出表现为正正负,或负负正;减法溢出表现为正负负,或负正正。溢出时,运算结果最高位(即 )取反才是真正的结果符号。例如: $30$50$80,正正负,溢出 $80$90$10,负负正,也为溢出 :负数标志位,直接取自运算结果最高位。时运算结果为负,否则为正。但溢出时不能表示真实结果(见上条对溢出标志的说明)。 :零标志位,用以标示数据算术运算或逻辑运算结果是否为零,或多字节数据算术运算(包括比较)结果是否为零。运算(比较)结果为零(即所有位都清除)时,标志置位。就字节型数据运算结果来说,的逻辑表达式为/R7/R6/R5/R4/R3/R2/R1/R0,:进/借位标志位,标志加法产生的进位,或减法产生的借位。多字节加、减法(包括比较)运算时,通过将产生的进位或借位提供给高位字节,以实现多字节正确相加或相减。也是判断相减(比较)两个无符号数大小的标志。多字节移位操作时以传递衔接。 对全部标志位都可进行置位、清位操作;都可检测各标志位,以检测结果决定程序走向,引出繁多的条件转移指令。 标志位很重要,对运算结果的判断处理,要以相应标志位为依据。它们也是分支、循环走向的路标。初学者因为不熟悉指令系统,编程时要时时检索各指令功能及其执行后对标志位的影响,故要熟记才能提高编程的速度和质量。,例:ADD运算时 各标志位定义,对于其它指令,C,Z,V,H定义式可能不同,2 执行指令对标志位的影响 各类指令对标志位的影响归纳如下: 位加减法(包括带/不带进(借)位的加、减法,以及求补和带/不带借位比较等)指令,影响标志位 。 字加/减立即数(063)指令和求反指令不影响标志位。 增、减指令不影响标志位和。 逻辑运算指令都不影响标志位和,但清除溢出标志位。其中CLR指令还清除标志位、,并使。,关于状态寄存器SREG, 逻辑左移和循环左移指令同位加法指令一样影响标志位 。逻辑右移和循环右移指令以及算术右移指令都不影响半进位标志 ,但由于这些指令的特殊性,对标志位的影响面可进一步缩小或可简化。如算术右移指令不影响标志位和 ,并使 ;逻辑右移指令清除标志位,使 等等。 转移指令中除中断返回指令RETI会置位全局中断控制标志位外,其他指令都不影响标志位。 数据传送指令如不向状态寄存器SREG输出数据,对标志位无影响。 位操作指令只影响作为操作对象的标志位。,关于状态寄存器SREG,关于状态寄存器SREG,3 标志位与运算结果的关系 运算时,计算机按二进制(或十六进制)逐位运算得到结果,但会给出相应标志,以让用户判断结果是否正确。一般地,无符号数运算结果是否正确只需看C和Z,而符号数运算要看N、V、(S)和Z。(半进位标志H主要用于十进制运算调整) 例1:加法 $30 + $50 = $80 运算后C=0, Z=0, N=1, V=1, S=0 作为无符号数加法时, C=0(无进位), 结果正确 作为符号数加法时,V=1(溢出), N=1(负数),不正确,应软件修正(如用2个字节表示, S=0, 应为正数 $0080),3 标志位与运算结果的关系 例2:$80 + $90 = $10 运算后,C=1, Z=0, N=0, V=1, S=1 作为无符号数运算时,C=1(有进位)应加到高字节,否则结果不正确 作为符号数运算时, V=1(溢出), N=0(正数),不正确,应软件修正(如用2个字节表示, S=1, 应为负数 $FF10) -128 + -112 = -240 例3:$EB + $CA = $B5 运算后,C=1, Z=0, N=1, V=0, S=1, H=1 作为无符号数运算时,C=1(有进位)应加到高字节,否则结果不正确 作为符号数运算时, V=0(未溢出), N=1(负数),S=1(=N), 结果正确,不必修正(-21 + -54 = -75),关于状态寄存器SREG,4 用软件实现十进制加、减法调整子程序的设计方法(即软件DAA) 计算机采用的十进制操作数一般为压缩型8421 BCD 码.每个 BCD 代表位十进制数,每位BCD码共存于同一字节单元中。BCD运算涉及状态寄存器中的进位和半进位 ,它们分别为高、低位 BCD的进(借)位。在进行 BCD码的加减运算时,计算机是按二进制数对待的,因此会产生与十进制运算规则不相符合的情况:,关于状态寄存器SREG, 当产生进(借)位(或)时,该进(借)位等于16(对涉及的一位BCD码而言),而在十进制运算时应等于10,二者相差6。 可能产生非法 BCD 码(AF)。产生原因有二:一是在十进制加法运算时,该产生进位而按二进制运算却不能产生进位,使和成为非法 BCD 码;二是相减产生借位时,借位应为10而按二进制运算为16,使差多并可能使差变为非法BCD码。 软件 DAA 即为纠正以上“错误”而设。从以上说明看到,“纠错”的方法是做加减调整以及解决相关问题。,关于状态寄存器SREG,(1)加法DAA 经实践考察,BCD码加法运算可产生以下种情况,注意这里讲的进位是对和的泛指。 不须调整。特点是既不产生进位,也不产生非法,如$22$11$33。 产生非法BCD,必须对非法BCD加调整。特点是BCD码相加后不产生进位,但加调整后产生进位,如$36$37$6D,加$06调整后变为$73(产生半进位)。$68$87$EF,加$66调整后变为$155(产生进位和半进位)等。,关于状态寄存器SREG, 产生进位,必须加调整。特点是BCD码相加只产生进位,不会同时产生非法BCD码;而加调整后既不会再产生进位(而是清除了原来的进位),也不会产生非法BCD。例$99$99$132,进位和半进位都置位,故加$66来调整:$32$66$98,并要恢复进位。 综合以上种情况,得出下面加法DAA之实现方法:首先保存BCD码相加后的状态寄存器SREG(保存其中的进位和半进位,分别称为Co和 Ho),再将BCD码之和加上立即数$66,产生出新的进位Cn和半进位Hn。,关于状态寄存器SREG,若Co、Cn中有一个置位(只能有一个),说明高位BCD满足调整条件并调整完毕;否则为不够调整条件,应减$60恢复。若Ho、Hn中有一个置位(只能有一个),说明低位BCD满足调整条件并调整完毕;否则为不够调整条件,应减恢复。程序中是将新旧进位、半进位对应或起来,只对或结果进行判断。注意,软件DAA功能既要保证本字节压缩BCD码相加值的正确性,又要保证对高位BCD产生进位的正确性,故要将 CoCn 的结果返还给SREG中的进位,使下一步能正确实现高位字节BCD带进位加。 ADDAA为BCD 码相加调整子程序,使用寄存器 R16作为工作单元,使用 R17、R6两个寄存器作为辅助工作单元,所有调整工作都在R16中进行,关于状态寄存器SREG,关于状态寄存器SREG,(2)减法DAA 由实践可知,减法DAA要比加法来得简单:只须对产生借位(泛指和 )的BCD码进行调整。BCD码减法运算,只有以下两种情况: 不产生借位,不须调整,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论