скачать рефераты

скачать рефераты

 
 
скачать рефераты скачать рефераты

Меню

Разработка микропроцессорной системы АОНа на базе микроконтроллера скачать рефераты

p align="left">LD R6,#00H

CALL SEND_BYTE

CALL SEND_BYTE

LD R6,#0CH

CALL SEND_BYTE

LD R6,MASK1

CALL SEND_BYTE

LD R6,#0DH

CALL SEND_BYTE

LD R6,#00H

CALL SEND_BYTE

CALL SEND_BYTE

CALL SEND_BYTE

LIST19:

TM F_KEYS,#00001000B; Проверка клавиши SET

JR Z,LIST20

AND F_KEYS,#11110111B;

JP LIST4

LIST20:

TM F_KEYS,#00010000B; Проверка клавиши CLOCK

JR Z,LIST22

AND F_KEYS,#11101111B;

INC MASK1

CP MASK1,#0AH

JR ULE,LIST21

LD MASK1,#00

LIST21:

JP LIST17

LIST22: CALL GO_HALT

JP NZ,BEGIN

JR LIST19

;

;

;

LIST23: CALL GO_HALT

JP NZ,BEGIN

JP LIST9

;

;----------------------------------------------------------------------

; END LIST

;+--------------------------------------------+

;¦ Подпрограмма HALT режима ¦

;+--------------------------------------------+

GO_HALT:

PUSH R4

NOP

HALT

EXIT_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,K12

TM P3,#00000100B

JR Z,K10

INC CNT_B

CP CNT_B,#60; 0.3 сек для звонка

JP ULT,K12

OR BFLAG,#10000000B

LD TIM_BL_H,#^hb(CONST_BELL)

LD TIM_BL_L,#^lb(CONST_BELL)

JR K12

K10:

CLR CNT_B

LD R4,TIM_BL_H

OR R4,TIM_BL_L

JR NZ,K11

AND BFLAG,#01111111B

JR K12

K11: DECW TIM_BL_H

K12:

LD R4,COND; Сравнить предыдущее и настоящее состояния

LD COND,P2; линии

XOR R4,COND; Z - если состояния одинаковы

AND R4,#01000000B; NZ - если состояния разные

POP R4

RET

;+----------------------------------------------------------------------+

;¦ Определение номера звонящего абонента ¦

;+----------------------------------------------------------------------¦

;¦ Выход: флаг C = 0 - определение произведено ¦

;¦ C = 1 - сбой определения ¦

;¦ ¦

;+----------------------------------------------------------------------+

ID_NUM:

LD TET1,0FFH; Заполнение тетрады

LD TET2,0FFH; кодом неопределенности

LD TET3,0FFH

LD TET4,0FFH

CALL INIT_T1_500

LD IMR,#10100000B; Разрешение T1 и запрещение T0

LD R5,#4; Число запросов 3

AND BFLAG,#01111111B; Сброс звонка

LD TIM_BL_H,#0; Сбросить таймер звонка

LD TIM_BL_L,#0; Сбросить таймер звонка

AND P2,#11011111B; Занять линию

;---------------------------------------------------------------------------

; Запрос 500 Гц

;

REQ0:

CALL INIT_T1_44117

EI

LD IMR,#10100000B; Разрешение T1 и запрещение T0

LOOP1:

LD R9,#0; 6

LD R11,#BEG_COD

LOOP1_0:

LD R12,#^hb(BIT_MAP); 6

LD R13,#^lb(BIT_MAP); 6

ADD R13,R9; 6

ADC R12,#0; 10

LDC R10,@RR12; 12

LD @R11,R10

INC R11

INC R9; 6

CP R9,#11; 10

JP ULT,LOOP1_0; 12/10 MAX = 131

LD R10,#100

LOOP4:

LD R11,#BEG_COD; 6

LOOP4_0:

LD R8,#8; 6

LOOP3:

LD R12,@R11; 10

AND R12,#11011111B

LD R2,R12

RL @R11; 10

NOP; 6

HALT; 7

LOOP2: DJNZ R8,LOOP3; 12/10

INC R11; 6

CP R11,#BEG_COD+11; 10

JP ULT,LOOP4_0; 12/10 MAX = 131

; JP LOOP4

DJNZ R10,LOOP4; 12

;----------------------------------------------------------------------------

TM P2,#00000100B; Снять захват линии если активен свой телефон

JR Z,ID_NUM0;

OR P2,#00100000B;

ID_NUM0:

LD R4,#20

ID_NUM1:

PUSH R4; Ожидать ответа 0.2 сек

PUSH R5

CALL AON_processor

POP R5

POP R4

CP R8,#30

JP NC,ID_NUM2

DJNZ R4,ID_NUM1

DJNZ R5,REQ0

ID_NUM2:

LD CNT_REP,#0; Обнулить счетчик повторов

LD PRE_N,#0FFH; Предыдущая цифра не определена

LD R4,#25; Количество принимаемых кодов

LD R5,#BEG_COD; Адрес буфера принимаемых цифр

