2016-11-02 20:59:42 zhengqijun_ 阅读数 17872
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3997 人正在学习 去看看 朱有鹏

单片机如何扩展IO口?

首先我们先讲讲为什么要扩展IO口。在我们使用51单片机的时候,有时候会出现IO口不够用的情况。比如键盘!这个时候IO口的资源就十分有限了。

按键是我们常用的器件,做某些东西的时候又不能缺少按键。如果一个按键对应一个IO口,那么可想而知,按键所占的IO口的数量是很大的。单片机IO口的资源是有限的,因此我们要采取一些方法来扩展单片机的IO口,控制按键所占的单片机IO口。

下面有几种方法可以扩展单片机的IO口:

1. 通过数据缓存器、锁存器来扩展单片机IO口。

这里采用74HC164来扩展单片机IO口。



2. 采用可编程I/O接口扩展芯片。

8255A是Intel公司生产的8位可编程并行接口芯片。内部有3个可编程的并行I/O口:PA口、PB口、PC口。



3. 采用矩阵键盘也可以减少IO口的使用。

矩阵键盘是常用的一种方式。可以根据扫描的方法来得到按键按下的位置



4. 采用A/D获取按键的位置。

因为每个按键按下时,获得的电压不同。因此启动AD采样,根据得到的电压值的不同,判断按键的位置。



2019-12-19 13:59:20 zhongvv 阅读数 80
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3997 人正在学习 去看看 朱有鹏

    应广单片机IO口主要由 3个寄存器进行设置 ,表中为PA.0的说明,其他端口同样适用.

    例如io口有如下定义

    BIT      ADC_IN              :       PB.0;
    BIT     USB_IN               :       PB.1;
    BIT     LED                   :         PB.2;
    BIT     POW_EN            :       PB.3;

      方法1:

      可以这样

      pb.0=0;

      pbc.0=0;/*输入*/

      pbph.0=0;/*浮空*/

     

      pb.1=0;

      pbc.1=0;/*输入*/

      pbph.1=1;/*上拉*/

      .......

      也可以这样

     PB        =     0b0000_0100;
     PBC       =    0b0000_1100;
     PBPH    =     0b1111_0010;

    方法2:       通过脚本进行配置

    $   ADC_IN                in; /*浮空输入*/
    $   USB_IN                in,pull; /*输入,带上上拉*/

    $   LED                    out,high; /*输出高*/
    $   POW_EN            out,low ;/*输出低*/

   方法1.设置一个端口要看3个寄存器

   方法2:每个端口独立配置,方法2比较直观,而且非常好用,我喜欢用,符合使用习惯.

 

 

2019-11-30 16:10:40 qq_37631068 阅读数 91
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3997 人正在学习 去看看 朱有鹏

实验目的和任务

目的:利用“模块化单片机教学实验平台”,加深对单片机的串行口的理解。

任务:利用单片机的串行口完成程序设计。

实验内容

使用AT89S52单片机的串行口通过RS232通信接口与PC机进行通信,让单片机把接收到的每一帧数据(即PC机发送给单片机的每一帧数据)直接再发送给PC机。(串行口波特率设定为9600Bit/s,使用方式1)注意:使用串口调试助手(Baud 9600、数据位8、停止位1、效验位无)作为上位机来向单片机发送数据和接收单片机串口所发的数据,观察串口调试助手接收窗口。

实验过程和结果

电路图

硬件连线:

母版

CPU

J57/J59RXD

P2P3.0

J57/J59TXD

P2P3.1

用232串口线连接计算机的USB口和MAIN_BOARD的RS2/RS1串口。

注意:实验箱的AT89S52单片机的晶振频率为11.0592MHz!

参考流程图:

 

实验结果图

  1. 实验心得

实验过程让我熟悉了中断程序和串口的编写步骤和单片机执行串口传输的工作流程。实验中由于不熟悉中端口的相关寄存器分布和功能,导致错误设置了特殊功能寄存器,程序不能正常执行,后来在老师的指导下修改了程序和中断入口地址,程序能正常执行并返回输入内容。

  1. 附录(代码)

(1)基本实验

ORG 0000H

LJMP MAIN               

ORG 0023H

LJMP U

MAIN: 

MOV SCON,#01010000B

SETB ES

SETB EA

MOV TMOD,#00100000B

MOV TH1,#0FDH

SETB TR1

LJMP $

U:

CLR RI

MOV A,SBUF

