天嵌 ARM开发社区

 找回密码
 注册
查看: 1508|回复: 1

请教一个纠结的问题~

[复制链接]
cwz_zwc 发表于 2012-10-4 15:52:23 | 显示全部楼层 |阅读模式
我在编写LED程序时发现了个很奇怪的情况(就是用GPIO口来控制灯亮那个..)。
当我这样写时:rGPBDAT = (rGPBDAT &( ~(0xf<<5)));
rGPBDAT=rGPBDAT|(0xe<<5);
四个灯全亮。
当我这样写时:rGPBDAT = (rGPBDAT &( ~(0xf<<5)));
rGPBDAT=rGPBDAT|(0xe<<5);
Delay(1000);
rGPBDAT=rGPBDAT|(1<<5);
Delay(1000);
就只有LED灯1闪了!
我觉得第一个程序不是应该只有LED1一个灯亮吗?如果说我那样写有问题的话,为什么我第二个程序在不影响寄存器中其他位的情况下能做到只对LED1操作呢?
亚瑟王 发表于 2012-10-8 11:50:11 | 显示全部楼层
根据TQ2440的原理图,为GPBDAT寄存器的对应位为0,LED就亮;为1LED就灭。所以你写的代码GPBDAT|(0xE<<5)能让灯全亮,我感到不可思议。不过前面那行:GPBDAT&(~(0xF<<5))能让灯亮这个是正确的。
至于后面那个问题,我额外问你一下,C语言中位操作你是否已经理解了,如果你已经理解了,再加上我前面说的灯亮与灭的原理,帖子中的那个问题应该不难解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-7-1 18:20 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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