Система прерываний микроконтроллера семейства MCS-51 (МК51). Блок-схема алгоритма. Текст программы

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования «Гомельский государственный

университет им. П. О. Сухого»

Кафедра   «Промышленная электроника»

Лабораторная работа № 10 по дисциплине: «МПТ»

«Система прерываний микроконтроллера»

Выполнил студент гр. ПМ-31

Принял преподаватель

Гомель 2010

Лабораторная работа № 10

Цель работы: Изучить систему прерываний микроконтроллеров семейства MCS-51 (МК51). Исследовать работу системы прерываний с помощью симулятора AVSIM51 на персональном компьютере.

Решения задач для самостоятельной работы

Задача 1.Разработайте программу для МКУ, которая отображает на светодиодах  VD1 – VD8 в двоичном коде количество нажатий на кнопку  SB1. При нажатии кнопки поступает запрос прерывания  /INT0.

Блок-схема алгоритма:

Текст программы

ORG   0000H

JMP   MAIN           ; Переход на метку  MAIN

ORG  0003H          ; Вектор внешнего прерывания  /INT0

CALL SUMMA

RETI                       ; Возврат из прерывания

MAIN:     MOV  SP,#38H     ; Определить стек

SETB  EX0           ; Разрешить прерывания от /INT0

SETB  EA             ; Общее разрешение прерываний

SETB  IT0             ; Срабатывание прерывания по срезу 1->0

STOP:      NOP

JMP  STOP           ; Зацикливание программы                      

SUMMA:  MOV A,P2          ; Загрузка из порта числа нажатий

CPL A                  ; Инверсия аккумулятора

ADD A,#1            ; Увеличение на единицу числа нажатий

CPL A                  ; Инверсия аккумулятора

MOV P2,A           ; Загрузка в порт Р2

RET

END

Задача 2. Разработайте программу для МКУ, которая выводит состояние датчиков предельных температур   (см. п.3.3 лабораторной работы № 9) на светодиоды  VD1 – VD8 каждый раз, когда нажимается кнопка  SB1 (при нажатии кнопки в МК поступает запрос прерывания  /INT0). Длительность индикации – 5 секунд. Затем все светодиоды гаснут.

Текст программы

ORG   0000H

JMP   MAIN          ; Переход на метку  MAIN

ORG  0003H          ; Вектор внешнего прерывания  /INT0

CALL RDIN          ; Вызов подпрограммы считывания из Р1

RETI                      ; Возврат из прерывания

MAIN:     MOV  SP,#38H       ; Определить стек

SETB  EX0             ; Разрешить прерывания от /INT0

SETB  EA               ; Общее разрешение прерываний

SETB  IT0               ; Срабатывание прерывания по срезу 1->0

STOP:            NOP

JMP  STOP              ; Зацикливание программы  

RDIN:            MOV A,P1        ; Загрузка состояния порта Р1

CJNE A,#0,FIRE     ; Переход если не равно 0

JMP FIN                  ; Переход в конец подпрограммы

FIRE:       CALL FLASH         ; Вызов подрограммы обработки индикации светодиодов

FIN:         NOP                         ; Конец подпрограммы

RET

FLASH:   MOV P2,#0             ; Зажигание светодиодов Р2

CALL DEL5S         ; Индикация светодиодов в течении

MOV P2,#FFH

RET

DEL5S:    MOV   R4, #5          ; Загрузка в R4 числа вызовов подпрограммы  DEL1S

LOOP:     CALL  DEL1S         ; Задержка на 1 с

DJNZ  R4, LOOP    ; Декремент  R4  и цикл, если  (R4) ? 0

RET

DEL1S:    MOV  R7, #8                 ; R7 – счетчик внешнего цикла

MOV  R5, #0                 ; R5 – счетчик внутреннего цикла

LOOP2:   MOV  R6, #243              ; R6 – счетчик среднего цикла

LOOP1:   DJNZ  R5, LOOP1         ; LOOP1  выполняется

DJNZ  R6, LOOP1         ; за 125 мс (при fclk = 12 МГц)

DJNZ  R7, LOOP2         ; LOOP2  выполняет LOOP1  8 раз

RET

END

 Задача 3. Разработайте программу, которая производит циклическое включение и выключение светодиодов  VD1 – VD8 определенное число раз. Это число равно двоичному коду, заданному переключателями на линиях  P1.0, P1.1, P1,2  порта МК. Цикл включения и выключения начинается после нажатия на кнопку  SB1, при этом на вход  P3.2  поступает запрос прерывания. Длительность включенного и выключенного состояния светодиодов равна  1 секунде.

Блок-схема алгоритма

Текст программы

ORG   0000H

JMP   MAIN         ; Переход на метку  MAIN

ORG  0003H         ; Вектор внешнего прерывания  /INT0

CALL MIG           ; Вызов подпрограммы обработки индикации светодиодов

RETI                     ; Возврат из прерывания

MAIN:     MOV  SP,#38H   ; Определить стек

SETB  EX0          ; Разрешить прерывания от /INT0

SETB  EA                     ; Общее разрешение прерываний

SETB  IT0                    ; Срабатывание прерывания по срезу 1->0

MOV A,#00000111B   ; Создание маски

ANL A,P1                     ; Обнуление неиспользуемых линий порта Р1

MOV P1,A                    ; Возврат обработанного значения

CLR A                           ; Очистка аккумулятора

STOP:      NOP

JMP  STOP                   ; Зацикливание программы

MIG:        MOV A,P1               ; Загрузка в аккумулятор числа повторений

MOV R4,A                    ; Инициализация счетчика повторений

BGN:       CALL DEL1S          ; Ожидание 1 сек

MOV P2,#0                    ; Включение светодиодов

CALL DEL1S                ; Ожидание 1 сек

MOV P2,#FFH              ; Выключение светодиодов

DJNZ R4,BGN              ; Цикл если счетчик не нуль

RET

DEL1S:    MOV  R7, #8                     ; R7 – счетчик внешнего цикла

MOV  R5, #0                     ; R5 – счетчик внутреннего цикла

LOOP2:   MOV  R6, #243                 ; R6 – счетчик среднего цикла

LOOP1:   DJNZ  R5, LOOP1             ; LOOP1  выполняется

DJNZ  R6, LOOP1            ; за 125 мс (при fclk = 12 МГц)

DJNZ  R7, LOOP2            ; LOOP2  выполняет LOOP1  8 раз

RET

END

Вывод: Изучили систему прерываний микроконтроллеров семейства MCS-51 (МК51). Исследовали работу системы прерываний с помощью симулятора AVSIM51 на персональном компьютере.

Похожие материалы

Информация о работе