51单片机 - 准双向I/O口结构

0


1> P1口

1

  • 没画【P1.0/T2】【P1.1/T2EX】第2功能;

1.1> 写 “0” 过程

D触发器FF1,输入0;
则,Q# = 1, NMOS管Q1导通,引脚【P1.n】接地输出0;LED1灭;

1.2> 写 “1” 过程

D触发器FF1,输入1;
则,Q# = 0, NMOS管Q1截止,引脚【P1.n】通过R1接到VCC,输出1,LED1亮;

1.3> 读引脚

测试电路,S1连接2-3引脚;
开关S2断开,引脚【P1.n】为高电平,读使能三态门G2,读到高电平”1“;
开关S2闭合,引脚【P1.n】为低电平,读使能三态门G2,读到低电平”0“;

/* C程序 */
unsigned char data = P1^0;

”准“双向问题:

如果对引脚先进行写‘0’操作,则NMOS管Q1导通,引脚【P1.n】接地;
这时无论开关S2断开,还是闭合,读引脚都是”0“;

所以读引脚前需,先写‘1’,使NMOS断开,这就是准双向的意思,要有”准“备;
😀这设计还挺麻烦;


1.4> 读 寄存器

读寄存器,读的就是D触发器Q端值,Q = D;

P1^0 = ~P1^0; // 这个是读寄存器;

2> P3口

2

增加了第2功能的输入与输出;


3> P0口

3


3.1> 作普通I/O口

功能选择为“0”, 则MUX1选择【Q#】输出端,
与门G4输出“0”,Q1截止
使NMOS管Q2漏极开漏输出;

  • 为什么需要上拉电阻?

写“0”, Q2导通,接地,输出0,是正确的;
写“1”, Q2截止,Q1截止,这时P0端口是高阻状态,不是“1”, 因此必须上拉;


3.2> 作低8位地址/数据线, 用于扩展外部存储器

功能选择为“1”, 则2选1多路开关MUX1选择非门【G3】输出端,
这样,
地址/数据线写“0”时,与门G4输出0,Q1截止;非门G3输出1,Q2导通;P0端口输出“0”;
地址/数据线写“1”时,Q1导通,Q2截止,P0端口输出“1”;

  • Q1与Q2构成推挽输出,不需要接上拉电阻;

3.3> 读外部存储器数据过程

CPU执行读数据指令时,
第一步:首先低8位地址信息写在【地址/数据】总线上;
第二步:CPU使开关MUX1连接到【Q#】端, 并向P0口写入FF;
第三步:“读引脚”使能,数据读到总线;


4> P2 口

P2

功能1:通用I/O口;
功能2:高8位地址总线;

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值