460 likes | 664 Views
离散数学. 电子科技大学计算机科学与工程学院 Email : ycfwsm@gmail.com 2014年9月25日. 第 8 章 16 位单片机简介. 主要内容: 在 MCS-51 单片机基础上以 8096 为例简单介绍了 16 位单片机 MCS-96 的基本组成、结构、指令系统,目的在于抛砖引玉,为读者今后学习和应用 16 位单片机奠定基础。重点是 16 位单片机的特色(如:高速输入与高速输出、脉冲宽度调制 PWM 输出、模拟输入等)。难点是 16 位单片机与 8 位单片机的比较,在掌握 8 位单片机基础上较快地掌握 16 位单片机的应用。.
E N D
离散数学 电子科技大学计算机科学与工程学院 Email:ycfwsm@gmail.com 2014年9月25日
第8章 16位单片机简介 主要内容: 在MCS-51单片机基础上以8096为例简单介绍了16位单片机MCS-96的基本组成、结构、指令系统,目的在于抛砖引玉,为读者今后学习和应用16位单片机奠定基础。重点是16位单片机的特色(如:高速输入与高速输出、脉冲宽度调制PWM输出、模拟输入等)。难点是16位单片机与8位单片机的比较,在掌握8位单片机基础上较快地掌握16位单片机的应用。
8.1 概述 MCS-96系列单片机与MCS-51系列单片机相比较, 软、硬件资源远比较丰富,CPU采用寄存器——寄存器结构,提高了操作速度和数据吞吐能力;具有更快的运算速度,更多的外围子系统,更高效的指令系统,在89C196KC以后的芯片中,增加了一个外设事务服务器PTS,专门用于处理外设中断事务,大大减少了CPU的软件开销。 MCS-96系列单片机的主要特点包括以下几个方面: (1)16位CPU,具有高速处理能力,没有累加器,采用寄存器——寄存器结构,具有232字节的寄存器阵列; (2)具有高效的指令系统,大大提高了编程效率; (3) 4/8通道的10位A/D转换器;
(4)脉宽调制PWM输出装置; (5)全双工的串行口,并有专门的波特率发生器; (6)高速的I/O系统; (7)5个8位的I/O端口; (8)可编程的8个优先级中断源; (9)16位监视定时器; (10)可动态配置的总线; (11)ROM/EPROM的内容可加密; (12)2个16位的定时器/计数器,4个16位的软件定时器。 应用范围:应用于自动控制系统、测试系统、智能仪器、外设控制器、家用电器等。
8.2 MCS-96单片机的内部结构与引脚 8.2.1 CPU结构与引脚 1.型号与封装形式 作为系列产品,MCS-96有不同的型号和封装形式。MCS-96系列产品包含2个子系列:8096和8096BH,8096BH兼容8096,但前者在性能上比后者更强,MCS-96系列的各型号产品如下表所示。
MCS-96共有DIP,PGA,PLCC,LCC四种不同的封装形式。图(a)、(b)分别给出了DIP、PLCC形式的封装图。 (a)MCS-96单片机DIP封装形式 (b)MCS-96单片机PLCC封装形式
2.引脚功能 68引脚的MCS-96的各引脚功能分别说明如下: VCC:主电源电压(+5V)。 VSS:数字地。 VPD:RAM备用电源引脚(+5V)。 VREF:A/D转换器的基准电源,也是其模拟部分的电源(+5V)。 ANGND:A/D转换器的参考模拟地,通常与Vss端同电平。 VBB:由片内的反偏置发生器发出的衬底电压。 XTAL1:振荡器中反相器的输入和内部时钟发生器的输入。 XTAL2:振荡器中反相器的输出。 CLKOUT:内部时钟发生器的输出端,其频率为1/3振荡频率。 :复位输入端,在此引脚保待2个状态周期以上的低电平信号,将使芯片复位。 TEST:输入为低时,可选通工厂测试方式。正常工作时,应把此脚接到Vcc。
NMI:非屏蔽中断信号输入。 INST:当对外部存储器进行读操作时,此引脚输出为高,表示是取指周期。 ALE:地址锁存允许输出。 :对外部存储器的读信号输出。 :对外部存储器的写信号输出。 :外部存储器总线的高字节允许信号输出。 READY:加长存储器周期的输出控制信号。 HSI.0~HSI.3:高速输入单元的输入信号。 HSO.0~HSO.5:高速输出单元的输出信号。 P0.0~P0.7:8位高阻抗输入口。可作为8位数字量输入口,也可以作为片内A/D转换器的8个模拟量输入信号线。当对片内EPROM编程时,另有定义。 P1.0~P1.7:8位准双向I/O口。 P2.0~P2.7:8位多功能口,其中,6条引脚分别与RXD,TXD,EXTINT,T2CLK,T2RST,PWM功能线复用。P2.6和P2.7为准双向口线,当对片内EPROM编程时,另有定义。
P3.0~P3.7,P4.0~P4.7:均为具有漏极开路输出的8位双向I/O口。这些引脚可用做多路转换的地址/数据总线,它们具有内部上拉功能。当对片内EPROM编程时,另有定义。 3.MCS-96系列结钩特点 MCS-96系列16位单片机内部结构如下图所示。 8096 CPU是由寄存器、算术逻辑单元(RALU)、寄存器阵列、指令寄存器、控制单元、地址译码寄存器等部分组成。其最大特点是RALU直接对232字节寄存器阵列及专用寄存器进行各种算术逻辑操作,而没有采用常规的累加器结构,从而加速了数据的处理能力,提高了CPU的吞吐能力。同时,由于可通过专用寄存器来直接控制I/O口,加速了I/O过程。 (1)CPU总线 CPU内部的寄存器阵列通过一个控制器和2条总线( 8位的A-BUS和16位的D-BUS )与RALU相连。 D-BUS只用于RALU与寄存器之间传送数据,而A-BUS用做上述传送过程中的地址总线。当CPU访问片内、外存储器时,A-BUS可作为多路转换的地址/数据总线。
(2)RALU 8096的大多数运算是靠RALU完成的。它由一个17位的ALU(其中,1位为符号位)、程序计数器PC、程序状态字寄存器PSW、循环计数器和3个暂存寄存器组成的,其结构如图下所示。
RALU中,所有的寄存器都是16位或17位的。高位字寄存器和低位字寄存器都有自己专用的移位逻辑,可进行数据规格化、乘除法等运算中的逻辑移位操作。延时环节用于把16位总线D-BUS上的地址/数据转换成8位总线A-BUS上的信息。常数0,1和2存储在RALU中,以加速某些运算,如取补或加1、减1运算。16位程序状态字PSW高位保留了用户程序所需的信息状态字。PSW的格式如下表所示。RALU中,所有的寄存器都是16位或17位的。高位字寄存器和低位字寄存器都有自己专用的移位逻辑,可进行数据规格化、乘除法等运算中的逻辑移位操作。延时环节用于把16位总线D-BUS上的地址/数据转换成8位总线A-BUS上的信息。常数0,1和2存储在RALU中,以加速某些运算,如取补或加1、减1运算。16位程序状态字PSW高位保留了用户程序所需的信息状态字。PSW的格式如下表所示。
16位程序状态字PSW的各位的定义如下: Z:零标志,操作结果为零时置位。 N:符号标志,操作结果为负值时置位,与溢出无关。 V:溢出标志,当产生溢出时置位。 VT:溢出陷阱标志,当V标志置位时,VT也置位。但VT置1后只能由专门的指令使其清0。 C:进位标志,操作结果最高位产生进位时置位。减法操作产生借位时C置位。 I:总的中断允许位。 ST:黏附位,在右移操作时,一个1进入C,然后又移出时置位。ST与C一起使用,可以在右移操作后控制四舍五入。 INT-MASK:中断屏蔽寄存器,控制每一种中断源是被允许还是禁止。
(3)CPU寄存器阵列 寄存器阵列实际上是片内的RAM,它包含232字节的RAM单元,这些单元可以按字节、字或双字进行访问,每个单元都可以为RALU所用。 (4)时钟信号 MCS-96具有内部振荡器电路和3相时钟发生器,如图所示,一般在XTALl和XTAL2端外接一个6~12MHz的晶体。振荡器的频率信号被3分频后产生3个内部定时信号,称为A,B,C相,每一相的占空比为33%,每3个满周期为1个状态周期。XTALl与A,B,C相定时信号的关系如图所示。
8.2.2 存储器与I/O端口 1.存储器 MCS-96具有一个逻辑上完全统一的存储器空间,寻址范围为64KB。存储器空间分配如右图所示。
0000H~00FFH为内部RAM(寄存器阵列和专用寄存器),1FFEH和1FFFH分别留给P3和P4口,9个中断向量放在2000H~2011H 中,2012H~207FH存放厂家的测试编码。所以系统复位时,PC指向2080H。片内的程序存储器配置在2000H~3FFFH上。如果用户系统需要配置RAM,建议将其配置在 0100H~1FFFH上,使这8KB的RAM 与片内的RAM连在一起,便于使用。内部RAM的分配如下页图所示。 00H~17H为专用寄存器,26个专用寄存器名及其功能列于下页表中。其中,18H~19H用于存放堆栈指针。从18H到FFH是用户使用的内部RAM区,可按字节、字、双字存取。RALU能直接对它们读写。F0H~FFH用于掉电时存放需保护的数据,这16个单元可由VPD引脚单独对其供电(+5V,1mA),以保护其内容。 RALU与内、外存储器的通信是由存储器控制管理的,其间有A-BUS和一些控制信号相连。因为A-BUS是8位的,为加快取指速度,控制器内有一个辅助程序计数器,存储器控制器中有一个3字节的指令队列,均用以加快指令的执行。
2.外部存储器的扩展 8096扩展2764的电路与8位单片机的连接电路类似。ALE用于锁存地址。8096中可以按字或按字节访问外部存储器。其电路如下图所示。
8.2.3 中断系统 1.中断系统 MCS-96的中断系统允许9种中断源,对应的中断向量和优先权如下表所示,其中,用户可以使用的只有8种中断源。但每一种中断源均可对应多种激活方式,如下页图所示。从这个意义上讲,8096有多至20个中断源。
2.中断控制 MCS-96有2个寄存器与中断控制密切相关,它们分别为中断悬挂寄存器和中断屏蔽寄存器,两者的定义是类似的,相应的位对应于同一种中断源,如下图所示。
09H为中断悬挂寄存器(INT-PENDING),当CPU检测到上述8种中断源有由低到高跳变时,就把该寄存器的相应位置位,即把此中断悬挂(悬挂是指有中断申请而尚未得到响应的状态)起来。一旦被悬挂的中断得到响应,相应位被清除。中断悬挂寄存器可以用指令写入,故可以靠对该寄存器的某位置1来产生软件中断,也可以靠清除相应位来撤除已悬挂的中断。09H为中断悬挂寄存器(INT-PENDING),当CPU检测到上述8种中断源有由低到高跳变时,就把该寄存器的相应位置位,即把此中断悬挂(悬挂是指有中断申请而尚未得到响应的状态)起来。一旦被悬挂的中断得到响应,相应位被清除。中断悬挂寄存器可以用指令写入,故可以靠对该寄存器的某位置1来产生软件中断,也可以靠清除相应位来撤除已悬挂的中断。 08H为中断屏蔽寄存器(INT-MASK),用来控制是否允许某个中断源的中断申请。当某位置1时,相应的中断被允许,否则被禁止。对8种中断源总的控制要用EI和DI指令。8个中断源是有优先权的,当有多种中断同时挂起时,CPU先响应优先权最高的一种中断。
8.2.4 高速I/O部件和定时器/计数器 高速I/O部件是由高速输入单元(HSI)、高速输出单元(HSO),一个定时器(定时器1),一个事件计数器(定时器2)组成。“高速”的含义是这个部件的工作只与内部的定时器有关(由定时器同步),而不用CPU的干预。 HSI用来记录事件发生的时间,HSO能按程序设定的时间触发一个事件。定时器也能单独地工作。 1.定时器 定时器的工作一般要和HSI,HSO部件配合协调工作。 定时器1:是一个16位的计数器,其时钟信号来自内部时钟发生电路,每8个状态周期计数器加1。当计满时,能触发一个中断,对I/O状态寄存器(IOSl)的位5置位。作为系统实时时钟的定时器1,它一直在循环计数,任何时候都可以读它,只有用系统复位操作才能使它停止计数。 定时器2:定时器2也是一个16位的计数器,其时钟来自引脚HSIl/T2CLK,实际上是个外部事件计数器。每当引脚上有正和负跳变时,计数器加1。当计满时,也触发一个中断,并对IOS1.4置位。定时器2可以有多种清零方式。
2.高速输入单元HIS 高速输入单元HSI是用来记录外部事件发生时刻及转入相应的处理程序的,其结构如右图所示。它包括HSI方式寄存器和HSI状态寄存器(如下页图所示)。7×20先进先出(FIFO)寄存器阵列、保持寄存器、HSI时间寄存器、HSI事件检测器和定时器1等部分。
HSI事件检测器可测出HIS.0~HSI.3中任一引脚上发生的变化事件,定时器1记录事件发生的时间,事件的形式可以由方式寄存器设定。定时器1所记录的时间及表示哪一个引脚上发生事件的信息存入FIFO中。HSI事件检测器可测出HIS.0~HSI.3中任一引脚上发生的变化事件,定时器1记录事件发生的时间,事件的形式可以由方式寄存器设定。定时器1所记录的时间及表示哪一个引脚上发生事件的信息存入FIFO中。 HSI也可产生中断。一种是利用IOCl的位7控制,这种中断称为HSI数据有效中断,其中断向量地址为2004H~2005H。另一种是在HSI.0引脚上有0到1的跳变时所产生的中断,称为HSI.0中断,其中断向量地址为2008H~2009H。 在读取HSI的内容时,先读HSI状态寄存器,以获知HSI引脚的目前状态,以及是哪些引脚在记录时刻发生了变化事件。再读HSI的时间寄存器,每读一次时间寄存器,就使FIFO失掉一项数据。因此,若在读状态寄存器之前读取时间寄存器,就会丢失状态寄存器中的信息。
HSI.0~HSI.3都是多功能引脚,要把它们用做高速输入功能时,需要用IOC0进行控制,下图是IOC0对HSI引脚功能的控制。HSI.0~HSI.3都是多功能引脚,要把它们用做高速输入功能时,需要用IOC0进行控制,下图是IOC0对HSI引脚功能的控制。 3.高速输出部件HSO 高速输出部件用来在预定的时间内触发外部事件并申请中断。由HSO命令寄存器、HSO时间寄存器、HSO保持寄存器、按内容访问的存储器(CAM)阵列、比较器、多路开关、控制逻辑、输出部件和两个定时器组成,如下页图所示。
这些事件包括:启动A/D转换、复位定时器2、设置4个软件定时器标准、接通6根输出线。当这些事件中任一种被触发时,就能产生中断请求。其中的内容为可寻址的存储器阵列CAM,它由8个23位长度的寄存器阵列组成,其中,16位存放触发某一事件的预定时间,7位存放命令。这些事件包括:启动A/D转换、复位定时器2、设置4个软件定时器标准、接通6根输出线。当这些事件中任一种被触发时,就能产生中断请求。其中的内容为可寻址的存储器阵列CAM,它由8个23位长度的寄存器阵列组成,其中,16位存放触发某一事件的预定时间,7位存放命令。 HSO命令寄存器如右图所示,位0~3(00~0FH通道)表示这一帧命令是对哪一种事件发出的。
4.软件定时器 HSO通过编程可设定4个16位的软件定时器(ST0~ST3),当4个定时器中有一个时间到,就自动在IOS1中设置一个标志。如果对命令寄存器的位4置位,就能产生一个软件定时器中断。中断服务程序通过检测IOC1能获知是哪一个定时器时间到了,多个软件定时器同时发生中断将产生多重中断。
8.2.5 脉冲宽度调制PWM 大多数控制系统都需要用A/D和D/A两种转换器,但要在同一芯片上同时完成A/D和D/A转换是很困难的。MCS-96用脉冲宽度调制PWM的方法来实现D/A转换的功能。其原理如右图所示。其中主要部件有脉宽控制寄存器、比较器和计数器。
8.2.6 模拟输入 MCS-96系列的部分产品中有一个逐次逼近型的10位A/D转换器,共有8个通道。当采用12MHz晶振时,每次转换时间为42μs。A/D转换8个通道的模拟电压输入引脚与P0口的8根口线复用,通过写命令寄存器可以控制通道选择和启动A/D转换,命令寄存器如下图所示。每启动一次A/D转换都必须对命令寄存器进行一次写操作。用HSO触发转换时也不例外。
当一次转换正在进行时,又启动了另一次新的转换,会把正在进行的转换撤销掉,A/D转换结果寄存器的内容也会被消除掉。因此在新的转换开始前,应把原转换结果读走。结果寄存器是16位的,读出时应按字节分两次读出。结果寄存器如下图所示。当一次转换正在进行时,又启动了另一次新的转换,会把正在进行的转换撤销掉,A/D转换结果寄存器的内容也会被消除掉。因此在新的转换开始前,应把原转换结果读走。结果寄存器是16位的,读出时应按字节分两次读出。结果寄存器如下图所示。 8.2.7 其他部件 1.串行口 MCS-96有一个全双工的串行口,能同时收发信息。与MCS-51串行口是兼容的,也有4种工作模式(请参考MCS-51串行口),通过对串行口控制寄存器的编程设定其工作模式。MCS-96有一个单独的波特率发生器专供串行口使用,故HSI,HSO和定时器的功能不受影响,这一点有别于MCS-51。
2.输入/输出口 MCS-96有5个8位口,有的只作输入,有的只作输出,也有的是输入/输出双向口且有替换功能。5个8位口功能如下: P0口:仅用作输入,与A/D转换器的模拟输入信号复用引脚。 P1口:准双向8位口。 P2口:多功能双向口。其功能如下表所示。 P3口与P4口:P3口与P4口具有两种功能。当访问外部存储器时,用作系统的地址/数据分时复用总线。若引脚接高电平,则它们是漏极开路的双向输入/输出口。 输入/输出口有2个控制寄存器IOC0和IOC1,用来控制I/O口线的功能。IOC0控制定时器2和HSI的4个引脚的功能;IOC1控制其他一些口线的功能。此外,还有2个状态寄存器IOS1和IOS0,用来记录一些口线的当前状态和HSO,HSI的某些状态。
3.监视定时器WDT和系统复位 监视定时器WDT是一个16位计数器,在启动后,每个状态周期其计数器加1,当计数器溢出时,把引脚电平拉低至少2个状态周期的时间,使系统复位,重新初始化。 监视定时器提供了一种使系统能从瞬间故障中自动恢复的能力,如果出观故障,程序不能正常运行,则WDT没有按时清0而产生超时(溢出)时,WDT溢出就会使系统复位,这样就能保证在非正常工作时间不会超过16ms。
8.3 MCS-96单片机指令系统简介 MCS-96指令系统的功能是极其丰富的,包括数据传送、算术运算、内外的堆栈操作、转移(无条件转移、条件转移、位测试转移)和调用、循环控制、单寄存器操作、移位、控制和规格化等功能。 8.3.1 操作数类型 MCS-96指令操作数类型有7种:字节Byte、字Word、短整数Short-Integer:、整数Integer、位bit、双字Double-Word、长整数Long-Integer。 与一般单片机不同,在MCS-96指令系统中,所用工作寄存器并不是特定地址的寄存器,是通过用户在编程时把内部RAM中一些单元定义为工作寄存器。指令中的操作数也不是寄存器名,而是广义的符号,它们是:
① Breg:内部RAM中的一个字节寄存器。有时,为了区分是目的操作数,还是源操作数,可用前缀“D”或“S”来标志。 ② Wreg:内部RAM中的一个字寄存器。也可在前面加“D”或“S”,以识别它是目的操作数,还是源操作数。 ③ Baop:可用任一种寻址方式的字节操作数。 ④ Waop:可用任一种寻址方式的字操作数。 ⑤ Bitno:操作码中的三位,由这三位选择一个字节中的某一位。 ⑥ Lreg:内部RAM中的一个双字寄存器。 ⑦ Cadd:程序中代码的地址。
8.3.2 寻址方式 MCS-96指令系统中具有6种基本寻址方式: (1)寄存器直接寻址 直接访问片内256字节的RAM,一条指令中可以有多至3个操作数采用这种寻址方式。 如:ADD AX, BX, CX ; (AX)=(BX)+(CX) MUL AX, BX, ; (AX)=(AX)×(BX) INCB CL ; (CL)=(CL)+1 (2)间接寻址 访问整个存储空间,被访问数的地址应放在一个16位的寄存器中,一条指令中只能有一个操作数采用间接寻址,其他操作数必须采用寄存器直接寻址。 如:ADDB AL, BL, [DX] ; (AL)=(BL)+((DX)) POP [AX]
在这类寻址方式中还包含自动增量间接寻址,但需根据操作数是字节还是字,指令执行后地址寄存器要自动加1或2。在这类寻址方式中还包含自动增量间接寻址,但需根据操作数是字节还是字,指令执行后地址寄存器要自动加1或2。 如:LD BX, 1234H LDB AX, [BX]+ ; 把1234H单元的内容送AX的地位字节, 执行后 (BX)=1235H (3)立即寻址 操作数直接放在指令中。一条指令中只能有一个立即数,其他操作数必须采用寄存器直接寻址。 如:PUSH #1234H ADD AX, #340H (4)变址寻址 ① 短变址寻址:有效地址是由基地址加偏移量组成的,基址寄存器为内部RAM中的一个16位寄存器,偏移量为一个带符号的8位数。可访问整个存储空间。 如:MULB AX, BL,3[CX] ; (AX)=(BL)×((CX)+3) LD AX, 12 [BX] ; (AX)=((BX)+12)
② 长变址寻址:与短变址类似,只是偏移量是16位数。 如:AND AX, BX, TABLE[CX] ; (AX)=(BX)∧((CX)+TABLE) 其中:TABLE是一个16位的地址变量。 (5)零寄存器寻址方式 硬件把内部RAM的00H和01H单元固定为零,故称为零寄存器。除了在一些计算和比较运算中用来做常数零外,还可用在长变址寻址中,从而可以直接访问整个存储空间。 如:ADD AX, 1234[0] ; (AX)←((寄存器0)+1234) (6)堆栈指针寄存器寻址 堆栈指针也可以当做一般的寄存器用,因此可做短变址寻址中的地址寄存器. 如:LD AX, [SP] ; (AX)←(SP)(SP+1)
8.3.3 MCS-96指令系统简介 教材P310表8.3.1中列出了全部指令的助记符、操作数、操作码、寻址方式、执行时间、字节数等。下面通过典型指令进行概述。 (1)ADD dwreg, swreg, waop 功能:两个源操作数swrge, waop相加后,存于目的操作数dwreg。 目的码格式:[010001aa] [waop] [wreg] [dwreg] 字节:3+BEA 执行时间:3+CEA 其中:BEA表示对所选择的寻址方式不同而需要附加的代码字节数。CEA表示对所选择的寻址方式不同而需要附加的状态周期数。 (2)ANDB brag, baop 功能:两个字节操作数对应位相与,结果存入目的操作数。 目的码格式:[011100aa] [baop] [breg] 字节:2+BEA 执行时间:4+CEA
(3)EXT lreg 功能:操作数的低位字的符号位扩展到高位字,即当低位字<8000H时,0000H送高位字;否则,FFFFH送高位字。 目的码格式:[00000110] [lreg] 字节:2 执行时间:4 (4)JBC brag, bltno, cadd 功能:被测试的指定位为0时,把此指令结束处至目标标号的偏移加到PC值上,造成跳转。此偏移量的取值范围为—128~+127,若被测试位为1,则顺序执行下一条指令。 目的码格式:[00110bbb] [brag] [bltno] 其中:bbb是指令寄存器内的位号 字节:3 执行时间:不跳转时为5,跳转时为9 (5)LDB breg, baop 功能:源字节操作数的值存入目的操作数。 目的码格式:[101100aa] [baop] [breg] 字节:2+BEA 执行时间:4+CEA
(6)SHRAB breg, #count或SHRAB breg, breg 功能:一个字节寄存器的8位右移n次,n由COUUNT或另一字节寄存器的内容确定。当最高位初始为0时,每次右移都以0填入最高位;当最高位初始为1,则把1填入。这样可以保持数的符号。这种移位称为算术右移。 目的码格式:[00011010] [cut/ breg] [breg] 字节:3 执行时间:7+移位次数 注:BEA----对所选择的寻址方式不同而需要附加的代码字节数。 CEA----对所选择的寻址方式不同而需要附加的T状态数。
作业与练习: 8.2 8.3 8.4 8.6 8.9