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

Автор работы: Пользователь скрыл имя, 09 Сентября 2011 в 08:05, курсовая работа

Описание

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

Содержание

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

Работа состоит из  1 файл

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

— 102.50 Кб (Скачать документ)

     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

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