广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 3位操作和布尔逻辑 8051可分别对 BDATA和SFRs中128个可寻址位,32个I/0口进行位逻辑操作。可对 这些位进行与,或,异或,求补,置位,清零等操作,并可像转移字节那样转移位 列表A-1 把位地址22H中的数移入进位位中 C,23H 把位地址23H中的数和进位位中的数相或 24H,C ;把进位位中的数移入位地址24H中 可寻址位也可作为条件转移的条件,一条很有用的指令就是JBC,通过判断可寻址位 是否置位来决定是否进行转移,如果该位置位则转移,并清零该位。这条指令能够在两个 处理周期中完成,比在两个代码段中分别使用跳转和清零指令要节省一到两个处理周期 比如说,你要编写一个过程,等待P0.0置位,然后跳转,但是等待有时间限制。这样就需 要设置一个时间,时间到达后跳出查询,检测到P0.0置位后跳出,并清零P0.0。一般的 逻辑流程如下。 例A-2 Mov timeout,# TO VALUE;设置查询时间 P0.0,L1 ;P0.0置位则跳转 DJNZ timeout, L2 查询时间计数 LI: CLR P0. 0 P0.0清零 RET 退出 当使用JBC时程序如下 例A-3 Mov timeout,# TO VALUE;设置查询时间 P0.0,L1 P0.0置位则跳转并清零 DJNZ timeout, L 查询时间计数 LI: RET 退出 利用JBC不但节省了代码长度,而且使程序更加简洁美观。以后在编制代码时要习惯 使用这条指令
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 6 3 位操作和布尔逻辑 8051 可分别对 BDATA 和 SFRs 中 128 个可寻址位 32 个 I/O 口进行位逻辑操作 可对 这些位进行与 或 异或 求补 置位 清零等操作 并可像转移字节那样转移位 列表 A-1 MOV C 22H 把位地址 22H 中的数移入进位位中 ORL C 23H 把位地址 23H 中的数和进位位中的数相或 MOV 24H C 把进位位中的数移入位地址 24H 中 可寻址位也可作为条件转移的条件 一条很有用的指令就是 JBC 通过判断可寻址位 是否置位来决定是否进行转移 如果该位置位则转移 并清零该位 这条指令能够在两个 处理周期中完成 比在两个代码段中分别使用跳转和清零指令要节省一到两个处理周期 比如说 你要编写一个过程 等待 P0.0 置位 然后跳转 但是等待有时间限制 这样就需 要设置一个时间 时间到达后跳出查询 检测到 P0.0 置位后跳出 并清零 P0.0 一般的 逻辑流程如下 例 A-2 MOV timeout #TO_VALUE 设置查询时间 L2 JB P0.0 L1 P0.0 置位则跳转 DJNZ timeout L2 查询时间计数 L1 CLR P0.0 P0.0 清零 RET 退出 当使用 JBC 时程序如下 例 A-3 MOV timeout #TO_VALUE 设置查询时间 L2 JBC P0.0 L1 P0.0 置位则跳转并清零 DJNZ timeout L2 查询时间计数 L1 RET 退出 利用 JBC 不但节省了代码长度 而且使程序更加简洁美观 以后在编制代码时要习惯 使用这条指令
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 4寻址方式 8051可对存储区直接或间接寻址。这些是典型的寻址方式。直接寻址是在指令中直接 包含所须寻址的字节地址,直接寻址只能在DATA区和SFR中进行。如下例: 列表A-4 mov A, 03H 把地址O3H中的数移入累加器 MOV 43H, 22H 把地址22H中的数移入地址43H中 Mov 02H, C ;把C中的数移入位地址02H中 MoV42H,#18 把立即数18移入地址42H中 MOv 09H, SBUF 把串行缓冲区中的数移入地址09H中 间接寻址要使用DPTR,PC,RO,R1寄存器,用来存放所要访问数据的地址,指令使用 指针寄存器,而不是直接使用地址。用间接寻址方式可访问CODE, IDATA,ⅫDATA存储区 对DATA存储区也可进行间接寻址。只能用直接寻址方式对位地址进行寻址 在进行块移动时,用间接寻址十分方便,能用最少的代码完成操作。可以利用循环过 程使指针递增。对CODE区进行寻址时,将基址存入DPTR或PC中,把变址存入累加器中, 这种方法在查表时十分有用,举例如下: 例A-5 DATA和 IDATA区寻址 Mov RI, #22H 设置RI为指向DATA区内的地址22H的指针 Mov RO, #0A9H ;设置RO为指向 IDATA区内的地址OA9H的指针 Mov A ;读入地址22H的数据 ;将累加器中的数据写入地址A9H ;RO中的地址变为A INC RI ;R1中的地址变为23H Mov 34H, GRO 将地址AAH中的数据写入34H MOV @RI, #67H 把立即数写入地址23H XDATA区寻址 MOV DPTR,#3048H;DPTR指向外部存储区 MoVX A, ODPTR ;读入外部存储区地址3048H中的数 INC DPTR 指针加 MOv A, #26H ;立即数26H写入A中 MOVX ODPTR, A ;将26写入外部存储区地址3049H中 Mov RO, #87H R0指向外部存储区地址87H MovX A, ORO 将外部存储区地址87H中的数读入累加器中 代码区寻址 MOV DPTR,# TABLE BASE;DPTR指向表首地址 Mov A, index 把偏移量装入累加器中 MOVC A, A+DPTR 从表中读入数据到累加器中 7
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 7 4 寻址方式 8051 可对存储区直接或间接寻址 这些是典型的寻址方式 直接寻址是在指令中直接 包含所须寻址的字节地址 直接寻址只能在 DATA 区和 SFR 中进行 如下例 列表 A-4 MOV A 03H 把地址 03H 中的数移入累加器 MOV 43H 22H 把地址 22H 中的数移入地址 43H 中 MOV 02H C 把 C 中的数移入位地址 02H 中 MOV 42H #18 把立即数 18 移入地址 42H 中 MOV 09H SBUF 把串行缓冲区中的数移入地址 09H 中 间接寻址要使用 DPTR PC R0 R1 寄存器 用来存放所要访问数据的地址 指令使用 指针寄存器 而不是直接使用地址 用间接寻址方式可访问 CODE IDATA XDATA 存储区 对 DATA 存储区也可进行间接寻址 只能用直接寻址方式对位地址进行寻址 在进行块移动时 用间接寻址十分方便 能用最少的代码完成操作 可以利用循环过 程使指针递增 对 CODE 区进行寻址时 将基址存入 DPTR 或 PC 中 把变址存入累加器中 这种方法在查表时十分有用 举例如下 例 A-5 DATA 和 IDATA 区寻址 MOV R1 #22H 设置 R1 为指向 DATA 区内的地址 22H 的指针 MOV R0 #0A9H 设置 R0 为指向 IDATA 区内的地址 0A9H 的指针 MOV A @R1 读入地址 22H 的数据 MOV @R0 A 将累加器中的数据写入地址 A9H INC R0 RO 中的地址变为 AAH INC R1 R1 中的地址变为 23H MOV 34H @R0 将地址 AAH 中的数据写入 34H MOV @R1 #67H 把立即数写入地址 23H XDATA 区寻址 MOV DPTR #3048H DPTR 指向外部存储区 MOVX A @DPTR 读入外部存储区地址 3048H 中的数 INC DPTR 指针加一 MOV A #26H 立即数 26H 写入 A 中 MOVX @DPTR A 将 26H 写入外部存储区地址 3049H 中 MOV R0 #87H R0 指向外部存储区地址 87H MOVX A @R0 将外部存储区地址 87H 中的数读入累加器中 代码区寻址 MOV DPTR #TABLE_BASE DPTR 指向表首地址 MOV A index 把偏移量装入累加器中 MOVC A @A+DPTR 从表中读入数据到累加器中
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 5处理器状态 处理器的状态保存在状态寄存器PSW中,状态字中包括进位位,用于BCD码处理的辅 助进位位,奇偶标志位,溢出标志位,还有前面提到的用于寄存器组选择的RS0和RS1。0 组从地址00H开始,1组从地址08H开始,2组从地址10H开始,3组从地址18H开始。这 些地址都可通过直接或间接方式进行寻址。PSW的结构如下 CY AC FO RS1 RSO OV USR P CY进位标志位 AC辅助进位标志位 通用标志位 寄存器组选择位高位 RS0寄存器组选择位低位 溢出标志位 用户定义标志位 奇偶标志位 6电源控制 8051的 CHMOS版本可通过软件设置两种节电方式,空闲模式和低功耗模式。设置电源 控制寄存器PC0N的相应位来进入节电方式。置位IDLE进入空闲模式,空闲模式将停止程 序执行,RAM中的数据仍然保持,晶振继续工作,但与CPU断开。定时器和串行口继续工 作。发生中断将退出中断模式。执行完中断程序后,将从程序停止的地方继续指令的执行。 通过置位PDWN位来进入低功耗模式,低功耗模式中晶振将停止工作,因此,定时器和 串行口都将停止工作。至少有两伏的电压加在芯片上,因此,RAM中的数据仍将保存。退 出低功耗模式只有两种方式,上电或复位。 SMOD位可控制串行通信的波特率,将使由定时器1的溢出率或晶振频率产生的波特率 翻倍。置位SMD可使工作于方式1,2,3定时器产生的波特率翻倍。当使用定时器2产生 波特率时,SMOD将不影响波特率 电源控制寄存器(不可位寻址) LSMD---cF】 GFOPDaNIDLE sJoD串行口通信波特率控制位,置位使波特率翻倍 保留 保留 保留 通用标志位 GFO通用标志位 PDWN低功耗标志位,置位进入低功耗模式 IDLE空闲标志位,置位进入空闲模式 表A-3 6中断系统 基本的8051支持6个中断源,两个外部中断,两个定时/计数器中断,一个串行口输 入/输出中断。中断发生后,处理器转到将五个中断入口处之一执行中断处理程序。中断向 量位于代码段的最低地址出(串行口输入,输出中断共用一个中断向量)。中断服务程序必 须在中断入口处或通过跳转,分支转移到别处。8051/8052的中断向量表A-4 8
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 8 5 处理器状态 处理器的状态保存在状态寄存器 PSW 中 状态字中包括进位位 用于 BCD 码处理的辅 助进位位 奇偶标志位 溢出标志位 还有前面提到的用于寄存器组选择的 RS0 和 RS1 0 组从地址 00H 开始 1 组从地址 08H 开始 2 组从地址 10H 开始 3 组从地址 18H 开始 这 些地址都可通过直接或间接方式进行寻址 PSW 的结构如下 CY AC F0 RS1 RS0 OV USR P CY 进位标志位 AC 辅助进位标志位 F0 通用标志位 RS1 寄存器组选择位高位 RS0 寄存器组选择位低位 OV 溢出标志位 USR 用户定义标志位 P 奇偶标志位 6 电源控制 8051 的 CHMOS 版本可通过软件设置两种节电方式 空闲模式和低功耗模式 设置电源 控制寄存器 PCON 的相应位来进入节电方式 置位 IDLE 进入空闲模式 空闲模式将停止程 序执行 RAM 中的数据仍然保持 晶振继续工作 但与 CPU 断开 定时器和串行口继续工 作 发生中断将退出中断模式 执行完中断程序后 将从程序停止的地方继续指令的执行 通过置位 PDWN 位来进入低功耗模式 低功耗模式中晶振将停止工作 因此 定时器和 串行口都将停止工作 至少有两伏的电压加在芯片上 因此 RAM 中的数据仍将保存 退 出低功耗模式只有两种方式 上电或复位 SMOD 位可控制串行通信的波特率 将使由定时器 1 的溢出率或晶振频率产生的波特率 翻倍 置位 SMOD 可使工作于方式 1 2 3 定时器产生的波特率翻倍 当使用定时器 2 产生 波特率时 SMOD 将不影响波特率 电源控制寄存器 不可位寻址 SMOD - - - GF1 GF0 PDWN IDLE SMOD 串行口通信波特率控制位 置位使波特率翻倍 - 保留 - 保留 - 保留 GF1 通用标志位 GF0 通用标志位 PDWN 低功耗标志位 置位进入低功耗模式 IDLE 空闲标志位 置位进入空闲模式 表 A-3 6 中断系统 基本的 8051 支持 6 个中断源 两个外部中断 两个定时/计数器中断 一个串行口输 入/输出中断 中断发生后 处理器转到将五个中断入口处之一执行中断处理程序 中断向 量位于代码段的最低地址出 串行口输入 输出中断共用一个中断向量 中断服务程序必 须在中断入口处或通过跳转 分支转移到别处 8051/8052 的中断向量表 A-4
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:3873092 8051支持两个中断优先级,有标准的中 断机制,低优先级的中断只能被高优先级的上电复位 0000H 中断所中断,而高优先级的中断不能被中断。「外部中断0 0003H 定时器0溢出 000BH 6.1中断优先级寄存器 外部中断1 0013H 每个中断源都可通过设置中断优先级寄存定时器1溢出00BH 串行口中断 0023H 源的相应位被置位,则该中断源的优先级为高。[定时器2溢出0B 如果相应的位被复位,则该中断源的优先级为低。如果你觉得两个中断源不够用,别急 以后我会教你如何增加中断优先级。表A-5示出了IP寄存器的各位,此寄存器可位寻址 IP寄存器(可位寻址) P2「sP「Px1P0Px 保留 保留 PT2定时器2中断优先级 PS串行通信中断优先级 PT1定时器1中断优先级 PX1外部中断1优先级 PT0定时器0中断优先级 PXO外部中断0优先级 6.2中断使能寄存器 通过设置中断使能寄存器IE的EA位,使能所有中断。每个中断源都有单独的使能位 可通过软件设置E中相应的使能位在任何时候使能或禁能中断。中断使能寄存器IE的各 位如下所示 中断使能寄存器IE(可位寻址) LEA- ET2 ES ETI EXI ETO EXO EA 使能标志位,置位则所有中断使能,复位则禁止所有中断 保留 ET2 定时器2中断使能 串行通信中断使能 ETI 定时器1中断使能 EX1 外部中断1使能 ETO 定时器0中断使能 外部中断0使能 6.3中断延迟 8051在每个处理周期查询中断标志,确定是否有中断请求。当发生中断时,置位相应 的标志,处理器将在下个周期查询到中断标志位,这样,从发生中断到确认中断之间有一 个指令周期的延时。这时,处理器将用两个周期的时间来调用中断服务程序,总共要花 个时钟周期。在理想情况下,处理器将在3个指令周期内响应中断,这使得用户能很快响 应系统事件 不可避免地,系统有可能在3个处理周期能不能响应中断请求,特别是当有同级或更
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 9 8051 支持两个中断优先级 有标准的中 断机制 低优先级的中断只能被高优先级的 中断所中断 而高优先级的中断不能被中断 6.1 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存 器 IP 来单独设置中断优先级 如果每个中断 源的相应位被置位 则该中断源的优先级为高 如果相应的位被复位 则该中断源的优先级为低 如果你觉得两个中断源不够用 别急 以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 可位寻址 - - PT2 PS PT1 PX1 PT0 PX0 - 保留 - 保留 PT2 定时器 2 中断优先级 PS 串行通信中断优先级 PT1 定时器 1 中断优先级 PX1 外部中断 1 优先级 PT0 定时器 0 中断优先级 PX0 外部中断 0 优先级 表 A-5 6.2 中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器 IE 可位寻址 EA - ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断 - 保留 ET2 定时器 2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器 0 中断使能 EX0 外部中断 0 使能 6.3 中断延迟 8051 在每个处理周期查询中断标志 确定是否有中断请求 当发生中断时 置位相应 的标志 处理器将在下个周期查询到中断标志位 这样 从发生中断到确认中断之间有一 个指令周期的延时 这时 处理器将用两个周期的时间来调用中断服务程序 总共要花 3 个时钟周期 在理想情况下 处理器将在 3 个指令周期内响应中断 这使得用户能很快响 应系统事件 不可避免地 系统有可能在 3 个处理周期能不能响应中断请求 特别是当有同级或更 中断源 中断向量 上电复位 0000H 外部中断 0 0003H 定时器 0 溢出 000BH 外部中断 1 0013H 定时器 1 溢出 001BH 串行口中断 0023H 定时器 2 溢出 002BH
广州周立功单片机发展有限公司Te:(020)38730916387309173870976387097Fax389305 高级的中断服务程序正在执行的时候。因此,中断的延迟主要取决于正在执行的程序 另外一种大于3个周期的中断延迟是,程序正在执行一条多周期指令,要等到当前的 指令执行完后,处理器才会处理中断事件,这将在原来的基础上至少增加一个周期的延时 (假设在执行完多周期指令的第一个周期后发现中断)。除被其它中断所阻的情况,中断不 被响应的最长延时为6个处理周期(3个周期的多周期指令执行时间,3个周期的指令响应 时间4)。 最后一种大于3个指令周期的中断延迟是,当检测到中断时,正在执行写IP,IE或RETI 指令 64外部中断信号 8051支持两个外部中断信号,这使外部器件能请求中断,从而得到相应的服务。外部 中断由外部中断引脚(外部中断0为P3.2,外部中断1为P3.3)电平为低或电平由高到低 跳变引起。由电平触发还是跳变触发取决于寄存器TC0N的ITx位,见A-7 电平触发时,当检测到中断引脚电平为低时,将产生中断。低电平应至少保持一个指 令周期或12个时钟周期。因为,处理器每个指令周期检测一次引脚。跳变触发时,当在连 续的两个周期中检测到由高到低的电平跳变时,将产生中断,而电平的0状态应至少保持 个周期。 7内置定时/计数器 标准的8051有两个定时/计数器,每个定时器有16位。定时/计数器既可用来作为定 时器(对机器周期计数),也可用来对相应I/0口(T0,T1)上从高到低的跳变脉冲计数。当 用作计数器时,脉冲频率不应高于指令的执行频率的1/2,因为每周期检测一次引脚电平, 而判断一次脉冲跳变需要两个指令周期。如果需要的话,当脉冲计数溢出时,可以产生一 个中断 TCON特殊功能寄存器( timer controller)用来控制定时器的工作起停和溢出标志位。 通过改变定时器运行位TRO和TR1来启动和停止定时器的工作。TC0N中还包括了定时器T0 和T1的溢出中断标志位。当定时器溢出时,相应的标志位被置位,当程序检测到标志位从 0到1的跳变时,如果中断是使能的,将产生一个中断。注意,中断标志位可在任何时候 置位和清除,因此,可通过软件产生和阻止定时器中断。 定时器控制寄存器(TCON可位寻址) TF1 TRI TFO IE1 ITI IEO ITO TF1 定时器1溢出中断标志。响应中断后由处理器清零 定时器1控制位,置位时定时器1工作,复位时定时器1停止工作 定时器0溢出标志位。定时器0溢出时置位,处理器响应中断后淸除该位 定时器0控制位,置位时定时器0工作,复位时定时器0停止工作 外部中断1触发标志位,当检测到P3.3有从高到低的跳变电平时置位,处 理器响应中断后,由硬件清除该位。 IT1 中断1触发方式控制位,置位时为跳变触发,复位时为低电平触发 外部中断1触发标志位,当检测到P3.3有从高到低的跳变电平时置位,处 理器响应中断后,由硬件清除该位。 ITO 中断1触发方式控制位,置位时为跳变触发,复位时为低电平触发 表A-7 定时器的工作方式由特殊功能寄存器TMOD来设置。通过改变TMOD,软件可控制两个 定时器的工作方式和时钟源(是I/0口的触发电平还是处理器的时钟脉冲)。TMOD的高四
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 10 高级的中断服务程序正在执行的时候 因此 中断的延迟主要取决于正在执行的程序 另外一种大于 3 个周期的中断延迟是 程序正在执行一条多周期指令 要等到当前的 指令执行完后 处理器才会处理中断事件 这将在原来的基础上至少增加一个周期的延时 假设在执行完多周期指令的第一个周期后发现中断 除被其它中断所阻的情况 中断不 被响应的最长延时为 6 个处理周期 3 个周期的多周期指令执行时间 3 个周期的指令响应 时间 4 最后一种大于 3 个指令周期的中断延迟是 当检测到中断时 正在执行写 IP IE 或 RETI 指令 6.4 外部中断信号 8051 支持两个外部中断信号 这使外部器件能请求中断 从而得到相应的服务 外部 中断由外部中断引脚 外部中断 0 为 P3.2 外部中断 1 为 P3.3 电平为低或电平由高到低 跳变引起 由电平触发还是跳变触发取决于寄存器 TCON 的 ITX 位 见 A-7 电平触发时 当检测到中断引脚电平为低时 将产生中断 低电平应至少保持一个指 令周期或 12 个时钟周期 因为 处理器每个指令周期检测一次引脚 跳变触发时 当在连 续的两个周期中检测到由高到低的电平跳变时 将产生中断 而电平的 0 状态应至少保持 一个周期 7 内置定时/计数器 标准的 8051 有两个定时/计数器 每个定时器有 16 位 定时/计数器既可用来作为定 时器 对机器周期计数 也可用来对相应 I/0 口 TO T1 上从高到低的跳变脉冲计数 当 用作计数器时 脉冲频率不应高于指令的执行频率的 1/2 因为每周期检测一次引脚电平 而判断一次脉冲跳变需要两个指令周期 如果需要的话 当脉冲计数溢出时 可以产生一 个中断 TCON 特殊功能寄存器 timer controller 用来控制定时器的工作起停和溢出标志位 通过改变定时器运行位 TR0 和 TR1 来启动和停止定时器的工作 TCON 中还包括了定时器 T0 和 T1 的溢出中断标志位 当定时器溢出时 相应的标志位被置位 当程序检测到标志位从 0 到 1 的跳变时 如果中断是使能的 将产生一个中断 注意 中断标志位可在任何时候 置位和清除 因此 可通过软件产生和阻止定时器中断 定时器控制寄存器 TCON 可位寻址 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TF1 定时器 1 溢出中断标志 响应中断后由处理器清零 TR1 定时器 1 控制位 置位时定时器 1 工作 复位时定时器 1 停止工作 TF0 定时器 0 溢出标志位 定时器 0 溢出时置位 处理器响应中断后清除该位 TR0 定时器 0 控制位 置位时定时器 0 工作 复位时定时器 0 停止工作 IE1 外部中断 1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位 处 理器响应中断后 由硬件清除该位 IT1 中断 1 触发方式控制位 置位时为跳变触发 复位时为低电平触发 IE0 外部中断 1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位 处 理器响应中断后 由硬件清除该位 IT0 中断 1 触发方式控制位 置位时为跳变触发 复位时为低电平触发 表 A-7 定时器的工作方式由特殊功能寄存器 TMOD 来设置 通过改变 TMOD 软件可控制两个 定时器的工作方式和时钟源 是 I/0 口的触发电平还是处理器的时钟脉冲 TMOD 的高四