资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,4,章 单片机的输入,/,输出端口,4.1 输入/输出端口构造,4.2 输入/输出端口负载力气,4.3 P1口输出功能应用实例,4.4 P3口输入功能应用实例,1,4.1 输入/输出端口构造,8051,单片机有,4,个,8,位并行,I/O,端口,称为,P0,、,P1,、,P2,和,P3,口,每个端口都各有,8,条,I/O,口线,每条,I/O,口线都能独立地用作输入或输出。,在无片外扩展存储器的系统中,这四个,I/O,口都可以作为,通用,I/O,口,使用。,在有片外扩展存储器的系统中,,P2,口送出,高,8,位地址,,,P0,口分时送出,低,8,位地址,和,8,位数据,。,2,1.P0,口,P0口某一位的构造图如以以下图所示,它由一个输出锁存器、两个三态输入缓冲器、一个转换开关MUX、一个输出驱动电路(T1和T2)和一个与门及一个非门组成。,3,(1)P0,口用作通用,I/O,口,MUX与锁存器的Q端接通,与门输出为0,T1截止,输出驱动级就工作在需外接上拉电阻的漏极开路方式。,P0口用作输出口,CPU在执行输出指令时,内部数据总线的数据在“写锁存器”信号的作用下,由D端进入锁存器,取反后消逝在Q端,再经过T2反向,则P0.X引脚上的数据就是内部总线的数据。由于T2为漏极开路输出,故此时必需外接上拉电阻。,0,4,P0口用作输入口,数据可以读自端口的锁存器,也可以读自端口的引脚,这要看输入操作执行的是“读锁存器”指令还是“读引脚”指令。,方式1:读引脚。CPU在执行“MOV”类输入指令时(如:MOV A,P0),内部产生的操作信号是“读引脚”。P0.X引脚上的数据经过缓冲器2读入到内部总线。留意,在读引脚时,必需先向电路中的锁存器写入1,使T2截止,P0.X引脚处于悬浮状态,可作为高阻抗输入。,MOV类指令,5,P0口用作输入口,方式2:读锁存器。CPU在执行“读-改-写”类输入指令时(如:ANL P0,A),内部产生的操作信号是“读锁存器”,锁存器中的数据经过缓冲器1送到内部总线,然后与A的内容进展规律“与”,结果送回P0的端口锁存器并消逝在引脚。,除了MOV类指令外,其他的读口操作指令都属于这种状况。,6,(2)P0,口用作地址,/,数据总线,MUX将地址/数据线与T2接通,同时与门输出有效。,假设地址/数据线为1,则T1导通,T2截止,P0口输出为1;反之T1截止,T2导通,P0口输出为0。,当数据从P0口输入时,读引脚使三态缓冲器2翻开,端口上的数据经缓冲器2送到内部总线。,7,3P0口小结,P0口既可作地址/数据总线使用,也可作通用I/O口使用。当P0口作地址/数据总线使用时,就不能再作通用I/O口使用了。,P0口作输出口使用时,输出级属漏极开路,必需外接上拉电阻,才有高电平输出。,P0口作输入口读引脚时,应先向锁存器写1,使T2截止,不影响输入电平。,8,2.P1,口,P1口是唯一的单功能口,仅能作为通用I/O口使用。由于在其输出端接有上拉电阻,故可以直接输出而无需外接上拉电阻。,同P0口一样,当作输入口时,必需先向锁存器写“1”,使场效应管T截止。,9,3.P2,口,图中的把握信号C准备转换开关MUX的位置:当C=0时,MUX拨向下方,P0口为通用I/O口;当把握信号C=1时,MUX拨向上方,P0口作为地址总线使用。,在实际应用中,P2口通常作为高8位地址总线使用。,10,4.P3,口,P3口用作通用I/O口时,其次输出功能信号W=1,P3口的每一位都可定义为输入或输出,其工作原理同P1口类似。,在真正的应用电路中,P3口的其次功能显得更为重要。,11,P3口的其次功能,引脚,第二功能,功能说明,P3.0,RXD,串行口输入,P3.1,TXD,串行口输出,P3.2,外部中断,0,输入,P3.3,外部中断,1,输入,P3.4,T0,定时器,/,计数器,0,计数输入,P3.5,T1,定时器,/,计数器,1,计数输入,P3.6,片外,RAM,写选通信号,(,输出,),P3.7,片外,RAM,读选通信号,(,输出,),12,4.2 输入/输出端口负载力气,P0口的输出级与P1P3口的输出级在构造上不同,其输出级无上拉电阻,因此它们的负载力气和接口要求也不一样。,P0口的每一位能驱动8个LSTTL负载。在作为通用I/O口使用时,输出驱动电路是开漏的,所以,驱动集电极开路(OC门)电路或漏级开路电路需外接上拉电阻。当作为地址/数据总线使用时(T1可以供给上拉电平),口线不是开漏的,无需外接上拉电阻。,P1P3口的每一位能驱动4个LSTTL负载。它们的输出驱动电路有上拉电阻,所以可以便利地由集电极开路(OC门)电路或漏级开路电路所驱动,而无需外接上拉电阻。,对于80C51单片机(CHMOS),端口只能供给几毫安的输出电流,故当作输出口去驱动一个一般晶体管的基极时,应在端口与晶体管基极间串联一个电阻,以限制高电平输出时的电流。,13,4.3 P1,口输出功能应用实例,【例1】P1口做输出口,把握八只发光二极管循环点亮(P1口输出低电寻常发光二极管被点亮)。,解:由于发光二极管低电平点亮,所以,需要哪个发光二极管点亮,只需在相应的端口输出规律0即可。由于每个发光二极管点亮后要持续一段时间才熄灭,再使下个发光二极管点亮,因此需要编写延时子程序,供主程序反复调用。,本例中,延时子程序承受指令循环来实现。,地址,机器码,程序,注释,ORG 0000H,0000H,02 10 00,LJMP MAIN,ORG 1000H,1000H,74 FE,MAIN:MOV A,#0FEH,1002H,F5 90,LOOP:MOV P1,A,1004H,12 10 0A,LCALL DELAY,;,延时,1007H,23,RL A,;,左移位,1008H,80 F8,SJMP LOOP,;,循环,100AH,7F FF,DELAY:MOV R7,#0FFH,;,延时子程序,100CH,7E FA,L1:MOV R6,#0FAH,100EH,DE FE,DJNZ R6,$,1010H,DF FA,DJNZ R7,L1,1012H,22,RET,END,14,【例2】利用P1.0输出凹凸电平,把握继电器的开合,以实现对外部装置(如灯L1和L2)的把握。,解:将单片机的P1.0接继电器把握端JIN,继电器的JZ通过K1接地,常开触点JK接L1,常闭触点JB接L2。编制程序,使P1.0电平变化,高电寻常继电器吸合,常开触点闭合,L1点亮,L2熄灭;低电寻常继电器不工作,常闭触点闭合,L2点亮,L1熄灭。,15,参考程序:,地址,机器码,程序,注释,ORG 0000H,0000H,02 20 00,LJMP MAIN,ORG 2000H,2000H,C2 90,MAIN:CLR P1.0,;P1.0,送低电平,2002H,12 20 0C,LCALL DELAY,;,延时,2005H,D2 90,SETB P1.0,;P1.0,送高电平,2007H,12 20 0C,LCALL DELAY,;,延时,200AH,80 F4,SJMP MAIN,;,循环,200CH,7F 06,DELAY:MOV R7,#06H,;,延时子程序,200EH,7E FF,L1:MOV R6,#0FFH,2010H,7D FA,L2:MOV R5,#0FAH,2012H,DD FE,DJNZ R5,$,2014H,DE FA,DJNZ R6,L2,2016H,DF F6,DJNZ R7,L1,2018H,22,RET,END,16,4.4 P3,口输入功能应用实例,【例3】P3口的P3.0连接一个开关,作为输入端;P1口的P1.0P1.7连接八只发光二极管,作为输出端。要求用P3.0来把握P1输出的循环灯,即当P3.0输出高电寻常,把握P1口的发光二极管左循环点亮;当P3.0输出低电寻常,把握P1口的发光二极管右循环点亮(P1口输出低电寻常发光二极管被点亮)。,解:在主程序中要对P3.0的状态进展推断。,假设P3.0为高电平,则使用循环左移指令。,假设P3.0为低电平,则使用循环右移指令。,延时子程序同例1。,17,参考程序:,地址,机器码,程序,注释,ORG 0000H,0000H,02 30 00,LJMP MAIN,ORG 3000H,3000H,74 FE,MAIN:MOV A,#0FEH,3002H,F5 90,LOOP:MOV P1,A,3004H,12 30 10,LCALL DELAY,;,延时,3007H,20 B0 03,JB P3.0,L1,300AH,03,RR A,;,右移位,300BH,80 F5,SJMP LOOP,;,循环,300DH,23,L1:RL A,;,左移位,300EH,80 F2,SJMP LOOP,;,循环,3010H,7F FF,DELAY:MOV R7,#0FFH,;,延时子程序,3012H,7E FA,L2:MOV R6,#0FAH,3014H,DE FE,DJNZ R6,$,3016H,DF FA,DJNZ R7,L2,3018H,22,RET,END,18,
展开阅读全文