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

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

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

Меню

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

хема принципиальная электрическая АОН разработанная в Accel EDA представлена на рис. 2.

Номера записанные в память телефона для быстрого набора никак не связаны с номерами хранящимися в списке АОН и манипуляции с одними не отражаются на других.

Рис. 2 - Принципиальная схема АОНа в Accel EDA

Принципиальная схема АОНа приведена в Приложении Б.

Спецификация элементов приведена в Приложении В.

ЗАКЛЮЧЕНИЕ

В данном курсовом проекте разработано устройство - Автоматический Определитель Номера. Разработана схема электрическая принципиальная этого устройства и программа для микроконтроллера. В результате ассемблирования получена прошивка программы для памяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальную схему и расширить функциональные возможности микроконтроллера, так как для изменения функций устройства достаточно внести изменения в программу микроконтроллера. Существенно сократились размеры устройства, относительно аналогичных, собранных на базе п/п элементов и соответственно сократилось энергопотребление.

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

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

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

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

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

5. Александр Елисеев (E-mail: ea@eunet.lt)

ПРИЛОЖЕНИЕ А

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

TITLE Программа АОН "Panaphone"

Z8REGDEFS; Назначение символических имен

TIM_BL_H = 10H; Таймер звонка

TIM_BL_L = 11H; Таймер звонка

N_RECORD = 12H; Номер записи в списке

BLC_CLOCK = 13H; Счетчик блокировки по нажатию клавиши CLOCK

CNT_SET = 14H; Счетчик нажатия SET

CNT_CLOCK = 15H; Счетчик нажатия CLOCK

CNT_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; Счетчик длительности сигнала звонка

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

;¦ Начало программного блока ¦

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

CODE

GLOBAL

ABS

ORG 0

Область хранения векторов прерываний

WORD INT_P3_2L;P3.2 F-edge

WORD INT_P3_3L;P3.3 F-edge

WORD INT_P3_1L;P3.1 F-edge

WORD INT_P3_2H;P3.2 R-edge

WORD INT_T0;T0

WORD 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,#00

LD P01M,#00000100B; Порт P0 - выход

LD P3M,#00000011B; P2 - Pull-Ups Activ

; P3 - Analog

LD P2, #11111111B; Вывод в порт 2

; ¦¦¦¦¦¦¦¦

; ¦¦¦¦¦¦¦+------ Вход клавиши SET

; ¦¦¦¦¦¦+------- Вход клавиши CLOCK

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

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

; ¦¦¦+---------- Датчик активности телефона

; ¦¦+----------- Управление ключом

; ¦+------------ Датчик линии

; +------------- Вход прерываний

;

LD P2M,#11001111B; Определение направления выводов порта P2

LD P0,#00000111B;

LD PRE0,#11001001B; Коэффицент деления 50

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

LD T0,#150; Переполнение таймера каждые 5 мс

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

BEGIN:

LD SPL,#BEG_ST

EI

CP TESTB,#55H; Проверка целостности информации

JR Z,NOT_CLEAR_RAM;

LD R4,#5

CLEAR_RAM:; Очистка ОЗУ контроллера

LD @R4,#0

INC R4

CP R4,#127

JR C,CLEAR_RAM

LD TESTB,#55H

LD MASK1,#2; Выставить маску первой цифры номера

LD CNT_B,#0

NOT_CLEAR_RAM:

AND BFLAG,#00000111B; Сброс флага звонка,определения

; пульсового набора,набранной цыфры и

; очистки буфера

CALL GO_HALT

;

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

; Основной блок

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

MAIN:

TCM P2,#00000011B

JP NZ,M1

M2_2:

TM P2,#01000000B

JR Z,M2

TM P3,#00000100B

JR NZ,M2

LD P2M,#11001111B

NOP

STOP

M2:

LD R4,#10

LD CNT_ONL,#0

M2_0: CALL GO_HALT

INC CNT_ONL; Счетчик низкой линии

TM P2,#01000000B

JR Z,M2_1

LD CNT_ONL,#0

M2_1:

DJNZ R4,M2_0

CP CNT_ONL,#8

JR UGE,M3; Переход если трубку сняли

TM BFLAG,#10000000B

JR NZ,M2

JR M2_2

M3:

AND BFLAG,#10110011B

TM BFLAG,#10000000B

JR Z,M4

AND P0,#11111110B; Захват LCD

PUSH IMR

CALL ID_NUM

OR P2,#00100000B

POP IMR

LD R7,#BUF_NUM; Вывод номера на LCD

LD R6,#0

LD R8,#8

CALL SEND_BYTE

CALL SEND_BYTE

M3_1: LD R6,@R7

CALL SEND_BYTE

INC R7

DJNZ R8,M3_1

TM BFLAG,#00000100B; Не сохранять номер если он не определился

JR NZ,M4

LD R7,#END_LST; Сдвиг списка на одну запись

LD R8,#END_LST-4

M3_2: LD R4,@R8

LD @R7,R4

DEC R7

DEC R8

CP R8,#BEG_LST

JR UGE,M3_2

LD R7,#BEG_LST; Упаковка номера в список

LD R8,#BUF_NUM

LD R9,#4

M3_3: LD R4,@R8

SWAP R4

AND R4,#0F0H

INC R8

AND @R8,#0FH

OR R4,@R8

LD @R7,R4

INC R8

INC R7

DJNZ R9,M3_3

OR P0,#00000001B; Снять захват LCD

M4: AND BFLAG,#00110011B

LD BLC_CLOCK,#0

