1、第四章 80C51单片机的功能单元一、并行I/O接口80C51共有四个8位的并行双向口。每位均有锁存器、输出驱动器和输入缓冲器组成。它们在结构和功能上均有差异,下面逐一介绍之。1.P1口P1口是一个8位口,可以字节访问也可以位访问。其字节地址为90H,位地址为90H97H。P1口结构和工作过程分析P1.i锁存器读锁存器VccP1.i引脚内部总线写锁存器读引脚BA内部上拉电阻DCLQQBUF2BUF1Q输出上拉结构QVCC+P1口特点 输出锁存 输出高电平能力弱,低电平能力强 特殊的读、修改、写指令,只读锁存器的输出。当目的操作数是断口时,下列指令读锁存器而不是管脚。ANL、ORL、XRL、JB
2、C、CPL、INCDEC、DJNZ、MOV PX.Y,C、CLR、SETBp1口举例P1口高电平输出能力差,对HMOS系列只有0.2mA以下,因此,直接驱动负载时应该用低电平驱动.低电平的拉电流能力强.+5VP1.Xp1口举例输入时应先把I/O口置高,如果置低,可能损坏I/O口.最好硬件电路设计上有所考虑.+5VGNDP1.x2.P3口P3口是一个多功能8位口,可以字节访问也可以位访问。其字节地址为B0H,位地址为B0HB7H。P3口结构和工作过程分析P3.i锁存器读锁存器VccP1.i引脚内部总线写锁存器读引脚BA内部上拉电阻DCLQQBUF2BUF1Q第二功能输入第二功能输出P3口第二功能
3、 P3.0 RXD,串行口输入 P3.1 TXD,串行口输出 P3.2 INT0,外部中断0 P3.3 INT1,外部中断1 P3.4 T0,定时/计数器0 P3.5 T1,定时/计数器1 P3.6 WR,外部存储器写选通 P3.7 RD,外部存储器读选通3.P2口P2口是一个多功能8位口,可以字节访问也可以位访问。其字节地址为A0H,位地址为A0HA7H。其第二功能是作为外部存储器的高地址输出。P2口结构和工作过程分析P2.i锁存器读锁存器VccP1.i引脚内部总线写锁存器读引脚BA内部上拉电阻DCLQQBUF2BUF1Q地址控制P2口的功能特点 不输出地址时,作为双向I/O口使用 可以作为
4、高地址输出 能驱动4个TTL门4.P0口P0口是一个多功能8位口,可以字节访问也可以位访问。其字节地址为80H,位地址为80H87H。其第二功能是作为外部存储器的低地址输出和数据输入输出。P0口结构和工作过程分析P0.i锁存器读锁存器VccP0.i引脚内部总线写锁存器读引脚BADCLQQBUF2BUF1Q01地址/数据控制P0口的特点 P0口作为总线时是地址、数据复用。作为I/O口使用时是漏极开路应用。P0口能驱动8个TTL门。二、定时/计数器1、定时/计数器概述80C51系列单片机中总是包含T0,T1两个定时/计数器,有的型号还有定时/计数器T2,定时计数器的核心是一个加一计数器,其基本功能
5、是加一操作。如果对外部信号加一,就是计数器。如果对时钟信号加一,就是定时器。2、定时/计数器T0、T1内部结构 16位计数器TH0、TL0和TH1、TL1 特殊功能寄存器TMOD、TCON 时钟分频器 输入引脚T0、T1、INT0、INT1内部结构图TMOD(89H)不可位寻址TCON(88H)可位寻址TL1TH1TFTL1TH1TFINT1T1INT0T0CLK/12CLK/12TMOD 方式寄存器GATED7C/TD6M1D5M0D4GATED3C/TD2M1D1M0D0T1T01.M0、M1,选择定时/计数器的模式0、1、2、32.C/T,选择定时或计数功能3.GATE,选择脉冲源TCO
6、N 控制寄存器 TFx,计数溢出时置1,进入中断程序时硬件清零。如果不允许中断,需要软件清零。TRx,控制计数定时脉冲的输入。由软件控制。其它位与中断控制有关,以后详述。TF1D7TR1D6TF0D5TR0D4IE1D3IT1D2IE0D1IT0D0T1T088H8FH与中断控制有关定时/计数器T0、T1 方式0TLx(5位)THx(8位)TFx申请中断12振荡器Tx引脚C/T=0C/T=1+TRxGATEINTx引脚AB控制x=0,1M1=0M0=0定时/计数器T0、T1 方式1TLx(8位)THx(8位)TFx申请中断12振荡器Tx引脚C/T=0C/T=1+TRxGATEINTx引脚AB控
7、制x=0,1M1=0M0=1定时/计数器T0、T1 方式2TLx(8位)THx(8位)TFx申请中断12振荡器Tx引脚C/T=0C/T=1+TRxGATEINTx引脚AB控制x=0,1M1=1M0=0重装载方式3时定时/计数器T0TL0(8位)TF0申请中断T012振荡器T0引脚C/T=0C/T=1+TR0GATEINT0引脚AB控制M1=1M0=1TH0(8位)TF1申请中断T112振荡器TR1T0方式3时T1方式选择TL1(5,8)TH1(8位)串行口12振荡器T1引脚C/T=0C/T=1串行口12振荡器T1引脚C/T=0C/T=1TL1(8位)TH1(8位)重装载(a)T1方式1或0(b
8、)T1方式2定时/计数器T2在51系列单片机中,8052子系列除了有定时/计数器T0、T1外,还具有功能更强的定时/计数器T2。除了两个8位计数器TL2、TH2和控制寄存器T2CON及T2MOD之外,还有捕获寄存器RCAP2L和RCAP2H。输入引脚T2(P1.0)是外部计数脉冲输入端。输入引脚T2EX(P1.1)是外部控制信号输入端。T2中的特殊功能寄存器位地址位功能0CFHTF20CEHEXF20CDHRCLK0CCHTCLK0CBHEXEN20CAHTR20C9HC/T20C8HCP/RL2T2CON控制寄存器:C/T2=0 功能选择为定时器C/T2=0 功能选择为计数器T2中的特殊功能
9、寄存器T2MOD是字节寻址的,字节地址为0C9H,只有最低位有定义。D7-D1-D0DCENDCEN=1,减计数;DCEN=0,加计数;T2的工作方式RCLK+TCLKCP/RL2TR2工作方式001自动重装载方式011捕获方式1x1波特率发生器xx0关闭捕获方式TL2(8位)TF2申请中断12振荡器T2引脚C/T=0C/T=1控制TR2TH2(8位)RCAP2LRCAP2H控制EXF2EXEN2边沿检测T2EX引脚自动重装载方式(DCEN=0)TL2(8位)TF2申请中断12振荡器T2引脚C/T=0C/T=1控制TR2TH2(8位)RCAP2LRCAP2H控制EXF2EXEN2边沿检测T2E
10、X引脚重载自动重装载方式(DCEN=1)TL2(8位)申请中断12振荡器T2引脚C/T=0C/T=1控制TR2TH2(8位)RCAP2LRCAP2H0FFH0FFHTF2T2EX管脚EXF2波特率发生器方式TL2(8位)TF212振荡器T2引脚C/T=0C/T=1控制TR2TH2(8位)RCAP2LRCAP2H控制EXF2EXEN2边沿检测T2EX引脚16重载中断申请定时器、计数器定时常数计算由于计数器是加1计数的,所以定时常数应该求补码。t=Tc(2L-TC)=12/f(2L-TC)t:定时时间;Tc:机器周期;f:震荡器频率;L:计数器字长;计算举例:要使定时时间为2ms,而晶体震荡频率为
11、12MHz,求定时常数。2ms=1us(216-TC)TC=216-2000 =65536-2000 =63536化成两个字节:=0f830h定时/计数器编程 写TMOD,只能用字节寻址(M0,M1,C/T,GATE)。将时间常数或计数常数写入计数器寄存器。设置中断开放或禁止。启动计数器。例1使用T0在P1.0脚产生周期为2ms方波,震荡器频率为6MHz。设计思路是每1ms产生一个中断,中断程序中除了重新初始化计数器外,使P1.0电平反转。选用模式1作为T0的工作模式。即TMOD=01H由于震荡器频率为6MHz,即2微妙计数器计数一次。计数500次就是1ms。定时常数为65536-500=0F
12、E0CH,即TH=0FEH,TL=0CH。主程序先初始化定时计数器,然后开启计数器。具体程序主程序段:MOV TMOD,#01HMOV TH0,#0FEHMOV TL0,#0CHSETB ET0SETB EASETB TR0中断程序:ORG 000BHMOV TH0,#0F0HMOV TL0,#0CHCPL P1.0RETI例2 T0用方式3,这时TL0、TH0分别可作为两个8位计数器,产生两个方波。定时常数为:256-100*(12/11.0592)=147 256-150*(12/11.0592)=93 T1用方式2,自动重装载,定时常数0F9H。使用80C51单片机,用T1为串行口提供波
13、特率9600定时,同时希望产生两个方波,周期为200和300微妙。为产生准确的标准波特率,震荡器通常选择频率为11.0592Mhz。具体程序org 0bh ;tl0中断mov tl0,#147cpl p1.0retiorg 1bh ;th0中断mov th0,#93cpl p1.1reti主程序片段如下:.mov tmod,#23hmov tl0,#147mov th0,#93mov tl1,#0f9hmov th1,#0f9hsetb tr0setb tr1setb et0setb et1setb ea.例3 T0采用方式1,中断程序中通过判断p1.0是高电平还是低电平来重新设置计数器初始值
14、。计数器初始值从变量中得出,该变量的值同时由主程序动态给出,这样,PWM波的占空比等参数就由主程序决定了。产生PWM波形,PWM波形的参数由主程序动态设置,只能使用一个定时器,比如T0。具体程序;中断程序t0int:cpl p1.0 jb p1.0,high mov tl0,low_level_l mov th0,low_level_h retihigh:mov tl0,high_level_l mov th0,high_level_h reti;主程序org 0ljmp startorg 0bhljmp t0intorg 100hstart:mov tmod,#1hclr p1.0mov t
15、l0,low_level_lmov th0,low_level_hsetb et0setb easetb tr0;下面可以设定波形变量的值3.串行接口51系列单片机中有一个全双工异步串行接口,可以用来和其它串行设备通讯。全双工意味着它可以同时接收和发送。UART串行口结构 接收寄存器和发送寄存器。控制逻辑 串行口控制寄存器 串行数据输入输出引脚结构图SCON串行口控制逻辑接受SBUF发送SBUFTXRX申请中断定时器单元串行口的特殊功能寄存器状态控制寄存器(SCON):位地址位功能9FHSM09EHSM19DHSM29CHREN9BHTB89AHRB899HTI98HRI功率控制寄存器D7SM
16、OD与串行口无关PCON只有最高位SMOD与串行口有关:串行数据寄存器发送SBUF接受SBUF写读串行口工作方式多机通讯模式0-同步移位寄存器方式 数据输入时,数据由RXD引脚输入,同时TXD引脚给出同步时钟。数据的输入由REN=1和RI=0启动。数据输出时,数据有TXD引脚输出,同时TXD引脚给出同步时钟。输出由对SBUF的写操作触发。同步脉冲的频率是FCLK/12。输入时序和电路D0D1D2D3D4D5D6D7RXDTXDCD4014CD4014QSQCLKCLKRXDTXD输出时序和电路D0D1D2D3D4D5D6D7RXDTXDCD4094CD4094DATAQDATACLKCLKRX
17、DTXD方式1:8个数据位通讯方式当SM0=0、SM1=1时,串行口选择方式1。其波特率由定时计数器T1或T2的溢出速率决定。它是全双工模式,输入由Rx引脚,输出由Tx引脚。它的一帧数据由一个起始位(1)、8个数据位和一个停止位(0)组成。方式1帧格式D0 D1 D2D4D3D5 D6 D7起始停止1 1 0 0 1 0 0 193H方式1发送和接收完成的条件单片机1单片机2RxTxRxTx写SBUF指令后,就触发一个发送过程。发送完成时,Ti置位表明发送寄存器空,可以写入新内容。当Ri清除和REN置位后,接受到起始位触发一个接受过程。接收完成后,置位Ri并出发中断。只有Ri清0后,表明数据已
18、被处理,新的数据才能接受成功。方式2、3,9位数据方式当SM0=1、SM1=0时,串行口选择方式2。当SM0=1、SM1=1时,串行口选择方式3。发送和接收一帧信息为11位:一个起始位(1)、9个数据位和一个停止位(0)组成。数据除了8位要发送数据外,还包含第九位,发送由TB8组成,接收由RB8组成。考虑SM2=0的情况,这时第九位常用来作奇偶校验位。在SM2=0时,接受到完整字符包括第九位时置位Ri,产生中断。发送完成时,置位Ti产生中断。方式2和3的区别在于方式2的波特率是固定的,为f/32或f/16。而方式3的波特率由定时器的溢出速率决定。方式2、3的帧格式D0 D1 D2D4D3D5
19、D6 D7起始停止1 1 0 0 1 0 0 1 093H+0D8多机通讯主机从机机号1从机机号2从机机号3TXDRXDRXDRXDRXDTXDTXDTXD多机通讯的设置单片机设有多机通讯位SM2(SCON.5)。当串行口工作于方式2或3时,若设置SM2=1,只有接收到的第九位(RB8)为1,才置位RI,触发中断,否则,数据将会丢失。利用这个特点可以实现多机通讯。每次通讯从主机对从机点名开始。各从机先设定SM2=1,通讯时主机先发送某从机的机号,并使第九位为1。这时所有从机接收并产生中断。从机把接收到的机号和自己的机号比较,如果是自己,就接着进行下面的通讯过程。否则结束通讯,并继续保持SM2=
20、1。接下来主机和被点名的从机继续通讯,但这时都设置SM2=0,并且发送的数据第九位0,这时不会打扰其它从机。多机通讯这样能够使主机发送数据或命令时,只有发送机号的字节使所有从机中断,发送其它字节时并不干扰不通讯的从机。还可以定义广播方式,比如假设机号0是广播地址,当收到机号0时,所有从机接受数据。波特率发生器和计算方式2的波特率是固定的,为:波特率=(f2SMOD)/64方式1、3的波特率用T1产生:波特率=(定时器T1的溢出率2SMOD)/32用定时器T2产生波特率:波特率=(定时器T1的溢出率)/16波特率计算举例设震荡器频率为f=11.0592MHz,方式1、3,用T1方式2产生波特率9
21、600,计算T1溢出率、定时器初始值。定时器T1溢出率=960032=30720011059200/307200=36初始值=256-36=220=0DCH例1把片内RAM内容从50h开始16字节发送出去。接收方接收16字节后存储于50h开始的内部RAM中。使用方式1。中断系统 突发事件的处理机制 中断源-触发中断的事件 中断优先级-两级中断优先级中断源 INT0,外部中断0 INT1,外部中断1 TF0,定时计数器0 TF1,定时计数器1 RX、TX,串行口中断中断允许中断允许寄存器IE设置中断的允许与否。位地址符号AFHEAAEH-ADH-ACHESABHET1AAHEX1A9HET0A8
22、HEX0中断优先级寄存器IP决定中断的优先级位地址符号BFH-BEH-BDH-BCHPSBBHPT1BAHPX1B9HPT0B8HPX0为0时,底优先级中断。1,高优先级中断。高优先级中断执行时不能被低优先级中断打扰,低优先级中断能够被高优先级打扰。同级中断不能互相打扰。外部中断触发方式TF1D7TR1D6TF0D5TR0D4IE1D3IT1D2IE0D1IT0D0T1T088H8FH与中断控制有关TCON:中断触发方式有两种,电平触发和跳变触发。电平触发是当INT引脚低电平时引发中断。跳变触发是INT引脚由高电平到低电平跳变时引发中断。触发方式的选择由TCON寄存器中的IT0、IT1控制,如为0,电平触发;为1,跳变触发。中断请求的撤除 单片机内部自动复位。T0、T1中断或跳变触发的外部中断,CPU响应后自动清除中断标志。软件清除。主要指RI、TI。用电平触发的外部中断,应采取相应措施保证中断返回时回到高电平。中断响应过程 在每个机器周期S5P2期间采样中断源,在下一个周期的S6阶段按优先级响应中断。响应中断后,先把PC内容入栈保护。转向中断程序入口地址,处理中断。遇到RETI指令,中断返回。从堆栈中恢复PC。中断程序地址中断源中断程序地址外部中断03h定时计数器00bh外部中断113h定时计数器11bh串行口23h