Перейти к содержанию

    

SDCC и __sbit

Всем привет!

 

Помогите понять как работает __sbit в SDCC.

К примеру код из Keil:

sfr FSR              = 0xF8;
/*  FSR  */
sbit  MCDIS        = FSR^7;
sbit  STP          = FSR^6;
sbit  WEN          = FSR^5;
sbit  RDYN         = FSR^4;
sbit  INFEN        = FSR^3;
sbit  RDIS         = FSR^2;
sbit  RDEND        = FSR^1;
sbit  WPEN         = FSR^0;

Как я понимаю в SDCC я должен описать что-то типа:

__sfr _-at 0xF8 FSR;
__sbit __at 0xF8 WPEN;
__sbit __at 0xF9 RDEND;
__sbit __at 0xFA RDIS;

и так далее. правильно?

А тогда как быть, к примеру, с регистром sfr FPCR = 0xF9; ? Ведь к примеру sbit NUPP = FPCR^0; будет всё тем же __sbit __at 0xF9 NUPP;, что не отличается от __sbit __at 0xF9 RDEND;?

Не понимаю ничего :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ищите таблицу Special Function Register (SFR) Memory Map на свой контроллер и подставляйте нужные адресса, при использовании sbit обращение будет идти с битовой области памяти bdata

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А тогда как быть, к примеру, с регистром sfr FPCR = 0xF9; ? Ведь к примеру sbit NUPP = FPCR^0; будет всё тем же __sbit __at 0xF9 NUPP;, что не отличается от __sbit __at 0xF9 RDEND;?

Не понимаю ничего :crying:

 

Обращение к битам есть только у регистров, чьи аддресса кратны 8:

0xF0, 0xF8 ...

0xF9 не умеет обращатся к битам

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация