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

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

Кафедра


«Информационно-коммуникационные технологии»


Курсовая работа


на тему:


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


по дисциплине:


«Микропроцессорные системы»


Москва 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.
Алгоритм

основной программы




4. Алгоритмы обработчиков прерываний
4.1 Алгоритм обработчика com порта



4.2 Алгоритм обработчика прерываний от таймера
T2




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 гг.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:3086
Символов:39381
Размер:76.92 Кб.