LD TET1,R9; Запись в тетраду первого кода

ID_NUM3:

PUSH R4

PUSH R5

CALL AON_processor

POP R5

POP 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_NUM4

LD 9,TET2_

CP 9,TET3_

JP Z,ID_NUM4

LD 9,TET3_

CP 9,TET4_

JP Z,ID_NUM4

LD 9,#0FFH

ID_NUM4:

LD RP,#00

CP PRE_N,R9; Цифра равна предыдущей ?

JP Z,ID_NUM6

CP CNT_REP,#00; Записывать цифру только после второго

JP Z,ID_NUM6; повтора

ID_NUM5:

LD @R5,R9

LD PRE_N,R9; Сохранить текущую цифру

INC R5

LD 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_COD

LD R5,#6; Поиск двух кодов 0AH в области принятых

ID_NUM9:; кодов

CP @R4,#0AH; Адрес первого хранится в рег. R6

JR NZ,ID_NUM7; второго в рег. R7

LD @R5,R4;

INC R5;

CP R5,#8;

JR UGE,ID_NUM8;

ID_NUM7:;

INC R4;

CP R4,#BEG_COD+25

JR ULT,ID_NUM9

ID_NUM8:

CP R5,#8

JR Z,ID_NUM10

CP R5,#7

JR Z,ID_NUM11

;

; Заполнение буфера кодом неопределенности если не найдено ни одного

; кода 0AH

;

LDR4,#BUF_NUM

LDR5,#8

ID_NUM12:

LD @R4,#0FH

INC R4

DJNZ R5,ID_NUM12

JP ID_NUM_ERR

ID_NUM10:

LDR8,R6

LD R9,R7

JR ID_NUM13

ID_NUM11:

LD R8,R6

LD R9,R8

; ADD R9,#9

ID_NUM13:

LDR4,#8

LD R10,#BUF_NUM

DEC R8

DEC R9

ID_NUM20:

CP R8,#BEG_COD

JR ULT,ID_NUM14

CP R8,#BEG_COD+24

JR UGE,ID_NUM14

LDR6,@R8

JR ID_NUM15

ID_NUM14:

LD R6,#0FFH

ID_NUM15:

CP R9,#BEG_COD

JR ULT,ID_NUM16

CP R9,#BEG_COD+24

JR UGE,ID_NUM16

LDR7,@R9

JR ID_NUM17

ID_NUM16:

LD R7,#0FFH

ID_NUM17:

CP R7,#0FFH

JR Z,ID_NUM18

LD @R10,R7

JR ID_NUM19

ID_NUM18:

LD @R10,R6

ID_NUM19:

DEC R8

DEC R9

INC R10

DJNZ R4,ID_NUM20

;

; Удаление повторов и нулей

LD R4,#BUF_NUM

LD R5,@R4

LD R6,#8

ID_NUM22:

CP @R4,#0BH

JR NZ,ID_NUM21

LD @R4,R5

ID_NUM21:

CP @R4,#0

JR NZ,ID_NUM23

LD @R4,#10

ID_NUM23:

LDR5,@R4

INC R4

DJNZ R6,ID_NUM22

; Циклический сдвиг на одну позицию вправо

LD R4,#BUF_NUM+7

LD R5,#BUF_NUM+6

LD R8,@R4

LD R7,#7

ID_NUM24:

LD R6,@R5

LD @R4,R6

DEC R4

DEC R5

DJNZ R7,ID_NUM24

LD @R4,R8

RCF

RET

ID_NUM_ERR:

OR BFLAG,#00000100B; Флаг неопределения

RET

;+-------------------------------------------------+

;¦ Подпрограмма инициализации T1 на 500 ¦

;+-------------------------------------------------+

INIT_T1_500:

LD PRE1,#11110011B; Коэффицент деления 60

LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкой

LD T1,#50; Переполнение таймера каждые 2 мс

RET

;+-------------------------------------------------+

;¦ Подпрограмма инициализации T1 на 44117 Гц ¦

;+-------------------------------------------------+

INIT_T1_44117:

LD PRE1,#01000111B; Коэффицент деления 17

LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкой

LD T1,#2; Переполнение таймера каждую

RET

;+-------------------------------------------------+

;¦ Подпрограмма вывода байта на ЖКИ 'Panasoanic' ¦

;¦ Ввод: R6 - выводимый байт ¦

;¦ ¦

;¦ Изменяются R4,R5 ¦

;+-------------------------------------------------+

SEND_BYTE:

SWAP R6

LD R5,#4

SB1: RL R6

JP C,SB2; Передача 1

AND P0,#11111011B; Передача 0

JR SB3

SB2: OR P0,#00000100B

SB3:

LD R4,#15

DJNZ R4,$

AND P0,#11111101B; Передача строба

LD R4,#15

DJNZ R4,$

OR P0,#00000010B

LD R4,#15

DJNZ R4,$

OR P0,#00000100B; Снятие сигнала

LD R4,#15

DJNZ R4,$

DJNZ R5,SB1

