您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 51单片机内部资源简介精讲
单片机内部资源简介1、整体简介2、端口3、定时器4、串口5、中断MCS-51单片机的基本组成片内资源AT89S52STC89C52RC中央处理器CPU8位8位程序存储器ROM8KB8KB数据存储器RAM256B512B并行I/O口4个P0—P3+P4串行口11定时计数器3个16位3个16位中断系统中断源8个,两级8个,4级P0口下图为P0口的某位P0.n(n=0~7)结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成。P0口既可以作为I/O用,也可以作为地址/数据线用。三态缓冲器与门多路开关一、P0口作为一般I/O口使用1)P口用作输出口时CPU发出控制电平“0”(即:硬件自动使“控制”=0)封锁“与门”,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器的输出端Q与场效应管T2栅极接通。2)P0口用作输入口时输入时----分读引脚或读锁存器。读引脚:由传送指令(MOV)实现。下面的缓冲器2用于读端口引脚数据,当执行一条由端口输入的指令时,读脉冲把三态缓冲器2打开,这样端口引脚上的数据经过缓冲器读入到内部总线。第1步:输入时,先向锁存器“写”1。指令为:SETBP0.n或:MOVP0,#0FFH1100T2截止第2步:引脚信号“读引脚”信号有效,缓冲器2打开①P0口用作输入口时②输入时----分读引脚或读锁存器读锁存器:有些指令如:ANLP0,A称为“读-修改-写”指令,需要读锁存器。缓冲器1用于读端口锁存器数据。原因:如果此时该端口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出的“1”电平误读为“0”电平。现采用读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避免上述可能发生的错误。准双向口从图中可以看出,在读入端口数据时,由于输出驱动FET并接在引脚上,如果T2导通,就会将输入的高电平拉成低电平,产生误读。所以在端口进行输入操作前,应先向端口锁存器写“1”,使T2截止,引脚处于悬浮状态,变为高阻抗输入。这就是所谓的准双向口。二、P0口作为地址/数据总线使用在系统扩展时,P0端口作为地址/数据总线使用时。执行“MOVX”指令或EA=0时执行“MOVC”指令时,内部硬件自动使“控制”=1。①P0口用作输出地址/数据总线。②P0引脚输出地址/输入数据输入信号是从引脚通过输入缓冲器进入内部总线。此时,CPU自动使MUX向下,并向P0口写“1”,“读引脚”控制信号有效,下面的缓冲器打开,外部数据读入内部总线。P1口它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。P2口1)P2口作为普通I/O口CPU发出控制电平“0”,使多路开关MUX倒向锁存器输出Q端,构成一个准双向口。其功能与P1相同。P2口2)P2口作为地址总线在系统扩展片外程序存储器扩展数据存储器且容量超过256B(用MOVX@DPTR指令)时,CPU发出控制电平“1”,使多路开关MUX倒向内部地址线。此时,P2输出高8位地址。P3口P3口是多功能端口。一、作通用I/O口用:①输出:当W=1时(由内部硬件自动置W为高电平),输出Q端的信号(即输出内部数据)②输入时:先向端口写“1”,即锁存器Q端为“1”。P3口P3口的第二功能口线替代的第二功能P3.0RXD(串行口输入)P3.1TXD(串行口输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6WR(片外数据存储器“写选通控制”输出)P3.7RD(片外数据存储器“读选通控制”输出)P3口二、P3口作为第二功能(内部硬件自动使Q=1)此时引脚部分输入(Q=1、W=1)。例如:P3.0作为串行口输入P3口P3口作为第二功能(Q=1)部分输出(Q=1、W输出)。例如:P3.1作为串行口输出端口的负载能力和接口要求P0口的输出级无上拉电阻。当输出要去驱动NMOS(N沟道增强型场效应管)等负载时,需外接上拉电阻,这时才有高电平输出;作为输入用时,需向端口写“1”;作为地址/数据总线用时,无需外接上拉电阻。P0口的每一位口线可驱动8个LS型TTL负载。1.P0口2.P1~P3口•P1~P3口都是准双向口,作为输入用时,必须向相应的端口写“1”;•P1~P3口内部有上拉电阻,其每一位口线可驱动4个LS型TTL负载。补充“灌电流”与“拉电流”•“灌电流”“灌电流”与“拉电流”•“拉电流”P0口的驱动能力较大,当其输出高电平时,可提供400A的电流(“拉电流”);当其输出低电平(0.45V)时,则可提供3mA左右的“灌电流”。P1、P2、P3口的每一位只能驱动4个LSTTL,即可提供的电流只有P0口的一半。所以,任何一个口要想获得较大的驱动能力,只能用低电平输出。P1、P3口的驱动能力有限,在低电平输出时,一般也只能提供不到2mA的“灌电流”。定时/计数器接口一、定时/计数器的主要特性1)STC89C52RC单片机三个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1以及定时/计数器T2。2)每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。3)每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。4)每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。二、定时/计数器T0、T1的结构及工作原理TH1TL1TH0TL0TCONTMOD启动启动溢出溢出工作方式工作方式中断请求内部总线TcyT1T0三、定时/计数器的方式和控制寄存器1、定时/计数器的方式寄存器TMODTMODD7D6D5D4D3D2D1D0(89H)GATEC/TM1M0GATEC/TM1M0←定时器1→←定时器0→2、定时/计数器的控制寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0IE1:外部边沿触发中断1请求标志,其功能和操作类似于TF0。IT1:外部中断1类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。IT1=1,边沿触发。IT=0是电平触发。IE0:外部边沿触发中断0请求标志,其功能和操作类似于IE1。IT0:外部中断0类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。其功能和操作类似于IE1。必须注意:在不同外部中断触发方式下,标志清除方法不一样。四、定时/计数器的工作方式1、方式0(13位)振荡器12TLx(低5位)THx(高8位)TFx与或TxTRxGATEINTxS2S1C/TTcy中断请求3、方式2(8位自动装载)振荡器12TLx(8位)THx(8位)TFx与或TxTRxGATEINTxS2S1C/TTcy中断请求重装初值82、方式1(16位)方式1的结构与方式0结构相同,只是把13位变成16位,16位的加法计数器被全部用上。振荡器12TL0(8位)TF0与或T0TR0GATEINT0S2S1C/TTcy中断请求TH0(8位)TF1S2中断请求T1TR14、方式3(分成两个8位定时器/计数器)五、定时/计数器的初始化编程及应用1、定时/计数器的编程单片机定时/计数器初始化过程如下:1)根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。2)根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器。3)根据需要开放定时/计数器中断(后面须编写中断服务程序)。4)设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。5)等待定时/计数时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。2、定时/计数器的应用通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时间到对输出端取反一次即可。【例1】设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周期为500μs的方波。分析:从P1.0输出周期为500μs的方波,只须P1.0每250μs取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最大的定时时间为256μs,满足250μs的定时要求,方式控制字应设定为00000010B(02H)。系统时钟为12MHZ,定时250μs,计数值N为250,初值X=256-250=6,则TH0=TL0=06H。C语言程序:#includereg51.h//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){TMOD=0x02;TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;while(1);}voidtime0_int(void)interrupt1//中断服务程序{P1_0=!P1_0;}(1)采用中断处理方式的程序:(2)采用查询方式处理的程序#includereg51.h//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){chari;TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;for(;;){if(TF0){TF0=0;P1_0=!P1_0;}//查询计数溢出}}如果定时时间大于65536μs,这时用一个定时/计数器直接处理不能实现,这时可用两个定时/计数器共同处理或一个定时/计数器配合软件计数方式处理。【例2】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。根据例5-2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H),初值X:X=65536-10000=55536=1101100011110000B则TH0=11011000B=D8H,TL0=11110000B=F0H。#includereg51.h//包含特殊功能寄存器库sbitP1_1=P1^1;chari;voidmain(){TMOD=0x01;TH0=0xD8;TL0=0xf0;EA=1;ET0=1;i=0;TR0=1;while(1);}voidtime0_int(void)interrupt1//中断服务程序{TH0=0xD8;TL0=0xf0;i++;if(i==50){P1_1=!P1_1;i=0;}}(1)用寄存器R2作计数器软件计数,中断处理方式。(2)用定时/计数器T1计数实现,定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1(P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231=11100111B=E7H,TH1=TL1=E7H。因为定时/计数器T0工作于方式1,定时,则这时方式控制字为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。C语言程序如下:#includereg51.h//包含特殊功能寄存器库sbitP1_1=P1^1;sbitP3_5=P3^5;voidmain(){TMOD=0x61;//T1为8位自动装载计数器TH0=0xD8;TL0=0xf0;TH1=0xE7;//计数25次TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1)
本文标题:51单片机内部资源简介精讲
链接地址:https://www.777doc.com/doc-4575155 .html