В примере рассмотрено следующее задание: к микропроцессорной системе подключен программируемый интегральный таймер КР580ВИ53. Таймер должен обеспечить выдержки времени t1=5 с и t2=7 с. Таймер управляется через порт С микросхемы ввода-вывода (параллельного интерфейса). Сигналы о срабатывании таймера поступают на контроллер прерываний.
Схема подключения. Так как емкость одного счетчика таймера невелика, необходимо уменьшить тактовую частоту счетчиков. Для этого один из счетчиков СЧ0 переводится в режим деления частоты (режим 2 или 3),а два других в режиме выдержки времени (режим 0)(рис.4.3.). Для упрощения расчетов принимаем частоту на выходе счетчика f1=1кГц, тогда при тактовой частоте FT=2мГц коэффициент деления частоты СЧ0 будет равен:
(в шестнадцатеричном коде 2·103 D=07DО Н). Коэффициенты для счетчиков: СЧ1 n1=t1·f1=5·1·103=5·103 D=1388 H; СЧ2 n2=t2·f2=7·1·103=7·103 D=1Б58 Н.
Рис. 4.3.
Сигналы управления счетчиками поступают с РС0 для Сч0 (вход G1) и с РС1 для Сч1 (вход G2) (рис.4.4.). Выходы счетчиков подключены к контроллеру приоритетных прерываний (КПП): выход Сч1 (CLK1) на IR0; выход Сч2 (CLK2) на IR1.
|
|
Составляем управляющее слово для счетчиков. Слово составляется согласно формату для каждого счетчика отдельно.(рис.2.2).
Для Сч. 0: режим 3, код двоичный, загрузка младшего, затем старшего байта
36H |
Для Сч.1 режим 0, код двоичный, загрузка младшего, затем старшего байта
70H |
Для Сч.2 режим 0, код двоичный, загрузка младшего, затем старшего байта
B0H |
Программа инициализации заключается в том, что управляющие слова записываются вначале в регистр-аккумулятор, а затем выводится в регистр управления микросхемы, после этого в счетчики загружаются коэффициенты. Счетчики могут программироваться в произвольном порядке.
Пример программы инициализации таймера | ||
MVI А,36Н | инициализация счетчика "0" | |
OUT 93Н | ||
MVI A,DOH | загрузка коэффициента счетчика "0" | |
OUT 90Н | ||
MVI A,07Н | ||
OUT 93Н | ||
MVI А,70Н | инициализация счетчика "1" | |
OUT 93Н | ||
MVI А.88Н | загрузка коэффициента счетчика ''1" | |
OUT 91Н | ||
MVI А,13Н | ||
OUT 93Н | ||
MVI А,ВОН | инициализация счетчика "2" | |
OUT 93Н | ||
MVI А.58Н | загрузка коэффициента счетчика"2" | |
OUT 92Н | ||
MVI А,1ВН | ||
OUT 92Н |
Контроллер прерываний программируется с помощью шести управляющих слов. Первые три подаются при инициализации системы и называются СКИ1, СКИ2, СКИ3 (слово командоинструкция). Три следующих СК01, СК02, СКO3 (слово командообслуживания) подаются в произвольном порядке в процессе работы.
|
|
Управляющее слово СКИ1 составляется по формату учитывающего количество контроллеров в системе и вид младшего байта адреса подпрограммы прерываний (рис. 4.5).
Рис.4.5.
Двоичный код запроса и номер прерывания IRQ связаны следующим образом:
Двоичный код запроса | |||
В1 | В2 | В3 | |
IRQ0 IRQ IRQ | |||
IRQ1 | |||
IRQ2 | |||
IRQ3 | |||
IRQ4 | |||
IRQ5 | |||
IRQ6 | |||
IRQ7 |
Если задаем ф=1, то подпрограммы идут через 8 адресов;
Если задаем ф=0, то подпрограммы идут через 4 адреса.
Управляющее слово СКИ2 имеет формат старшего байта адреса:
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 |
Для восприятия контроллером передаваемых данных как СКИ1 необходимо, чтобы А1=0, а для восприятия информации как СКИ2 А0=1.
Пример программирования: в системе один контроллер, подпрограммы (п/п) идут через 4 адреса, п/п находится в области памяти с начальным адресом 0В00Н, микросхема имеет адреса 98-9ВН.
Составляем СКИ1:
16Н |
Затем СКИ2:
08Н |
В микросхему слова командоинициализации заносятся по очереди. Управляющие слова записываются вначале в регистр-аккумулятор А МП, а затем выводится в микросхему.
Пример программы инициализации контроллера прерываний | |
MVI A,16H | : СКИ1 заносится в регистр А МП |
OUT 98H | : СКИ1 выводится в микросхему |
MVI A,08Н | : СКИ2 заносится в регистр А МП |
OUT 99H | : СКИ2 выводится в микросхему 4. |
Алгоритм управления (рис. 4.6.) предусматривает следующие действия:
Инициализация – в этом блоке осуществляется задание режимов всем программируемым вспомогательным микросхемам системы, в данном случае осуществляется запись управляющих слов в регистры управления;
Считывание состояния системы - осуществляется опрос датчиков (ввод из порта А);
РА0 = 1 - проверка состояния датчика SA1, проверяется состояние разряда РА0, если есть логическая 1 датчик включен (ДА), если логический 0 датчик выключен. Здесь алгоритм разветвляется в случае ДА - переход к вкл.U1, если НЕТ - переход откл.U1.
Вкл U1 - включение исполнительного устройства U1, для этого необходимо установить разряд РВО порта В в логическую 1;
ОТКЛ U1- отключение исполнительного устройства U1 для этого необходимо установить разряд РВО порт В в логический 0;
|
ряда РА1, если есть логическая 1 датчик включен (ДА), если логический 0 датчик выключен. Здесь алгоритм разветвляется в случае ДА - переход к ВКЛ U2, если НЕТ - переход ОТКЛ U2.
ВКЛ U2 - включение исполнительного устройства U2, для этого необходимо установить разряд РВ1 порта В в логическую 1;
Откл U2- отключение исполнительного устройства U2 для этого необходимо установить разряд РВ1 порт В в логический 0; ОТКЛ U1- отключение исполнительного устройства U1 для этого необходимо установить разряд РВО порт В в логический 0; РА2 = 1 - проверка состояния датчика SA3, проверяется состояние разряда РА2, если есть логическая 1 датчик включен (ДА), если логический 0 датчик выключен. Здесь алгоритм разветвляется в случае ДА - переход к ВКЛ U3, если НЕТ - переход ОТКЛ U3.
ВКЛ U3 - включение исполнительного устройства U3, для этого необходи
Программа работы связана с алгоритмом при помощи меток SA, ON, OFF.
Каждый блок SA 1, SA 2, SA 3 начинается с того, что в регистр A помещается состояние датчиков. Затем провепряется соответствующий разряд наложением маски и программа разветвляется, если результат равен нулю.
В блоках ON 1, ON 2, ON 3 осуществляются операции включения соответствующих исполнительных устройств. Состояние устройств (включено – 1, отключено – 0) запоминается в регистре C. Информация переносится в регистр A, требуемый бит устанавливается в логическую 1 наложением маски, с помощью операции ИЛИ. Полученные данные выводятся в порт B.
|
|
В блоках OFF 1, OFF 2, OFF3 осуществляется операция отключения соответствующих исполнительных устройств. Состояние устройств (включено – 1, отключено -0. Информация переносится в регистр A, требуемый бит устанавливается в логический 0 наложением маски, с помощью операции И. Полученные данные выводятся в порт B.
Адрес | Код | Метка | Команда | Комментарий |
080А 080В 080С 080D 080E 080F 081A 081B 081C 081D 081E 081F 082A 082B 082C 082D 082E 082F 083A 083B 083C 083D 083E 083F 084A 084B 084C 084D 084E 084F 085A 085B 085C 085D 085E 085F 086A 086B 086C 086D 086E 086F 087A 087B 087C 087D 087E 087F 088A 088B 088C 088D 088E 088F 089A 089B 089C 089D 089E 089F 0A00 0A01 0A02 0A03 0A04 0A05 0A06 0A07 0A08 0A09 0A0A 0A0B 0A0C 0A0D 0A0E 0A0F 0A10 0A11 0A12 0A13 0A14 | 3E 3C D3 3E 3C D3 3E D3 3E D3 3E 0A D3 3E D3 3E D0 D3 3E D3 3E D3 3E D3 3E D3 3E B0 D3 3E EO D3 3E 2E D3 3E D3 3E D0 D3 3E D3 3E D3 3E D3 3E D3 D8 FE CA 3E A0 C2 6D 3E B0 D3 C3 6D 3E FE A0 D3 D8 FE CA 3E A0 C2 3E B0 D3 C3 3E FD A0 D3 D8 FE CA 9F 3E A0 C2 3E B0 D3 C3 3E FB A0 D3 C3 3E B0 D3 C9 3E BO D3 C9 3E B0 D3 C9 | MARK 1: OFF 1: SA 2: OFF 2: SA 3: OFF 3: ON 1: ON 2: ON 3: | MVI A, 3CH OUT 90H MVI A, 3CH OUT 84 MVI A, 84H OUT 83H MVI A, 12H OUT 94H MVI A, 0AH OUT 95H MVI A, 36H OUT 93H MVI A, D0H OUT 90H MVI A, 07H OUT 90H MVI A, 70H OUT 93H MVI A, 88H OUT 91H MVI A, 13H OUT 91H MVI A, B0H OUT 93H MVI A, E0H OUT 92H MVI A, 2EH OUT 92H MVI A, 36H OUT 87H MVI A, D0H OUT 84H MVI A, 07H OUT 84H MVI A, 70H OUT 87H MVI A, 08H OUT 85H MVI A, 52H OUT 85H IN 80H CPI O9H JZ OFF 1 B2 B3 MVI A, 21H ANA B JNZ SA 2 B2 B3 MVI A, 20H ORA B MOV B, A OUT 81H JMP SA 2 B2 B3 MVI A, FEH ANA B MOV B, A OUT 81H IN 80H CPI 05H JZ OFF 2 B2 B3 MVI A, 42H ANA B JNZ SA 3 B2 B3 MVI 40H ORA B MOV B, A OUT 81H JMP SA 3 B2 B3 MVI A, FDH ANA B MOV B, A OUT 81H IN80H CPI 02H JZ OFF3 B2 B3 MVI A, 84H ANA B JNZ MARK 1 B2 B3 MVI A, 80H ORA B MOV B, A OUT 81H JMP MARK 1 B2 B3 MVI A, FBH ANA B MOV B, A OUT 81H JMP MARK 1 B2 B3 MVI A, 01H ORA B MOV B, A OUT 81H RET MVI A,02H ORA B MOV B, A OUT 81H RET MVI A, 04H ORA B MOV B, A OUT 81H RET | загрузка в аккумулятор управляющего слова таймера №1 загрузка в аккумулятор управляющего слова таймера №2 загрузка в аккумулятор управляющего слова микросхемы ввода-вывода загрузка управляющего слова контроллера прерывания в аккумулятор делитель частоты 2 МГц 2*103 = 07D0H сначала младший байт, затем старший счетчик № 0 (таймер 1) выдержка времени счетчика №1 t1 = 5 секунд (1388Н) выдержка времени счетчика №2 t2 = 12 секунд (2ЕЕ0Н) делитель частоты 2 МГц 2*103 = 07D0H сначала младший байт, затем старший счетчик № 0 (таймер 2) выдержка времени счетчика №1 (таймер 2) t3 = 21 секунда (5208Н) запрашивается состояние датчиков для проверки состояния датчиков накладывается маска, если датчик не сработал переход к OF 1 проверка таймера №1 и К1 на включение запуск таймера 1 переход к SA 2 отключение исполнительного устройства №1 обращение к порту А наложение маски если равно 0 переход на OFF 2 проверка таймера 2 и К2 на включение запуск таймера 2 переход к SA 3 отключение исполнительного устройства №2 обращение к порту А наложение маски =0 переход на OFF 3 проверка таймера 3 и К3 на включение запуск таймера 3 переход к МАRК 1 отключение исполнительного устройства №3 подпрограмма включения исполнительного устройства №1 подпрограмма включения исполнительного устройства №2 подпрограмма включения исполнительного устройства №3 |
|
|