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

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Кафедра
«Інформаційно-комунікаційні технології»
Курсова робота
на тему:
«Калькулятор на основі мікропроцесора»
з дисципліни:
«Мікропроцесорні системи»
Москва 2008 р .

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

Зміст

1. Технічне завдання
2. Аналіз технічного завдання
3. Алгоритм основної програми
4. Алгоритми обробників переривань
4.1 Алгоритм обробника com порту
4.2 Алгоритм обробника переривань від таймера T2
5. Основна програма
6. Програма переривання від клавіатури ПК
7. Програма переривання від матричної клавіатури
8. Висновок
9. Література

1. Технічне завдання
Написати програму для мікропроцесора сімейства 51, що має наступні функції:
1. Введення чисел з послідовного порту
2. Введення з клавіатури арифметичних операцій («+», «-», «*», «/») і скидання
3. Висновок результату арифметичних операцій на монітор комп'ютера

2. Аналіз технічного завдання
Відповідно до технічного завдання пристрій повинен виконувати арифметичні операції над введеними числами. Тому виділимо два регістри ОЗУ для зберігання введених чисел:
· N1 - для зберігання першого числа
· N2 - для зберігання другого числа
Основна програма ініціалізує переривання з послідовного порту і таймера, після чого переходить в режим «холостого ходу», очікуючи наступні події:
· Введення символів з порту P1
· Введення символів з порту SBUF
Передбачені переривання з послідовного порту P1, які опитують матричну клавіатуру. При кожному перериванні відповідне число записується у регістри, виділені для зберігання цих чисел. Також передбачені переривання з порту SBUF. При кожному перериванні виконується відповідна арифметична операція над числами, що зберігаються в регістрах, або відбувається обнуління всіх регістрів і переведення каретки.

3. Алгоритм основної програми
SHAPE \ * MERGEFORMAT
Установка обробників переривань від:
1. com порту
2. переривань від таймера T2
Основна функція MAIN:
Порожня операція
Встановлення дозволу переривань:
- Можливості переривань
- Com порту
- Переривання від таймера T2
початок


4. Алгоритми обробників переривань

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

SHAPE \ * MERGEFORMAT
Переривання від клавіатури ПК
та
немає
початок
кінець
Висновок результату на монітор комп'ютера
Арифметична операція
- Скидання
- Переклад каретки
немає
Виконання арифметичної операції над числами N1 і N2
та


4.2 Алгоритм обробника переривань від таймера T2

SHAPE \ * MERGEFORMAT
Визначення активної рядки в матричній клавіатурі
Визначення активного стовпця в матричній клавіатурі
початок
кінець
Введення першого числа
Запис числа 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 рр..
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
43кб. | скачати


Схожі роботи:
Програма - калькулятор
Програма калькулятор 2
Програма Калькулятор
Калькулятор для матриць
Схема мікропроцесора
Регістри мікропроцесора
Робота в захищеному режимі мікропроцесора
Команда переміщення даних мікропроцесора К580
Архітектура мікропроцесора структура і загальна характеристика
© Усі права захищені
написати до нас