Калькулятор на основе микропроцессора

Калькулятор арифметических функций в шестнадцатиричной системе с прерыванием от последовательного порта и таймера в системе "прототип" на основе микроконтроллера 51 семейства. Ввод с последовательного порта, клавиатуры, вывод результатов на монитор.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.08.2009
Размер файла 26,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

2

Кафедра

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

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

на тему:

«Калькулятор на основе микропроцессора»

по дисциплине:

«Микропроцессорные системы»

Москва 2008 г.

Аннотация

В курсовой работе разрабатывается калькулятор на выполнение арифметических функций(«+», «-», «*», «/») в 16-ой системе. В работе использовались прерывания от последовательного порта и таймера. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.

Содержание

  • 1. Техническое задание 4
  • 2. Анализ технического задания 5
  • 3. Алгоритм основной программы 6
  • 4. Алгоритмы обработчиков прерываний 7
    • 4.1 Алгоритм обработчика com порта 7
    • 4.2 Алгоритм обработчика прерываний от таймера T2 8
  • 5. Основная программа 9
  • 6. Программа прерывания от клавиатуры ПК 12
  • 7. Программа прерывания от матричной клавиатуры 22
  • 8. Заключение 50
  • 9. Литература 51

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

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

1. Ввод чисел с последовательного порта

2. Ввод с клавиатуры арифметических операций(«+», «-», «*», «/») и сброс

3. Вывод результата арифметических операций на монитор компьютера

2. Анализ технического задания

В соответствии с техническим заданием устройство должно выполнять арифметические операции над введенными числами. Поэтому выделим два регистра ОЗУ для хранения введенных чисел:

· N1 - для хранения первого числа

· N2 - для хранения второго числа

Основная программа инициализирует прерывания с последовательного порта и таймера, после чего переходит в режим «холостого хода», ожидая следующие события:

· Ввод символов с порта P1

· Ввод символов с порта SBUF

Предусмотрены прерывания с последовательного порта P1, которые опрашивают матричную клавиатуру. При каждом прерывании соответствующее число записывается в регистры, выделенные для хранения этих чисел. Также предусмотрены прерывания с порта SBUF. При каждом прерывании выполняется соответствующая арифметическая операция над числами, хранящимися в регистрах, или происходит обнуление всех регистров и перевод каретки.

3. Алгоритм основной программы

2

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

4.1 Алгоритм обработчика com порта

2

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

2

5. Основная программа

org 8000h

ljmp MAIN

org 8023h ;handler for COM-port **********

ljmp COM_PORT_HANDLER ; установка обработчика

org 8033h; P1.0

ljmp HNDL_P1

org 803Bh; P1.1

ljmp HNDL_P1

org 8043h; P1.2

ljmp HNDL_P1

org 804Bh; P1.3

ljmp HNDL_P1

MAIN:

clr TI

clr RI

TM2IR equ 0C8h;interrupt flag register

IEN1 equ 0E8h;T2 interrupt enable register;

TM2CON equ 0EAh;T2 config register;

IP1 equ 0F8h ;interrupt priority

CTCON equ 0EBh; capture control

mov IEN1, #0Fh

mov CTCON, #10101010b ;falling 0-3 bits in P1 if interupt occured

;mov TM2IR, #00Fh;enable T2 capture register (for P1)

mov TM2CON, #00000011b; Timer T2 mode select ;;;;;?

mov IP1, #00h

mov P1, #0Fh

mov 08H, #00H

setb IE.7;enable interrupt; checking разрешаем прерывания

setb IE.4;enable interrupt from COM - port

LOOP:

nop

jmp LOOP

ret

SLEEP:

mov R2, #100d

FOR1:

mov R1, #255d

FOR2:

djnz R1, FOR2

djnz R2, FOR1

ret

WAIT_TI:

WAITTI:

jnb TI, WAITTI

ret

VIVOD_FIRST_NUM:

mov R7, A

anl A, #11110000b

cjne A, #00000000b, VFN

jmp END_VFN

VFN:

swap A

add A, #30h

mov SBUF, A

call WAIT_TI

call SLEEP

END_VFN:

mov A, R7

ret

