找回密码
 注册
关于网站域名变更的通知
查看: 2819|回复: 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做输入就正常?
0 _, w& R4 U3 `2 q2 Q6 ]; m
5 H1 j% H( M- T' _; {+ s( ~9 }

" Q& E- P% E: I9 e! Y% M各位大神,我有个疑惑想请教下:
' j+ P% r& N# E8 ^/ ]0 M) u  [
! P0 f) P1 S* w3 P我需要使用两个端口作为输入,根据电平高低对变量OC赋值,先前使用7 W8 a8 d" S5 V( w& }1 Q3 t( A# J  C
# q7 ]3 N: E! y, S% g
P3端口,一直无法正常输入,换成P2就完全正常了(事先都置1了)。6 T+ J4 h2 o8 p3 n, g
难道P3.0/P3.1具有第二功能Tx/Rx,就不能作为普通的输入口,可是很
: [& Q7 t( M( v2 \; o' z3 I0 K. O+ q# W% j- q8 u
多教材上不是都写了任何Port口都能做I/O吗?
2 V+ R3 g; ]9 {5 u/ V0 I+ v0 f+ O% B
; z$ l& k" @6 x  u  u, k8 h. F期待大神解答。* z; d9 j) h' V$ P3 c, v
- j1 u9 {: R; o5 n
以下是能够正常工作的代码(使用P2口):/ J! j3 I( k$ l" o0 M9 z; n# X/ ^
uchar ocscan(void)
' Q: M: }& d( u$ |{4 _7 ?: q6 p0 J& f) G
        uchar oc;7 m& ?, k" |; J
        switch(P2): Y3 Z" X' Z6 h8 ?
        {% u5 e0 S9 i5 y- ~
        case(0xff): oc=1;break;; m+ u& Q0 b9 }
        case(0xfe): oc=2;break;4 f1 e/ C$ u4 D4 ]+ X2 _
        case(0xfd): oc=3;break;1 F6 |. Y2 w) y2 ]0 B: z& b
        default:break;& F5 G: v& a1 ^' i
        }
2 @! G: o7 |! f2 q: k0 E        return(oc);9 r3 R* }1 }7 D  b9 _, y
}
5 y- b, h' `" d% s( G
# y& w; g2 g* U! \5 A以下是不能工作的代码(使用P3口):" ^' d5 e1 t) R9 y
uchar ocscan(void)' _* C% Q; T+ J7 O
{6 \3 g3 W5 ]4 [* S9 z
        uchar oc;. E% [* b, V) y/ o: v8 E6 n
        switch(P3)7 ?  C& I" n% q( s8 E" n
        {
4 O8 z; {; ~2 Q        case(0xff): oc=1;break;
: p; h! [% `! L- g$ l' B- A        case(0xfe): oc=2;break;9 S1 \/ ?# Q+ d: _9 N
        case(0xfd): oc=3;break;" g' y4 ^+ S+ ]$ ~% w9 s0 U  Y5 g
        default:break;
+ X! L$ ~  R8 ~9 \0 ^! u) H        }! s2 \) y# Z9 d  J8 V( Z$ j3 n. ?
        return(oc);
% b( M( e4 I( x0 O* K, K# J}
7 q( Z+ L! _$ A- P8 m# [. o

该用户从未签到

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
. X  s8 o- {, Z# m0 w" t- V如果你用的是51单片机的话 建议不要这样写哦   P3口好多复用功能  想用P3.0 P3.1的话 建议单独用这两个IO口 ...
! }% P6 O, d; P8 R7 h; q/ J1 Q' c
你说的意思,就是说如如果想用P3.0 P3.1,就在代码里面明确写出P3.0=1或P3.1=0这样吗?: d6 Y3 k: }2 N. w$ C

该用户从未签到

4#
发表于 2019-4-2 14:27 | 只看该作者
我看贴,也是带着疑惑来的··给p3.2  p3.2 p3.4输入按键信号都正常··3 d, ^9 k7 J, O" l0 i
给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左右的下拉电阻,且输入为低电平触发。希望对你有帮助
4 y) r) N' s, S1 I$ o; ]

该用户从未签到

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

该用户从未签到

7#
 楼主| 发表于 2019-4-2 15:06 | 只看该作者
谢谢大家!总结下:
- q9 Y2 J+ H3 f1 _1 g, V' p( \. ?. z* {7 G# \- h! n
除非是使用第二功能或做复用,P3一般不建议使用,如果必须用作普通I/O口:
8 ?& B7 Y" X: t. [5 X
$ Y6 Y+ _' @" ^: v9 G9 h1、要确定第二功能关了;
4 ]& ?! |' ^  |) ~; n! j- [2、做输入端口置1;. S2 Q% x8 N6 K  Z$ k
3、单独赋值;
3 Q; d* d8 n( y, s9 A6 s7 ]4、做输出加1K左右上拉,做输入加10K左右下拉(低电平触发);" i8 }& ]" G6 r5 ~' q% f- d

/ T* [: r+ {' w  g" c1 }: M感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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