Курсовая работа: Калькулятор на основе микропроцессора
Название: Калькулятор на основе микропроцессора Раздел: Рефераты по информатике Тип: курсовая работа |
Кафедра «Информационно-коммуникационные технологии» Курсовая работа на тему: «Калькулятор на основе микропроцессора» по дисциплине: «Микропроцессорные системы» Москва 2008 г. Аннотация В курсовой работе разрабатывается калькулятор на выполнение арифметических функций («+», «-», «*», «/») в 16-ой системе. В работе использовались прерывания от последовательного порта и таймера. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства. Содержание 2. Анализ технического задания 4. Алгоритмы обработчиков прерываний 4.1 Алгоритм обработчика com порта 4.2 Алгоритм обработчика прерываний от таймера T2 6. Программа прерывания от клавиатуры ПК 7. Программа прерывания от матричной клавиатуры Написать программу для микропроцессора семейства 51, имеющую следующие функции: 1. Ввод чисел с последовательного порта 2. Ввод с клавиатуры арифметических операций(«+», «-», «*», «/») и сброс 3. Вывод результата арифметических операций на монитор компьютера 2. Анализ технического задания В соответствии с техническим заданием устройство должно выполнять арифметические операции над введенными числами. Поэтому выделим два регистра ОЗУ для хранения введенных чисел: · N1 – для хранения первого числа · N2 – для хранения второго числа Основная программа инициализирует прерывания с последовательного порта и таймера, после чего переходит в режим «холостого хода», ожидая следующие события: · Ввод символов с порта P1 · Ввод символов с порта SBUF Предусмотрены прерывания с последовательного порта P1, которые опрашивают матричную клавиатуру. При каждом прерывании соответствующее число записывается в регистры, выделенные для хранения этих чисел. Также предусмотрены прерывания с порта SBUF. При каждом прерывании выполняется соответствующая арифметическая операция над числами, хранящимися в регистрах, или происходит обнуление всех регистров и перевод каретки. 3. Алгоритм основной программы 4. Алгоритмы обработчиков прерываний4.1 Алгоритм обработчика com порта4.2 Алгоритм обработчика прерываний от таймера T2org 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 серии на выполнение арифметических операций. Использованы прерывания от последовательного порта и таймера. 1. Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. Бородин В.Б., Шагурин М.И.М.:ЭКОМ, 1999. 2. Однокристальные микроЭВМ. Справочник. Бином: 1994. 3. Лекции «Микропроцессорные системы», Гудков Ю.И., 2007-2008 гг. |