VIVOD_SECOND_NUM:

mov R7, A

anl A, #00001111b

add A, #30h

mov SBUF, A

call WAIT_TI

call SLEEP

mov A, R7

ret

VIVOD_FIRST_HEX:

mov R7, A

anl A, #11110000b

cjne A, #00000000b, VFH

jmp END_VFH

VFH:

swap A

add A, #37h

mov SBUF, A

call WAIT_TI

call SLEEP

END_VFH:

mov A, R7

ret

VIVOD_SECOND_HEX:

mov R7, A

anl A, #00001111b

add A, #37h

mov SBUF, A

call WAIT_TI

call SLEEP

mov A, R7

ret

end

6. Программа прерывания от клавиатуры ПК

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KEYBOARD-PC COMPLITE

COM_PORT_HANDLER: ; ****

jnb RI, OUT

GO:

jmp GO_

OUT:

jmp END_LST_KBD_PC

GO_:

mov A, SBUF

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ++++++++++++ ;;;;;;;;;;;;;;;;;;;

cjne A, #2bh, MINUS

mov SBUF, A

call WAIT_TI

call SLEEP

clr RI

mov SBUF, #'='

call WAIT_TI

call SLEEP

mov A, R3

clr C

addc A, R4

jnc NON_VIVOD_C

mov SBUF, #'1'

call WAIT_TI

call SLEEP

NON_VIVOD_C:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA

mov R0, A

anl A, #11110000b

swap A

subb A,#0ah

mov A, R0

jc VIVOD_CIFRA1

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp VTORAYA_CIFRA

VIVOD_CIFRA1:

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

clr C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA

VTORAYA_CIFRA:

mov R0, A

anl A, #00001111b

subb A,#0ah

mov A, R0

jc VIVOD_CIFRA2

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_LST_KBD_PC

VIVOD_CIFRA2:

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

clr C

MINUS:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ------------- ;;;;;;;;;;;;;;;;;;;

cjne A, #2dh, UMNOJ

mov SBUF, A

call WAIT_TI

call SLEEP

clr RI

mov SBUF, #'='

call WAIT_TI

call SLEEP

mov A, R3

clr C

subb A, R4

jnc MINUS_NON_VIVOD_C

MINUS_NON_VIVOD_C:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA

mov R0, A

anl A, #11110000b

swap A

subb A,#0ah

mov A, R0

jc MINUS_VIVOD_CIFRA1

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp MINUS_VTORAYA_CIFRA

MINUS_VIVOD_CIFRA1:

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

clr C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA

MINUS_VTORAYA_CIFRA:

mov R0, A

anl A, #00001111b

subb A,#0ah

mov A, R0

jc MINUS_VIVOD_CIFRA2

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_LST_KBD_PC

MINUS_VIVOD_CIFRA2:

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

clr C

UMNOJ:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ****************** ;;;;;;;;;;;;;;;;;;;

cjne A, #2ah, GO_DIV

jmp GO_UMNOJ

GO_DIV:

jmp DIVDIV

GO_UMNOJ:

mov SBUF, A

call WAIT_TI

call SLEEP

clr RI

mov SBUF, #'='

call WAIT_TI

call SLEEP

mov A, R3

mov B, R4

mul AB

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BBBBBBBBBBBB

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA

mov R3, A

mov R4, B

mov A, B

mov R0, A

anl A, #11110000b

swap A

subb A,#0ah

mov A, R0

jc UMNOJ_VIVOD_CIFRA1_A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp UMNOJ_VTORAYA_CIFRA_A

UMNOJ_VIVOD_CIFRA1_A:

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

clr C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA

UMNOJ_VTORAYA_CIFRA_A:

mov R0, A

anl A, #00001111b

subb A,#0ah

mov A, R0

jc UMNOJ_VIVOD_CIFRA2_A

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp VIVOD_A

UMNOJ_VIVOD_CIFRA2_A:

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

VIVOD_A:

mov A, R3

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAAAAAAAAA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA

mov R0, A

anl A, #11110000b

swap A

subb A,#0ah

mov A, R0

jc UMNOJ_VIVOD_CIFRA1

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp UMNOJ_VTORAYA_CIFRA

