【发布时间】:2014-07-10 11:33:32
【问题描述】:
这是一个针对 8 位 PIC 微控制器的嵌入式 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
此外,这里是编译器的微控制器定义头文件中的端口定义:
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 的东西,它包含所有 8 个 _7seg_X 位,当我向它写入数据时,它会自动将其放入定义的引脚中。工会能做到吗?
例如,如果我执行_7seg_DATA = 0x00;,它将关闭所有 LED。
如果我这样做_7seg_DATA = 0xFF;,它会点亮所有这些。
【问题讨论】:
-
正如我在问题中提到的,7段LED显示屏连接到不同端口的不同引脚。
-
使用更高级的架构,您可以将变量映射到会触发总线错误的地址。然后,您可以捕获总线错误并解码请求的地址并执行操作。这有很多开销,@kkrambo 的答案要简单得多。