3.8 I/O口实验 -- I/O口读取按键状态并点灯
3.8.1 实验要求 可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态。
3.8.2 实验建议
STC32G12K128系列单片机所有的I/O口均有4种工作模式: ü 准双向口/弱上拉(标准8051输出口模式) ü 强推挽输出/强上拉 ü 高阻输入(电流既不能流入也不能流出) ü 开漏模式(如果打开内部上拉电阻,就相当于准双向口;如果不加上拉并对外置1,就相当于高阻输入)
1)高阻输入模式,内部配有6K上拉电阻; 为了读取外部状态,需要打开内部的6K上拉电阻。
2)开漏模式,内部同样配有6K上拉电阻; 打开内部6K上拉电阻后,其功能与准双向口/弱上拉模式相似。
3)读取I/O口的外部状态时,可以采用以下三种模式: 准双向口/弱上拉模式: ===要确保对外输出锁存为1,关闭对内部对外强输出低的MOS管, 才能准确读到外部状态 ===如对外输出锁存为0,则外部被内部对外强输出低的MOS管拉低, 读到的是低电平,不能准确读到外部来的高输入/被内部拉低了
高阻输入模式,每个 I/O 口都有独立的 6K 上拉电阻: ===为了准确读取外部状态,需要打开内部的 6K 上拉电阻,或外部有上拉能力 ===内部的对外输出锁存器对此模式无效,对外无输出高/低的能力 ===电流流不进来,也留不出去, 高阻输入,无输出能力,不影响外部来的的输入状态
开漏模式,每个 I/O 口都有独立的 6K 上拉电阻: 启用内部 6K 上拉电阻后,其功能与准双向口/弱上拉模式相似 ===要确保对外输出锁存为1,关闭对内部对外强输出低的MOS管,才能准确读到外部状态 ===如对外输出锁存为0,则外部被内部对外强输出低的MOS管拉低, 读到的是低电平,不能准确读到外部来的高输入/被内部拉低了
4)I/O口对外输出高或低电平时,可以采用以下三种模式: Ø 准双向口/弱上拉模式; 对外输出低时,相当于强推挽输出低 Ø 强推挽输出模式; Ø 开漏模式; 在对外输出低电平时,表现为强推挽输出的低电平状态。 在对外输出高电平时,表现为高阻输入状态,此时电流流不进来也流不出去。 如果用来控制LED灯,因为无电流流动,所以LED灯不亮。
5)P3.2/P3.3/P3.4/P3.5端口均有按键,按下按键可接地,建议: 读取这些I/O口的状态,并将结果输出到P6.2/P6.3/P6.4/P6.5对应的指示灯上。
3.8.3 原理图
3.8.3.1 STC32G12K128实验箱原理图
3.8.3.2 认识实验箱
STC32G12K128实验箱正面图:
3.8.4 I/O口工作模式和内部上拉/下拉电阻介绍
3.8.4.1 内部上拉电阻和外部上拉/下拉电阻的部分区别
外部上拉电阻随系统电源从0V上升到MCU-VCC,到3.3V或5V,这个时间是足够的长, 系统上电复位后到初始化运行用户程序时,外部上拉电阻已将外部拉高到高电平。 内部上拉电阻是运行用户程序时才使能打开的,由于外部电路的分布电容效应, 要等待0.7RC时间(R:电阻,C:电容)才能将外部拉高到0.7MCU-VCC高电平。 建议将需要打开的内部上拉电阻使能后,直接多等待一会,如等待1ms后,就可认为外部已被拉高。
3.8.4.2 准双向口介绍
准双向口(弱上拉)输出类型可用作输出和输入功能而不需重新配置端口输出状态。 这是因为当端口输出为1时驱动能力很弱,允许外部装置将其拉低。 当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。 准双向口输出低电平的驱动能力和强推挽的驱动能力是一样的。 此处的上拉电阻和下拉电阻是独立的,和I/O口4种功能模式无关。
3.8.4.3 强推挽输出
强推挽输出配置的下拉结构与开漏模式以及准双向口的下拉结构相同。 当对外输出锁存器设置为0时,强推挽的输出配置为强下拉结构,与开漏模式及准双向口的下拉是同一个MOS管,驱动能力是一样的。 当对外输出锁存器设置为1时,对外输出强上拉。强推挽模式一般用于需要大驱动电流的情况。
3.8.4.4 高阻输入
电流既不能流入也不能流出 输入口带有一个施密特触发输入以及一个抗干扰抑制电路
3.8.4.5 开漏模式
开漏工作模式,对外设置输出为1,等同于高阻输入 开漏工作模式,打开内部上拉电阻 | 或外部加上拉电阻,简单等同于 准双向口
开漏模式如果打开内部上拉电阻或外接上拉电阻,可准确的读到外部状态。 开漏模式对外可直接输出0,但如果要输出1,需打开内部上拉电阻或外接上拉电阻。
3.8.5 实验1:位操作,用USB直接仿真来调试
单独读【P3.2/ P3.3 / P3.4 / P3.5】4个独立I/O的状态,输出到【P6.2 / P6.3 / P6.4 / P6.5】对应的指示灯
3.8.5.1 I/O口设置
将不同的I/O口设置为不同的模式,尝试不同情况下依然可以正常输入/输出。打开AiCube-ISP软件: Ü 配置输出端口的P63、P64为推挽输出,P65为开漏输出(可以输出0点亮LED)
Ü 输入配置 Ø P30、P31为高阻输入(因为跟USB复用,设置为高阻输入,不干扰USB的通讯控制) Ø 设置P32为准双向口、P33为高阻输入、P34和P35为开漏模式(设置为1等效高阻输入) Ø 开启P33、P34、P35的内部上拉电阻以稳定电平状态(不开启内部上拉电阻读外部状态,高阻输入/开漏模式,外部都需要有上拉电阻配合)
|