Бился я над этой же проблемой. Решение нашел, но оно на работе.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 06 января 2005 г. 01:05
В ответ на: "О сколько нам открытий чудных..." или отправлено Bill 05 января 2005 г. 21:57

если не ошибаюсь, то там было что-то типа


extern unsigned char DataPort;
DataPort |= 0x12;

а DataPort описывал в ассемблерном файле:

public DataPort
DataPort equ P1IN

Если развивать идею дальше, то получается такое:


красиво:
#define PORT_IN 0
#define PORT_OUT 1
#define PORT_DIR 2
#define PORT1(SFR) (*(unsigned char *)P1IN+SFR)
#define PORT2(SFR) (*(unsigned char *)P2IN+SFR)
#define PORT3(SFR) (*(unsigned char *)P3IN+SFR)

#define DataPort PORT1
unsigned char TipaTest (unsigned char Data) {
DataPort(PORT_OUT) = Data;
DataPort(PORT_DIR) = 0xFF;
return DataPort(PORT_IN);
}

и некрасиво, но без перекомпиляции:
#define PORT_IN(PORT) (*(unsigned char *)PORT+0)
#define PORT_OUT(PORT) (*(unsigned char *)PORT+1)
#define PORT_DIR(PORT) (*(unsigned char *)PORT+2)

extern unsigned char DataPort;

unsigned char TipaTest (unsigned char Data) {
PORT_OUT(DataPort) = Data;
PORT_DIR(DataPort) = 0xFF;
return PORT_IN(DataPort);
}


Возможно, с появлением в новых версиях IAR операции размещения @ можно избавиться от ассемблера:
unsigned char DataPort @P1IN

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru