c - 如何创建一个变量,其位映射到特定位置?

标签 c embedded pic

这是一道针对 8 位 PIC 微 Controller 的嵌入式 C 题。

假设有一个 7 段 LED 显示器连接到不同端口的不同引脚,并且假设它们的定义如下:

#define _7seg_A         PORTCbits.RC6
#define TRIS_7seg_A     TRISCbits.TRISC6
#define _7seg_B         PORTCbits.RC5
#define TRIS_7seg_B     TRISCbits.TRISC5
#define _7seg_C         PORTAbits.RA5
#define TRIS_7seg_C     TRISAbits.TRISA5
#define _7seg_D         PORTBbits.RB6
#define TRIS_7seg_D     TRISBbits.TRISB6
#define _7seg_E         PORTBbits.RB5
#define TRIS_7seg_E     TRISBbits.TRISB5
#define _7seg_F         PORTBbits.RB7
#define TRIS_7seg_F     TRISBbits.TRISB7
#define _7seg_G         PORTCbits.RC7
#define TRIS_7seg_G     TRISCbits.TRISC7
#define _7seg_DP        PORTAbits.RA4
#define TRIS_7seg_DP    TRISAbits.TRISA4

此外,这是来自编译器的微 Controller 定义头文件的端口定义:

typedef union {
    struct {
        unsigned RA0                    :1;
        unsigned RA1                    :1;
        unsigned RA2                    :1;
        unsigned RA3                    :1;
        unsigned RA4                    :1;
        unsigned RA5                    :1;
    };
} PORTAbits_t;
extern volatile PORTAbits_t PORTAbits @ 0x005;

现在,我想要一个名为 _7seg_DATA 的东西,它包含所有八个 _7seg_X 位,当我向它写入数据时,它会自动将其放入定义的引脚。这可以由 union 来完成吗?

例如,如果我执行 _7seg_DATA = 0x00;,它将关闭所有 LED。 如果我执行 _7seg_DATA = 0xFF; 它将点亮所有这些。

最佳答案

不可以,您不能使用 union 或结构将单个字节的各个位映射到多个内存映射寄存器地址。但是,您可以创建一个函数,它接收 8 位字节作为参数,然后该函数将每个单独的位映射到适当的端口寄存器。

关于c - 如何创建一个变量,其位映射到特定位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675478/

相关文章:

c - 在 linux 内核模式下使用 vfs_link

c - 使用 AVX2 和 SSE2 进行位 vector 运算

c - PIC 编程中断故障。

python - Project Euler #29 替代解决方案

c - 如何改变 Windows Mutex 的递归锁定行为?

c - 我需要为我估算一项全新技术的时间(德州仪器的 MSP430 微处理器)

PicKit3 和 MPlabX(IDE 和 IPE)的连接失败错误

c - Microchip 改变了 C 语言的规则?

c - STM32F103RB中如何使用HAL实现抢占式调度

java - TCP 权限 JavaME8