Для того, чтобы объявить битовую переменную на уровне обращения к ножкам SFR Десу достаточно было посмотреть основной недер файл. Там все это приводится. Интересно было узнать, как в битовом виде в ИАРЕ обратиться к области адресов 20-2F в мк 51. Все вышевысказанные идеи не работают.
Достаточно оттранслировать прикрепленный файл в ИАРЕ для МК AT89S52 и вы увидите, что в ассемблере транслятор с битовыми переменными работает через арифметические операции, то есть как с байтами. Кейл здесь корректнее.
файл не зацепился, почемуто, поэтому пример гружу в текст
#include <ioAT89S8252.H>
#include <stdbool.h>
unsigned char PORTC_BITS;
struct
{
unsigned char bit_00 : 1;
unsigned char bit_01 : 1;
unsigned char ACTIVE : 1;//Признак активности канала,сигнал ACN
unsigned char CHANNEL : 1;//Номер канала (0,1)
unsigned char INTC_EXT : 1;//Cигнал запроса от схемы контроля
unsigned char bit_05 : 1;
unsigned char bit_O6 : 1;
unsigned char bit_O7 : 1;
} PORTC_BITS_bit;
struct
{
unsigned FLAG_INT0:1;//ЗАПРОС ВЫЗОВА ОБРАБОТКИ ПРЕРЫВАНИЯ INT0
unsigned DEMAND_4ms:1;//Запрос вызова группы 4mS
unsigned DEMAND_8ms:1;//Запрос вызова группы 8mS
};
signed int __idata *INF_BUFF_PTR1;
signed int __idata *INF_BUFF_PTR2;
unsigned int __idata TIME_CURRENT;//СЧЕТЧИК ТЕКУЩЕГО ВРЕМЕНИ
unsigned char __idata NUMBER_CHECK;//СЧЕТЧИК ЗАПРОСОВ ОТ СХЕМЫ КОНТРОЛЯ
unsigned int __idata TC_CUR;//CЧЕТЧИК 100mS ИНТЕРВАЛОВ ДЛЯ ПРОГРАММ ТЕХН.ЦИКЛА
const unsigned char SETUP_TC = 35;//Количество запросов от схемы контроля
//до вызова технологического цикла Ttc =~ 200(53-305) ms
const unsigned char __code PAR_EXCH,SIZE_BUF_EXCH = 2;
const unsigned char __code MAX_NUM_EXCH_ERR = 3;
const unsigned char __code NUM_BYTE_PAR = 1;
__pdata struct OUT_DRV_BUFF_EXT
{
unsigned char COLUMNN_EXT_RAM;//
unsigned char ERROREPK_EXT_RAM;//ТАЙМЕР НЕИСПРАВНОСТИ
unsigned char TOFFEPK_EXT_RAM;//КОНТРОЛЬ
}OUT_DRV_DATA_EXT_RAM;
__pdata unsigned char RECDATA_EXT_RAM;//ПРИНЯТЫЙ БАЙТ
__pdata unsigned char MATR_OLD_EXT_RAM;//БАЙТ ПРЕДЫДУЩЕГО СОСТОЯНИЯ ВХОДНЫХ ЦЕПЕЙ
__pdata unsigned char CNBYT1_EXT_RAM;//БАЙТ ВХОДНЫХ СИГНАЛОВ ДЛЯ МЕЖПРОЦЕССОРНОГО ОБМЕНА
__pdata unsigned char RECDATA2_EXT_RAM;//ВТОРОЙ ПРИНЯТЫЙ БАЙТ
__pdata unsigned char CONTROL1_EXT_RAM;//ПЕРВЫЙ БАЙТ ВНЕШНИХ СИГНАЛОВ
__pdata unsigned char CONTROL2_EXT_RAM;//ВТОРОЙ БАЙТ ВНЕШНИХ СИГНАЛОВ
/******************************************************************************/
/********************** ГОЛОВНОЙ ПРОГРАММНЫЙ МОДУЛЬ ***************************/
void main(void)
{
FLAG_INT0=0;
DEMAND_4ms =1;
P3 = 0xFF;
P2=0;
P1 = 0xED;
PCON = 0x80;//10000000 DOUBLE BAUD RATE
TMOD = 0x25;//00100101 T0 - Режим 1,счетчик,Т1 - Режим 2,таймер
DEMAND_8ms = FLAG_INT0 | DEMAND_4ms;
if( DEMAND_8ms) TC_CUR = 0;
}