TM P2,#00000100B

JR NZ,M4_1

AND P0,#11111110B; Захват LCD

M4_1:

CALL GO_HALT

TM P2,#01000000B; Проверка тока в линии

JR Z,M5; Переход если нет импульса в линии

LD R9,#0; Счетчик цыфры

MN4_1: LD R4,#20; Счетчик импульса

MN4_2: CALL GO_HALT

TM P2,#01000000B; Проверка тока в линии

JR Z,MN4_3; Переход если прервался импульс

DJNZ R4,MN4_2

; Выход если импульс слишком длинный

OR P0,#00000001B; Снять захват LCD

LD P2M,#11001111B

NOP

STOP

MN4_3:

LD R4,#12; Счетчик паузы

INC R9

MN4_4: CALL GO_HALT

TM P2,#01000000B; Проверка тока в линии

JR NZ,MN4_1; Переход если прервалась пауза

DJNZ R4,MN4_4

TM P2,#00000100B

JR NZ,M5

MN4_6: TM BFLAG,#01000000B; Проверить флаг первой цифры

JR NZ,MN4_7

LD R6,#00

LD R8,#10

MN4_8:CALL SEND_BYTE

DJNZ R8,MN4_8

OR BFLAG,#01000000B; Выставить флаг первой цифры

MN4_7: LD R6,R9

CALL SEND_BYTE

M5:

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

JR Z,M4_1

AND F_KEYS,#11110111B;

CALL LIST

JR M4

M1:

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

JR Z,M1_1

AND F_KEYS,#11101111B; Сброс флага клавиши CLOCK

CP BLC_CLOCK,#00; Пуст ли счетчик нажатий клавиши CLOCK

JR NZ,M1_0

LD BLC_CLOCK,#2

JR M1_1

M1_0: DEC BLC_CLOCK

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

JP Z,MAIN

;

; Режим просмотра списка

;

AND F_KEYS,#11110111B

CALL LIST

JP MAIN

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

;¦ Режим просмотра списка ¦

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

LIST:

AND F_KEYS,#11110111B

CP BLC_CLOCK,#00

JP Z,LIST1

RET

LIST1: AND P0,#11111110B; Захват LCD

LD R4,#10

LIST2: CALL GO_HALT

DJNZ R4,LIST2

LIST3: LD N_RECORD,#1

LIST4: LD R6,N_RECORD

CALL SEND_BYTE; Вывод на LCD номера записи

LD R6,#0FH; '-'

CALL SEND_BYTE

LD R7,N_RECORD; Вычисление адреса записи

DEC R7

RL R7; Умножить на 4 (длину записи)

RL R7

ADD R7,#BEG_LST; Получить адрес начала записи

LD R8,#2

;

; Вывод номера

;

LIST5:

LD R6,@R7; Вывод 8-и байтов номера

SWAP R6

AND R6,#0FH;

TM BFLAG,#00010000B; Проверить флаг индикации категории

JP NZ,LIST6

LD R6,#0; Не показывать категорию если не выставлен

LIST6:; флаг

CALL SEND_BYTE

LD R6,@R7; Вывод первой цифры номера

AND R6,#0FH

CP R6,MASK1

JP NZ,LIST7

LD R6,#0

LIST7:

CALL SEND_BYTE

INC R7; Вывод второй цифры номера

LD R6,@R7

SWAP R6

CALL SEND_BYTE

SWAP R6; Вывод третьей цифры номера

CALL SEND_BYTE

LIST8:

INC R7; Вывод остальных цифр номера

LD R6,@R7

SWAP R6

CALL SEND_BYTE

SWAP R6

CALL SEND_BYTE

DJNZ R8,LIST8

LIST9: TM F_KEYS,#00100000B; Проверка одновременного нажатия CLOCK,SET

JR Z,LIST10

AND F_KEYS,#11000111B;

JR LIST12

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

JR Z,LIST11

AND F_KEYS,#11101111B;

INC N_RECORD

CP N_RECORD,#9

JR UGT,LIST3

JR LIST4

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

JP Z,LIST23

AND F_KEYS,#11110111B;

OR P0,#00000001B

CALL GO_HALT

CALL SEND_BYTE

RET

;

; Режим установок

;

LIST12:

; Установка флага показа категории

LD R6,#0CH

CALL SEND_BYTE

TM BFLAG,#00010000B; Проверить флаг индикации категории

LD R6,#0AH

JP Z,LIST13; Показать флаг индикации категории

LD R6,#01H

LIST13:

CALL SEND_BYTE

LD R6,#0DH

CALL SEND_BYTE

LD R6,#0

CALL SEND_BYTE

CALL SEND_BYTE

LD R6,MASK1

CALL SEND_BYTE

LD R6,#0

CALL SEND_BYTE

CALL SEND_BYTE

CALL SEND_BYTE

CALL SEND_BYTE

LIST14:

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

JR Z,LIST15

AND F_KEYS,#11110111B;

JP LIST17

LIST15:

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

JR Z,LIST16

AND F_KEYS,#11101111B;

XOR BFLAG,#00010000B;

JP LIST12

LIST16: CALL GO_HALT

JP NZ,BEGIN

JR LIST14

LIST17:; Установка маски первой цифры

LD R6,#00H

CALL SEND_BYTE

TM BFLAG,#00010000B; Проверить флаг индикации категории

LD R6,#0AH

JP Z,LIST18; Показать флаг индикации категории

LD R6,#01H

LIST18:

CALL SEND_BYTE

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