RET

;+-------------------------------------------------------------------------+

;¦ Подпрограмма ввода информации АОН ¦

;+-------------------------------------------------------------------------+

Fr1_1 = 20H

Fr1_2 = 21H

Fr2_1 = 22H

Fr2_2 = 23H

Fr3_1 = 24H

Fr3_2 = 25H

Fr4_1 = 26H

Fr4_2 = 27H

Fr5_1 = 28H

Fr5_2 = 29H

Fr6_1 = 2AH

Fr6_2 = 2BH

AON_processor:

LD PRE1,#00010111B; Коэфф. дел. =5

LD TMR,#00001110B

LD T1,#15; Коэфф. дел. =15

; При частоте 12 МГц период счетчика 50 мкс

LD IMR,#10100000B; Разрешение T1 запрещение T0

; Производится 200 отсчетов

; На каждую эпюру отводится в таблице 25 байт

LD R4,#Fr1_1

LD R6,#0

LD R7,#6

LD R8,#8

LD R14,#^hb(TABLE); @RR14 - Адрес таблицы эпюр

LD R15,#^lb(TABLE);

LD R12,#^hb(NUM_TABLE); @RR12 - Адрес таблицы сумм

; Формирование первого байта отсчетов

AONp2: NOP

HALT;7 Ожидание времени отсчета

SCF;6

TM P3,#00000010B;10

JR NZ,AONp0;10

CCF;6

AONp0: RLC R6;6 Формирование байта отсчетов

CP R7,#0;10

JR Z,AONp1;10

LD @R4,#0;10

INC R4;6

LD @R4,#0;10

INC R4;6

DEC R7;6

AONp1:

DJNZ R8,AONp2;12 -> 103 T. 17.17 мкс

; Прием и обработка следующих байтов отсчетов

LD R11,#25;10

AONp5:

LD R4,#Fr1_1;10 Адрес буфера идентификаторов

LD R7,#6;10 Счетчик принимаемых бит

LD R8,#8;10 Счетчик циклов ввода

LD R9,R6;6 Сохранить предыдущий байт отсчетов

LD R6,#0;10 Байт отсчетов

AONp4: NOP

HALT;7

SCF;6

TM P3,#00000010B;10

JR NZ,AONp6;10

CCF;6

ONp6: RLC R6;6 Формирование байта отсчетов

CP R7,#00;10

JR Z,AONp3;10

LDC R13,@RR14;12

XOR R13,R9;6

LDC R10,@RR12;12

ADD R10,@R4;6

LD @R4,R10;10

INCW RR14;10

INC R4;6

LDC R13,@RR14;12

XOR R13,R9;6

LDC R10,@RR12;12

ADD R10,@R4;6

LD @R4,R10;10

INCW RR14;10

INC R4;6

DEC R7;6

AONp3:

DJNZ R8,AONp4;12 ->207 Продолжение цикла ввода байта

; отсчетов

DJNZ R11,AONp5;12 ->275 Продолжение ввода байтов отсчетов

; Приведение массива идентификаторов к нормальной форме

LD R13,#01

LD R14,#00

LD R15,#00

LD R4,#Fr1_1;10 Адрес буфера идентификаторов

LD R6,#6;10 Счетчик нормальных идентификаторов

LD R7,#00

AONp11:

SUB @R4,#101

JR NC,AONp7

COM @R4

AONp7: LD R5,@R4

INC R4

SUB @R4,#101

JR NC,AONp8

COM @R4

AONp8: ADD R5,@R4; Получение нормального идентификатора

INC R4

; Определение пары максимальных идентификаторов

CP R8,R5

JR NC,AONp9

LD R7,R8

LD R8,R5

LD R14,R15

LD R15,R13

JR AONp10

AONp9: CP R7,R5

JR NC,AONp10

LD R7,R5

LD R14,R13

AONp10: RL R13

DJNZ R6,AONp11

; Вычисление цифры

OR R14,R15

LD R9,#12

AONp13:

LD R12,#^hb(TABLE_NUM_AON-1)

LD R13,#^lb(TABLE_NUM_AON-1)

ADD R13,R9

ADC R12,#0

LDC R10,@RR12

CP R14,R10

JR Z,AONp12

DJNZ R9,AONp13

AONp12: DEC R9

DI

RET

;Выход *****************************

; R8 - величина первого идентификатора

; R7 - величина второго идентификатора

; R9 - принятая цифра {0..Bh}, если R9=FFh то цифра не определена

;***********************************

;

; Последовательность цифр в посылке:

; 1. Категория абонента

; 2. Единицы номера

; 3. Десятки номера

; 4. Сотни номера

; 5. Тысячи номера

; 6. 3-я цифра индекса станции

; 7. 2-я цифра индекса станции

; 8. 1-я цифра индекса станции

; 9. Начало/конец передачи

; 10. Категория абонента

;----------------------------

; Подпрограмма ввода выборки

;----------------------------

Sample:

IRET

INT_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

Приложение Б

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

Страницы: 1, 2, 3