找回密码
 注册
关于网站域名变更的通知
查看: 2820|回复: 7
打印 上一主题 下一主题

P2.0/P2.1与P3.0/P3.1有什么区别,为什么P2做输入就正常?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-2 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
P2.0/P2.1与P3.0/P3.1有什么区别,为什么P2做输入就正常?
# ~  s+ ]; t' @: l7 S3 m+ Y# S7 A* a( q9 |+ w; ^0 P
& j' `! d. c+ F- Y* j4 l/ ~: _1 c
各位大神,我有个疑惑想请教下:
, q  I* d+ D5 Y" B/ [" c- x/ D  `7 r# I
我需要使用两个端口作为输入,根据电平高低对变量OC赋值,先前使用
0 y  h* K6 d8 M4 q% C, c  x& C( H0 G( ?
P3端口,一直无法正常输入,换成P2就完全正常了(事先都置1了)。: f7 k+ A& m  `! G8 W* Q$ z
难道P3.0/P3.1具有第二功能Tx/Rx,就不能作为普通的输入口,可是很( t7 L. _  T  Y

6 x  b# P8 ?" S2 p多教材上不是都写了任何Port口都能做I/O吗?
, _$ R# i; l! N0 Q3 @: q7 z
8 _7 v( p2 s' e; }! R" `. @期待大神解答。
7 \" t' V  x  h0 K5 K9 T& k# h; K8 z( D9 u; h
以下是能够正常工作的代码(使用P2口):* B' `$ L( r. K" r
uchar ocscan(void)
" l* d9 L. P( w0 X; c! t. @{
  F# T, g( F; u3 ^: `- L2 r' x        uchar oc;
& Y. U; [" b1 ], P        switch(P2)1 E) W) T) c2 A1 N
        {: k8 w! c7 k* e3 j
        case(0xff): oc=1;break;# P' {* D4 v' \3 s! t& a
        case(0xfe): oc=2;break;% o( ?+ i) n2 D; t, v: ?3 G
        case(0xfd): oc=3;break;
/ v0 P$ ~/ @. |  l  p, @        default:break;
- E1 S5 F- k$ p& ?( E        }
/ X$ V' Y7 ?, S# }. o        return(oc);# l9 l$ ?* P+ ]2 ^
}2 _- f3 J4 y$ e5 G5 C: ^7 ]1 V4 o

8 q& p: D0 K8 G/ o# y以下是不能工作的代码(使用P3口):
$ ^, }7 l9 X, [% y2 |uchar ocscan(void)! B& Q1 N& O) s( |3 p* b# T, X
{
* @. i; Y4 V0 i+ u' x/ ]( ^' j2 a  c* a        uchar oc;
3 J* P1 B! Y$ K, v# e" w8 r8 Y+ b0 K        switch(P3)- n4 ]% c5 u9 N1 \
        {- G/ ^; H( C# [' v" i/ q& ~" C
        case(0xff): oc=1;break;
  a" A9 R/ u- X1 C4 o( O        case(0xfe): oc=2;break;
: y; Q% e# ]8 i        case(0xfd): oc=3;break;6 u+ G* p! R2 V6 S% N
        default:break;; \9 C, L: ~: w9 |! r
        }+ }% ]% G. h% k4 x+ N6 D4 r
        return(oc);1 q9 `% G+ K) E& L+ s
}

' I6 ]  P% j/ B" p

该用户从未签到

2#
发表于 2019-4-2 13:48 | 只看该作者
如果你用的是51单片机的话 建议不要这样写哦   P3口好多复用功能  想用P3.0 P3.1的话 建议单独用这两个IO口 而不是P3 这样子

点评

你说的意思,就是说如如果想用P3.0 P3.1,就在代码里面明确写出P3.0=1或P3.1=0这样吗?  详情 回复 发表于 2019-4-2 14:12

该用户从未签到

3#
 楼主| 发表于 2019-4-2 14:12 | 只看该作者
helendcany 发表于 2019-4-2 13:48
8 R0 |, T. e, {如果你用的是51单片机的话 建议不要这样写哦   P3口好多复用功能  想用P3.0 P3.1的话 建议单独用这两个IO口 ...
% e6 e5 f# J/ o. L( @
你说的意思,就是说如如果想用P3.0 P3.1,就在代码里面明确写出P3.0=1或P3.1=0这样吗?
/ I+ O" d9 V4 p( c

该用户从未签到

4#
发表于 2019-4-2 14:27 | 只看该作者
我看贴,也是带着疑惑来的··给p3.2  p3.2 p3.4输入按键信号都正常··
& k4 U! P# f( y7 x" U# ]给p3.5输入就是没反应····

该用户从未签到

5#
发表于 2019-4-2 14:43 | 只看该作者
P0口:真正的双向口,输出锁存,输入缓冲,输入前要先置1(KEIL包含的头文件已经有动作了,如果用汇编,要人工置1),输出为漏极开路,输出一般都要上拉电阻。输入为高阻态,能驱动8个TTL负载。当有片外存储器时,作数据线使用。  P1口:是最简单的口,输入也要先置1,无高阻态,只能是输出或者输入。能驱动4个TTL负载。  P2口:I/O与P1口一样,当有片外存储器时,作地址线使用,寻址64K片外数据存储器。能驱动4个TTL负载。  P3口:I/O与P1口一样,但无论输入输出都要先置1。具有很多复用功能。 口的一般使用方法:做复用时一般不要加上拉和下拉电阻。但单输出驱动负载时都应加1K左右的上拉电阻,单输入时要加10K左右的下拉电阻,且输入为低电平触发。希望对你有帮助
- G0 [' |  a4 }8 k; b. f

该用户从未签到

6#
发表于 2019-4-2 14:57 | 只看该作者
因 P3.0 和 P3.1 是下载程序必须要用到的I/O口,所以不是必须需要的话最好不要用!实在要用请单独赋值即可。

该用户从未签到

7#
 楼主| 发表于 2019-4-2 15:06 | 只看该作者
谢谢大家!总结下:% {" f# r! X" S, `2 X2 b

: L0 Z0 h5 _" ], x& Y( a除非是使用第二功能或做复用,P3一般不建议使用,如果必须用作普通I/O口:
9 ^$ B3 ^  l2 I1 M: \; R3 S, C0 V' Y9 ]& B' X/ l" b
1、要确定第二功能关了;  d. Q& {1 Y6 {# @6 x
2、做输入端口置1;, q. a; v) f8 U4 l# L( k2 [! _- C
3、单独赋值;
7 f' _! A  S' h! I7 H3 G; O- E3 _4、做输出加1K左右上拉,做输入加10K左右下拉(低电平触发);
: t- J6 w" \4 t0 x" x* T$ z# @  g3 d4 [
感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-25 04:48 , Processed in 0.078125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表