gpt4 book ai didi

C - 在 C 8051 中递增 18 位

转载 作者:行者123 更新时间:2023-11-30 19:09:24 26 4
gpt4 key购买 nike

我对 8051 进行编程已经大约两个月了,对 C 语言来说还是个新手。我目前正在使用闪存来读取、写入、删除和分析它。我目前正在进行写入阶段,我需要做的任务之一是指定一个地址位置并用数据填充该位置,然后递增到下一个位置并用补充数据填充它。依此类推,直到我到达终点。

我的困境是我有 18 个地址位可供使用,并且当前为这 18 位分配了 3 个字节。无论如何,我可以将这 18 位组合成一个 intunsigned int 并像这样递增吗?或者是我唯一的选择是递增第一个字节,然后当该字节翻转到 0x00 时递增下一个字节,当该字节翻转时递增下一个字节?

我目前有:

void inc_address(void)
{
P6=address_byte1;
P7=address_byte2;
P2=address_byte3;
P5=data_byte;

while(1)
{
P6++;
if(P6==0x00){P7++;}
else if(P7==0x00){P2++;}
else if(P2 < 0x94){break;} //hex 9 is for values dealing with flash chip
P5=~data_byte;
}
}

最佳答案

其中地址uint32_t:

void inc_address(void)
{
// Increment address
address = (address + 1) & 0x0003ffff ;

// Assert address A0 to A15
P6 = (address & 0xff)
P7 = (address >> 8) & 0xff

// Set least significant two bits of P2 to A16,A17
// without modifying other bits in P2
P2 &= 0xFC ; // xxxxxx00
P2 |= (address >> 16) & 0x03 ; // xxxxxxAA

// Set data
P5 = ~data_byte ;
}

但是,尚不清楚为什么该函数被称为 inc_address,而且还为 P5 分配了 ~data_byte,这可能会断言数据总线?它所做的不仅仅是增加地址,因此它的命名很糟糕且令人困惑。我还建议该函数应将地址和数据作为参数,而不是 global data .

关于C - 在 C 8051 中递增 18 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com