找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11224|回复: 16
收起左侧

51单片机管脚作为输入端要如何设置,求教大神!

[复制链接]
ID:257778 发表于 2018-8-1 15:58 | 显示全部楼层 |阅读模式
51单片机管脚作为输入端,是怎么设置的呢?我在网上看到很多说要先把管脚置1,因为单片机刚接触的,所以不懂置1是什么意思,是在里面用程序置1呢,还是用电源接管脚置1呢!?请教各路大神解惑!
回复

使用道具 举报

ID:310519 发表于 2018-8-2 00:14 | 显示全部楼层
IO一般上电都是高电平,只要你程序里没有拉低过,做输入直接读就行了。

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:257778 发表于 2018-8-2 08:15 | 显示全部楼层
diy1997 发表于 2018-8-2 00:14
IO一般上电都是高电平,只要你程序里没有拉低过,做输入直接读就行了。

我用的是STC12C5A60S2的芯片,用if程序读管脚的时候不怎么稳定的,有时候没有硬件拉低也会读到低电平,这是为什么呢,是不是没设置呢,我在网上看说做输入的话要先写1,再读取,所有想请教一下前辈您!
回复

使用道具 举报

ID:381985 发表于 2018-8-2 09:13 | 显示全部楼层
置1就是把对应管脚的电平拉高,置0则相反,电平拉低
你用万用表测可以显示置1的管脚电压一般为3.7V以上,置0的管脚则没电压

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:381985 发表于 2018-8-3 14:26 | 显示全部楼层
‘无良’ 发表于 2018-8-2 08:15
我用的是STC12C5A60S2的芯片,用if程序读管脚的时候不怎么稳定的,有时候没有硬件拉低也会读到低电平,这 ...

你这可能是没做初始化操作,可以先把有用到的管脚电平都初始化拉高

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:382550 发表于 2018-8-3 16:11 | 显示全部楼层
置1就是把对应管脚的电平拉高,置0则相反就是电平拉低。

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-8-3 21:06 | 显示全部楼层
本帖最后由 zl2168 于 2018-8-3 22:08 编辑

51单片机I/O口用作输入时,均须先写入“1”,这是由51单片机内部I/O口硬件电路决定的,51单片机复位时I/O口全置“1”,已作好了输入的准备,但若此后运行中因程序指令改变了I/O口的输入态,再次读输入数据时将出错。

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:382710 发表于 2018-8-3 21:35 | 显示全部楼层
做输入时,先接上拉,然后程序里面定义为1,读取时直接读是否为0

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:257778 发表于 2018-8-4 16:02 | 显示全部楼层
skdbdk 发表于 2018-8-3 21:35
做输入时,先接上拉,然后程序里面定义为1,读取时直接读是否为0

谢谢!!!
回复

使用道具 举报

ID:257778 发表于 2018-8-4 16:06 | 显示全部楼层
zl2168 发表于 2018-8-3 21:06
51单片机I/O口用作输入时,均须先写入“1”,这是由51单片机内部I/O口硬件电路决定的,51单片机复位时I/O口 ...

程序指令改变了I/O口的输入态,那初始化I/O口算不算呢?比如初始化P0=0xff?如果是这样那会不会影响到单片机读取I/O口指令呢?
回复

使用道具 举报

ID:257778 发表于 2018-8-4 16:33 | 显示全部楼层
shuqing2008 发表于 2018-8-3 14:26
你这可能是没做初始化操作,可以先把有用到的管脚电平都初始化拉高

前辈,还想跟你请教一下,stc12c5a60s2的C语言程序和89C51的有什么不一样吗,比如头文件这些的?
回复

使用道具 举报

ID:382969 发表于 2018-8-4 21:11 | 显示全部楼层
在程序的开始部分设置管脚(初始化管脚)。例如 DDRB =0xFB;     //PB0.1.3.4.5.6.7输出,PB2输入。因为管脚具有输入和输出功能,只能在程序里设定管脚具体使用哪种功能

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-8-5 07:03 | 显示全部楼层
‘无良’ 发表于 2018-8-4 16:06
程序指令改变了I/O口的输入态,那初始化I/O口算不算呢?比如初始化P0=0xff?如果是这样那会不会影响到单 ...

51单片机复位时I/O口全置“1”,是由51单片机内部I/O口硬件电路决定的,你的所谓初始化I/O口,当然算喽。不过,P0=0xff,仍然是置“1”,该指令是多余的。再不过,老编程人员仍然在输入前来一句置“1”,这是保险或习惯,因为在大型应用系统中也许以前曾经改变过。

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:155507 发表于 2018-8-5 08:07 | 显示全部楼层
‘无良’ 发表于 2018-8-4 16:33
前辈,还想跟你请教一下,stc12c5a60s2的C语言程序和89C51的有什么不一样吗,比如头文件这些的?

两个单片机所属公司不一样,
首先51比12更简单,12的头文件里就包含了51头文件。
在同样晶振的情况下,stc12c5a60s2速度是普通51的8~12倍
对于AT89c51,1个机器周期=12个震荡周期,对于STC12C5A60S2,1个机器周期=1个震荡周期
回复

使用道具 举报

ID:257778 发表于 2018-8-7 08:44 | 显示全部楼层
angmall 发表于 2018-8-5 08:07
两个单片机所属公司不一样,
首先51比12更简单,12的头文件里就包含了51头文件。
在同样晶振的情况下, ...

那个芯片的稳定性更好呢!51的程序直接烧录到12芯片里还需要修改什么东西吗?
回复

使用道具 举报

ID:257778 发表于 2018-8-7 08:52 | 显示全部楼层
skdbdk 发表于 2018-8-3 21:35
做输入时,先接上拉,然后程序里面定义为1,读取时直接读是否为0

我用的是P0管脚做输入口,接了10K的上拉电阻,用if语句检测管脚的输入状态,但是有时候即使P0管脚用万能表检测电压5V左右它仍然执行if 里面的程序,很不稳定!这是为什么呢?
回复

使用道具 举报

ID:383743 发表于 2018-8-7 11:45 | 显示全部楼层
具体是什么芯片,首先查看芯片手册和手册提供的范例,这样上手快点。

评分

参与人数 1黑币 +5 收起 理由
‘无良’ + 5 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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