第7章并行IO接口7.1概述7.2MCS-51内部并行接口及应用7.3MCS-51并行I/O接口芯片7.4MCS-51内部定时/计数器1、输入/输出设备1)输入设备功能是将计算程序、原始数据和各种现场采集的资料和信息输入到计算机。2)输出设备功能是将运算的结果以人们容易识别的形式呈现给人们或将各种控制信号送给外界,以实现各种控制动作。3)外存储器功能是存储主存储器暂时不用的系统软件和应用软件。7.1概述一、I/O接口接口—“桥梁”,主机与外设进行数据传输,必须经过接口。2、输入/输出传送的信息•数据信息1)数字量2)模拟量3)开关量•状态信息•控制信息3、I/O接口的作用•实现与不同外设的速度匹配•实现与外设的隔离•改变信号的性质•实现数据传输方式和电平的变换接口电路CPUI/O设备数据状态控制数据状态控制端口1端口2端口4端口3端口—用于存放信息的、CPU可直接访问的锁存器、缓冲器等。在PC机中通常为8位。端口是构成I/O接口的基本单元,端口有自己的地址(称为端口地址),CPU用地址对每个端口进行读写操作。1、统一编址I/O与存储器(RAM)的地址不重复,读写指令一致,只是根据地址来区分操作对象是RAM还是I/O。优点:无需专门的I/O指令,对I/O操作指令丰富,可进行算术和逻辑运算;缺点:占用存储器地址,因外设功能各不相同,需要复杂的电路进行时序配合。RD/WR0000H1FFFH2000H2FFFH存储器I/O二、I/O端口的编址方式2、独立编址I/O与存储器(RAM)的地址重复,用不同的读写信号和指令区分。存储器读写:MEMW,MEMR,I/O读写:IOR,IOW(PC/XT)优点:电路简单,不占用MEM空间;缺点:I/O指令单一。INAL,10HOUT10H,AL1、无条件传送方式无条件传送也称为同步程序传送,类似于CPU和存储器之间的数据传送。只有那些一直为数据I/O传送作好准备的外部设备,才能使用无条件传送方式。这种传送方式不需要测试外部设备的状态,可以根据需要随时进行数据传送操作。无条件传送方式适用于以下两类外部设备的输入输出:(1)外设的工作速度非常快,足以和CPU同步工作。(2)具有常驻的或变化缓慢的数据信号的外设。三、I/O数据的传送方式2、查询传送方式查询传送又称为条件传送,即数据的传送是有条件的。在输入/输出之前,先要检测外设的状态,以了解外设是否已为数据输入输出作好了准备,只有在确认外设已“准备好”的情况下,CPU才能执行数据输入/输出操作。通常把通过程序对外设状态的检测称之为“查询”,所以这种有条件的传送方式又叫做程序查询方式。3、中断传送方式由于查询传送方式为CPU主动要求传送数据,而它又不能控制外设的工作速度,因此只能用等待的方式来解决配合的问题。中断方式则是在外设为数据传送作好准备之后,就向CPU发出中断请求信号(相当于通知CPU),CPU接收到中断请求信号之后立即作出响应,暂停正在执行的原程序(主程序),而转去为外设的数据输入输出服务,待服务完之后,程序返回,CPU再继续执行被中断的原程序。由于CPU的工作速度很快,传送1次数据(包括转入中断和退出中断)所需的时间很短。对外设来讲,似乎是对CPU发出数据传送请求的瞬间,CPU就实现了;对主程序来讲,虽然中断了1个瞬间,但由于时间很短,也不会有什么影响。4、DMA传送方式直接存储器存取,利用DMAC实现。四、I/O接口的类型串行I/O接口:串行I/O接口可以从发送数据线上一位一位地连续发送数据和在发送完8位数据后自动(通过中断)从CPU并行接收下一个要送的字节。从接收数据线上连续接收串行数据和在收到一个字节后自动向CPU发出中断请求,CPU响应该中断请求后便可通过中断服务并行提取这个接收到的数据。接口(interface),具有界面、相互联系等含义。接口特指计算机与外设之间在数据传送方面的联系,其功能主要是通过电路实现的,因此称之为接口电路,简称接口。并行I/O接口:一方面以并行方式和CPU传送I/O数据,另一方面又可以以并行方式和外设交换数据。一、定时器/计数器的组成MCS-51单片机内部有2个16位的可编程的定时器/计数器,即定时器/计数器0(T/C0)和定时器/计数器1(T/C1),它们都有定时和对外部事件计数的功能。T/C0是由两个8位的特殊功能寄存器TH0(8CH)和TL0(8AH)组成的,T/C1是由TH1(8DH)和TL1(8BH)组成。通过对TH1、TL1、TH0和TL0的初始化编程来控制T/C0和T/C1的计数初值。7.2MCS-51的内部定时器/计数器定时器/计数器结构框图加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值。设最大值为M,计数值为N,初值为X,则X的计算方法如下:计数状态:X=M-N定时状态:X=M-定时时间/T而T=12÷二、定时/计数器的控制1、定时器/计数器的方式寄存器TMODTMOD各位定义:1)C/T若C/T=1时,为计数器方式;C/T=0时,为定时器方式。2)M1M0工作方式控制位M1M0方式说明00013位定时器(TH的8位和TL的低5位)01116位定时器/计数器102自动重装入初值的8位计数器113T0分成两个独立的8位计数器,T1在方式3时停止工作3)GATE定时器/计数器运行门控标志位当GATE=1时,只有INT0(或INT1)引脚为高电平且TR0(或TR1)置1时,相应的定时器/计数器才被选通工作,这时可用于测量在INTx端出现的正脉冲的宽度。若GATE=0,则只要TR0(或TR1)置1,定时器/计数器就被选通,而不管INT0(或INT1)的电平是高还是低。TF0、TF1分别是定时器/计数器T0、T1的溢出标志位,加法计数器计满溢出时置1,申请中断,在中断响应后自动复0。TF产生的中断申请是否被接受,还需要由中断是否开放来决定。TR1、TR0分别是定时器/计数器T1、T0的运行控制位,通过软件置1后,定时器/计数器才开始工作,在系统复位时被清0。2、定时器/计数器控制寄存器TCON三、定时/计数器的工作方式1、方式0图方式0(13位计数器)方式0:是选择T/C1或T/C0高8位和低5位的一个13位计数器的运行方式。在这种方式中,16位寄存器只用13位,其中TL1(TL0)的高3位未用,其余位占整个13位的低5位,TH1(TH0)占高8位。当TL1(TL0)的低5位溢出时,向TH1(TH0)进位,而TH1(TH0)溢出时向TF1(TF0)标志进位。方式1(16位计数器)2、方式1:是一个16位定时器/计数器,TH1(TH0)和TL1(TL0)均是8位的,构成16位计数器。3、方式2图方式2(初始常数自动重装载)方式2:T/C被拆成一个8位的寄存器TH1(TH0)和一个8位计数器TL1(TL0),两者构成可以自动装载的8位T/C。编程时必须TH1(TH0)和TL1(TL0)置入相同的初值。当T/C1(T/C0)启动后,TL1(TL0)按8位加1计数器计数。每当它计满回零时,一方面向CPU发出溢出中断申请,另一方面从TH1(TH0)中重新获得初值并启动计数。4、方式3图方式3(两个8位独立计数器)增加一个附加的8位定时器/计数器,从而具有3个定时器/计数器。工作方式3下的T0:T0分为两个独立的8位计数器:TL0和TH0。TL0使用T0的状态控制位C/T*、GATE、TR0。而TH0被固定为一个8位定时器(不能作外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。方式3只适用于定时器/计数器T0。T1不能工作在方式3,T1方式3时相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)。四、T/C的初始化1、初始化的步骤①确定工作方式,给TMOD送一个方式控制字;②计算计数初值,并写入TH0、TL0或TH1、TL1;③根据需要置位EA使CPU开放中断,同时置位EXT,允许T/C中断;④给TCON送命令控制字,即置位TRX启动T/C计数。2、计数器初值的计算设需要计数器计数的个数为N,计数初值为X,则X=M-N例:利用T0方式0产生1ms定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHZ。(1)计算初值X则有:213-X=1×10-3/(1×10-6)X=8192-1000=7192,即X=0001110000011000B。所以,T0的初值为:TH0=0E0HTL0=18H(2)初始化程序设计方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产生一次中断),CPU响应中断后,在中断服务程序中对P1.0取反。ORG0000HAJMPMAINORG000BHAJMPTCOSORG1000HMAIN:MOVSP,#6FH;MOVTMOD,#00H;MOVTH0,#0E0H;MOVTL0,#18H;SETBEA;SETBET0;SETBTR0;HERE:SJMPHERE;…………ORG1200HTCOS:MOVTH0,#0E0H;MOVTL0,#18H;CPLP1.0;RETIEND查询方式的参考程序:LOOP:MOVTMOD,#00H;置计数器的方式控制字MOVTH0,#0E0H;T0置初值MOVTL0,#18HSETBEASETBET0SETBTR0;接通T0LOOP1:JNBTF0,LOOP1;查询TF0标志CLRTR0;T0溢出,关闭T0CPLP1.0;P1.0的状态求反SJMPLOOP例:利用T1方式2实现:当T0(P3.4)每输入一个负跳变,T1使P1.0输出一个1ms的方波。设fosc=6MHZ。(1)工作方式选择T0为方式1计数,初值0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0脚已接收了负跳变信号。T1定义为方式2定时。在T0脚发生一次负跳变后,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。(2)计算T1初值设T1的初值为X:28-X=5×10-4/(2×10-6)则:X=28-250=6=06H(3)程序设计ORG0000HRESET:LJMPMAIN;复位入口转主程序ORG000BHLJMPIT0P;转T0中断服务程序ORG001BHLJMPIT1P;转T1中断服务程序ORG0100HMAIN:MOVSP,#60HMOVTMOD,#26H;T1为方式2,T0为方式1MOVTL0,#0FFH;T0置初值MOVTH0,#0FFHSETBTR0;启动T0SETBET0;允许T0中断SETBEAMOVTL1,#06H;T1置初值MOVTH1,#06HCLRF0;T0已发生中断标志,F0清零LOOP:MOVC,F0;T0产生过中断,则F0=1JNCLOOP;T0没中断,去LOOP,等待T0中断SETBTR1;启动T1SETBET1;允许T1中断HERE:AJMPHEREIT0P:CLRTR0;T0中断服务程序,停止T0计数SETBF0;建立产生中断标志RETIIT1P:MOVTL1,#06H;T1置初值MOVTH1,#06HCPLP1.0;T1中断服务,P1.0位取反RETI在T1定时中断服务程序IT1P中,可省去了T1中断服务程序中重新装入初值06H的指令。解:(1)选择工作方式:方式2计数模式的应用。外部信号由T1(P3.5)脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器产生溢出中断,在中断服务程序中将P1.0取反一次。T1方式2的控制字:TMOD=60H。不使用T0时,TMOD的低4位可任取,但不能使T0进入方式3,这里取全0。例:利用T1的方式2对外部信号计数,要求每计满100个数,将P1.0取反。(3)程序设计ORG0000HLJMPMAINORG001BH;T1中断服务程序入口CPLP1.0;P