UMNOJ_VIVOD_CIFRA1:

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

clr C

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA

UMNOJ_VTORAYA_CIFRA:

mov R0, A

anl A, #00001111b

subb A,#0ah

mov A, R0

jc UMNOJ_VIVOD_CIFRA2

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_LST_KBD_PC

UMNOJ_VIVOD_CIFRA2:

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

DIVDIV:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /////////////////////// ;;;;;;;;;;;;;;;;;;;

cjne A, #2fh, NULL

mov SBUF, A

call WAIT_TI

call SLEEP

clr RI

mov SBUF, #'='

call WAIT_TI

call SLEEP

mov A, R3

mov B, R4

div AB

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA

mov R0, A

anl A, #11110000b

swap A

subb A,#0ah

mov A, R0

jc DIV_VIVOD_CIFRA1

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp DIV_VTORAYA_CIFRA

DIV_VIVOD_CIFRA1:

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA

DIV_VTORAYA_CIFRA:

mov R0, A

anl A, #00001111b

subb A,#0ah

mov A, R0

jc DIV_VIVOD_CIFRA2

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_LST_KBD_PC

DIV_VIVOD_CIFRA2:

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

NULL:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; СБРОС ;;;;;;;;;;;;;;;;;;;

cjne A, #39h, END_LST_KBD_PC

mov SBUF, #0dh

call WAIT_TI

call SLEEP

mov SBUF, #0dh

call WAIT_TI

call SLEEP

mov SBUF, #0ah

call WAIT_TI

call SLEEP

mov SBUF, #'>'

call WAIT_TI

call SLEEP

mov R3, #00000000b

mov R4, #00000000b

mov R5, #00000000b

clr TI

clr RI; ***

END_LST_KBD_PC:

reti ; ****

7. Программа прерывания от матричной клавиатуры

;;;;;;;;;;;;;;;;IDENTIFYCATION SERIES KEYS;;;;;;;;;;;;;;;;;;;; LITTLE COMPLITE

HNDL_P1:

mov TM2IR, #00h

jnb P1.0, P1_0

jnb P1.1, P1_1

jb P1.2, ref1

ljmp P1_2

ref1:

jb P1.3, ref2

ljmp P1_3

ref2:

ljmp END_HNDL

P1_0:

mov P1, #11111110b

jnb P1.4, P1_0_4

jnb P1.5, P1_0_5

jnb P1.6, P1_0_6

jnb P1.7, P1_0_7

jmp END_HNDL

P1_0_4:

call key5

clr TI

jmp END_HNDL

P1_0_5:

call key2

clr TI

jmp END_HNDL

P1_0_6:

call keyF

clr TI

jmp END_HNDL

P1_0_7:

call key8

clr TI

jmp END_HNDL

P1_1:

mov P1, #11111101b

jnb P1.4, P1_1_4

jnb P1.5, P1_1_5

jnb P1.6, P1_1_6

jnb P1.7, P1_1_7

jmp END_HNDL

P1_1_4:

call key4

clr TI

jmp END_HNDL

P1_1_5:

call key1

clr TI

jmp END_HNDL

P1_1_6:

call key0

clr TI

jmp END_HNDL

P1_1_7:

call key7

clr TI

jmp END_HNDL

P1_2:

mov P1, #11111011b

jnb P1.4, P1_2_4

jnb P1.5, P1_2_5

jnb P1.6, P1_2_6

jnb P1.7, P1_2_7

jmp END_HNDL

P1_2_4:

call keyB

clr TI

jmp END_HNDL

P1_2_5:

call keyA

clr TI

jmp END_HNDL

P1_2_6:

call keyD

clr TI

jmp END_HNDL

P1_2_7:

call keyC

clr TI

jmp END_HNDL

P1_3:

mov P1, #11110111b

jnb P1.4, P1_3_4

jnb P1.5, P1_3_5

jnb P1.6, P1_3_6

jnb P1.7, P1_3_7

jmp END_HNDL

P1_3_4:

call key6

clr TI

jmp END_HNDL

P1_3_5:

call key3

clr TI

jmp END_HNDL

P1_3_6:

call keyE

clr TI

