c - 在 8 位寄存器中间存储 4 位值

标签 c types microcontroller microchip

我需要从 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/

相关文章:

c - 为什么这个 C 代码的输出应该是 "no"?

c - g_io_channel + socket = server ,还是只得到一个客户端?用C语言

c++ - ClassName& 作为返回类型是什么意思?

typescript - 在类型中使用元组而不是联合数组

c - 切换 TI MSP430 的 LED

c - 图像加载器中的内存泄漏

c - 想要确定两个单独的 gem 中使用了哪个函数

c++ - 将函数用作函数的参数时出错

iphone - 像 picaxe(微 Controller )一样使用 iPhone

c - 在 C 中合并数组中的位变量