PIC18 чтение / запись данных при распределении по портам - PullRequest
0 голосов
/ 01 апреля 2011

Из-за конструктивных ограничений у меня есть адресная строка для контроллера памяти, разделенная на 3 разных порта PIC 18F4550.Сопоставление:

#define A0 PORTBbits.RB2
#define A1 PORTBbits.RB3
#define A2 PORTBbits.RB4
#define A3 PORTBbits.RB5
#define A4 PORTAbits.RA0
#define A5 PORTAbits.RÄ1
#define A6 PORTAbits.RÄ2
#define A7 PORTAbits.RÄ3
#define A8 PORTAbits.RÄ4
#define A9 PORTAbits.RÄ5
#define A10 PORTEbits.RE0
#define A11 PORTEbits.RE1
#define A12 PORTEbits.RE2

Я хотел бы получить доступ к нему как к одной переменной ADDRESS, и попытался использовать объединение для этого, но просто получил «Синтаксическую ошибку» с:1006 * Как мне это сделать?

1 Ответ

0 голосов
/ 01 апреля 2011

Это будет непросто, если используемые вами операции ввода-вывода хэшируются на несколько портов.

Единственное упрощение, которое вы можете сделать, - это управлять памятью на страницах, к которым обращаются три разных блока адресов:

lowAddr will be RB2:RB5
midAddr will be RA0:RA5
highAdd will be RE0:RE2

Было бы предпочтительнее иметь больший блок для низкоадресной части, чтобы страницы памяти могли быть больше.Здесь у вас будет только 16 байтовых страниц.

Следовательно, вы можете определить структуру битового поля для управления вашей памятью в одну переменную.

struct {
   uint16 lowAddr : 4;
   uint16 midAddr : 6;
   uint16 highAddr : 3;
   uint16 : 3;
} memoryAddr;

Таким образом, вы сможете более эффективно обрабатыватьобновление порта, как для порта B:

LATB &= 0xFF ^ (3 << 2);
LATB |= memoryAddr.lowAddr << 2;
...