MOV SBUF,A

JNB RI,$

CLR RI

RETI

END

(2)扩展实验

ORG 0000H

LJMP MAIN               

ORG 0023H

LJMP U

MAIN: 

MOV SCON,#01010000B

SETB ES

SETB EA

MOV TMOD,#00100000B

MOV TH1,#0FDH

SETB TR1

SETB T1      ;手动执行中断

LJMP $

U:

CLR RI

MOV SBUF,#68H

MOV SBUF,#65H

MOV SBUF,#6CH

MOV SBUF,#6CH

MOV SBUF,#6FH

MOV SBUF,#26H

MOV SBUF,#20H

MOV SBUF,#77H

MOV SBUF,#6FH

MOV SBUF,#72H

MOV SBUF,#6CH

MOV SBUF,#64H

MOV SBUF,#0DH

MOV SBUF,#0AH

MOV SBUF,#0AH

JNB RI,$

CLR RI

LJMP U      ;发送完毕后回到中断程序头部,循环发送hello world

RETI

END

2019-03-05 17:56:22 kafmws 阅读数 176
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3997 人正在学习 去看看 朱有鹏
单片机串行口结构

在这里插入图片描述
  串行口结构如上图
  发送时,SBUF中写入数据后,串行口通过发送控制器,将SBUF中的数据逐个逐位地通过串行输出口TXD引脚逐个发出,当一个字节发送结束后,触发TI中断位,通知单片机发送结束
  接收时,先向REN引脚写1,外部引脚RXD会实时检测电平变化,当满足串行接收数据的条件时,会逐位接收数据并保存到SBUF,当一个字节接收结束后,触发RI中断位,通知单片机接收结束


串行口控制寄存器SCON

SCON D7 D6 D5 D4 D3 D2 D1 D0
98H SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0、SM1用于设定串行口工作方式   fosc :晶振频率

SM0 SM1 方式 功能 波特率
0 0 方式0 移位寄存器方式 fosc/12
0 1 方式1 8位异步通信方式 可变
1 0 方式2 9位异步通信方式 fosc/32或fosc/64
1 1 方式3 9位异步通信方式 可变

SM2:多机通信控制位
REN:允许接收控制位
TB8/RB:发送/接收的第9位数据
TI:发送中断标志位
RI:接收中断标志位


电源控制寄存器

PCON D7 D6 D5 D4 D3 D2 D1 D0
87H SMOD

当SMOD位为1时,串行口方式1、方式2、方式3的波特率加倍


这里只介绍方式0与方式1的应用

方式0
  方式0通常用来外接移位寄存器,用作扩展I/O口,方式0工作时波特率固定为 fsoc/12,工作时,串行数据通过RXD输入、输出,同步时钟通过TXD输出
  发送:TI = 0 时,SBUF写入数据后,发送过程启动,发送结束后,TI被置为1,并向CPU申请中断
  接收:在 RI = 0 时,将REN置"1"就启动一次接收过程,RXD上的串行数据一次移入移位寄存器,当一个字节发送完成之后,接收中断标志RI被置为"1",同时向CPU申请中断
  方式0波特率固定,也无需编程设定定时器

方式0应用实例:扩展并行I/O口
  当外接串入并出的移位寄存器时,即是扩展并行输出口,当外接并入串出的移位寄存器时,相当于扩展并行输入口

原理图如下
在这里插入图片描述
4094模块使用方式:
在这里插入图片描述
D接RXD,CLK接TXD,STB接P1.0,OE接EA

扩展并行输出口控制流水灯程序如下:

#include<reg52.h>
sbit P1_0 = P1^0;
void main(){
	unsigned char i;
	unsigned int j;
	SCON = 0x00;//设置串行口工作方式
	i = 0x01;//00000001b   发送的用于控制LED灯的变量
	for(;;){
		P1_0 = 0;//将4094接入串口
		SBUF = i;//
		while(TI==0);
		P1_0 = 1;//将STB置1,准备4094发送
		TI = 0;//TI归位
		for(j = 0;j<0xffff;j++);//适当延时
		i = i*2;
		if(i==0){
			i = 0x01;//循环
		}
	}
}

方式1
  方式1位8位异步通信方式,在方式1下,一帧信息为10位,1位起始位(0),8位数据位(低位在前)和1位停止位(1)
  发送:在 TI = 0 时,向SBUF写入数据,启动发送过程,数据有TXD引脚送出,当一帧数据发送完毕后,TI 被置为"1"
  接收:当 REN = 1 时,接收控制器开始接收数据,数据依次被移入移位寄存器,当8位数据及停止位全部移入后,进行响应操作
  方式1下,TXD数据发送端,RXD为数据接收端,波特率可变,由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,故可编程设定定时器以设定波特率,其中溢出率 = 计数器一秒钟内溢出的次数
 波特率 = 2SMOD × (T1的溢出率) / 32
 T1溢出率 = fsoc / ( 12 × 计数值 )
所以
 T1的初值 = MAX值 - fsoc × 2SMOD / (12 × 波特率 × 32)

在这里插入图片描述
分析如下:
在这里插入图片描述
甲机发送程序:

#include<reg52.h>
void main(){
	unsigned char i;
	SCON = 0x40;
	TMOD = 0x20;
	TL1 = 0xE6;
	TH1 = 0xE6;
	TR1 = 1;//设定完毕
	P1 = 0xff;//为读取准备
	while(1){
		i = P1;
		SBUF = i;
		while(TI==0);//等待发送完成
		TI = 0;
	}
}

乙机接收程序:

#include<reg52.h>
void main(){
	SCON = 0x50;
	TMOD = 0x20;
	TL1 = 0xE6;
	TH1 = 0xE6;
	TR1 = 1;
	EA = 1;
	ES = 1;
	while(1);
}

void setLED() intrrupt 4{
	if(RI){
		RI = 0;
		P2 = SBUF;
	}
}

2019/3/5

2017-02-11 17:57:39 gjxman1314 阅读数 7767
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3997 人正在学习 去看看 朱有鹏

前言

  对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机每个IO端口结构都有差异,都各有各的特点。在平时的应用中,特别是设计外围硬件的时候,如果不了解其内部结构的话设计起来也许会有问题(特别是用到P0口),所以好好了解每个端口的结构是非常有必要的。再有一点是51单片机的引脚不像STM32那样可以支持重映射,所以硬件布局的时候也要注意这一点。下面就是在网上找的一点资料,整理如下:


51单片机I/O口内部结构

1.1P0端口的结构及工作原理

     P0口结构图

                P0端口8位中的一位结构图

  由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。
下面,我们先介绍一下组成P0口的每个单元部份:

- 输入缓冲器:在P0口中,有两个三态的缓冲器,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态)。要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
- D锁存器:构成一个锁存器,通常要用一个时序电路,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及Q非端。数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。
- 多路开关 :在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。那么这个多路选择开关就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。上图中,当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的。

- 输出驱动部份:从上图中我们已看出,P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。
- 与门、与非门:门电路是起开关作用的集成电路,根据开放的条件不同,而分为与门、非门、与非门等等。这里的知识点比较简单,这里就不详细说明了。

1.2P0作为I/O端口使用时的工作原理

  1.2.1P0作为普通I/O端口使用时的工作原理

     P0口作为I/O端口使用时,多路开关的控制信号为0(低电平),多路开关的控制信号同时与与门的一个输入端是相接的,我们知道与门的逻辑特点是“全1出1,有0出0”那么控制信号是0的话,这时与门输出的也是一个0(低电平),与门的输出是0,V1管就截止,在多路控制开关的控制信号是0(低电平)时,多路开关是与锁存器的Q非端相接的(即P0口作为I/O口线使用)。
      
  - P0口用作I/O口时,其由数据总线向引脚输出(即输出状态Output)的工作过程:
      这里写图片描述
             
  当写锁存器信号CP 有效,数据总线的信号→锁存器的输入端D→锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X。我们知道,当多路开关的控制信号为低电平0时,与门输出为低电平,V1管是截止的,所以作为输出口时,P0是漏极开路输出,类似于OC门,当驱动上接电流负载时,需要外接上拉电阻。

  P0口用作I/O口线,其由引脚向内部数据总线输入(即输入状态Input)的工作过程:
   
数据输入时(读P0口)有两种情况
1、读引脚
读芯片引脚上的数据,读引脚数时,读引脚缓冲器打开(即三态缓冲器的控制端要有效),通过内部数据总线输入。
      读引脚 

2、读锁存器
通过打开读锁存器三态缓冲器读取锁存器输出端Q的状态。
      读锁存器

  在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器Q=0,Q非=1,场效应管T2开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器Q=1,Q非=0,场效应管T2截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。为此,8031单片机在对端口P0一P3的输入操作上,有如下约定:为此,8051单片机在对端口P0一P3的输入操作上,有如下约定:凡属于读-修改-写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。
读-修改-写指令的特点是,从端口输入(读)信号,在单片机内加以运算(修改)后,再输出(写)到该端口上。这样安排的原因在于读-修改-写指令需要得到端口原输出的状态,修改后再输出,读锁存器而不是读引脚,可以避免因外部电路的原因而使原端口的状态被读错。

  1.2.2P0作为地址/数据复用口使用时的工作原理

  这时多路开关‘控制’信号为‘1’,‘与门’解锁,‘与门’输出信号电平由“地址/数据”线信号决定;多路开关与反相器的输出端相连,地址信号经“地址/数据”线→反相器→V2场效应管栅极→V2漏极输出。
  当P0作为地址/数据总线使用时,在读指令码或输入数据前,CPU自动向P0口锁存器写入0FFH,破坏了P0口原来的状态。因此,不能再作为通用的I/O端口。以后在系统设计时务必注意在程序中不能再含有以P0口作为操作数(包含源操作数和目的操作数)的指令。

      P0口作地址线控1地0
  当控制信号为1,地址信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。(蓝色字体为电平)
      P0作地址线控1地1
   反之,控制信号为“1”、地址信号为“1”,“与门”输出为高电平,V1管导通;反相器输出低电平,V2管截止,输出引脚的地址信号为高电平。请看下图(蓝色字体为电平)
  可见,在输出“地址/数据”信息时,V1、V2管是交替导通的,负载能力很强,可以直接与外设存储器相连,无须增加总线驱动器。
      P0作数据线.png
  P0口又作为数据总线使用。在访问外部程序存储器时,P0口输出低8位地址信息后,将变为数据总线,以便读指令码(输入)。
  在取指令期间,“控制”信号为“0”,V1管截止,多路开关也跟着转向锁存器反相输出端Q非;CPU自动将0FFH(11111111,即向D锁存器写入一个高电平‘1’)写入P0口锁存器,使V2管截止,在读引脚信号控制下,通过读引脚三态门电路将指令码读到内部总线。
   如果该指令是输出数据,如MOVX @DPTR,A(将累加器的内容通过P0口数据总线传送到外部RAM中),则多路开关“控制”信号为‘1’,“与门”解锁,与输出地址信号的工作流程类似,数据据由“地址/数据”线→反相器→V2场效应管栅极→V2漏极输出。
  如果该指令是输入数据(读外部数据存储器或程序存储器),如MOVX A,@DPTR(将外部RAM某一存储单元内容通过P0口数据总线输入到累加器A中),则输入的数据仍通过读引脚三态缓冲器到内部总线,其过程类似于上图中的读取指令码流程图。

2.P1端口的结构及工作原理

  P1口的结构最简单,用途也单一,仅作为数据输入/输出端口使用。输出的信息有锁存,输入有读引脚和读锁存器之分。P1端口的一位结构见下图.
      P1口结构图.png

   由图可见,P1端口与P0端口的主要差别在于,P1端口用内部上拉电阻R代替了P0端口的场效应管T1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以,P1端口是具有输出锁存的静态口
  当要正确地从引脚上读入外部信息,必须先使场效应管关断,以便由外部输入的信息确定引脚的状态。为此,在作引脚读入前,必须先对该端口写入l。具有这种操作特点的输入/输出端口,称为准双向I/O口。8051单片机的P1、P2、P3都是准双向口。P0端口由于输出有三态功能,输入前,端口线已处于高阻态,无需先写入l后再作读操作。
  P1口的结构相对简单,前面我们已详细的分析了P0口,这里我就不多论述了。单片机复位后,各个端口已自动地被写入了1,此时,可直接作输入操作。如果在应用端口的过程中,已向P1一P3端口线输出过0,则再要输入时,必须先写1后再读引脚,才能得到正确的信息。此外,随输入指令的不同,H端口也有读锁存器与读引脚之分。