jmp END_HNDL

P1_3_7:

call key9

clr TI

jmp END_HNDL

END_HNDL:

mov P1, #0Fh

mov r7,#0fh

DEL_1:

mov r6, #0FFh

DEL_2:

nop

djnz r6, DEL_2

djnz r7, DEL_1

reti

key5:

cjne R5, #00000000b, NUM2_5

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM5_1

mov A, #5h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_5

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM5_1:

mov A, R3

add A, #5h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_5

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_5:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM5_2

mov A, #5h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_5

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM5_2:

mov A, R4

add A, #5h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_5:

ret

key2:

cjne R5, #00000000b, NUM2_2

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM2_1

mov A, #2h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_2

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM2_1:

mov A, R3

add A, #2h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_2

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_2:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM2_2

mov A, #2h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_2

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM2_2:

mov A, R4

add A, #2h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_2:

ret

keyF:

cjne R5, #00000000b, NUM2_F

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUMF_1

mov A, #0fh

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_F

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMF_1:

mov A, R3

add A, #0fh

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_F

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_F:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUMF_2

mov A, #0fh

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_F

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMF_2:

mov A, R4

add A, #0fh

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_F:

ret

key8:

cjne R5, #00000000b, NUM2_8

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM8_1

mov A, #8h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_8

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM8_1:

mov A, R3

add A, #8h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_8

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_8:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM8_2

mov A, #8h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_8

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM8_2:

mov A, R4

add A, #8h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_8:

ret

key4:

cjne R5, #00000000b, NUM2_4

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM4_1

mov A, #4h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_4

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM4_1:

mov A, R3

add A, #4h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_4

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_4:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM4_2

mov A, #4h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_4

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM4_2:

mov A, R4

add A, #4h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_4:

ret

key1:

cjne R5, #00000000b, NUM2_1

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM1_1

mov A, #1h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_1

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM1_1:

mov A, R3

add A, #1h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_1

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_1:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM1_2

mov A, #1h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_1

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM1_2:

mov A, R4

add A, #1h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_1:

ret

key0:

cjne R5, #00000000b, SECOND_NUM

mov A, R3

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

mov R5, #00000001b

jmp END_KEY_0

SECOND_NUM:

mov A, R4

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_0

END_KEY_0:

ret

key7:

cjne R5, #00000000b, NUM2_7

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM7_1

mov A, #7h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_7

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM7_1:

mov A, R3

add A, #7h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_7

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_7:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM7_2

mov A, #7h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_7

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM7_2:

mov A, R4

add A, #7h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_7:

ret

keyB:

cjne R5, #00000000b, NUM2_B

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUMB_1

mov A, #0bh

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_B

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMB_1:

mov A, R3

add A, #0bh

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_B

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_B:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUMB_2

mov A, #0bh

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_B

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMB_2:

mov A, R4

add A, #0bh

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_B:

ret

keyA:

cjne R5, #00000000b, NUM2_A

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUMA_1

mov A, #0ah

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_A

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMA_1:

mov A, R3

add A, #0ah

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_A

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_A:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUMA_2

mov A, #0ah

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_A

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMA_2:

mov A, R4

add A, #0ah

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_A:

ret

keyD:

cjne R5, #00000000b, NUM2_D

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUMD_1

mov A, #0dh

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_D

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMD_1:

mov A, R3

add A, #0dh

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_D

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_D:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUMD_2

mov A, #0dh

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_D

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMD_2:

mov A, R4

add A, #0dh

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_D:

ret

keyC:

cjne R5, #00000000b, NUM2_C

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUMC_1

mov A, #0ch

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_C

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMC_1:

mov A, R3

add A, #0ch

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_C

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_C:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUMC_2

mov A, #0ch

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_C

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUMC_2:

mov A, R4

add A, #0ch

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_C:

ret

key6:

cjne R5, #00000000b, NUM2_6

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM6_1

mov A, #6h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_6

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM6_1:

mov A, R3

add A, #6h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_6

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_6:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM6_2

mov A, #6h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_6

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM6_2:

mov A, R4

add A, #6h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_6:

ret

key3:

cjne R5, #00000000b, NUM2_3

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM3_1

