
- •6.050901 – "Радіотехніка";
- •1. Завдання на ргр. Варіант №15
- •2. Розробка принципової схеми мікропроцесорного пристрою
- •Програмне забезпечення для першого мк51 :
- •4. Програмне забезпечення для другого мк51 :
- •Clr c ; скидання переносу
- •5 . Висновки
- •Л ітература
- •Розрахунково-графічна робота
- •65044, Одеса, пр. Шевченка, 1.
4. Програмне забезпечення для другого мк51 :
AD00 .EQU 20H
DATIND.EQU P1.0 ; до виводу DI
CLKIND.EQU P1.1 ; до виводу SK
---------------------------------------------------------------------------------------------------
ORG 0H
JMP 30H
ORG 0BH ; вектор переривання таймера 0
JMP TIME_0
ORG
01BH ;
вектор переривання таймера 1
JMP TIME_1
ORG 23H
JMP UART
ORG 30H
---------------------------------------------------------------------------------------------------
MOV DPTR, #200H
MOVX A, @DPTR
MOV R0, A ; молодший байт тривалості імпульсів
INC DPTR
MOVX A, @DPTR
MOV R1, A ; старший байт тривалості імпульсів
INC DPTR
MOVX A, @DPTR
MOV R2, A ; молодший байт періоду імпульсів
INC DPTR
MOVX A, @DPTR
MOV R3, A ; старший байт періоду імпульсів
----------------------------------------------------------------------------------------------------
MOV TMOD, #00010001B ; задання режимів для таймерів-лічильників
MOV SCON, #01010000B ; задання режиму UART
MOV IE, #00011010B ; дозвіл переривань
MOV TL0, R0
MOV TH0, R1
MOV TL1, R2
MOV TH1, R3
SETB EA ; дозвіл головних переривань
SETB P3.4
MOV TCON, #00010000B ; запуск 0-го лічильника
JMP $ ; зациклення
----------------------------------------------------------------------------------------------------
TIME_0:
CLR P3.4
MOV TCON, #01000000B ; запуск 1-го лічильника
RETI ; повернення з п-ми обробки переривань
----------------------------------------------------------------------------------------------------
TIME_1:
SETB P3.4
MOV TH0, R1
MOV TL0, R0
MOV TH1, R3
MOV TL1, R2
MOV TCON, #00010000B ; запуск 0-го счётчика
RETI ; повернення з п-ми обробки переривань
-----------------------------------------------------------------------------------------------------
UART: ; приймання даних
CLR
EA
PUSH R0 ; завантаження в стек R0
PUSH R1 ; завантаження в стек R1
PUSH R2 ; завантаження в стек R2
PUSН R3 ; завантаження в стек R3
MOV R2, #FFH
MOV A, SBUF
MOV R0, A ; читаємо старший байт
DJNZ R2, $
DJNZ R2, $
MOV A, SBUF
MOV R1, A ; читаємо младший байт
MOV DPTR, #20E
MOVX @DPTR, R0 ; записуємо в зовн. пам’ять дан. стар. байт
INC DPTR
MOVX @DPTR, R1 ; записуємо в зовн. пам’ять дан. мол. байт
-----------------------------------------------------------------------------------------------------
; Перетворюємо число в формат: тисячі, сотні, десятки, одиниці
; Визначаємо кількість тисяч
4_TISYACHI:
CLR C ; скидання переносу
MOV A, R1
SUBB A, #0A0H ; віднімання з А константи та зайому
MOV R2, A
MOV A, R0
SUBB A, #0FH ; віднімання з А константи та зайому
MOV R3, A
JNC 3_TISYACHI ; перехід на 3_TISYACHI якщо перенос = 0
MOV 20H, #4
JMP SOTNI ; перехід на підпрограму SOTNI
3_TISYACHI:
CLR C ; скидання переносу
MOV A, R1
SUBB A, #0B8H ; віднімання від А константи та зайому
MOV R2,A ; записування в R2
MOV A, R0 ; записування в А з R0
SUBB A, #0BH ; віднімання від А константи та зайому
MOV R3, A
JNC 2_TISYACHI перехід на 2_TISYACHI якщо перенос = 0
MOV 20H, #3
JMP SOTNI
2_TISYACHI:
CLR C ; скидання переносу
MOV A, R1
SUBB A, #0B0H
MOV R2, A
MOV
A, R0
SUBB A, #07H
MOV R3, A
JNC 1_TISYACHI
MOV 20h, #2
MP SOTNI
1_TISYACHI:
CLR C ; скидання переносу
MOV A, R1
SUBB A, #0E8H
MOV R2, A
MOV A, R0
SUBB A, #03H
MOV R3, A
MOV 20H, #1
JMP SOTNI
-----------------------------------------------------------------------------------------------------
; Визначаємо кількість сотень
SOTNI:
9_SOTNI:
CLR C ; скидання переносу
MOV A,R2
SUBB A, #84H
MOV R1, A
MOV A, R3
SUBB A, #03H
MOV R0, A
JNC 8_SOTNI
MOV 21H, #9
JMP DESATKI
8_SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #20H
MOV R1, A
MOV A, R3
SUBB A, #03H
MOV R0, A
JNC 7_SOTNI
MOV 21H,#8
JMP DESATKI
7_SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #0BCH
MOV R1,A
MOV
A, R3
SUBB A, #02H
MOV R0, A
JNC 6_ SOTNI
MOV 21H, #7
JMP DESATKI
6_ SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #58H
MOV R1, A
MOV A, R3
SUBB A, #02H
MOV R0, A
JNC 5_SOTNI
MOV 21H, #6
JMP DESATKI
5_SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #0F4H
MOV R1, A
MOV A, R3
SUBB A, #01h
MOV R0, A
JNC 4_SOTNI
MOV 21H, #5
JMP DESATKI
4_SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #90H
MOV R1, A
MOV A, R3
SUBB A, #01H
MOV R0, A
JNC 8_SOTNI
MOV 21H, #4
JMP DESATKI
3_SOTNI:
CLR C ; скидання переносу
MOV A, R2
SUBB A, #2CH
MOV R1, A
MOV A, R3
SUBB A, #01H
MOV
R0, A
JNC 2_SOTNI
MOV 21H, #3
JMP DESATKI
2_SOTNI:
CLR C ; скидання переносу
MOV A, R3
SUBB A, #0C8H
MOV R0, A
JNC 1_SOTNI
MOV 21H, #2
JMP DESATKI
1_SOTNI:
CLR C ; скидання переносу
MOV A, R3
SUBB A, #64H
MOV R0, A
MOV 21H, #1
JMP DESATKI
-----------------------------------------------------------------------------------------------------
; Визначаємо кількість десятків
DESATKI:
9_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #5AH
MOV R3, A
JNC 8_DESATKI
MOV 22H, #9
JMP EDINITSA
8_DESATKI:
CLR C
MOV A, R0
SUBB A, #50H
MOV R3, A
JNC 7_DESATKI
MOV 22H, #8
JMP EDINITSA
7_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #46H
MOV R3, A
JNC 6_DESATKI
MOV 22H, #7
JMP EDINITSA
6
_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #3CH
MOV R3, A
JNC 5_DESATKI
MOV 22H, #6
JMP EDINITSA
5_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #32H
MOV R3, A
JNC 4_DESATKI
MOV 22H, #5
JMP EDINITSA
4_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #28H
MOV R3, A
JNC 3_DESATKI
MOV 22H, #4
JMP EDINITSA
3_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #1EH
MOV R3, A
JNC 2_DESATKI
MOV 22H, #3
JMP EDINITSA
2_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #14H
MOV R3, A
JNC 1_DESATKI
MOV 22H, #2
JMP EDINITSA
1_DESATKI:
CLR C ; скидання переносу
MOV A, R0
SUBB A, #0AH
MOV R3, A
MOV 22H, #1
JMP
EDINITSA
; Визначаємо кількість одиниць
EDINITSA:
9_EDINITSA:
CLR C ; скидання переносу
MOV A, R3
SUBB A, #9H
JNC 8_EDINITSA ; перехід якщо перенос = 0
MOV 23H, #9
JMP INDVIV
8_EDINITSA: