1、C8051F系列SOC单片机原理及应用,主讲:吴国东,第四章 端口输入/输出,C8051F020/1/2/3 MCU是高集成度的混合信号片上系统,有按8位端口组织的64个数字I/O引脚(C8051F020/2)或32个数字I/O引脚(C8051F021/3)。低端口(P0、P1、P2 和P3)既可以按位寻址也可以按字节寻址。高端口(P4、P5、P6 和P7)只能按字节寻址。所有引脚都耐5V 电压,都可以被配置为漏极开路或推挽输出方式和弱上拉。,第四章 端口输入/输出,C8051F020/1/2/3器件有大量的数字资源需要通过4个低端I/O端口P0、P1、P2和P3才能使用。P0-P3的每个引脚
2、可定义为通用的端口I/O(GPIO)引脚,又可以分配给一个数字外设或功能(例如:UART0 或/INT1)。系统设计者控制数字功能的引脚分配,只受可用引脚数的限制。这种资源分配的灵活性是通过使用优先权交叉开关译码器实现的。,第四章 端口输入/输出,注意:不管引脚被分配给一个数字外设或是作为通用I/O,总是可以通过读相应的数据寄存器得到端口I/O引脚的状态。端口1的引脚可以用做ADC1的模拟输入。 在执行目标地址为片外XRAM 的MOVX 指令时,外部存储器接口可以在低端口或高端口有效。 高端口(存在于C8051F020/2 中)按字节访问。,第四章 端口输入/输出,第四章 端口输入/输出,4.
3、1 端口0-3和优先权交叉开关译码器 优先权交叉开关译码器,或称为“交叉开关”,按优先权顺序将端口0-3的引脚分配给器件上的数字外设(UART、SMBus、PCA、定时器等)。端口引脚的分配顺序是从P0.0 开始,可以一直分配到P3.7。UART0具有最高优先权,而CNVSTR具有最低优先权。,第四章 端口输入/输出,1) 交叉开关引脚分配 当交叉开关配置寄存器XBR0、XBR1 和XBR2 中外设的对应使能位被设置为逻辑1时,交叉开关将端口引脚分配给外设。 例如,如果UART0EN位(XBR0.2)被设置为逻辑1,则TX0 和RX0 引脚将分别被分配到P0.0 和P0.1。因为UART0有最
4、高优先权,所以当UART0EN 位被设置为逻辑1时其引脚将总是被分配到P0.0 和P0.1。,4.1 端口和优先权交叉开关,1) 交叉开关引脚分配 注意: 当选择了串行通信外设(即SMBus、SPI或UART)时,交叉开关将为所有相关功能分配引脚。 例如,不能为UART0功能只分配TX0 引脚而不分配RX0引脚。被使能的外设的每种组合导致唯一的器件引脚分配。,4.1 端口和优先权交叉开关,4.1 端口和优先权交叉开关,2) 配置端口引脚的输出方式 在XBARE(XBR2.6)被设置为逻辑1之前,端口0-3的输出驱动器保持禁止状态。每个端口引脚的输出方式都可被配置为漏极开路或推挽方式,缺省状态为
5、漏极开路。,4.1 端口和优先权交叉开关,2) 配置端口引脚的输出方式 在推挽方式,向端口数据寄存器中的相应位写逻辑0将使端口引脚被驱动到GND,写逻辑1将使端口引脚被驱动到VDD。在漏极开路方式,向端口数据寄存器中的相应位写逻辑0将使端口引脚被驱动到GND,写逻辑1将使端口引脚处于高阻状态。,4.1 端口和优先权交叉开关,2) 配置端口引脚的输出方式 当系统中不同器件的端口引脚有共享连接,即多个输出连接到同一个物理线时(例如SMBus连接中的SDA信号),使用漏极开路方式可以防止不同器件之间的争用。 端口0-3引脚的输出方式由PnMDOUT 寄存器中的对应位决定。,4.1 端口和优先权交叉开
6、关,2) 配置端口引脚的输出方式 例如,P3MDOUT.7 为逻辑1时将P3.7 配置为推挽方式;P3MDOUT.7为逻辑0时将P3.7 配置为漏极开路方式。所有端口引脚的缺省方式均为漏极开路。不管交叉开关是否将端口引脚分配给某个数字外设,端口引脚的输出方式都受PnMDOUT寄存器控制。,4.1 端口和优先权交叉开关,2) 配置端口引脚的输出方式 例外情况: 连接到SDA、SCL、RX0(如果UART0 工作于方式0)、RX1(如果UART1工作于方式0)的端口引脚总是被配置为漏极开路输出,而与PnMDOUT寄存器中的对应位的设置值无关。,4.1 端口和优先权交叉开关,3) 配置端口引脚为数字
7、输入 通过设置输出方式为“漏极开路”并向端口数据寄存器中的相应位写1将端口引脚配置为数字输入。 例如,设置P3MDOUT.7 为逻辑0并设置P3.7 为逻辑1即可将P3.7 配置为数字输入。,4.1 端口和优先权交叉开关,4) 外部中断(IE6 和IE7) 除了外部中断/INT0和/INT1之外,P3.6和P3.7可被配置为边沿触发的中断源,用IE6CF(P3IF.2)和IE7CF(P3IF.3)位可以将这两个中断源配置为下降沿或上升沿触发。 当检测到P3.6或P3.7下降沿或上升沿发生时,P3IF寄存器中对应的外部中断标志将被置1。如果对应的中断允许,将产生一个中断。,4.1 端口和优先权交
8、叉开关,5) 弱上拉 每个端口引脚都有一个内部弱上拉部件,在引脚与VDD 之间提供阻性连接(约100 k),在缺省情况下该上拉器件被使能。弱上拉部件可以被总体禁止,通过向弱上拉禁止位(WEAKPUD,XBR2.7)写1实现。当任何引脚被驱动为逻辑0时,弱上拉自动取消;即输出引脚不能与其自身的上拉部件冲突。对于端口1 的引脚,将引脚配置为模拟输入时上拉部件也被禁止。,4.1 端口和优先权交叉开关,6) 配置端口1的引脚为模拟输入 (AIN.7:0) 端口1的引脚可以用作ADC1模拟多路开关的模拟输入。通过向P1MDIN寄存器中的对应位写0即可将端口引脚配置为模拟输入。缺省情况下端口引脚为数字输入
9、方式。,4.1 端口和优先权交叉开关,6) 配置端口1 的引脚为模拟输入 (AIN.7:0) 配置为模拟输入的过程如下: 1禁止引脚的数字输入路径。 2禁止引脚的弱上拉部件。 3使交叉开关在为数字外设分配引脚时跳过该引脚。,4.1 端口和优先权交叉开关,6) 配置端口1 的引脚为模拟输入 (AIN.7:0) 注意: 被配置为模拟输入的引脚的输出驱动器并没有被明确地禁止。因此被配置为模拟输入的引脚所对应的P1MDOUT 位应被设置为逻辑0(漏极开路方式),对应的端口数据位应被设置为逻辑1(高阻态)。,4.1 端口和优先权交叉开关,7) 外部存储器接口引脚分配 如果外部存储器接口被设置在低端口,X
10、BR2.1=1,使交叉开关不将P0.7 (/WR)、P0.6 (/RD)和P0.5 (/ALE)(复用方式)分配给外设。如果外部存储器接口被设置在低端口并且发生一次片外MOVX 操作,则在该MOVX 指令执行期间外部存储器接口将控制有关端口引脚的输出状态,而不管交叉开关寄存器和端口数据寄存器的设置如何。,4.1 端口和优先权交叉开关,4.1 端口和优先权交叉开关,8) 交叉开关引脚分配示例 例: 配置交叉开关,为UART0、SMBus、UART1、/INT0 和/INT1分配端口引脚(共8个引脚)。另外,将外部存储器接口配置为复用方式并使用低端口。并将P1.2、P1.3和P1.4配置为模拟输入
11、,以便用ADC1测量加在这些引脚上的电压。,4.1 端口和优先权交叉开关,8) 交叉开关引脚分配示例 配置步骤如下: 1按UART0EN = 1、UART1E = 1、SMB0EN = 1、INT0E = 1、INT1E = 1 和EMIFLE =1设置XBR0、XBR1 和XBR2,则有:XBR0 = 0x05,XBR1 = 0x14,XBR2 = 0x06。,4.1 端口和优先权交叉开关,8) 交叉开关引脚分配示例 2将外部存储器接口配置为复用方式并使用低端口,PRTSEL = 0,EMD2 = 0 (外部存储器接口配置EMI0CF ) P131 3将作为模拟输入的端口1 引脚配置为模拟输
12、入方式:设置P1MDIN 为0xE3(P1.4、P1.3 和P1.2 为模拟输入,所以它们的对应P1MDIN 被设置为逻辑0)。,4.1 端口和优先权交叉开关,8) 交叉开关引脚分配示例 4设置XBARE = 1 以使能交叉开关:XBR2= 0x46。 5将UART0 的TX 引脚(TX0,P0.0)、UART1 的TX 引脚(TX1,P0.4)、ALE、/RD、/WR(P0.7:3)的输出设置为推挽方式,通过设置P0MDOUT = 0xF1 来实现。,4.1 端口和优先权交叉开关,8) 交叉开关引脚分配示例 6通过设置P2MDOUT=0xFF 和P3MDOUT= 0xFF 将EMIF 端口(
13、P2、P3)的输出方式配置为推挽方式。 7通过设置P1MDOUT=0x00(配置输出为漏极开路)和 P1=0xFF (逻辑1选择高阻态)禁止3个模拟输入引脚的输出驱动器。,4.1 端口和优先权交叉开关,4.1 端口和优先权交叉开关,4.2 端口4-7(仅C8051F020/2) 端口4-7 的所有端口引脚都可用作通用I/O,通过读和写相应的端口数据寄存器访问每个端口,这些端口数据寄存器是一组按字节寻址的特殊功能寄存器。读端口数据寄存器时,返回的是端口引脚本身的逻辑状态。,4.2 端口4-7,配置无引出脚的端口 P4-P7在C8051F021/3 中没有对应的引脚,但端口数据寄存器仍然存在并可为
14、软件所用。由于数字输入通路保持活动状态,所以建议不要将这些引脚处于“浮空”状态,以避免因输入浮空为一个无效逻辑电平而导致不必要的功率消耗。,4.2 端口4-7,1) 配置无引出脚的端口 下面任何一种措施可防止这种情况出现: 1 设置为弱上拉。 2 配置为推挽方式。 3 向端口数据寄存器写0,4.2 端口4-7,2) 配置端口引脚的输出方式 每个端口的输出方式都可被配置为漏极开路或推挽方式。在推挽方式,向端口的相应位写逻辑0将使端口引脚被驱动到GND,写逻辑1将使端口引脚被驱动到VDD。在漏极开路方式,向端口的相应位写逻辑0将使端口引脚被驱动到GND,写逻辑1将使端口引脚处于高阻状态。,4.2
15、端口4-7,3) 配置端口引脚为数字输入 通过设置输出方式为“漏极开路”并向端口数据寄存器中的相应位写1将端口引脚配置为数字输入。 例如,设置P4OUT.7 为逻辑0并设置P7.7 为逻辑1即可将P7.7 配置为数字输入。,4.2 端口4-7,4) 弱上拉 每个端口引脚都有一个内部弱上拉部件,在缺省情况下该上拉器件被使能,在引脚与VDD之间提供阻性连接(约100 k)。弱上拉部件可以被总体禁止,当任何引脚被驱动为逻辑0时,弱上拉自动取消;即输出引脚不能与其自身的上拉部件冲突。,4.2 端口4-7,5) 外部存储器接口 如果外部存储器接口被设置在高端口并且发生一次片外MOVX操作,则在该MOVX指令执行期间外部存储器接口将控制有关端口引脚的输出状态,而不管端口数据寄存器的设置如何。端口引脚的输出配置不受EMIF 操作的影响,但读操作将禁止数据总线上的输出驱动器。,4.2 端口4-7,端口的配置较复杂,寄存器较多,对设置带来一些麻烦,芯片制造商提供了端口配置软件,利用软件可以方便进行端口配置。 国内新华龙网站即可下载: HTTP:/WWW.XHL.COM/,4.2 端口4-7,1.2 C8051F系列单片机分类,谢谢!,