Режимы пониженного энергопотребления МК80С31

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

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

Лабораторная работа №8 (Вариант №2)

Режимы пониженного энергопотребления МК80С31

Цельработы: Получение практических навыков программирования режимов пониженного энергопотребления МК80С31.

Задание для варианта №2: Написать программу, осуществляющую опрос кнопки, подключённой к P1.0. Период подключения равен 1мс. Алгоритм опроса должен обеспечить защиту от дребезга контактов кнопки (сигнал считается достоверным, если он не изменился в течение пяти опросов). Достоверное состояние кнопки должно быть выведено через P1.1.

Схема подключения кнопки SW1:

 


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

 


Листинг программы

BState  EQU     30h                  ;временная переменная для хранения состояния кнопки

Five      EQU     31h                  ;переменная для организации цикла из пяти итераций

ORG 0h                                    ;адрес старта по сигналу RST

ajmp Start                                 ;переход на метку Start

ORG 0Bh                                 ;прерывание встроенного таймера/счетчика 0

ljmp IntT0                                ;вызов подпрограмы обработки прерывания IntT0

ORG 30h                                 

;тело программы

Start:

mov IE, #10000010b                 ;разрешаем прерывание только встроенного таймера/счетчика 0

mov TMOD, #01h                     ;0-й таймер: 16-разрядный

mov TH0, #0FCh                      ;период таймера = 1мс

mov TL0, #017h                       ;FC17 = 64535 = (65535 - 1000)

setb TR0                                   ;включаем нулевой таймер

mov Five, #5                             ;инициализируем счётчик опросов

mov B, P1                                ;считываем состояние P1 в B

setb IDL                                   ;переводим МК в режим холостого хода

;подпрограмма обработки прерывания от таймера/счетчика 0

IntT0:                                                    

djnz Five, Skip                          ;если 5 опросов ещё не произошло возвращаемся из прерывания

mov Five, #5                             ;инициализируем счётчик опросов

mov A, #1                                ;копируем в аккумулятор 1

anl A, P1                                  ;A = A AND P1 = [0/1] (P1.0 = 0 => A = 0; P1.0 = 1 => A = 1;)

anl B, #1                                   ;B = B AND 1 = [0/1]

mov BState, A                          ;копируем текущее состояние P1.0 из аккумулятора в State

xrl A, B                        ;A = A XOR B = [0/1] (A = 0 => состояния совпадают; A = 1 =>

;состояния не совпадают;)

mov B, P1                                ;считываем состояние P1 в B

jnz Skip                                    ;если состояния не совпадают, возвращаемся

mov A, BState                          ;копируем состояние кнопки в аккумулятор для операции

;побитового сравнения

jb ACC.0, SetP11                      ;если нулевой бит A равен 1, устанавливаем бит P1.1

jmp ResetP11                            ;если нулевой бит A равен 0, сбрасываем бит P1.1

SetP11:

setb P1.1                                   ;устанавливаем P1.1

jmp Skip                                   ;возвращаемся из прерывания

ResetP11:

clr P1.1                                     ;сбрасываем P1.1

Skip:

clr TF0                                     ;сбрасываем флаг переполнения таймера

mov TH0, #0FCh                      ;заново инициализируем

mov TL0, #017h                       ;таймер

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

end

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

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