3.P2端口的结构及工作原理

  P2端口的一位结构见下图:
        这里写图片描述

  P2端口在片内既有上拉电阻,又有切换开关,所以P2端口在功能上兼有P0端口和P1端口的特点。这主要表现在输出功能上,当切换开关向下接通时,从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当多路开关向上时,输出的一位地址信号也经反相器和场效应管反相后,输出在端口引脚线上。
  对于8031单片机必须外接程序存储器才能构成应用电路(或者我们的应用电路扩展了外部存储器),而P2端口就是用来周期性地输出从外存中取指令的地址(高8位地址),因此,P2端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址。因此P2端口是动态的I/O端口。输出数据虽被锁存,但不是稳定地出现在端口线上。其实,这里输出的数据往往也是一种地址,只不过是外部RAM的高8位地址。
  在输入功能方面,P2端口与P0和H端口相同,有读引脚和读锁存器之分,并且P2端口也是准双向口。P2端口的主要特点包括:
①不能输出静态的数据;
②自身输出外部程序存储器的高8位地址;
②执行MOVX指令时,还输出外部RAM的高位地址,故称P2端口为动态地址端口。
即然P2口可以作为I/O口使用,也可以作为地址总线使用。
  下面简单分析下它的两种工作状态。
  1、作为I/O端口使用时的工作过程
当没有外部程序存储器或虽然有外部数据存储器,但容易不大于256B,即不需要高8位地址时(在这种情况下,不能通过数据地址寄存器DPTR读写外部数据存储器),P2口可以I/O口使用。这时,“控制”信号为“0”,多路开关转向锁存器同相输出端Q,输出信号经内部总线→锁存器同相输出端Q→反相器→V2管栅极→V2管9漏极输出。
由于V2漏极带有上拉电阻,可以提供一定的上拉电流,负载能力约为8个TTL与非门;作为输出口前,同样需要向锁存器写入“1”,使反相器输出低电平,V2管截止,即引脚悬空时为高电平,防止引脚被钳位在低电平。读引脚有效后,输入信息经读引脚三态门电路到内部数据总线。
  2、作为地址总线使用时的工作过程
P2口作为地址总线时,“控制”信号为‘1’,多路开关车向地址线(即向上接通),地址信息经反相器→V2管栅极→漏极输出。由于P2口输出高8位地址,与P0口不同,无须分时使用,因此P2口上的地址信息(程序存储器上的A15~A8)功数据地址寄存器高8位DPH保存时间长,无须锁存。

4.P3端口的结构及工作原理

  P3口是一个多功能口,它除了可以作为I/O口外,还具有第二功能,P3端口的一位结构见下图。
      这里写图片描述
  由上图可见,P3端口和Pl端口的结构相似,区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时,第二输出功能线为1,此时,内部总线信号经锁存器和场效应管输入/输出,其作用与P1端口作用相同,也是静态准双向I/O端口。当处于第二功能时,锁存器输出1,通过第二输出功能线输出特定的内含信号,在输入方面,即可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内的特定第二功能信号。由于输出信号锁存并且有双重功能,故P3端口为静态双功能端口
  P3口的特殊功能(即第二功能):

I/O口 第二功能 信号名称
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 外部RAM写选通
P3.7 RD 外部RAM读选通

  在应用中,如不设定P3端口各位的第二功能(WR,RD信叼的产生不用设置),则P3端口线自动处于第一功能状态,也就是静态I/O端口的工作状态。在更多的场合是根据应用的需要,把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对
 

总结

  

  当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,必须外接上拉电阻才会有高电平输出;如果作为输入,必须先向相应的锁存器写“1”,才不会影响输入电平。当CPU内部控制信号为“1”时,P0口作为地址/数据总线使用,这时,P0口就无法再作为I/O口使用了。P1、P2 和P3 口为准双向口, 在内部差别不大, 但使用功能有所不同。
  
  P1口是用户专用 8 位准双向I/O口, 具有通用输入/输出功能, 每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时, 该位的锁存器必须写入“1”, 然后才能进入输入操作。
  
  P2口是 8 位准双向I/O口。外接I/O设备时, 可作为扩展系统的地址总线, 输出高8位地址, 与P0 口一起组成 16 位地址总线。 对于 8031 而言, P2 口一般只作为地址总线使用, 而不作为I/O线直接与外部设备相连。
  
  P3口和Pl口的结构相似,区别仅在于P3端口的各端口线有两种功能选择。
  
  在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用(这里注意:准51的P0口在作为I/O口使用时,是开漏结构,在实际应用中通常要添加上拉电阻;P1、P2、P3都是准双向I/O,内部有上拉电阻,既可作为输入又可以作为输出)。
  
  在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。
    

51单片机IO口总结

阅读数 1493

没有更多推荐了,返回首页