C51中8位数据能组成一个字节吗,送小姨子咯

2020-02-04 09:26发布

还是用实例说明一下,
8段数码管,数据口分别是a,b,c,d,e,f,g,h  为了布线方便,并没有接在同一个IO口上
实际是这样对应的
a---p1.0
b---p1.1
c---p1.2
d---p1.7
e---p3.4
f---p3.5
g---p3.6
h---p3.7

请问送数据的时候该怎么送呢?
不能像以前接同一个IO口那样,直接 led_data = 0x80; 了

请赐教~

送上小姨子


@_@~~ (原文件名:9000_1248748811W5D5.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
64条回答
yy888
1楼-- · 2020-02-06 18:12
【16楼】 hyz_avr 红尘

我..怎么没看出老许的错在哪里...  

------------------------------------------------------------

p1.0 , p1.1 ...... 等端口命名应用大写,楼主用小写,我也用小写,本想让他自已修正的。
yy888
2楼-- · 2020-02-06 23:41
【18楼】 cowboy

这种写法程序是很精练,但有可能引起程序运行不稳定,易出错,设想一下,假如有其他端口设置为输入,且处于输入低电平状态,运行你的程序,端口先读入修改后再输出回写,则可能产生很严重的后果,详见下面反汇编:


(原文件名:1.jpg)
cowboy
3楼-- · 2020-02-07 03:54
 精彩回答 2  元偷偷看……
hyz_avr
4楼-- · 2020-02-07 09:03
【19楼】 xuyiyi 许意义

p1.0 , p1.1 ...... 等端口命名应用大写,楼主用小写,我也用小写,本想让他自已修正的。



看来我已经忘得差不多啊..哈哈.
yy888
5楼-- · 2020-02-07 11:53
【21楼】 cowboy

你指出的错误是运行不稳定,短暂出错,我上面还向你强调的一点是永久出错,搞得不好就死机,设想一下,51定义某个输入脚(置输出端口为1),当这个端口处于输入低电平状态,运行你的程序,端口先读入修改后再输出回写,则在这一位上写入0, 即无论该输入脚电平如何变化,读入永远是 0 ,这个结果应该是个很严重的后果,连自动修复的可能性都没有。
cowboy
6楼-- · 2020-02-07 12:58
再次思考许工提及的问题,发现【18楼】的程序并不会出现错误。问题的关键聚集到这条指条,“XRL P3,A”,这是一个 读-修改-写 的过程,在执行这条指令时,首先读入P3,问题来了,这个“读”究竟是读入P3口的“输入状态”寄存器,还是读入P3口的“输出状态”寄存器呢?,如果是前者,那么程序就会引起错误,如果是后者,程序就能正常。我认为MCU内核中是以后者方式运作,即读入P3口的输出状态寄存器,为了验证这个观点,用Proteus仿真了一下,证实了这个想法。同理,“ANL P3,A” “ORL P3,A”这两条指令也符合这种情况,否则,想用“ANL P3,#0FH”来保持低4位输出状态不变的方法也不成立。

一周热门 更多>