搜索
bottom↓
回复: 15

请教玩51的朋友们:C语言如何区分读锁存器和读引脚?

[复制链接]

出0入0汤圆

发表于 2013-1-7 07:58:26 | 显示全部楼层 |阅读模式
请教玩51的朋友们:C语言如何区分读锁存器和读引脚?

一直困惑这个问题。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-7 08:00:02 | 显示全部楼层
你看看编译后的汇编语言!

出0入0汤圆

发表于 2013-1-7 08:01:53 | 显示全部楼层
虽然知道这个问题的存在,但我一直没在意。同问。

出0入0汤圆

 楼主| 发表于 2013-1-7 08:04:22 | 显示全部楼层
呵呵,欢迎大家一起讨论,一起解决这个问题!

出0入4汤圆

发表于 2013-1-7 08:06:09 | 显示全部楼层
51的P0口是数据、地址复用的,所所当用外设的时候,读引脚先置低,此时地址信号经P0、P2口给出,这时ALE就会来一个脉冲,这样地址就被设保存起来,最后把数据经P0口送出,不知说的是否是你想要的?

出0入0汤圆

 楼主| 发表于 2013-1-7 08:13:54 | 显示全部楼层
ibichao 发表于 2013-1-7 08:06
51的P0口是数据、地址复用的,所所当用外设的时候,读引脚先置低,此时地址信号经P0、P2口给出,这时ALE就 ...

呵呵,不是。
我是说:51汇编语言中区分读锁存器和读引脚,很明确,但是C51中是怎么区分的?

出0入4汤圆

发表于 2013-1-7 08:26:13 | 显示全部楼层
prince2010 发表于 2013-1-7 08:13
呵呵,不是。
我是说:51汇编语言中区分读锁存器和读引脚,很明确,但是C51中是怎么区分的? ...

你是不是想用C控制RD与ALE?就像MOV MOVX 那样?

出0入264汤圆

发表于 2013-1-7 10:43:18 来自手机 | 显示全部楼层
51汇编中,如果某个pin脚复用,则就存在读锁存与读引脚区别。用逻辑指令保存锁存器的值,如 anl c p1.0 则c中保存的就是锁存器的值。如果要读引脚,则写锁存为1后截止下拉mos,此时再读pin脚就是外部引脚实际电平

出0入264汤圆

发表于 2013-1-7 10:52:11 来自手机 | 显示全部楼层
如果用c51读锁存的话,可以用&指令读取到c中。

出0入4汤圆

发表于 2013-1-7 14:53:31 | 显示全部楼层
靠地址区分。翻译成不同的寻址方式

出0入0汤圆

 楼主| 发表于 2013-1-7 17:51:55 | 显示全部楼层
ibichao 发表于 2013-1-7 08:26
你是不是想用C控制RD与ALE?就像MOV MOVX 那样?

不是。我说的是读P0、P1、P2等的锁存器及引脚。

出0入0汤圆

 楼主| 发表于 2013-1-7 17:53:10 | 显示全部楼层
acmilannast 发表于 2013-1-7 14:53
靠地址区分。翻译成不同的寻址方式

可否详细说一下?

出0入0汤圆

 楼主| 发表于 2013-1-7 17:54:10 | 显示全部楼层
mcu_lover 发表于 2013-1-7 10:52
如果用c51读锁存的话,可以用&指令读取到c中。

谢谢,能不能举个例子说明?

出0入264汤圆

发表于 2013-1-7 18:20:33 | 显示全部楼层
prince2010 发表于 2013-1-7 17:54
谢谢,能不能举个例子说明?

sbit testport = P1^0;


CY &= testport;

CY里面存放的就是P1^0端口的锁存器值。

出0入0汤圆

 楼主| 发表于 2013-1-7 18:51:47 | 显示全部楼层
mcu_lover 发表于 2013-1-7 18:20
sbit testport = P1^0;

呵呵,谢谢您,我试了一下,好像还是读引脚。

另外,如果单片机让某IO口输出1,但外部电路将引脚拉低,那么对应的SFR状态是保持1,还是变为0?锁存器状态又会如何?

出0入264汤圆

发表于 2013-1-7 19:03:10 | 显示全部楼层
有些概念要清楚。就是51单片机的端口结构。
51单片机上电复位之后,端口锁存器值为1,这个时候是可以直接读取外部引脚状态的。

如果某个既存在输入又存在输出,即端口复用的情况。如很多人在扫描数码管时候,还用来读取按键值。在这种情况下就有必要分清楚读引脚还是锁存器。
在复用的情况下,如果要知道上次输出的值(即端口锁存器的值),需要用逻辑指令去读取端口状态。如果要知道当前IO口的值,则先将端口锁存器的值保存起来。然后将端口锁存器置1,再读引脚,此时读到的就是外部真实值。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 07:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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