我需要从 0 数到 10,并将这些值以二进制格式存储在 ADCON0(5:2) 中。我如何指向该寄存器的第 5 位?位 5 命名为 ADCON0bits.CHS3。如果我将一个 4 位变量存储到 ADCON0bits.CHS3,位 1 - 3 是否会写入寄存器的位 4 - 2?
另外,有没有我可以使用的 4 位数据类型?
这一切都在 PIC 微 Controller 上。
编辑:我需要像这样在寄存器中存储 4 位:
unsigned char count = 10 //max value
[X][X][1][0][1][0][X][X]
这与下面的假设一致,但我想我会稍微澄清一下我的问题。
最佳答案
当您说您正在将计数的位 1-3 写入寄存器的位置 4-2 时,您是否明确表示您正在颠倒位的顺序?在这个回答中,我会假设那不是你的意思。
您可以 express a bit field explicitly as a struct .
假设您正在处理一个 16 位寄存器,您的结构可能如下所示:
struct adcon {
unsigned char someflag : 2;
unsigned char count : 4;
unsigned char other_bits : 2;
};
对于每个结构成员,您指定位数。然后,您可以通过将寄存器转换为结构类型并对结构的成员进行操作来对寄存器中的适当位进行操作。
(adcon) ADCON0.count = count;
编辑:根据反馈修复了代码,谢谢。
关于c - 在 8 位寄存器中间存储 4 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083661/