Калькулятор на основе микропроцессора
Кафедра
«Информационно-коммуникационные технологии»
Курсовая работа
на тему:
«Калькулятор на основе микропроцессора»
по дисциплине:
«Микропроцессорные системы»
Москва 2008 г.
Аннотация
В курсовой работе разрабатывается калькулятор на выполнение арифметических функций («+», «-», «*», «/») в 16-ой системе. В работе использовались прерывания от последовательного порта и таймера. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.
Содержание
Написать программу для микропроцессора семейства 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 в регистр
нет
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
В курсовой работе запрограммирован микропроцессор 51 серии на выполнение арифметических операций. Использованы прерывания от последовательного порта и таймера.
Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. Бородин В.Б., Шагурин М.И.М.:ЭКОМ, 1999.
Однокристальные микроЭВМ. Справочник. Бином: 1994.
Лекции «Микропроцессорные системы», Гудков Ю.И., 2007-2008 гг.

Нравится материал? Поддержи автора!
Ещё документы из категории информатика:
Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.
После чего кнопка «СКАЧАТЬ» станет доступной!
Кнопочки находятся чуть ниже. Спасибо!
Кнопки:
Скачать документ