单片机原理及应用复习资料.doc
单片机原理、接口及应用 51系列单片机内部结构如图1-1所示。1.1.2 CPU CPU是单片机的核心部件。它由运算器和控制器等部件组成。 1. 运算器 运算器的功能是进行算术运算:加、减、乘、除、加1、减1、比较、BCD码十进制调整等逻辑运算:与、或、异或、求反、循环等逻辑操作位操作:内部有布尔处理器,它以进位标志位C为位累加器,用来处理位操作。可对位置 “1”、对位清零 、位判断等。 操作结果的状态信息送至状态寄存PSW。2.程序计数器PC 程序计数器PC是16位的寄存器,用来存放即将要执行的指令地址,可对64KB程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。3.指令寄存器 指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令存储器,经指令译码器译码后由定时与控制电路发出相应的控制信号,完成指令功能。1.2 存 储 器 MCS-51的储存器结构与常见的微型计算机的配置方法不同,它将程序存储器和数据存储器分开,各有自己的寻址方式、控制信号和功能。 程序存储器用来存放程序和始终要保留的常数。 数据存储器存放程序运行中所需要的常数和变量。 从物理空间看,MCS-51有四个存储器地址空间: 片内数据存储器、片外数据存储器片内程序存储器、片外程序存储器MCS-51存储器物理结构见下图所示: 引脚 EA 的接法决定了程序储存器的00000FFFH 4KB地址范围是在单片机片内还是片外。 1.2.1 程序储存器 程序存储器用来存放编制好的始终保留的固定程序和表格常数。程序储存器以程序计数器 PC 作为地址指针,通过16位地址总线,可寻址的地址空间为64KB。 在8051/8751/89C51 片内,分别内置最低地址空间的4KB ROM/EPROM程序储存器(内部程序储存器),而在8031片内,则无内部程序储存器,必须外部扩展EPROM。MCS-51单片机中64KB内、外程序储存器的地址是统一编排的。8031单片机无内部程序存储器,地址从0000HFFFFH都是外部程序存储空间。 应始终接地,对于内部有ROM的单片机(51、52系列) , 引脚接高电平,使程序从内部ROM开始执行。当PC值超出内部ROM的容量时,会自动转向外部程序存储器空间。外部程序存储器地址空间为1000HFFFFH。 访问程序存储器使用MOVC指令。 程序存储器中的几个特殊地址的使用: 地址 用途 0000H 复位操作后的程序入口 0003H 外部中断0服务程序入口 000BH 定时器0中断服务程序入口 0013H 外部中断1服务程序入口 001BH 定时器1中断服务程序入口 0023H 串行口中断服务程序入口 由于两入口地址之间的存储空间有限,因此在编程时,通常在这些入口地址开始的两三个地址单元中,放入一条转移类指令,已使相应的程序转到指定的程序存储器区域中执行。1.2.2 外部数据存储器 用于存放随机读写的数据。 外部I/O口地址影像区。 MCS-51单片机的外部数据存储器和外部I/O口实行统一编址 ,并使用相同的 作选通控制信号,均使用 MOVX 指令访问。 MCS-51 单片机最多可扩展64KB外部数据存储器1.2.3 内部数据储存器 内部数据存储器是使用最多的地址空间,存放随机读写的数据 通用寄存器区堆栈区运算操作数存放区 指令(算术运算、逻辑运算、位操作运算等)的操作数只能在此地址空间或功能寄存器地址空间。内部数据存储器的地址分配 51 系列单片机内部数据存储器地址范围为007FH。各区域地址见下表。(1)地址 01FH的前32个单元称为寄存器区用途: 作通用寄存器R0R7。 R0与R1可作间址寄存器使用。使用时应注意: 32个单元的寄存器区分为四组,使用时只能选其中一组寄存器。寄存器的选组由程序状态字PSW的RS1和RS0位定。 RS1 RS0 选寄存器组 0 0 0组 0 1 1组 1 0 2组 1 1 3组 初始化时或复位时,自动选中0组。 一旦选中一组,其它三组只能作为数据存储器使用,而不能作为寄存器使用。 设置多组寄存器可以方便保护现场。 (2)20H2FH为位地址区 共16个单元,每单元有八个位,每位有一个位地址,共128位,位地址范围为00H7FH,该区既可位寻址,又可字节寻址。 如 MOV 20H,C (这里C是Cy进位标志位),该指令是将Cy内容送20H位,如果Cy1,位20H值为“1”。 (3)除选中的寄存组以外的存储器均可以作为通用RAM区。 (4)堆栈区 8XX51单片机的堆栈设在内部RAM区,深度不大于128字节,初始化时SP指向07H。 注: 对51基本型单片机只有00H-7FH单元128字节的RAM区。对52增强型的单片机还有80H-FFH组成的高128字节RAM区(共256字节RAM )。 1.3特殊功能寄存器 MCS-51单片机共有21个字节的特殊功能寄存器用英文缩写SFR (Special Fuction Register)表示。1.用途:A 累加器、状态标志寄存器单片机内部各部件专用的控制、状态寄存器并行口、串行口影射寄存器2.地址空间:21个特殊功能器不连续的分布在80HFFH 128个字节地址空间,见表1-2。地址为X0H和X8H是可位寻址的寄存器,表1-2中用“*”表示。 表1-2中还标注了各SFR的名称、字节地址、可寻址位的位地址和位名称。 21个特殊功能寄存器的名称及主要功能介绍如下,详细的用法见后面各节的内容。 A累加器,自带有全零标志Z,A=0则Z=1;A0则Z=0。该标志常用于程序分支转移的判断条件。 B寄存器,常用于乘除法运算(见第2章)。 PSW程序状态字。主要起着标志寄存器的作用,其8位定义见表1-3。 其中 CY:进/借位标志 反映最高位的进位借位情况,加法为进位、减 法为借位。 CY=1,有进/借位 ; CY=0,无进/借位。 AC:辅助进/借位标志 反映高半字节与低半字节之间的进/借位, AC=1有进/借位; AC=0无进/借位 。 FO:用户标志位。可由用户设定其含义。 RS1,RS0:工作寄存器组选择位。 OV:溢出标志 反映补码运算的运算结果有无溢出 有溢出 OV=1,无溢出OV=0。 -:无效位。 P:奇偶标志 运算结果有奇个“1”,P=1;运算结果有偶个“1”,P=0。 影响标志位的指令及其影响方式见第2章。SP堆栈指针。8XX51单片机的堆栈设在片内RAM, 对堆栈的操作包括压入(PUSH)和弹出(POP)两种方式,并且遵循后进先出的原则,但在堆栈生成的方向上,与8086正好相反8XX51单片机的堆栈操作遵循先加后压,先弹后减的顺序,按字节进行操作。 此外还有如下寄存器,它们将在后面章节介绍:IP中断优先级控制寄存器。IE中断允许控制寄存器。 TMOD定时器/计数器方式控制寄存器。TCON定时器/计数器控制寄存器。TH0,TL0定时器/计数器0。TH1,TH1定时器/计数器1。SCON串行端口控制寄存器。SBUF串行数据缓冲器。PCON电源控制寄存器。 注: 在52子系列中,高128字节RAM和SFR的地址是重叠的,究竟访问哪一块可通过不同的寻址方式加以区分,访问高128字节RAM采用寄存器间址,访问SFR则只能采用直接寻址,访问低128字节RAM时,两种寻址均可采用。 1.4 时钟电路与复位电路内部振荡方式: 在引脚 XTAL1和 XTAL2外接晶体振荡器(简称晶振)如图1-3所示。 由于单片机内部有一个高增益运算放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。1.4.2 基本时序单位单片机的时序单位有:。状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此,一个状态周期包含2个振荡周期。机器周期(MC):1个机器周期由6个状态周期及12个振荡周期组成。是计算机执行一种基本操作的时间单位。 4种时序单位中,振荡周期和机器周期是单片机内计算其他时间值(例如,波特率、定时器的定时时间等)的基本时序单位。 例:单片机外接晶振频率12MHZ时的各种时序单位: 振荡周期=1/fosc=1/12MHZ=0.0833us 状态周期=2/fosc=2/12MHZ=0.167us 机器周期=12/fosc=12/12MHZ=1us 指令周期=(14)机器周期=14us 上电后,由于电容充电,使 RST持续一段高电平时间。当单片 机已在运行过程中时,按下复位键 也能使 RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择 C=10mf ,R=10KW。 单片机的复位操作是使SFR寄存器进入初始化,不改变片内RAM区中的内容。 几个主要特殊功能寄存器复位状态归纳如下: PC=0000H 程序计数器为零表明单片机复位后程序从0000H地址单元开始执行。 A=00H 表明累加器已被清零。 PSW=00H 表明选寄存器0组为工作寄存器组。 SP=07H 表明堆栈指针指向片内RAM 07H单元,根据堆栈操作的先加后压法则,第一个被压入的数据被写入08H单元中。 P0P3=FFH 表明已向各端口线写入,各端口既可 用于输入又可用于输出。 记住一些特殊功能寄存器复位后的主要状态,对于熟悉单片机操作,减短应用程序中的初始化部分是十分必要的。 其它的特殊功能寄存器复位后的状态见教材表1-4。1.5 引脚功能各个引脚的功能说明如下:Vss:接地端。Vcc:电源端,接+5V。XTAL1,XTAL2: 接外部晶体或外部时钟。RST/VPD:复位信号输入。接备用电源,当VCC掉电后,在低功耗条件下保持内部RAM中的数据。ALE/PROG: ALE 地址锁存允许。 ALE输出脉冲的频率为振荡频率的1/6。 PROG 对8751单片机片内 EPROM 编程时,编程脉冲由该引脚引入。PSEN:程序存储器允许。输出读外部程序存储器的选通信号。EA/VPP: EA =0,单片机只访问外部程序存储器。 EA =1,单片机访问内部程序存储器。 在8751单片机片内EPROM编程期间,此引脚引入21V编程电源VPP。 在增强型的52系列单片机中,P1.0、P1.1除为端口线外,还为定时/计数器2的外部引脚 T2和T2EX。 P0.0P0.7:P0口,数据/低八位地址复用总线端口。 P1.0P1.7:P1口,静态通用端口。 P2.0P2.7:P2口,高八位地址总线端口。 P3.0P3.7:P3口,双功能静态端口。1.6 小单片机是集CPU、存储器、I/O接口于一体的大规模集成电路芯片。MCS-51系列单片机是目前市场上应用最广泛的单片机机型。 本章重点是单片机的内部结构和存储器结构 51系列单片机内部包含: 一个8位的CPU。 4KB程序存储器ROM(视不同产品型号不同:8031内部无ROM;8051内部为掩模式ROM;8751为EPROM;89C51内部为FLASH EEPROM)。 128字节RAM数据存储器。两个16位定时器/计数器。可寻址64KB外部数据存储器和64KB外部程序存 储器空间的控制电路。32条可编程的I/O线(四个8位并行I/O端口)。 一个可编程全双工串行口。具有两个优先级嵌套中断结构的五个中断源。 掌握51系列单片机各存储空间的地址分配,使用特点及数据操作方法。现将此内容归纳于教材表1-5中,此表是编程和硬件扩展的基础,相当重要,务必要熟记和掌握。MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。 目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如WAVE、 KEIL ,WAVE集成软件的使用见附录。汇编的方法:汇编的方法有两种1.手工汇编: 人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。2.机器汇编: 用计算机中的汇编程序对用户源程序进行汇编。 用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。1)确定程序中每条汇编语言指令的指令机器码2)确定每条指令在存储器中的存放地址3)提供错误信息4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)二伪指令 常用伪指令及功能:1.起始指令 ORG nn功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。 指令地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 3. 字定义 标号:DW (字常数或表达式)作用: 指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数),例如:GH :DW 1234H,5678H,08 5. 等值指令 标号 EQU(数值表达式) 表示EQU两边的量等值,用于为标号或标识符赋值。例如: X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1 ; DPTR=2000H ADD A,#X2 ; A=A+0FH6. 位定义 标号 BIT 位地址作用: 同EQU指令,不过定义的是位操作地址。例如 AIC BIT P1.1。汇编语言程序设计步骤一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标三.建立系统数学模型,确定控制算法和操作步骤四.合理分配存储器单元和了解I/O接口地址 常用程序结构 顺序程序、分支程序、循环程序、子程序 顺序程序设计例3-1 编程将外部数据存储器的000EH和000FH单元的内容相换。 ORG 0000H MOV P2, #0H ;送地址高八位至P2口 MOV R0, #0EH ;R0= 0EH MOV R1, #0FH ;R1=OFH MOVX A, R0 ;A=(000EH) MOV 20H, A ;(20H)=(000EH) MOVX A, R1 ;A=(000FH) XCH A, 20H ; A=(000EH),(20H)=(000FH) MOVX R1, A MOV A, 20H MOVX R0, A ;交换后的数送各单元 SJMP $ END 3.3 顺序程序设计顺序程序(简单程序),程序走向只有一条路径例3-3 分解压缩式BCD码,使其成为非压缩式BCD码。ORG 0000HMOV R0,#40H;设指针MOV A,R0;取一个字节MOV R2,A;暂存ANL A,#0FH;清0高半字节INC R0MOV R0,A ;保存数据个位 例2 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以10kg为1个计价单位G , G已存入40H单元。计价方法为50kg以内按3元, 50kg以上分段计价: 50kg按3元计价,超过部分按2元计价。 由此列出算式: 1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3的内容为0n,处理程序的入口符号地址分别为PR0PRn (n<128)。分析:将PR0PRn入口地址列在表格中,每一项占两个单元,PRn在表中的偏移量为2n,因此将R3的内容乘2即得PRn在表中的偏移地址,从偏移地址2n和2n+1两个单元分别取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP A+DPTR指令(A先清零)即转移到PRn入口执行。ORG 0000HMOV A,R3 ;R3AADD A,ACC ;A*2MOV DPTR,#TABPUSH ACCMOVC A,A+DPTR ;取地址表中高字节MOV B,A ;暂存于BINC DPLPOP ACCMOVC A,A+DPTR ;取地址表中低字节MOV DPL,AMOV DPH,B ;DPTR为表中地址CLR A ;A=0JMP A+DPTR ;转移TAB:DW PR0,PR1,PR2,.,PRn ;转移地址表END2. 利用转移指令表实现转移 例3-8 设有五个按键 0、1、2、3、4其编码分别为3AH、47H、65H、70H、8BH,要求根据按下的键转向不同的处理程序,分别为PR0 、PR1 /PR2、PR3、PR4,设按键的编码已在B寄存器中,编出程序。AJMP PR0的机器码为2110H, PR1入口地址为0220H AJMP PR1的机器码为4120H,转移指令表JPT的内容如下所示。设B=65H,键值为2: ORG 0000H MOV DPTR,#TAB ;置键码表首址 MOV A,#0 ;表的起始位的偏移量为0 NEXT: PUSH ACC MOVC A,A+DPTR ;A=键码表的编码 CJNE A,B,AGAN ;将B中值和键码表的值比较 POP ACC RL A ;如相等,序号乘2得分支表内偏移量 MOV DPTR,#JPT ;置分支表首址 JMP A+DPTR AGAN: POP ACC ;不相等比较下一个 INC A ;序号加1 CJNE A,#5,NEXT SJMP $ ;键码查完还没有B中按键编码程序结束 JPT: AJMP PR0 ;分支转移表 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4 TAB: DB 3AH,47H,65H,70H,8BH ;键码表 END例 3-9 设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHz。分析 : 延时时间与两个因素有关:晶振频率和循环次数。由于晶振采用6MHz,一个机器周期是2s,用单循环可以实现1ms延时,外循环10次即可达10ms延时。 内循环如何实现1ms延时呢,程序中可先以未知数MT代替,从附录A查每条指令机器周期计算程序的执行时间。 ORG 0020H MOV R0,#0AH ;外循环10次 DL2: MOV R1,#MT ;内循环MT次 DL1: NOP NOP ;空操作指令 DJNZ R1,DL1 DJNZ R0,DL2 RET例3-10 编写多字节数×10程序。 内部RAM以20H为首址的一片单元中存放着一个多字节符号数,字节数存放在R7中,存放方式为低位字节在低地址,高位字节在高地址,要求乘10后的积仍存放在这一片单元中。 分析 用R1作该多字节的地址指针,部分积的低位仍存放于本单元,部分积的高位存放于R2,以便和下一位的部分积的低位相加。以R7作字节数计数。 编程如下: ORG 0000H CLR C ;清进位位C MOV R1,#20H ;R1指示地址 MOV R2,#00H ;存积的高八位寄存器R2清0S10:MOV A, R1 ;取一字节送A MOV B,#0AH ;10送B PUSH PSW MUL AB ;字节乘10 POP PSW ADDC A,R2 ;上次积高八位加本次积低八位 MOV R1,A ;送原存储单元 MOV R2,B ;积的高八位送R2 INC R1 ;指向下一字节 DJNZ R7,S10 ;未乘完去SH10,否则向下执行 MOV R1,B ;存最高字节积的高位 SJMP $例如 12 23 65 09 89 比较大小 MCS-51单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算.这种用软件替代硬件的方法,可以大大简化甚至完全不用硬件,但比硬件要多花运算时间。例3-17 编写一程序,以实现图3-4中的逻辑运算电路.程序如下:START:MOV C,P2.2 ORL C,TF0 ANL C,P1.1 MOV F0,C MOV C,IE1 ORL C,/25H ANL C,F0 ANL C,/26H MOV P1.3,C SJMP $例3-18 设累加器A的各位ACC.0ACC.7分别记为X0X7,编制程序用软件实现下式: Y=X0X1X2+X0 X1 X2+X0X1X2X3+X4 X5 X6X7 X0 BIT ACC.0 X1 BIT ACC.1 X2 BIT ACC.2 X3 BIT ACC.3 X4 BIT ACC.4 X5 BIT ACC.5 X6 BIT ACC.6 X7 BIT ACC.7 ORG 0000H MOV C,X0ANL C,X1ANL C,X2MOV 00H,C ;X0X1X2MOV C,X0ANL C,/X1 MOV 01H,C ;X0X1ANL C,/X2ORL C,00HMOV 00H,C MOV C,X2ANL C,01H ANL C,X3 ;X0X1X2X3 ORL C,/00H MOV 00H,C MOV C,X7ANL C,/X6ANL C,/X5ANL C,/X4 ; X4 X5 X6 X7ORL C,00H ; 最终结果 YC SJMP $ 子程序是构成单片机应用程序必不可少的部分,通过ACALL和LCALL两条子程序调用指令,可以十分方便地用来调用任何地址处的子程序。 子程序节省占用的存储单元,使程序简短、清晰,善于灵活的使用子程序,是程序设计的重要技巧之一。 子程序必须以RET指令结尾. 在调用子程序时,有以下几点应注意: 1)保护现场。 如果在调用前主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有其他用途,就应先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。 2)设置入口参数和出口参数。 用之前主程序要按子程序的要求设置好地址单元或存储器(称为入口参数),以便子程序从指定的地址单元或存储器获得输入数据; 子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为出口参数),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。3)子程序中可包括对另外子程序的调用,称为子程序嵌套。主程序: ORG 0000H MOV SP,#3FH MOV A,31H ;取aLCALL SQR ;求a方 MOV R1,AMOV A,32H ;取bLCALL SQR ; 求b方ADD A,R1 ; 求和DA A ;调整MOV 33H,A MOV A,#0ADDC A,0 MOV 34H,A SJMP $ 子程序: ORG 0030HSQR:INC A MOVC A,A+PC RETTAB: DB 00H,01H,04H DB 09H 16H,25H, DB 36H,49H64H,81H END3.8 小 结1、程序设计的关键在于指令熟悉和算法(思路)正确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。2、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。 3、本章应掌握顺序程序、分支程序、循环程序、子程序等各类程序的设计方法,并能熟练应用查表技术简化程序的设计。PO口1.作为输入/输出口。 2.作为地址/数据总线 ,接外围芯片时PO口分时输出低 8 位地址与数据信号。P1口1.作为输入/输出口。 2.在增强型(52系列)和ISP型(在系统编程型)中有如下功能: 4.1.1.2 端口的内部结构 四个端口的一位结构见图5.1,同一个端口的各位具有相同的结构。由图可见,四个端口的 结构有相同之处: PO作I/O口使用 CPU发控制电平“0”封锁与门,使T1管截止,同时使MUX开关同下面的触点接通,使锁存器的 Q 与T2栅极接通。 当CPU向端口输出数据时,写脉冲加在锁存器的 CL上、内部总线的数据经反相,再经T2管反相,PO口的这一位引脚上出现正好和内部总线同相的数据。由于输出驱动级是漏极开路电路(因T1截止),在作I/O口使用时应外接10K的上拉电阻。 当输入操作时,端口中两个三态缓冲器用于读操作。缓冲器2用于读端口引脚的数据。当执行端口读指令时,读引脚脉冲打开三态缓冲器2,于是端口引脚数据经三态缓冲器2送到内部总线。缓冲器1用于读取锁存器Q端的数据。当执行“读-修改-写”指令(即读端口信息,在片内加以运算修改后,再输出到该端口的某些指令如:ANL PO,A指令),即是读的锁存器Q的数据。 这是为了避免错读引脚的电平信号,例如用一根口线去驱动一个晶体管基极,当向口线写“1”,晶体管导通,导通的PN结会把引脚的电平拉低,如读引脚数据,则会读为0 ,而实际上原口线的数据为1。因而采用读锁存器Q的值而避免了错读。究竟是读引脚还是读 锁存器,CPU内部会自行判断是发读引脚脉冲还是读锁存器脉冲,读者不必在意。 应注意 ,当作输入端口使用时,应先对该口写入“1”使场效应管T2截止,再进行读入操作,以防场效应管处于导通状态,使引脚箝位到零,而引起误读。 当PO口作地址/数据线使用时,CPU及内部控制信号为“1”,转换开关MUX打向上面的触点, 使反相器的输出端和T2管栅极接通,输出的地址或数据信号通过与门驱动T1管,同时通过反相器驱动T2管完成信息传送,数据输入时,通过缓冲器进入内部总线。 当扩展片外存贮器时,MUX开关打向右,P2口作高八位地址线输出高八位地址信号。 其MUX的的倒向是受CPU内部控制的。 应当注意:当P2口的几位作地址线使用时,剩下的P2口线不能作I /O口线使用。归纳四个并行口使用的注意事项如下:1.如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用。2.四个口在作输入口使用时,均应先对其写“1”,以避免误读。3.P0口作I/O口使用时应外接10K的上拉电阻,其它口则可不必。4.P2可某几根线作地址使用时,剩下的线不能作I/O口线使用。5.P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。4.1.2 编程举例 下面举例说明端口的输入、输出功能,其他功能的应用实例在后面章节说明。 例4-1.设计一电路,监视某开关K,用发光二极管LED显示开关状态,如果开关合上,LED 亮、 开关打开,LED熄灭。 分析:设计电路如图5. 2如示。 开关接在P1.1口线,LED接P1.0口线,当开关断开时,P1.1为+5V,对应数字量为“1”,开 关合上时P1.1电平为0V,对应数字量为“0”,这样就可以用JB指令对开关状态进行检测 。编程如下: CLR P1.0 ;使发光二极管灭AGA:SETB P1.1 ;先对P1口写入“1” JB P1.1,LIG ;开关开,转LIG SETB P1.0 ;开关合上,二极管亮 SJMP AGALIG: CLR P1.0 ;开关开,二极管灭 SJMP AGA 例4-2.在下图中P1.4P1.7接四个发光二极管LED,P1.0P1.3接四个开关,编程将开关的状态反映到发光二极管上。 上述程序中每次