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

Кафедра

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





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


на тему:

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


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

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

















Москва 2008 г.

Аннотация


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


Содержание


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


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

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

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

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

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


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

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

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

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

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

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

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

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


Установка обработчиков прерываний от:

1. com порта

2. прерываний от таймера T2





Основная функция MAIN:

Пустая операция

Установка разрешения прерываний:

- возможности прерываний

- com порта

- прерывания от таймера T2

начало



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

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


Прерывание от клавиатуры ПК

да

нет

начало

конец

Вывод результата на монитор компьютера

Арифметическая операция

- сброс

- перевод каретки

нет

Выполнение арифметической операции над числами N1 и N2

да


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


Определение активной строки в матричной клавиатуре

Определение активного столбца в матричной клавиатуре

начало

конец

Ввод первого числа

Запись числа N1 в регистр

да

Запись числа N2 в регистр

нет


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 гг.

Нравится материал? Поддержи автора!

Ещё документы из категории информатика:

X Код для использования на сайте:
Ширина блока px

Скопируйте этот код и вставьте себе на сайт

X

Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.

После чего кнопка «СКАЧАТЬ» станет доступной!

Кнопочки находятся чуть ниже. Спасибо!

Кнопки:

Скачать документ