Мегаобучалка Главная | О нас | Обратная связь


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ



2019-07-03 217 Обсуждений (0)
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 0.00 из 5.00 0 оценок




 

1. Техническая документация на микроконтроллеры Z86E0812PSC компании Microchip Technology Incorporated ООО«Микро-Чип», Москва, 2002.-184 с.

2. Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин [ и др.]. – М.: Энергоатомиздат, 1990. – 224 с.

3. Евстифеев А.В. Микроконтроллеры Microchip: практическое руководство/А.В.Евстифеев. – М.: Горячая линия – Телеком, 2002. – 296 с.

4. Ульрих В.А. Микроконтроллеры PIC16х\17хx / В.А. Ульрих. Изд. 2-е, перераб. и доп. – СПб.: Наука и техника, 2002. – 320 с.

5. Александр Елисеев (E-mail: [email protected])


ПРИЛОЖЕНИЕ А

Листинг программы и объектный файл

TITLE Программа АОН "Panaphone"Z8REGDEFS; Назначение символических именTIM_BL_H = 10H; Таймер звонкаTIM_BL_L = 11H; Таймер звонкаN_RECORD = 12H; Номер записи в спискеBLC_CLOCK = 13H; Счетчик блокировки по нажатию клавиши CLOCKCNT_SET = 14H; Счетчик нажатия SETCNT_CLOCK = 15H; Счетчик нажатия CLOCKCNT_TWIX = 16H; Счетчик нажатия обоих клавишF_KEYS = 17H; XXXXXXXX Флаги клавишCONST_KEY = 10; Константа минимального количества тактов между нажатиямиCONST_BELL = 1000; Константа звонкаTET1 = 18H; 1-я ячейка тетрадыTET2 = 19H; 2-я ячейка тетрадыTET3 = 1AH; 3-я ячейка тетрадыTET4 = 1BH; 4-я ячейка тетрадыTET1_ = R8; 1-я ячейка тетрадыTET2_ = R9; 2-я ячейка тетрадыTET3_ = R10; 3-я ячейка тетрадыTET4_ = R11; 4-я ячейка тетрадыCNT_ONL = 18H; Счетчик низкой линииPRE_N = 1CH; Предыдущая цифраCNT_REP = 1DH; Счетчик повторов цифрыCOND = 1EH; Состояние линииMASK1 = 1FH; Маска первой цифры номераBUF_NUM = 20H; Начало буфера номераBEG_ST = 40H; Начало стекаBEG_COD = 40H; Начало области записи принятого кодаBEG_LST = 59H; Начало спискаEND_LST = 7CH; Конец спискаBFLAG = 7FH; XXXXXXXX; ¦¦¦¦¦¦¦¦; ¦¦¦¦¦¦¦+------; ¦¦¦¦¦¦+-------; ¦¦¦¦¦+-------- Флаг неопределившегося номера; ¦¦¦¦+--------- флаг блокировки звонка; ¦¦¦+---------- флаг индикации категории; ¦¦+----------- Флаг активности своего телефона; ¦+------------ Флаг 1-й цифры; +------------- Флаг звонкаTESTB = 7EH; Тест-байт целостности информацииCNT_B = 7DH; Счетчик длительности сигнала звонка;+------------------------------------------------------------------+;¦ Начало программного блока ¦;+------------------------------------------------------------------+CODEGLOBALABSORG 0Область хранения векторов прерыванийWORD INT_P3_2L;P3.2 F-edgeWORD INT_P3_3L;P3.3 F-edgeWORD INT_P3_1L;P3.1 F-edgeWORD INT_P3_2H;P3.2 R-edgeWORD INT_T0;T0WORD Sample;T1; После сброса: Счетчики запрещены; Прерывания запрещены; Приоритеты не определены; Указатель стека не определён; Регистровый указатель = 0; Порт 2 открытый сток,все входы; Порт 3 цифровой; Порт 0 входINT_P3_2L:INT_P3_3L:INT_P3_1L:INT_P3_2H:START:; LD RP,#0FH; Активизация управления по P2.7; LD 0BH,#00010100B; для эмулятораLD RP,#00LD P01M,#00000100B; Порт P0 - выходLD P3M,#00000011B; P2 - Pull-Ups Activ; P3 - AnalogLD P2, #11111111B; Вывод в порт 2; ¦¦¦¦¦¦¦¦; ¦¦¦¦¦¦¦+------ Вход клавиши SET; ¦¦¦¦¦¦+------- Вход клавиши CLOCK; ¦¦¦¦¦+-------- -; ¦¦¦¦+--------- -; ¦¦¦+---------- Датчик активности телефона; ¦¦+----------- Управление ключом; ¦+------------ Датчик линии; +------------- Вход прерываний;LD P2M,#11001111B; Определение направления выводов порта P2LD P0,#00000111B;LD PRE0,#11001001B; Коэффицент деления 50LD TMR,#00001011B; Разрешение обоих таймеров T0 с загрузкойLD T0,#150; Переполнение таймера каждые 5 мсLD IMR,#10010000B; Разрешение T0 и запрещение T1BEGIN:LD SPL,#BEG_STEICP TESTB,#55H; Проверка целостности информацииJR Z,NOT_CLEAR_RAM;LD R4,#5CLEAR_RAM:; Очистка ОЗУ контроллераLD @R4,#0INC R4CP R4,#127JR C,CLEAR_RAMLD TESTB,#55HLD MASK1,#2; Выставить маску первой цифры номераLD CNT_B,#0NOT_CLEAR_RAM:AND BFLAG,#00000111B; Сброс флага звонка,определения; пульсового набора,набранной цыфры и; очистки буфераCALL GO_HALT;;------------------------------------------------------------------------; Основной блок;------------------------------------------------------------------------MAIN:TCM P2,#00000011BJP NZ,M1M2_2:TM P2,#01000000BJR Z,M2TM P3,#00000100BJR NZ,M2LD P2M,#11001111BNOPSTOPM2:LD R4,#10LD CNT_ONL,#0M2_0: CALL GO_HALTINC CNT_ONL; Счетчик низкой линииTM P2,#01000000BJR Z,M2_1LD CNT_ONL,#0M2_1:DJNZ R4,M2_0CP CNT_ONL,#8JR UGE,M3; Переход если трубку снялиTM BFLAG,#10000000BJR NZ,M2JR M2_2M3:AND BFLAG,#10110011BTM BFLAG,#10000000BJR Z,M4AND P0,#11111110B; Захват LCDPUSH IMRCALL ID_NUMOR P2,#00100000BPOP IMRLD R7,#BUF_NUM; Вывод номера на LCDLD R6,#0LD R8,#8CALL SEND_BYTECALL SEND_BYTEM3_1: LD R6,@R7CALL SEND_BYTEINC R7DJNZ R8,M3_1TM BFLAG,#00000100B; Не сохранять номер если он не определилсяJR NZ,M4LD R7,#END_LST; Сдвиг списка на одну записьLD R8,#END_LST-4M3_2: LD R4,@R8LD @R7,R4DEC R7DEC R8CP R8,#BEG_LSTJR UGE,M3_2LD R7,#BEG_LST; Упаковка номера в списокLD R8,#BUF_NUMLD R9,#4M3_3: LD R4,@R8SWAP R4AND R4,#0F0HINC R8AND @R8,#0FHOR R4,@R8LD @R7,R4INC R8INC R7DJNZ R9,M3_3OR P0,#00000001B; Снять захват LCDM4: AND BFLAG,#00110011BLD BLC_CLOCK,#0TM P2,#00000100BJR NZ,M4_1AND P0,#11111110B; Захват LCDM4_1:CALL GO_HALTTM P2,#01000000B; Проверка тока в линииJR Z,M5; Переход если нет импульса в линииLD R9,#0; Счетчик цыфрыMN4_1: LD R4,#20; Счетчик импульсаMN4_2: CALL GO_HALTTM P2,#01000000B; Проверка тока в линииJR Z,MN4_3; Переход если прервался импульсDJNZ R4,MN4_2; Выход если импульс слишком длинныйOR P0,#00000001B; Снять захват LCDLD P2M,#11001111BNOPSTOPMN4_3:LD R4,#12; Счетчик паузыINC R9MN4_4: CALL GO_HALTTM P2,#01000000B; Проверка тока в линииJR NZ,MN4_1; Переход если прервалась паузаDJNZ R4,MN4_4TM P2,#00000100BJR NZ,M5MN4_6: TM BFLAG,#01000000B; Проверить флаг первой цифрыJR NZ,MN4_7LD R6,#00LD R8,#10MN4_8:CALL SEND_BYTEDJNZ R8,MN4_8OR BFLAG,#01000000B; Выставить флаг первой цифрыMN4_7: LD R6,R9CALL SEND_BYTEM5:TM F_KEYS,#00001000B; Проверка клавиши SETJR Z,M4_1AND F_KEYS,#11110111B;CALL LISTJR M4M1:TM F_KEYS,#00010000B; Проверка клавиши CLOCKJR Z,M1_1AND F_KEYS,#11101111B; Сброс флага клавиши CLOCKCP BLC_CLOCK,#00; Пуст ли счетчик нажатий клавиши CLOCKJR NZ,M1_0LD BLC_CLOCK,#2JR M1_1M1_0: DEC BLC_CLOCKM1_1: TM F_KEYS,#00001000B; Проверка клавиши SETJP Z,MAIN;; Режим просмотра списка;AND F_KEYS,#11110111BCALL LISTJP MAIN;+----------------------------------------------------------------------+;¦ Режим просмотра списка ¦;+----------------------------------------------------------------------+LIST:AND F_KEYS,#11110111BCP BLC_CLOCK,#00JP Z,LIST1RETLIST1: AND P0,#11111110B; Захват LCDLD R4,#10LIST2: CALL GO_HALTDJNZ R4,LIST2LIST3: LD N_RECORD,#1LIST4: LD R6,N_RECORDCALL SEND_BYTE; Вывод на LCD номера записиLD R6,#0FH; '-'CALL SEND_BYTELD R7,N_RECORD; Вычисление адреса записиDEC R7RL R7; Умножить на 4 (длину записи)RL R7ADD R7,#BEG_LST; Получить адрес начала записиLD R8,#2;; Вывод номера;LIST5:LD R6,@R7; Вывод 8-и байтов номераSWAP R6AND R6,#0FH;TM BFLAG,#00010000B; Проверить флаг индикации категорииJP NZ,LIST6LD R6,#0; Не показывать категорию если не выставленLIST6:; флагCALL SEND_BYTELD R6,@R7; Вывод первой цифры номераAND R6,#0FHCP R6,MASK1JP NZ,LIST7LD R6,#0LIST7:CALL SEND_BYTEINC R7; Вывод второй цифры номераLD R6,@R7SWAP R6CALL SEND_BYTESWAP R6; Вывод третьей цифры номераCALL SEND_BYTELIST8:INC R7; Вывод остальных цифр номераLD R6,@R7SWAP R6CALL SEND_BYTESWAP R6CALL SEND_BYTEDJNZ R8,LIST8LIST9: TM F_KEYS,#00100000B; Проверка одновременного нажатия CLOCK,SETJR Z,LIST10AND F_KEYS,#11000111B;JR LIST12LIST10: TM F_KEYS,#00010000B; Проверка клавиши CLOCKJR Z,LIST11AND F_KEYS,#11101111B;INC N_RECORDCP N_RECORD,#9JR UGT,LIST3JR LIST4LIST11: TM F_KEYS,#00001000B; Проверка клавиши SETJP Z,LIST23AND F_KEYS,#11110111B;OR P0,#00000001BCALL GO_HALTCALL SEND_BYTERET;; Режим установок;LIST12:; Установка флага показа категорииLD R6,#0CHCALL SEND_BYTETM BFLAG,#00010000B; Проверить флаг индикации категорииLD R6,#0AHJP Z,LIST13; Показать флаг индикации категорииLD R6,#01HLIST13:CALL SEND_BYTELD R6,#0DHCALL SEND_BYTELD R6,#0CALL SEND_BYTECALL SEND_BYTELD R6,MASK1CALL SEND_BYTELD R6,#0CALL SEND_BYTECALL SEND_BYTECALL SEND_BYTECALL SEND_BYTELIST14:TM F_KEYS,#00001000B; Проверка клавиши SETJR Z,LIST15AND F_KEYS,#11110111B;JP LIST17LIST15:TM F_KEYS,#00010000B; Проверка клавиши CLOCKJR Z,LIST16AND F_KEYS,#11101111B;XOR BFLAG,#00010000B;JP LIST12LIST16: CALL GO_HALTJP NZ,BEGINJR LIST14LIST17:; Установка маски первой цифрыLD R6,#00HCALL SEND_BYTETM BFLAG,#00010000B; Проверить флаг индикации категорииLD R6,#0AHJP Z,LIST18; Показать флаг индикации категорииLD R6,#01HLIST18:CALL SEND_BYTELD R6,#00HCALL SEND_BYTECALL SEND_BYTELD R6,#0CHCALL SEND_BYTELD R6,MASK1CALL SEND_BYTELD R6,#0DHCALL SEND_BYTELD R6,#00HCALL SEND_BYTECALL SEND_BYTECALL SEND_BYTELIST19:TM F_KEYS,#00001000B; Проверка клавиши SETJR Z,LIST20AND F_KEYS,#11110111B;JP LIST4LIST20:TM F_KEYS,#00010000B; Проверка клавиши CLOCKJR Z,LIST22AND F_KEYS,#11101111B;INC MASK1CP MASK1,#0AHJR ULE,LIST21LD MASK1,#00LIST21:JP LIST17LIST22: CALL GO_HALTJP NZ,BEGINJR LIST19;;;LIST23: CALL GO_HALTJP NZ,BEGINJP LIST9;;----------------------------------------------------------------------; END LIST;+--------------------------------------------+;¦ Подпрограмма HALT режима ¦;+--------------------------------------------+GO_HALT:PUSH R4NOPHALTEXIT_STOP:;; Поддержка клавиши SET;TM P2,#00000001B;JR NZ,K1;TM F_KEYS,#00000001B;JR NZ,K3;OR F_KEYS,#00001001B;JR K3;K1: AND F_KEYS,#11110110B;;; Поддержка клавиши CLOCK;K3:;TM P2,#00000010B;JR NZ,K4;TM F_KEYS,#00000010B;JR NZ,K5;OR F_KEYS,#00010010B;JR K5;K4: AND F_KEYS,#11101101B;;; Поддержка клавиш CLOCK+SET;K5:;TCM F_KEYS,#00000011B;JR NZ,K6;TM F_KEYS,#00000100B;JR NZ,K7;OR F_KEYS,#00100100B;JR K7;K6: AND F_KEYS,#11011011B;K7:;;; Отслеживание звонка;TM BFLAG,#00001000B; Проверить блокировку звонкаJR NZ,K12TM P3,#00000100BJR Z,K10INC CNT_BCP CNT_B,#60; 0.3 сек для звонкаJP ULT,K12OR BFLAG,#10000000BLD TIM_BL_H,#^hb(CONST_BELL)LD TIM_BL_L,#^lb(CONST_BELL)JR K12K10:CLR CNT_BLD R4,TIM_BL_HOR R4,TIM_BL_LJR NZ,K11AND BFLAG,#01111111BJR K12K11: DECW TIM_BL_HK12:LD R4,COND; Сравнить предыдущее и настоящее состоянияLD COND,P2; линииXOR R4,COND; Z - если состояния одинаковыAND R4,#01000000B; NZ - если состояния разныеPOP R4RET;+----------------------------------------------------------------------+;¦ Определение номера звонящего абонента ¦;+----------------------------------------------------------------------¦;¦ Выход: флаг C = 0 - определение произведено ¦;¦ C = 1 - сбой определения ¦;¦ ¦;+----------------------------------------------------------------------+ID_NUM:LD TET1,0FFH; Заполнение тетрадыLD TET2,0FFH; кодом неопределенностиLD TET3,0FFHLD TET4,0FFHCALL INIT_T1_500LD IMR,#10100000B; Разрешение T1 и запрещение T0LD R5,#4; Число запросов 3AND BFLAG,#01111111B; Сброс звонкаLD TIM_BL_H,#0; Сбросить таймер звонкаLD TIM_BL_L,#0; Сбросить таймер звонкаAND P2,#11011111B; Занять линию;---------------------------------------------------------------------------; Запрос 500 Гц;REQ0:CALL INIT_T1_44117EILD IMR,#10100000B; Разрешение T1 и запрещение T0LOOP1:LD R9,#0; 6LD R11,#BEG_CODLOOP1_0:LD R12,#^hb(BIT_MAP); 6LD R13,#^lb(BIT_MAP); 6ADD R13,R9; 6ADC R12,#0; 10LDC R10,@RR12; 12LD @R11,R10INC R11INC R9; 6CP R9,#11; 10JP ULT,LOOP1_0; 12/10 MAX = 131LD R10,#100LOOP4:LD R11,#BEG_COD; 6LOOP4_0:LD R8,#8; 6LOOP3:LD R12,@R11; 10AND R12,#11011111BLD R2,R12RL @R11; 10NOP; 6HALT; 7LOOP2: DJNZ R8,LOOP3; 12/10INC R11; 6CP R11,#BEG_COD+11; 10JP ULT,LOOP4_0; 12/10 MAX = 131; JP LOOP4DJNZ R10,LOOP4; 12;----------------------------------------------------------------------------TM P2,#00000100B; Снять захват линии если активен свой телефонJR Z,ID_NUM0;OR P2,#00100000B;ID_NUM0:LD R4,#20ID_NUM1:PUSH R4; Ожидать ответа 0.2 секPUSH R5CALL AON_processorPOP R5POP R4CP R8,#30JP NC,ID_NUM2DJNZ R4,ID_NUM1DJNZ R5,REQ0ID_NUM2:LD CNT_REP,#0; Обнулить счетчик повторовLD PRE_N,#0FFH; Предыдущая цифра не определенаLD R4,#25; Количество принимаемых кодовLD R5,#BEG_COD; Адрес буфера принимаемых цифрLD TET1,R9; Запись в тетраду первого кодаID_NUM3:PUSH R4PUSH R5CALL AON_processorPOP R5POP R4;; Вписать цифру в тетраду;LD RP,#10H; Сменить банк регистровLD TET4_,TET3_; Сместить цыфры в тетрадеLD TET3_,TET2_;LD TET2_,TET1_;LD TET1_,9; Записать текущую цифру;; Обработка тетрады;LD 9,TET1_CP 9,TET2_JP Z,ID_NUM4LD 9,TET2_CP 9,TET3_JP Z,ID_NUM4LD 9,TET3_CP 9,TET4_JP Z,ID_NUM4LD 9,#0FFHID_NUM4:LD RP,#00CP PRE_N,R9; Цифра равна предыдущей ?JP Z,ID_NUM6CP CNT_REP,#00; Записывать цифру только после второгоJP Z,ID_NUM6; повтораID_NUM5:LD @R5,R9LD PRE_N,R9; Сохранить текущую цифруINC R5LD CNT_REP,#00; Обнулить счетчик повторовDJNZ R4,ID_NUM3; Продолжать ввод пока не будет записаноJR ID_NUM8_; 25 цифрID_NUM6:INC CNT_REP;; CP R9,#0FFH; Не повторять запись цифр отличных от 0FFH; JR NZ,ID_NUM3;CP CNT_REP,#7;JP UGT,ID_NUM5;JR ID_NUM3;; Сборка номера;ID_NUM8_:LDR4,#BEG_CODLD R5,#6; Поиск двух кодов 0AH в области принятыхID_NUM9:; кодовCP @R4,#0AH; Адрес первого хранится в рег. R6JR NZ,ID_NUM7; второго в рег. R7LD @R5,R4;INC R5;CP R5,#8;JR UGE,ID_NUM8;ID_NUM7:;INC R4;CP R4,#BEG_COD+25JR ULT,ID_NUM9ID_NUM8:CP R5,#8JR Z,ID_NUM10CP R5,#7JR Z,ID_NUM11;; Заполнение буфера кодом неопределенности если не найдено ни одного; кода 0AH;LDR4,#BUF_NUMLDR5,#8ID_NUM12:LD @R4,#0FHINC R4DJNZ R5,ID_NUM12JP ID_NUM_ERRID_NUM10:LDR8,R6LD R9,R7JR ID_NUM13ID_NUM11:LD R8,R6LD R9,R8; ADD R9,#9ID_NUM13:LDR4,#8LD R10,#BUF_NUMDEC R8DEC R9ID_NUM20:CP R8,#BEG_CODJR ULT,ID_NUM14CP R8,#BEG_COD+24JR UGE,ID_NUM14LDR6,@R8JR ID_NUM15ID_NUM14:LD R6,#0FFHID_NUM15:CP R9,#BEG_CODJR ULT,ID_NUM16CP R9,#BEG_COD+24JR UGE,ID_NUM16LDR7,@R9JR ID_NUM17ID_NUM16:LD R7,#0FFHID_NUM17:CP R7,#0FFHJR Z,ID_NUM18LD @R10,R7JR ID_NUM19ID_NUM18:LD @R10,R6ID_NUM19:DEC R8DEC R9INC R10DJNZ R4,ID_NUM20;; Удаление повторов и нулейLD R4,#BUF_NUMLD R5,@R4LD R6,#8ID_NUM22:CP @R4,#0BHJR NZ,ID_NUM21LD @R4,R5ID_NUM21:CP @R4,#0JR NZ,ID_NUM23LD @R4,#10ID_NUM23:LDR5,@R4INC R4DJNZ R6,ID_NUM22; Циклический сдвиг на одну позицию вправоLD R4,#BUF_NUM+7LD R5,#BUF_NUM+6LD R8,@R4LD R7,#7ID_NUM24:LD R6,@R5LD @R4,R6DEC R4DEC R5DJNZ R7,ID_NUM24LD @R4,R8RCFRETID_NUM_ERR:OR BFLAG,#00000100B; Флаг неопределенияRET;+-------------------------------------------------+;¦ Подпрограмма инициализации T1 на 500 ¦;+-------------------------------------------------+INIT_T1_500:LD PRE1,#11110011B; Коэффицент деления 60LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкойLD T1,#50; Переполнение таймера каждые 2 мсRET;+-------------------------------------------------+;¦ Подпрограмма инициализации T1 на 44117 Гц ¦;+-------------------------------------------------+INIT_T1_44117:LD PRE1,#01000111B; Коэффицент деления 17LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкойLD T1,#2; Переполнение таймера каждуюRET;+-------------------------------------------------+;¦ Подпрограмма вывода байта на ЖКИ 'Panasoanic' ¦;¦ Ввод: R6 - выводимый байт ¦;¦ ¦;¦ Изменяются R4,R5 ¦;+-------------------------------------------------+SEND_BYTE:SWAP R6LD R5,#4SB1: RL R6JP C,SB2; Передача 1AND P0,#11111011B; Передача 0JR SB3SB2: OR P0,#00000100BSB3:LD R4,#15DJNZ R4,$AND P0,#11111101B; Передача стробаLD R4,#15DJNZ R4,$OR P0,#00000010BLD R4,#15DJNZ R4,$OR P0,#00000100B; Снятие сигналаLD R4,#15DJNZ R4,$DJNZ R5,SB1RET;+-------------------------------------------------------------------------+;¦ Подпрограмма ввода информации АОН ¦;+-------------------------------------------------------------------------+Fr1_1 = 20HFr1_2 = 21HFr2_1 = 22HFr2_2 = 23HFr3_1 = 24HFr3_2 = 25HFr4_1 = 26HFr4_2 = 27HFr5_1 = 28HFr5_2 = 29HFr6_1 = 2AHFr6_2 = 2BHAON_processor:LD PRE1,#00010111B; Коэфф. дел. =5LD TMR,#00001110BLD T1,#15; Коэфф. дел. =15; При частоте 12 МГц период счетчика 50 мксLD IMR,#10100000B; Разрешение T1 запрещение T0; Производится 200 отсчетов; На каждую эпюру отводится в таблице 25 байтLD R4,#Fr1_1LD R6,#0LD R7,#6LD R8,#8LD R14,#^hb(TABLE); @RR14 - Адрес таблицы эпюрLD R15,#^lb(TABLE);LD R12,#^hb(NUM_TABLE); @RR12 - Адрес таблицы сумм; Формирование первого байта отсчетовAONp2: NOPHALT;7 Ожидание времени отсчетаSCF;6TM P3,#00000010B;10JR NZ,AONp0;10CCF;6AONp0: RLC R6;6 Формирование байта отсчетовCP R7,#0;10JR Z,AONp1;10LD @R4,#0;10INC R4;6LD @R4,#0;10INC R4;6DEC R7;6AONp1:DJNZ R8,AONp2;12 -> 103 T. 17.17 мкс; Прием и обработка следующих байтов отсчетовLD R11,#25;10AONp5:LD R4,#Fr1_1;10 Адрес буфера идентификаторовLD R7,#6;10 Счетчик принимаемых битLD R8,#8;10 Счетчик циклов вводаLD R9,R6;6 Сохранить предыдущий байт отсчетовLD R6,#0;10 Байт отсчетовAONp4: NOPHALT;7SCF;6TM P3,#00000010B;10JR NZ,AONp6;10CCF;6ONp6: RLC R6;6 Формирование байта отсчетовCP R7,#00;10JR Z,AONp3;10LDC R13,@RR14;12XOR R13,R9;6LDC R10,@RR12;12ADD R10,@R4;6LD @R4,R10;10INCW RR14;10INC R4;6LDC R13,@RR14;12XOR R13,R9;6LDC R10,@RR12;12ADD R10,@R4;6LD @R4,R10;10INCW RR14;10INC R4;6DEC R7;6AONp3:DJNZ R8,AONp4;12 ->207 Продолжение цикла ввода байта; отсчетовDJNZ R11,AONp5;12 ->275 Продолжение ввода байтов отсчетов; Приведение массива идентификаторов к нормальной формеLD R13,#01LD R14,#00LD R15,#00LD R4,#Fr1_1;10 Адрес буфера идентификаторовLD R6,#6;10 Счетчик нормальных идентификаторовLD R7,#00AONp11:SUB @R4,#101JR NC,AONp7COM @R4AONp7: LD R5,@R4INC R4SUB @R4,#101JR NC,AONp8COM @R4AONp8: ADD R5,@R4; Получение нормального идентификатораINC R4; Определение пары максимальных идентификаторовCP R8,R5JR NC,AONp9LD R7,R8LD R8,R5LD R14,R15LD R15,R13JR AONp10AONp9: CP R7,R5JR NC,AONp10LD R7,R5LD R14,R13AONp10: RL R13DJNZ R6,AONp11; Вычисление цифрыOR R14,R15LD R9,#12AONp13:LD R12,#^hb(TABLE_NUM_AON-1)LD R13,#^lb(TABLE_NUM_AON-1)ADD R13,R9ADC R12,#0LDC R10,@RR12CP R14,R10JR Z,AONp12DJNZ R9,AONp13AONp12: DEC R9DIRET;Выход *****************************; R8 - величина первого идентификатора; R7 - величина второго идентификатора; R9 - принятая цифра {0..Bh}, если R9=FFh то цифра не определена;***********************************;; Последовательность цифр в посылке:; 1. Категория абонента; 2. Единицы номера; 3. Десятки номера; 4. Сотни номера; 5. Тысячи номера; 6. 3-я цифра индекса станции; 7. 2-я цифра индекса станции; 8. 1-я цифра индекса станции; 9. Начало/конец передачи; 10. Категория абонента;----------------------------; Подпрограмма ввода выборки;----------------------------Sample:IRETINT_T0:IRET;----------------------------TABLE_NUM_AON:;усл.номер цифра.BYTE 18H; 0.BYTE 03H; 1.BYTE 05H; 2.BYTE 06H; 3.BYTE 09H; 4.BYTE 0AH; 5.BYTE 0CH; 6.BYTE 11H; 7.BYTE 12H; 8.BYTE 14H; 9.BYTE 24H; 0AH - код начала/конца.BYTE 28H; 0BH - код повтораBIT_MAP:.BYTE 11111111B.BYTE 01111111B.BYTE 01111101B.BYTE 00101010B.BYTE 00001000B.BYTE 00000000B.BYTE 00000000B.BYTE 00000010B.BYTE 01110100B.BYTE 11110110B.BYTE 11111110B.ORG 05D4H;----------------------------; Таблица АОНTABLE:.BYTE 0FFH,0FFH,0FFH,0FCH,0FFH,0F8H,0FFH,0F0H,0FEH,0F0H,0FCH,0E0H.BYTE 0FEH,000H,0F0H,000H,0C0H,003H,000H,00FH,003H,01FH,00FH,07EH.BYTE 000H,003H,001H,07FH,01FH,0FEH,0FFH,0F0H,0F8H,080H,0C0H,007H.BYTE 007H,0FFH,0FFH,0F0H,0F0H,000H,001H,01FH,01FH,0FEH,0FCH,0E0H.BYTE 0FFH,0F0H,0C0H,001H,007H,0FFH,0FEH,0E0H,0C0H,007H,00FH,07EH.BYTE 0E0H,000H,007H,0FFH,0FCH,080H,001H,01FH,07EH,0F0H,0C0H,007H.BYTE 000H,01FH,0FFH,0E0H,001H,01FH,0FCH,0E0H,003H,01FH,0F8H,0E0H.BYTE 03FH,0FFH,000H,003H,0FFH,0F0H,003H,03FH,0F8H,080H,01FH,0FCH.BYTE 0FFH,080H,01FH,0FFH,000H,007H,0FCH,0C0H,01FH,0FEH,081H,00FH.BYTE 000H,001H,0FCH,080H,07FH,0FCH,007H,03FH,0C0H,007H,0F8H,0C0H.BYTE 003H,0FFH,000H,00FH,0C0H,001H,0F8H,080H,07EH,0F0H,01FH,0FCH.BYTE 0FFH,0F8H,07FH,0FEH,01FH,0FFH,007H,07FH,003H,01FH,081H,00FH.BYTE 0F8H,000H,0F8H,000H,0F8H,000H,0F8H,080H,0F8H,080H,0F8H,0C1H.BYTE 000H,00FH,000H,03FH,003H,07FH,00FH,0FFH,01FH,0FEH,03FH,0F8H.BYTE 01FH,0FFH,0FFH,0F8H,0FEH,0C0H,0F0H,000H,0C0H,007H,003H,01FH.BYTE 0FFH,0C0H,0E0H,000H,000H,01FH,00FH,0FEH,07EH,0F0H,0F0H,081H.BYTE 080H,000H,003H,0FFH,0FFH,0F0H,0E0H,001H,003H,01FH,03FH,0F8H.BYTE 001H,0FFH,0FFH,0E0H,080H,007H,01FH,0FEH,0F8H,080H,003H,01FH.BYTE 0FFH,0FEH,080H,001H,03FH,0FEH,0E0H,001H,01FH,0FEH,0F0H,081H.BYTE 0FCH,000H,00FH,0FFH,0E0H,000H,03FH,0FCH,0C0H,007H,03EH,0F0H.BYTE 000H,007H,0FEH,0C0H,00FH,0FFH,0C0H,003H,07EH,0F0H,007H,03FH.BYTE 00FH,0FFH,000H,007H,0F8H,080H,03FH,0FCH,003H,01FH,0E0H,003H.BYTE 0FFH,0E0H,03FH,0FFH,003H,03FH,0C0H,007H,0F8H,080H,07EH,0F0H.BYTE 0C0H,000H,0F8H,000H,0FFH,0E0H,07FH,0F8H,01FH,0FEH,007H,03FH.BYTE 000H,07FH,000H,01FH,000H,00FH,080H,007H,0C0H,007H,0E0H,003H.ORG 700H;; ТАБЛИЦА СООТВЕТСТВИЯ БАЙТА И КОЛИЧЕСТВА; ЕДИНИЦ В НЕМNUM_TABLE:.BYTE 00H,01H,01H,02H,01H,02H,02H,03H,01H,02H,02H,03H,02H,03H,03H,04H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 04H,05H,05H,06H,05H,06H,06H,07H,05H,06H,06H,07H,06H,07H,07H,08H.END

Приложение Б

Схема принципиальная электрическая АОН



2019-07-03 217 Обсуждений (0)
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 0.00 из 5.00 0 оценок









Обсуждение в статье: СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (217)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.011 сек.)