- •Минобрнауки россии
- •I sbn х-хххх-хххх-х ©сПбГэту «лэти», 2011 Техническое задание
- •1. Постановка задачи
- •1.1. Имитатор подвижного сигнала
- •1.2. Микропроцессор 1821вм85
- •2. Выбор и обоснование структурной схемы имитатора
- •2.1. Структурная схема имитатора
- •2.2. Расчет основных параметров имитатора
- •3. Выбор элементов принципиальной схемы
- •3.1. Выбор элементной базы
- •3.2. Синтез счетчика с тремя модулями пересчета
- •3.3. Синтез счетчика по mod м0
- •3.4. Синтез счетчика по mod м1i
- •3.5. Синтез счетчика по mod Мj
- •3.6. Контроллер клавиатуры
- •3.7. Приемопередатчик, обслуживающий внешние устройства схемы
- •3.8. Дешифратор адресов
- •3.9. Организация памяти
- •3.10. Дисплей
- •4. Создание макроэлементов в символьном редакторе
- •5. Инициализация микроконтроллера
- •6. Выполнение принципиальной схемы
- •7. Перечень элементов принципиальной схемы
- •Список литературы
- •Минобрнауки россии
- •«Санкт-Петербургский государственный электротехнический университет
- •(СПбГэту)
- •Санкт-Петербург
- •201_ Г. Оглавление
- •Имитатор сигналов, отраженных от движущейся цели на бис Altera
- •197376, Санкт-Петербург, ул. Проф. Попова, д. 5
3.5. Синтез счетчика по mod Мj
Требуемые коэффициенты Mj реализуются последовательным включением делителя на постоянный коэффициент Mk и управляемого 2-байтовыми данными 16-разрядного счетчика.
Рис. 3.14. Делитель на Mk= 25иMkeyb= 214. |
Рис. 3.15. Временные диаграммы работы делителя на Mk= 25иMkeyb= 214 |
Рис. 3.16. Схема 16-разрядного делителя на M1j |
Счетчик по mod Mk на МЭ lpm counter. Макроэлемент счетчика используется в режиме делителя на 2k; для Mk = 32 = 25 выходной сигнал снимается с выхода Q4 (схема представлена на рис. 3.14, а временные диаграммы – на рис. 3.15). Эта же схема формирует сигнал частоты 500 Гц для опроса шифратора клавиатуры, при этом коэффициент деления Mkeyb = 107/500 = = 20 000. Легко задать Mkeyb = 214 = 16 384, если использовать 16-разрядный
счетчик с выходом Q13, при этом частота выходного сигнала fkeyb = = = примерно 610 Гц.
Делитель на M1j строится по такому же принципу, что и делитель на M1i (16-разрядный счетчик с записью двухбайтовых чисел). На вход делителя поступает сигнал частоты f0/M0 = 10 МГц, выходной сигнал делителя – x1. Схема делителя на M1j показана на рис. 3.16.
3.6. Контроллер клавиатуры
Для управления имитатором используются 16 клавиш, каждой из которых приписан свой 4-разрядный двоичный код. При нажатии любой клавиши контроллер клавиатуры должен выдавать двоичный код этой клавиши и флаг клавиатуры, указывающий факт нажатия любой клавиши (сигнал квитирования), или сигнал запроса прерывания IR (interrupt request).
Шифратор клавиатуры. На рис. 3.17 изображена схема шифратора клавиатуры, содержащая счетчик по mod 16 (74169) и мультиплексор 161 (161mux). При замыкании клавиши k = 0, 1, , 15 выходной сигнал DO мультиплексора примет значение 1 в момент времени, когда счетчик установится в состояние k, что приведет к появлению значения сигнала IR = 1 и блокировке счета. Пока клавиша нажата, счетчик выдает число k = DO3DO2DO1DO0, а D-триггер – сигнал IR = 1. При отпускании клавиши сигнал IR установится в 0 и счетчик продолжит счет. Чем ниже частота задающего генератора, тем надежнее исключается «дребезг» контактов клавиш. На частоте генератора 500 Гц «дребезг» надежно устраняется. На рис. 3.18 – временные диаграммы для случая, когда нажата клавиша с номером 9.
Интерфейсные схемы шифратора клавиатуры подключают к системной шине данных 4-разрядный код нажатой клавиши помощью буфера данных, показанного на рис. 3.19, в. Перепадом сигнала IR с 0 на 1 D-триггер
Рис. 3.17. Схема шифратора клавиатуры |
Рис. 3.18. Временные диаграммы работы шифратора клавиатуры |
устанавливается в состояние 1 (рис. 3.19, б). С выхода триггера флаг клавиатуры FKB = DO4 = 1 подается на буфер данных 74244b вместе с 4-разрядным кодом клавиатуры DO3DO2DO1DO0. При выполнении команды IN CSKB с дешифратора адреса поступает значение сигнала = 0 (chip select keyboard), а с шины управления – значение = 0, что приводит к появлению значения сигнала== 0, разрешающего передачу по шине данных 5-разрядного кода в аккумулятор CPU.
а |
б |
|
|
в |
г |
Рис. 3.19. Интерфейсные схемы клавиатуры:а – формировательX2;б– флаг клавиатуры;в– формирователь шины данных для ввода;г – расположение клавиш |
Анализ назначения нажатой клавиши. Функциональное назначение клавиш показано на рис. 3.19, г: клавиши k = 0, 1, , 7 задают скорость движения цели vj (j = k), k = 8 и 9 – направление движения цели (клавиши 10 и 11 не используются), k = 12, 13, 14, 15 – период Ti сигнала G (i = 1, 2, 3, 4).
Коды этих трех групп клавиш различаются значением двух старших разрядов DO3DO2: 10 – направление движения; 00 и 01 – значение скорости vj; 11 – значение периода Ti. Для принятия решения маской 00001100 выделяются разряды DO3DO2, и содержимое аккумулятора сравнивается с числом 8: содержимое равно 8, если нажатая клавиша имеет коды 10 (клавиши направления движения); содержимое больше 8, если нажатая клавиша имеет коды 11 (клавиши значений периода Ti); содержимое меньше 8, если нажатая клавиша имеет коды 0(клавиши значений скорости vj). Программа обслуживания клавиатуры при использовании МЭ (два 16-разрядных счетчика для задания периода и один 16-разрядный счетчик для задания скорости движения vj и программного ввода данных с квитированием имеет вид (заданы адреса клавиатуры – 28h, триггера направления – 68h).
L1: |
IN |
port_KB |
; А = DO4DO3DO2DO1DO0 |
|
MOV |
C,A |
; запоминание кода в регистре C |
|
ANI |
10h |
; A = 0 0 0 D4 0 0 0 0 (квитирование) |
|
JZ |
L1 |
; если D4 = IR = 0, повторный ввод |
|
OUT |
port_KB |
; сброс флага клавиатуры DO4 (см. рис. 3.19, б) |
|
MVI |
A,0Fh |
; A = 0 0 0 0 1 1 1 1 |
|
ANA |
C |
; 0 0 0 D3D2D1D0 – код нажатой клавиши |
|
MOV |
C,A |
; запоминание в регистре C кода нажатой клавиши |
|
ANI |
0Ch |
; A = 0 0 0 0 D3D2 0 0 |
|
CPI |
8 |
; сравнение старших разрядов кода с числом 8 |
|
JZ |
L2 |
; переход к заданию направления движения |
|
JC |
L3 |
; переход к заданию скорости движения |
|
CALL |
TAB |
; подпрограмма чтения таблицы данных |
|
OUT |
port_dLT |
; запись dML в регистр младшего байта счетчика M1i |
|
INX |
H |
; адрес старшего байта dMM данных |
|
MOV |
A,M |
; пересылка dMM в аккумулятор |
|
OUT |
port_dMT |
; запись dMM в регистр старшего байта счетчика M1i |
|
JMP |
L1 |
; переход на ввод кода клавиши |
L2: |
MOV |
A,C |
; A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши |
|
OUT |
port_X2 |
; запись D0 = DAL0 в триггер знака (см. рис. 3.19, а) |
|
JMP |
L1 |
|
L3: |
CALL |
TAB |
; подпрограмма чтения таблицы данных |
|
OUT |
port_dLV |
; запись dML в регистр младшего байта счетчика M1j |
|
INX |
H |
|
|
MOV |
A,M |
; A = dMM |
|
OUT |
port_dMV |
; запись dMM в регистр старшего байта счетчика M1j |
|
JMP |
L1 |
|
TAB: |
LXI |
H,700h |
; rp H = 0700h |
|
MOV |
A,C |
; A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши |
|
ADD |
A |
; A = A + A = 2C |
|
MOV |
C,A |
; формирование в rp B числа, равного |
|
MVI |
B,0 |
; удвоенному коду клавиши |
|
DAD |
B |
; HL = HL + BC = 0700h + 2C – адрес памяти |
|
MOV |
A,M |
; A = dML – младший байт данных |
|
RET |
|
|
Для таблицы данных отведена область ПЗУ, начинается с адреса 0700h. Для хранения двухбайтовых чисел используются две соседние ячейки памяти с адресами A и A + 1. Подпрограмма TAB определяет адрес младшего байта данных и читает его из ПЗУ. Для определения адреса A по коду нажатой клавиши к начальному адресу 0700h прибавляется удвоенный код клавиши. Таким образом, по коду клавиши, например, с номером k = 2, задающей в соответствии с рис. 3.19, г скорость v2, определяются адреса двух ячеек памяти 0704h и 0705h, где хранятся соответственно младший и старший байты числа . При выполнении команды OUTport_KB на ЛЭ ИЛИ (см. рис. 3.19, б) поступают сигналы = 0 и= 0, на выходе ЛЭ вырабатывается сигнал= 0, устанавливающий триггер флага клавиатуры в состояниеQ = 0, что приводит к сбросу флага клавиатуры (сигнал DO4 = 0). При выполнении команды OUT CSX2 по сигналам =0 и= 0 вырабатывается сигнал= 0 (см. рис. 3.19, а), перепадом с 0 на 1 которого в триггер знака x2 записывается значение разряда BD0 = DO0.
Если ввод данных с клавиатуры производится по прерыванию (сигнал IR подается на вход RST7.5), тогда программа обработки прерываний должна начаться с запоминания содержимого регистровых пар, аккумулятора и регистра признаков. Затем следует ввод данных и их анализ.
|
PUSH |
H |
|
|
PUSH |
B |
|
|
PUSH |
PSW |
|
|
IN |
CSKB |
; А = DO4DO3DO2DO1DO0 |
|
MOV |
C,A |
; запоминание кода в регистре C |
|
MVI |
A,0Fh |
; A = 0 0 0 0 1 1 1 1 |
|
ANA |
C |
; 0 0 0 D3D2D1D0 – код нажатой клавиши |
|
MOV |
C,A |
; запоминание в регистре C кода нажатой клавиши |
|
ANI |
0Ch |
; A = 0 0 0 0 D3D2 0 0 |
|
CPI |
8 |
; сравнение старших разрядов кода с числом 8 |
|
JZ |
L2 |
; переход к заданию направления движения |
|
JC |
L3 |
; переход к заданию скорости движения |
|
CALL |
TAB |
; подпрограмма чтения таблицы данных |
|
OUT |
port_dLT |
; запись dML в регистр младшего байта (см. рис. 3.12) |
|
INX |
H |
; адрес старшего байта dMM данных |
|
MOV |
A,M |
; пересылка dMM в аккумулятор |
|
OUT |
port_dMT |
; запись dMM в регистр старшего байта (см. рис. 3.12) |
|
JMP |
L1 |
|
L2: |
MOV |
A,C |
; A = 0 00 0 D3D2D1D0 – код нажатой клавиши |
|
OUT |
port_X2 |
; запись D0 = DAL0 в триггер знака (см. рис. 3.19, а) |
|
JMP |
L1 |
|
L3: |
CALL |
TAB |
; подпрограмма чтения таблицы данных |
|
OUT |
port_dLV |
; запись dML в регистр младшего байта счетчика ; M1j, рис. 3.16 |
|
INX |
H |
|
|
MOV |
A,M |
; A = dMM |
|
OUT |
port_dMV |
; запись dMM в регистр старшего байта счетчика ; M1j, рис. 3.16 |
|
JMP |
L1 |
|
TAB: |
LXI |
H,700h |
; rp H = 0700h |
|
MOV |
A,C |
; A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши |
|
ADD |
A |
; A = A + A = 2C |
|
MOV |
C,A |
; формирование в rp B числа, равного |
|
MVI |
B,0 |
; удвоенному коду клавиши |
|
DAD |
B |
; HL = HL + BC = 0700h + 2C – адрес памяти |
|
MOV |
A,M |
; A = dML – младший байт данных |
|
RET |
|
|
L1: |
POP |
PSW |
|
|
POP |
B |
|
|
POP |
H |
|
|
EI |
|
; разрешение всех прерываний (после следующей ; команды) |
|
RET |
|
; возврат из подпрограммы обработки прерываний ; RST 7.5 |