1.单片机对外的信息输入输出: 输入/输出端口( Input/ Output Port)简称I/O端口,是单片机对外信息交换的通道。
实际的单片机常要根据输入的信息状态实施输出控制作用,这些都是通过I/O端口实现的。
例如在汽车发动机控制系统中,常常需要根据车速、空气流量、节气门位置等传感器状态控制相应的点火和喷油操作,各种传感器和开关状态信息通过输入端口送到微控制器,而控制执行器件动作的命令信息则通过输出端口送给各类继电器、电磁阀、电动机等执行器件。
般说来,计算机对外信息传输的方式可分为两类:一类是并行传输;另一类是串行传输。如图1-8所示为两种传输方法的示意图。
(1)并行传输方式:并行传输方式如图1-8(a)所示,其特点是各位数据同时传送,信息传递速度快,效率高,但有多少数据位就需要多少条数据线,因此传送成本较高。一般计算机与其他设备之间距离比较近时可以使用这种方式,例如计算机与附近的打印机之间常常采用并行数据传送方式。
(2)串行传输方式:串行传输方式是指数据逐位按顺序传送的方式,也叫串行通信,如图1-8(b)所示,它的特点是无论数据信息有多少位,都只在同一条传输线上传送。当收、发双方互相传递信息时,只需要两条数据传输线,一条用于发送数据,另一条用于接收数据,这大大降低了信息传输的成本,因此这种方式常常用于远距离的通信。其缺点是信息传输的速度比较低。打电话就是最常见的串行信息传输的例子。
2.MCS-51单片机I/O端口电路:
MCS-51单片机的端口都是双向性的,即可以当输入端口用,也可以当输出端口用。
MCS51单片机内有4个8位并行IO口,称为P0、P1、P2和P3。每个端口都是8位准双向I/O口,共占32个引脚。每个端口都包含一个锁存器、一个输出驱动器和一个输入缓冲器。在具有片外扩展存储器的系统中,P2口送出高8位地址,PO口为双向总线,分时送出低8位地址和数据的输入/输出。
(1)P0口:P0口的字节地址为80H,位地址为80H~87H。如图1-9所示为P0口某位的结构。它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成。
图中控制信号C的状态决定转换开关的位置。当C=0时,开关处于图示位置;当C=1时,开关拨向反相器输出端位置。VT1导通时上拉电位,即可将引脚电位拉至接近Ucc的电压(+5V),VT2导通时下拉电位,即可将引脚电位拉至接近GND的电压(0V),故把这种结构称为推拉式输岀电路或推挽式输出电路。在图1-9中虚线左边是集成在单片机芯片内部的,而在芯片外部,作为输入/输出口使用时,需要外接上拉电阻R,一般取值为10k欧。
①P0口用作输入/输出口。当执行一条由端口输入的指令时,“读引脚”脉冲把三态缓冲器2打开,这样,端口引脚上的数据经过缓冲器2读入到内部总线。在读入端口引脚数据时,由于输出驱动VT2并接在引脚上,如果VT2导通,就会将输入的高电平拉成低电平,产生误读。因此在端口执行输入操作前,应先向端口锁存器写入1,也就是使锁存器Q=0。
因为控制线C=0,因此VT1和VT2全截止,引脚处于悬浮状态,可作高阻抗输入。在引脚上外接一个电阻可以保证输出0和1电平时VT2可以可靠导通和截止,使输出准确无误。
②P0口用作地址/数据总线。当系统进行片外ROM扩展或进行片外RAM扩展时,P0口用作地址/数据总线。
(2)P1口:P1口的字节地址为90H,位地址为90H~97H。如图1-10所示为P1口某位的结构。它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成。输出驱动电路只有一个场效应管VT1,同时内部自带10k欧上拉电阻,不需要外接。P1口可作通用双向I/O口用,不必再外接上拉电阻。当端口用作输入时和P0口一样,必须先向对应的锁存器写入“1”,使VT1截止,然后读引脚,这样不会出现信息误读。
(3)P2口:P2口的字节地址为0A0H,位地址为0A0H~0A7H。如图1-11所示为P2口某一位的结构。它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成。输出驱动电路只有一个场效应管VT1,同时内部带上拉电阻。P2口作为输入/输出口使用时和P0口一样。当单片机系统需要进行片外ROM扩展或进行片外RAM扩展时,P2口可用于输出高8位地址。
(4)P3口:P3口的字节地址为0B0H,位地址为0B0H~0B7H。如图1-12所示为P3口某一位的结构。它由一个输出锁存器、三个三态输入缓冲器和输出驱动电路组成。输出驱
动电路只有一个场效应管VT1,同时内部带上拉电阻。比P1口多了一个第二功能控制部分的逻辑电路。P3口是一个多功能端口。图中“与非”门的作用是一个开关,决定是输出锁存器Q端数据,还是输出第二功能(W)的信号。当W=1时,输出Q端信号;当Q=1时,可输出W线信号。当P3口作为输入使用时,同PO~P2口一样,先由软件向口锁存器写1,即使D锁存器Q端保持“1”,“与非”门输出为0,场效应管截止,引脚端可作为高阻输入。当CPU执行读命令操作时,使缓冲器2上的“读引脚”信号有效,三态缓冲器2开通,于是引脚的状态经缓冲器3、缓冲器2送至CPU内部总线。
注意:P0口与其他口不同,它的输出级无上拉电阻,作为输入/输出接口使用时必须外接10k92的上拉电阻。P1~P3口都是准双向口,内部自带10k欧上拉电阻。四组F0口作为输入口使用时必须先对相应端口锁存器写1,将内部场效应管截止,这样才可以保证外部输入的1电平不会被导通的场效应管拉至低电位。
二、MCS-51单片机时钟电路:
时序,即时间的顺序。一个由人组成的单位尚且要有一定的时序,计算机当然更要有严格的时序。计算机要完成的事更复杂,所以它的时序也更复杂。我们已知,计算机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。我们规定:计算机访问一次存储器的时间,称为一个机器周期。
时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作,而时序所研究的则是指令执行
时各信号之间的相互时间关系。
1.时钟信号的产生:
(1)内部时钟方式:内部时钟方式如图1-13所示。在MCS-51单片机内部有一个石英振荡器的基本电路,由于石英晶体元件和电气不能集成到单片机内,因此只能外接。只要单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。
一般电容C1和C2取30pF左右,晶体的振荡频率范围是1.2~12MHz。晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。MCS-51单片机在通常应用情况下,使用振荡频率为6MHz或12MHz。
(2)外部时钟方式:在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲。这时外部的脉冲信号是经XTAL2引脚注入的,其连接如图1-14所示。
(3)振荡器和振荡周期的意义:振荡器的振荡频率是单片机中频率最高的、唯一的脉冲源,其振荡周期最短。单片杋中的所有控制信号脉冲、输岀数据脉冲、输入数据脉冲(输人转换后)、地址脉冲、指令脉冲等都来源于振荡器,由振荡器输出的脉冲经分频器分频得到。
振荡器的振荡频率决定单片机的工作速度,振荡频率越快,单片机的工作速度越快。振荡器如果停止振荡,单片机也就停止工作。
2.时序:
时序是用定时单位来说明的。MCS-51单片机的时序定时单位共有4个,从小到大依次是节拍、状态、机器周期和指令周期,下面分别加以说明。
(1)节拍与状态:把振荡脉冲的周期定义为拍节(用P表示)。振荡脉冲经过二分频后,就是单片机的时钟信号的周期,定义为状态(用S表示)。这样,一个状态就包含两个拍节,前半周期对应的拍节叫拍节1(P1),后半周期对应拍节2(P2)。
(2)机器周期:MCS-51单片机采用定时控制方式,因此它有固定的机器周期。规定一个机器周期的宽度为6个状态,并依次表示为S1~S6。由于一个状态又包括两个节拍,因此一个机器周期总共有12个节拍,分别用S1P1、S1P2、S2P1、S2P2…S6P1、S6P2来表示。由于一个机器周期共有12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。
当振荡脉冲频率为12MHz时,一个机器周期为1μs;当振荡脉冲频率为6MHz时,一
个机器周期为2s。
(3)指令周期:指令周期是最大的时序定时单位,执行一条指令所需要的时间称为指令周期。它一般由1~4个机器周期组成。不同的指令,所需要的机器周期数也不相同。通常,包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
指令的运算速度和指令所包含的机器周期有关,机器周期数越少的指令执行速度越快。
MCS-51单片机通常可以分为单周期指令、双周期指令和四周期指令三种。四周期指令只有乘法和除法指令两条,其余均为单周期和双周期指令。
单片机执行任何一条指令时都可以分为取指令阶段和执行指令阶段。ALE引脚上出现的信号是周期性的,在每个机器周期内两次出现高电平。第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。ALE信号每出现一次,CPU就进行一次取指令操作,但由于不同指令的字节数和机器周期数不同,因此取指令操作也随指令不同而有小的差异。
按照指令字节数和机器周期数,8051的111条指令可分为六类,分别是单字节单周期指令、单字节双周期指令、单字节四周期指令、双字节单周期指令、双字节双周期指令、三字节双周期指令。
如图1-15(a)、(b)所示分别为MCS-51单片机单字节单周期和双字节单周期指令的时序。单周期指令的执行始于S1P2,这时操作码被锁存到指令寄存器内。若是双字节则在同一机器周期的S4读第二字节。若是单字节指令,则在S4仍有读出操作,但被读入的字节无效,且程序计数器PC并不增量。
图1-16给出了MCS-51单片机单字节双周期指令的时序,两个机器周期内进行4次读操作码操作。因为是单字节指令,后三次读操作都是无效的。