mov A, #3h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_3

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM3_1:

mov A, R3

add A, #3h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_3

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_3:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM3_2

mov A, #3h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_3

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM3_2:

mov A, R4

add A, #3h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_3:

ret

keyE:

cjne R5, #00000000b, NUM2_E

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUME_1

mov A, #0eh

swap A

mov R3,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_E

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUME_1:

mov A, R3

add A, #0eh

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_E

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_E:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUME_2

mov A, #0eh

swap A

mov R4,A

call VIVOD_FIRST_HEX

call WAIT_TI

call SLEEP

jmp END_KEY_E

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUME_2:

mov A, R4

add A, #0eh

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_HEX

call WAIT_TI

call SLEEP

END_KEY_E:

ret

key9:

cjne R5, #00000000b, NUM2_9

;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R3, #00000000b, ONFIRSTNUM9_1

mov A, #9h

swap A

mov R3,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_9

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM9_1:

mov A, R3

add A, #9h

mov R3, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_9

;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;

NUM2_9:

;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla

cjne R4, #00000000b, ONFIRSTNUM9_2

mov A, #9h

swap A

mov R4,A

call VIVOD_FIRST_NUM

call WAIT_TI

call SLEEP

jmp END_KEY_9

;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla

ONFIRSTNUM9_2:

mov A, R4

add A, #9h

mov R4, A

mov R5, #00000001b

call VIVOD_SECOND_NUM

call WAIT_TI

call SLEEP

END_KEY_9:

ret

8. Заключение

В курсовой работе запрограммирован микропроцессор 51 серии на выполнение арифметических операций. Использованы прерывания от последовательного порта и таймера.

9. Литература

1. Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. Бородин В.Б., Шагурин М.И.М.:ЭКОМ, 1999.

2. Однокристальные микроЭВМ. Справочник. Бином: 1994.

3. Лекции «Микропроцессорные системы», Гудков Ю.И., 2007-2008 гг.


Подобные документы

  • Разработка калькулятора на выполнение арифметических функций в 16-ой системе. Использование прерывания от последовательного порта и таймера. Применение системы "прототип" на основе микроконтроллера 51 семейства. Ввод чисел с последовательного порта.

    курсовая работа [18,4 K], добавлен 23.08.2009

  • Выбор элементной базы: микроконтроллера; микросхем для реализации системной шины; памяти; кварцевого генератора; сторожевого таймера; индикатора и коммутатора; последовательного порта. Программное обеспечение микропроцессорной системы обработки сигналов.

    курсовая работа [259,3 K], добавлен 19.04.2012

  • Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.

    курсовая работа [1,2 M], добавлен 07.07.2012

  • Изучение архитектуры микроконтроллера AT89C52 фирмы Atmel. Разработка проектной схемы вывода рисунков на графический ЖК-индикатор на основе микроконтроллера. Составление программы по обработке и выводу на жидкокристаллический дисплей данных с LPT порта.

    курсовая работа [76,1 K], добавлен 23.12.2012

  • Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".

    курсовая работа [966,9 K], добавлен 11.02.2016

  • Технические характеристики микропроцессора Aduc 812. Основные блоки электрической структурной схемы: микроконтроллер, клавиатура, индикатор, интерфейс последовательного midi-порта. Выбор элементной базы, описание алгоритма работы устройства и программы.

    курсовая работа [68,0 K], добавлен 23.12.2012

  • Основные способы создания в среде Lazarus на языке программирования Pascal программ "Калькулятор" и "Лабиринт". Создание программы "Простейший калькулятор". Вычисление значения выражения, сумм ряда чисел, системы функций "Логическая развилка".

    курсовая работа [2,9 M], добавлен 27.09.2014

  • Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.

    курсовая работа [176,8 K], добавлен 18.01.2016

  • Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.

    курсовая работа [1,2 M], добавлен 19.02.2015

  • Разработка структуры объекта "Калькулятор" - электронного вычислительного устройства для выполнения операций над числами или алгебраическими формулами. Текст программы, результат ее работы. Свойство реального объекта. Блок-схема, алгоритм приложения.

    контрольная работа [68,8 K], добавлен 11.04.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.