Микроконверторы фирмы Analog Devices в микропроцессорных приборных комплексах. Виноградов А.Б - 259 стр.

UptoLike

259
NAKOPL0_R DATA 03Ah ;-----------------------------
NAKOPL1_R DATA 03Bh ;
NAKOPL2_R DATA 03Ch ; регистры накопления
NAKOPL3_R DATA 03Dh ;
NAKOPL4_R DATA 03Eh ; значения подавления дребезга
NAKOPL5_R DATA 03Fh ;
NAKOPL6_R DATA 040h ; каждой кнопки
NAKOPL7_R DATA 041h ;-----------------------------
;РОНы обслуживания интерфейса программный ведущий-I2C
OUT_I2C_R DATA 060h ;РОН хранения байта для передачи ведущему
;по I2C
IN_I2C_R DATA 061h ;РОН хранения байта, принятого от ведущего
;по I2C
;Флаги
_DAT_I2C BIT 08h ;флаг "принят байт данных по I2C"
_ADR_I2C BIT 09h ;флаг "принят байт адр устр по I2C"
;Константа - адрес ведомого устройства I2C
ADRSL_I2C_K EQU 01000100b ;
;Прочие константы
NACH_ADR EQU 000h ;начальный адрес обнуления РОНов
KON_ADR EQU 07Fh ;конечный адрес обнуления РОНов
POROG_K EQU 50 ;порог подавления дребезга кнопок
;Начало исполняемого кода-----------------------------------------------------
ORG 0h
AJMP Lab_START ;идти на начало осн программы
ORG 03Bh
AJMP Lab_I2C ;идти на обработку прерываний от I2C
;Блок обработки прерываний от модуля I2C.
;Путем опроса бита I2CTX ведомый устанавливает, какой режим выбран ведущим -
;прием или передача. Если выбран режим приема и правильный адрес ведомого уже
;принят, ведомый ожидает следующего прерывания от I2C, принимает байт данных
;и устанавливает флаг "принят байт данных по I2C" _DAT_I2C. Обработка (в данном
;случае - индикация принятого байта) и сброс этого флага возлагаются на
;основную программу.
;Если выбран режим передачи, ведомый передает ведущему
;байт данных, значение которого можно предварительно определить в основной
;программе. После этого интерфейс I2C сбрасывается в состояние ожидания адреса.
;Прерывания должны быть разрешены.
Lab_I2C: CLR EA ;----------------------------------
PUSH PSW ; глоб запрет прер и сохр контекста
PUSH ACC ;----------------------------------
JB I2CTX,Lab_Trans ;какой режим выбран ведущим -
;прием или передача ?
;Блок обработки приема байта от ведущего по I2C
JNB _ADR_I2C,Lab_R1 ;принят ли адрес ведомого ?
MOV IN_I2C_R,I2CDAT ;да, сохр принятого от ведущего байта
SETB _DAT_I2C ;уст флаг "принят байт данных по I2C"
CLR _ADR_I2C ;сбр флаг "принят байт адр устр по I2C"
JMP Lab_RETI ;идти на возврат из прерывания
Lab_R1: SETB _ADR_I2C ;уст флаг "принят байт адр устр по I2C"
JMP Lab_RETI ;идти на возврат из прерывания
;Блок обработки передачи байта ведущему по I2C
Lab_Trans: MOV I2CDAT,OUT_I2C_R ;передать ведущему байт
;Блок возврата из прерываний--------------------------------------------------
Lab_RETI: POP ACC ;---------------------------------