Калькулятор на основе микропроцессора
Калькулятор арифметических функций в шестнадцатиричной системе с прерыванием от последовательного порта и таймера в системе "прототип" на основе микроконтроллера 51 семейства. Ввод с последовательного порта, клавиатуры, вывод результатов на монитор.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.08.2009 |
Размер файла | 26,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2
Кафедра
«Информационно-коммуникационные технологии»
Курсовая работа
на тему:
«Калькулятор на основе микропроцессора»
по дисциплине:
«Микропроцессорные системы»
Москва 2008 г.
Аннотация
В курсовой работе разрабатывается калькулятор на выполнение арифметических функций(«+», «-», «*», «/») в 16-ой системе. В работе использовались прерывания от последовательного порта и таймера. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.
Содержание
- 1. Техническое задание 4
- 2. Анализ технического задания 5
- 3. Алгоритм основной программы 6
- 4. Алгоритмы обработчиков прерываний 7
- 4.1 Алгоритм обработчика com порта 7
- 4.2 Алгоритм обработчика прерываний от таймера T2 8
- 5. Основная программа 9
- 6. Программа прерывания от клавиатуры ПК 12
- 7. Программа прерывания от матричной клавиатуры 22
- 8. Заключение 50
- 9. Литература 51
1. Техническое задание
Написать программу для микропроцессора семейства 51, имеющую следующие функции:
1. Ввод чисел с последовательного порта
2. Ввод с клавиатуры арифметических операций(«+», «-», «*», «/») и сброс
3. Вывод результата арифметических операций на монитор компьютера
2. Анализ технического задания
В соответствии с техническим заданием устройство должно выполнять арифметические операции над введенными числами. Поэтому выделим два регистра ОЗУ для хранения введенных чисел:
· N1 - для хранения первого числа
· N2 - для хранения второго числа
Основная программа инициализирует прерывания с последовательного порта и таймера, после чего переходит в режим «холостого хода», ожидая следующие события:
· Ввод символов с порта P1
· Ввод символов с порта SBUF
Предусмотрены прерывания с последовательного порта P1, которые опрашивают матричную клавиатуру. При каждом прерывании соответствующее число записывается в регистры, выделенные для хранения этих чисел. Также предусмотрены прерывания с порта SBUF. При каждом прерывании выполняется соответствующая арифметическая операция над числами, хранящимися в регистрах, или происходит обнуление всех регистров и перевод каретки.
3. Алгоритм основной программы
2
4. Алгоритмы обработчиков прерываний
4.1 Алгоритм обработчика com порта
2
4.2 Алгоритм обработчика прерываний от таймера T2
2
5. Основная программа
org 8000h
ljmp MAIN
org 8023h ;handler for COM-port **********
ljmp COM_PORT_HANDLER ; установка обработчика
org 8033h; P1.0
ljmp HNDL_P1
org 803Bh; P1.1
ljmp HNDL_P1
org 8043h; P1.2
ljmp HNDL_P1
org 804Bh; P1.3
ljmp HNDL_P1
MAIN:
clr TI
clr RI
TM2IR equ 0C8h;interrupt flag register
IEN1 equ 0E8h;T2 interrupt enable register;
TM2CON equ 0EAh;T2 config register;
IP1 equ 0F8h ;interrupt priority
CTCON equ 0EBh; capture control
mov IEN1, #0Fh
mov CTCON, #10101010b ;falling 0-3 bits in P1 if interupt occured
;mov TM2IR, #00Fh;enable T2 capture register (for P1)
mov TM2CON, #00000011b; Timer T2 mode select ;;;;;?
mov IP1, #00h
mov P1, #0Fh
mov 08H, #00H
setb IE.7;enable interrupt; checking разрешаем прерывания
setb IE.4;enable interrupt from COM - port
LOOP:
nop
jmp LOOP
ret
SLEEP:
mov R2, #100d
FOR1:
mov R1, #255d
FOR2:
djnz R1, FOR2
djnz R2, FOR1
ret
WAIT_TI:
WAITTI:
jnb TI, WAITTI
ret
VIVOD_FIRST_NUM:
mov R7, A
anl A, #11110000b
cjne A, #00000000b, VFN
jmp END_VFN
VFN:
swap A
add A, #30h
mov SBUF, A
call WAIT_TI
call SLEEP
END_VFN:
mov A, R7
ret
VIVOD_SECOND_NUM:
mov R7, A
anl A, #00001111b
add A, #30h
mov SBUF, A
call WAIT_TI
call SLEEP
mov A, R7
ret
VIVOD_FIRST_HEX:
mov R7, A
anl A, #11110000b
cjne A, #00000000b, VFH
jmp END_VFH
VFH:
swap A
add A, #37h
mov SBUF, A
call WAIT_TI
call SLEEP
END_VFH:
mov A, R7
ret
VIVOD_SECOND_HEX:
mov R7, A
anl A, #00001111b
add A, #37h
mov SBUF, A
call WAIT_TI
call SLEEP
mov A, R7
ret
end
6. Программа прерывания от клавиатуры ПК
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KEYBOARD-PC COMPLITE
COM_PORT_HANDLER: ; ****
jnb RI, OUT
GO:
jmp GO_
OUT:
jmp END_LST_KBD_PC
GO_:
mov A, SBUF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ++++++++++++ ;;;;;;;;;;;;;;;;;;;
cjne A, #2bh, MINUS
mov SBUF, A
call WAIT_TI
call SLEEP
clr RI
mov SBUF, #'='
call WAIT_TI
call SLEEP
mov A, R3
clr C
addc A, R4
jnc NON_VIVOD_C
mov SBUF, #'1'
call WAIT_TI
call SLEEP
NON_VIVOD_C:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA
mov R0, A
anl A, #11110000b
swap A
subb A,#0ah
mov A, R0
jc VIVOD_CIFRA1
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp VTORAYA_CIFRA
VIVOD_CIFRA1:
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
clr C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA
VTORAYA_CIFRA:
mov R0, A
anl A, #00001111b
subb A,#0ah
mov A, R0
jc VIVOD_CIFRA2
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_LST_KBD_PC
VIVOD_CIFRA2:
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
clr C
MINUS:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ------------- ;;;;;;;;;;;;;;;;;;;
cjne A, #2dh, UMNOJ
mov SBUF, A
call WAIT_TI
call SLEEP
clr RI
mov SBUF, #'='
call WAIT_TI
call SLEEP
mov A, R3
clr C
subb A, R4
jnc MINUS_NON_VIVOD_C
MINUS_NON_VIVOD_C:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA
mov R0, A
anl A, #11110000b
swap A
subb A,#0ah
mov A, R0
jc MINUS_VIVOD_CIFRA1
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp MINUS_VTORAYA_CIFRA
MINUS_VIVOD_CIFRA1:
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
clr C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA
MINUS_VTORAYA_CIFRA:
mov R0, A
anl A, #00001111b
subb A,#0ah
mov A, R0
jc MINUS_VIVOD_CIFRA2
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_LST_KBD_PC
MINUS_VIVOD_CIFRA2:
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
clr C
UMNOJ:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ****************** ;;;;;;;;;;;;;;;;;;;
cjne A, #2ah, GO_DIV
jmp GO_UMNOJ
GO_DIV:
jmp DIVDIV
GO_UMNOJ:
mov SBUF, A
call WAIT_TI
call SLEEP
clr RI
mov SBUF, #'='
call WAIT_TI
call SLEEP
mov A, R3
mov B, R4
mul AB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BBBBBBBBBBBB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA
mov R3, A
mov R4, B
mov A, B
mov R0, A
anl A, #11110000b
swap A
subb A,#0ah
mov A, R0
jc UMNOJ_VIVOD_CIFRA1_A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp UMNOJ_VTORAYA_CIFRA_A
UMNOJ_VIVOD_CIFRA1_A:
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
clr C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA
UMNOJ_VTORAYA_CIFRA_A:
mov R0, A
anl A, #00001111b
subb A,#0ah
mov A, R0
jc UMNOJ_VIVOD_CIFRA2_A
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp VIVOD_A
UMNOJ_VIVOD_CIFRA2_A:
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
VIVOD_A:
mov A, R3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAAAAAAAAA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA
mov R0, A
anl A, #11110000b
swap A
subb A,#0ah
mov A, R0
jc UMNOJ_VIVOD_CIFRA1
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp UMNOJ_VTORAYA_CIFRA
UMNOJ_VIVOD_CIFRA1:
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
clr C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA
UMNOJ_VTORAYA_CIFRA:
mov R0, A
anl A, #00001111b
subb A,#0ah
mov A, R0
jc UMNOJ_VIVOD_CIFRA2
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_LST_KBD_PC
UMNOJ_VIVOD_CIFRA2:
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
DIVDIV:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /////////////////////// ;;;;;;;;;;;;;;;;;;;
cjne A, #2fh, NULL
mov SBUF, A
call WAIT_TI
call SLEEP
clr RI
mov SBUF, #'='
call WAIT_TI
call SLEEP
mov A, R3
mov B, R4
div AB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PERVAYA_CIFRA
mov R0, A
anl A, #11110000b
swap A
subb A,#0ah
mov A, R0
jc DIV_VIVOD_CIFRA1
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp DIV_VTORAYA_CIFRA
DIV_VIVOD_CIFRA1:
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VTORAYA_CIFRA
DIV_VTORAYA_CIFRA:
mov R0, A
anl A, #00001111b
subb A,#0ah
mov A, R0
jc DIV_VIVOD_CIFRA2
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_LST_KBD_PC
DIV_VIVOD_CIFRA2:
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
NULL:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; СБРОС ;;;;;;;;;;;;;;;;;;;
cjne A, #39h, END_LST_KBD_PC
mov SBUF, #0dh
call WAIT_TI
call SLEEP
mov SBUF, #0dh
call WAIT_TI
call SLEEP
mov SBUF, #0ah
call WAIT_TI
call SLEEP
mov SBUF, #'>'
call WAIT_TI
call SLEEP
mov R3, #00000000b
mov R4, #00000000b
mov R5, #00000000b
clr TI
clr RI; ***
END_LST_KBD_PC:
reti ; ****
7. Программа прерывания от матричной клавиатуры
;;;;;;;;;;;;;;;;IDENTIFYCATION SERIES KEYS;;;;;;;;;;;;;;;;;;;; LITTLE COMPLITE
HNDL_P1:
mov TM2IR, #00h
jnb P1.0, P1_0
jnb P1.1, P1_1
jb P1.2, ref1
ljmp P1_2
ref1:
jb P1.3, ref2
ljmp P1_3
ref2:
ljmp END_HNDL
P1_0:
mov P1, #11111110b
jnb P1.4, P1_0_4
jnb P1.5, P1_0_5
jnb P1.6, P1_0_6
jnb P1.7, P1_0_7
jmp END_HNDL
P1_0_4:
call key5
clr TI
jmp END_HNDL
P1_0_5:
call key2
clr TI
jmp END_HNDL
P1_0_6:
call keyF
clr TI
jmp END_HNDL
P1_0_7:
call key8
clr TI
jmp END_HNDL
P1_1:
mov P1, #11111101b
jnb P1.4, P1_1_4
jnb P1.5, P1_1_5
jnb P1.6, P1_1_6
jnb P1.7, P1_1_7
jmp END_HNDL
P1_1_4:
call key4
clr TI
jmp END_HNDL
P1_1_5:
call key1
clr TI
jmp END_HNDL
P1_1_6:
call key0
clr TI
jmp END_HNDL
P1_1_7:
call key7
clr TI
jmp END_HNDL
P1_2:
mov P1, #11111011b
jnb P1.4, P1_2_4
jnb P1.5, P1_2_5
jnb P1.6, P1_2_6
jnb P1.7, P1_2_7
jmp END_HNDL
P1_2_4:
call keyB
clr TI
jmp END_HNDL
P1_2_5:
call keyA
clr TI
jmp END_HNDL
P1_2_6:
call keyD
clr TI
jmp END_HNDL
P1_2_7:
call keyC
clr TI
jmp END_HNDL
P1_3:
mov P1, #11110111b
jnb P1.4, P1_3_4
jnb P1.5, P1_3_5
jnb P1.6, P1_3_6
jnb P1.7, P1_3_7
jmp END_HNDL
P1_3_4:
call key6
clr TI
jmp END_HNDL
P1_3_5:
call key3
clr TI
jmp END_HNDL
P1_3_6:
call keyE
clr TI
jmp END_HNDL
P1_3_7:
call key9
clr TI
jmp END_HNDL
END_HNDL:
mov P1, #0Fh
mov r7,#0fh
DEL_1:
mov r6, #0FFh
DEL_2:
nop
djnz r6, DEL_2
djnz r7, DEL_1
reti
key5:
cjne R5, #00000000b, NUM2_5
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM5_1
mov A, #5h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_5
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM5_1:
mov A, R3
add A, #5h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_5
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_5:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM5_2
mov A, #5h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_5
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM5_2:
mov A, R4
add A, #5h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_5:
ret
key2:
cjne R5, #00000000b, NUM2_2
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM2_1
mov A, #2h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_2
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM2_1:
mov A, R3
add A, #2h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_2
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_2:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM2_2
mov A, #2h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_2
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM2_2:
mov A, R4
add A, #2h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_2:
ret
keyF:
cjne R5, #00000000b, NUM2_F
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUMF_1
mov A, #0fh
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_F
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMF_1:
mov A, R3
add A, #0fh
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_F
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_F:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUMF_2
mov A, #0fh
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_F
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMF_2:
mov A, R4
add A, #0fh
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_F:
ret
key8:
cjne R5, #00000000b, NUM2_8
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM8_1
mov A, #8h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_8
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM8_1:
mov A, R3
add A, #8h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_8
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_8:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM8_2
mov A, #8h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_8
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM8_2:
mov A, R4
add A, #8h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_8:
ret
key4:
cjne R5, #00000000b, NUM2_4
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM4_1
mov A, #4h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_4
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM4_1:
mov A, R3
add A, #4h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_4
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_4:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM4_2
mov A, #4h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_4
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM4_2:
mov A, R4
add A, #4h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_4:
ret
key1:
cjne R5, #00000000b, NUM2_1
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM1_1
mov A, #1h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_1
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM1_1:
mov A, R3
add A, #1h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_1
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_1:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM1_2
mov A, #1h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_1
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM1_2:
mov A, R4
add A, #1h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_1:
ret
key0:
cjne R5, #00000000b, SECOND_NUM
mov A, R3
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
mov R5, #00000001b
jmp END_KEY_0
SECOND_NUM:
mov A, R4
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_0
END_KEY_0:
ret
key7:
cjne R5, #00000000b, NUM2_7
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM7_1
mov A, #7h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_7
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM7_1:
mov A, R3
add A, #7h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_7
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_7:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM7_2
mov A, #7h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_7
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM7_2:
mov A, R4
add A, #7h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_7:
ret
keyB:
cjne R5, #00000000b, NUM2_B
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUMB_1
mov A, #0bh
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_B
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMB_1:
mov A, R3
add A, #0bh
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_B
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_B:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUMB_2
mov A, #0bh
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_B
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMB_2:
mov A, R4
add A, #0bh
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_B:
ret
keyA:
cjne R5, #00000000b, NUM2_A
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUMA_1
mov A, #0ah
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_A
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMA_1:
mov A, R3
add A, #0ah
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_A
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_A:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUMA_2
mov A, #0ah
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_A
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMA_2:
mov A, R4
add A, #0ah
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_A:
ret
keyD:
cjne R5, #00000000b, NUM2_D
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUMD_1
mov A, #0dh
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_D
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMD_1:
mov A, R3
add A, #0dh
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_D
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_D:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUMD_2
mov A, #0dh
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_D
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMD_2:
mov A, R4
add A, #0dh
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_D:
ret
keyC:
cjne R5, #00000000b, NUM2_C
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUMC_1
mov A, #0ch
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_C
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMC_1:
mov A, R3
add A, #0ch
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_C
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_C:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUMC_2
mov A, #0ch
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_C
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUMC_2:
mov A, R4
add A, #0ch
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_C:
ret
key6:
cjne R5, #00000000b, NUM2_6
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM6_1
mov A, #6h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_6
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM6_1:
mov A, R3
add A, #6h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_6
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_6:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM6_2
mov A, #6h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_6
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM6_2:
mov A, R4
add A, #6h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_6:
ret
key3:
cjne R5, #00000000b, NUM2_3
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM3_1
mov A, #3h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_3
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM3_1:
mov A, R3
add A, #3h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_3
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_3:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM3_2
mov A, #3h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_3
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM3_2:
mov A, R4
add A, #3h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_3:
ret
keyE:
cjne R5, #00000000b, NUM2_E
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUME_1
mov A, #0eh
swap A
mov R3,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_E
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUME_1:
mov A, R3
add A, #0eh
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_E
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_E:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUME_2
mov A, #0eh
swap A
mov R4,A
call VIVOD_FIRST_HEX
call WAIT_TI
call SLEEP
jmp END_KEY_E
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUME_2:
mov A, R4
add A, #0eh
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_HEX
call WAIT_TI
call SLEEP
END_KEY_E:
ret
key9:
cjne R5, #00000000b, NUM2_9
;;;;;;;;;;;;;;;;;;;;;VVOD PERVOGO CHISLA;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R3, #00000000b, ONFIRSTNUM9_1
mov A, #9h
swap A
mov R3,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_9
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM9_1:
mov A, R3
add A, #9h
mov R3, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_9
;;;;;;;;;;;;;;;;;;;;;VVOD VTOROGO CHISLA;;;;;;;;;;;;;;;;;;;;;;
NUM2_9:
;;;;;;;;;;;;;;;;;;;;;vvod pervogo razryada chisla
cjne R4, #00000000b, ONFIRSTNUM9_2
mov A, #9h
swap A
mov R4,A
call VIVOD_FIRST_NUM
call WAIT_TI
call SLEEP
jmp END_KEY_9
;;;;;;;;;;;;;;;;;;;vvod vtorogo razryada chisla
ONFIRSTNUM9_2:
mov A, R4
add A, #9h
mov R4, A
mov R5, #00000001b
call VIVOD_SECOND_NUM
call WAIT_TI
call SLEEP
END_KEY_9:
ret
8. Заключение
В курсовой работе запрограммирован микропроцессор 51 серии на выполнение арифметических операций. Использованы прерывания от последовательного порта и таймера.
9. Литература
1. Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. Бородин В.Б., Шагурин М.И.М.:ЭКОМ, 1999.
2. Однокристальные микроЭВМ. Справочник. Бином: 1994.
3. Лекции «Микропроцессорные системы», Гудков Ю.И., 2007-2008 гг.
Подобные документы
Разработка калькулятора на выполнение арифметических функций в 16-ой системе. Использование прерывания от последовательного порта и таймера. Применение системы "прототип" на основе микроконтроллера 51 семейства. Ввод чисел с последовательного порта.
курсовая работа [18,4 K], добавлен 23.08.2009Выбор элементной базы: микроконтроллера; микросхем для реализации системной шины; памяти; кварцевого генератора; сторожевого таймера; индикатора и коммутатора; последовательного порта. Программное обеспечение микропроцессорной системы обработки сигналов.
курсовая работа [259,3 K], добавлен 19.04.2012Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Изучение архитектуры микроконтроллера AT89C52 фирмы Atmel. Разработка проектной схемы вывода рисунков на графический ЖК-индикатор на основе микроконтроллера. Составление программы по обработке и выводу на жидкокристаллический дисплей данных с LPT порта.
курсовая работа [76,1 K], добавлен 23.12.2012Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".
курсовая работа [966,9 K], добавлен 11.02.2016Технические характеристики микропроцессора Aduc 812. Основные блоки электрической структурной схемы: микроконтроллер, клавиатура, индикатор, интерфейс последовательного midi-порта. Выбор элементной базы, описание алгоритма работы устройства и программы.
курсовая работа [68,0 K], добавлен 23.12.2012Основные способы создания в среде Lazarus на языке программирования Pascal программ "Калькулятор" и "Лабиринт". Создание программы "Простейший калькулятор". Вычисление значения выражения, сумм ряда чисел, системы функций "Логическая развилка".
курсовая работа [2,9 M], добавлен 27.09.2014Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.
курсовая работа [176,8 K], добавлен 18.01.2016Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.
курсовая работа [1,2 M], добавлен 19.02.2015Разработка структуры объекта "Калькулятор" - электронного вычислительного устройства для выполнения операций над числами или алгебраическими формулами. Текст программы, результат ее работы. Свойство реального объекта. Блок-схема, алгоритм приложения.
контрольная работа [68,8 K], добавлен 11.04.2015