Московский государственный институт электроники и математики

(технический университет)

Кафедра

«Информационно-коммуникационные технологии»

Курсовая работа

на тему:

«Таймер»

(по дисциплине: «Микропроцессорные системы»)

Выполнили:

Группа:

Проверил:

С – 85

Москва 2009 г.

Аннотация

В курсовой работе разрабатывается таймер, выполняющий прямой счет в десятичной форме. В работе использовались прерывания от последовательного порта и таймера, встроенного в контроллер. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.

1. Техническое задание

Написать программу для микропроцессора семейства 51, имеющую следующие функции:

Таймер прямого счета. Ввод трехзначного десятичного числа. Реализовать старт, сброс, пауза.

2. Алгоритм программы

1. Настраиваем прерывания

2. В цикле опрашиваем матричную клавиатуру.

2.1. Если нажали кнопку, то записываем значение в регистр R4.

2.2. Для избегания эффекта "залипания" запускаем пустой цикл для задержки.

3. Во время цикла могут поступить два типа прерывания.

3.1. Прерывание от последовательного порта.

3.1.1. Читаем символ из порта и если он один из символов a, s, d, то запускаем соответственно процедуры start, stop, pause.

3.2. Прерывание по таймеру.

3.2.1. Проверяем, установлен таймер в режим счета (R0=0).

3.2.2. Если переведен, то инкрементируем регистр R3.

3.2.3. Проверяем значение регистра счетчика R3 c введенным числом R4.

НЕ нашли? Не то? Что вы ищете?

3.2.4. Если равен, то сообщаем об этом и останавливаем счет и продолжаем выполнение программы.

3.2.5. Если не равен, то продолжаем инкрементировать счетчик.

4. Процедуры start, stop, pause.

4.1. Процедура start.

4.1.1. Выводим слово "start" в последовательный порт.

4.1.2. Переводим счетчик в режим счета (R0 = 1).

4.2. Процедура stop.

4.2.1. Выводим слово "stop" в последовательный порт.

4.2.2. Переводим счетчик в режим простоя (R0 = 0) и обнуляем счетчик (R3).

4.3. Процедура pause.

4.3.1. Выводим слово "pause" в последовательный порт.

4.3.2. Переводим счетчик в режим простоя (R0 = 0).

 

3. Алгоритмы обработчиков прерываний

 

 

5. Исходный код

ORG 8000h

ljmp main

ORG 8003h

reti

ORG 800Bh

call counter

reti

ORG 801Bh

reti

ORG 8023h

call _read

reti

ORG 8030h

counter:

cjne R0, #1, ret_c

djnz R1, ret_c

djnz R2, ret_c

mov R2, #15

inc R3

call out_n

mov A, R3

clr c

subb A, R4

cjne A, #0, ret_c

call boo

call pause

call creset

ret_c: ret

begin: mov B, #10

mov P1, #0FDh ;

jnb P1.4, b4

jnb P1.5, b1

jnb P1.7, b8

jnb P1.6, b0

mov P1, #0FEh

jnb P1.4, b5

jnb P1.5, b2

jnb P1.6, b_start

mov P1, #0F7h

jnb P1.4, b6

jnb P1.5, b3

jnb P1.6, b_stop

mov P1, #0FBh ;

jnb P1.4, b7

jnb P1.5, b9

jnb P1.6, b_reset

jmp begin

b0: call btn_0

call wait

jmp begin

b1: call btn_1

call wait

jmp begin

b2: call btn_2

call wait

jmp begin

b3: call btn_3

call wait

jmp begin

b4: call btn_4

call wait

jmp begin

b5: call btn_5

call wait

jmp begin

b6: call btn_6

call wait

jmp begin

b7: call btn_7

call wait

jmp begin

b8: call btn_8

call wait

jmp begin

b9: call btn_9

call wait

jmp begin

b_start: call start

call wait

jmp begin

b_stop: call pause

call wait

