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

Кафедра

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

	

	

	

	

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

	

	на тему:

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

	

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

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

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	Москва 2008 г.

	
Аннотация

	

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

	

	
Содержание

	

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

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

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

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

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

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

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

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

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

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

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

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

	

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

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

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

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

	
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. Литература

	

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

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

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