Автор работы: Пользователь скрыл имя, 09 Сентября 2011 в 08:05, курсовая работа
В курсовой работе разрабатывается калькулятор на выполнение арифметических функций («+», «-», «*», «/») в 16-ой системе. В работе использовались прерывания от последовательного порта и таймера. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.
1. Техническое задание
2. Анализ технического задания
3. Алгоритм основной программы
4. Алгоритмы обработчиков прерываний
4.1 Алгоритм обработчика com порта
4.2 Алгоритм обработчика прерываний от таймера T2
5. Основная программа
6. Программа прерывания от клавиатуры ПК
7. Программа прерывания от матричной клавиатуры
8. Заключение
9. Литература
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
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;
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. Программа прерывания
от матричной клавиатуры
;;;;;;;;;;;;;;;;
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