jmp begin

b_reset: call creset

call wait

jmp begin

btn_0: mov A, #'0'

call _out

mov A, R4

mul AB

mov R4, A

call wait

ret

btn_1: mov A, #'1'

call _out

mov A, R4

mul AB

add A, #1

mov R4, A

call wait

ret

btn_2: mov A, #'2'

call _out

mov A, R4

mul AB

add A, #2

mov R4, A

call wait

ret

btn_3: mov A, #'3'

call _out

mov A, R4

mul AB

add A, #3

mov R4, A

call wait

ret

btn_4: mov A, #'4'

call _out

mov A, R4

mul AB

add A, #4

mov R4, A

call wait

ret

btn_5: mov A, #'5'

call _out

mov A, R4

mul AB

add A, #5

mov R4, A

call wait

ret

btn_6: mov A, #'6'

call _out

mov A, R4

mul AB

add A, #6

mov R4, A

call wait

ret

btn_7: mov A, #'7'

call _out

mov A, R4

mul AB

add A, #7

mov R4, A

call wait

ret

btn_8: mov A, #'8'

call _out

mov A, R4

mul AB

add A, #8

mov R4, A

call wait

ret

btn_9: mov A, #'9'

call _out

mov A, R4

mul AB

add A, #9

mov R4, A

call wait

ret

start: mov A, #'S'

call _out

mov A, #'t'

call _out

mov A, #'a'

call _out

mov A, #'r'

call _out

mov A, #'t'

call _out

call draw_enter

mov R0, #1

ret

pause: mov A, #'S'

call _out

mov A, #'t'

call _out

mov A, #'o'

call _out

mov A, #'p'

call _out

call draw_enter

mov R0, #0

ret

creset: mov A, #'R'

call _out

mov A, #'e'

call _out

mov A, #'s'

call _out

mov A, #'e'

call _out

mov A, #'t'

call _out

call draw_enter

mov R3, #0

mov R4, #0

ret

boo: mov A, #'E'

call _out

mov A, #'N'

call _out

mov A, #'D'

call _out

call draw_enter

ret

_out: jnb TI, _out

clr TI

mov sbuf, A

ret

draw_enter: mov A, #0Ah

call _out

mov A, #0Dh

call _out

ret

out_n: mov A, R3

mov B,#100

div AB

add A,#30h

call _out

mov A, B

mov B,#10

div AB

add A,#30h

call _out

mov A, B

add A,#30h

call _out

call draw_enter

ret

_read: jnb RI, _ret_r

clr RI

mov A, SBUF

call _out

cjne A, #'a', re1

call _out

call start

jmp _ret_r

re1: cjne A, #'s', re2

call pause

jmp _ret_r

re2: cjne A, #'d', re3

call creset

jmp _ret_r

re3: mov R7, SBUF

mov A, R7

clr c

subb A, #48

jc _ret_r

mov R7, A

clr c

subb A, #10

jnc _ret_r

mov A, R4

mov B, #10

mul AB

add A, R7

mov R4, A

_ret_r: ret

wait: mov R5, #0

loop1: mov R6, #0

loop2: djnz R6, loop2

djnz R5, loop1

ret

main: mov R0, #0 ; 1 -- schet idet; 0 -- ne idet

mov R1, #0 ; registr dlia zaderzhki

mov R2, #15 ; registr dlia zaderzhki

mov R3, #0 ; schetchik

mov R4, #0 ; vvedennoe chislo

mov IP, #0

mov IE, #b

mov TMOD, #b

mov TCON, #b

mov TH0, #0ffh

jmp begin

ret

end

Заключение

В курсовой работе запрограммирован микроконтроллер 51 серии на ввод/вывод символов от матричной и компьютерной клавиатуры. Использованы прерывания от com порта и таймера T2.

Литература

Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. , М.:ЭКОМ, 1999. Лекции «Микропроцессорные системы», , гг. Описание команд 8051.