【发布时间】:2015-03-28 08:09:57
【问题描述】:
我是 ARM LPC2148 微控制器的新手,也是 StackOverflow 的新手。我刚刚在其中一个评估板上看到了一段代码。我正在粘贴,如下所示。
端口引脚 P0.19 到 P0.22 映射到 LCD 的 D4 到 D7。以下函数用于向 4 位模式下运行的 LCD 发送命令:
void LCD_Command(unsigned int data) // This function is used to send LCD commands
{
unsigned int temp=0;
EN_LOW(); // Set EN pin of LCD to to Low
COMMAND_PORT();
WRITE_DATA();
temp=data;
IO0PIN&=0xFF87FFFF;
IO0PIN|=(temp & 0xF0) << 15;
EN_HI(); // Give strobe by enabling and disabling En pin of LCD
EN_LOW();
temp=data & 0x0F;
IO0PIN&=0xFF87FFFF;
IO0PIN|=(temp) << 19;
EN_HI();
EN_LOW();
while(Busy_Wait());
Delay(10);
}
我的问题是:
变量“数据”已经是 32 位宽。以这种方式转移数据是否有效?编码器可能已经传递了 32 位数据,然后被屏蔽 (&)/ORed (|)。还是有其他影响?
如果我们使用 unsigned char 而不是 unsigned int,我们是否会在 LPC21xx 中保存任何内存?由于寄存器是 32 位宽的,我不确定内部是否进行了任何分段以节省内存。
有什么方法可以轻松地将 8 位数据映射到 32 位数据的 8 位部分之一?在上面的代码中,移位是通过硬编码完成的(
<<15或<<19等)。我们可以避免这种硬编码并使用一些#defines 来映射位吗?
【问题讨论】: