Это будет непросто, если используемые вами операции ввода-вывода хэшируются на несколько портов.
Единственное упрощение, которое вы можете сделать, - это управлять памятью на страницах, к которым обращаются три разных блока адресов:
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;