Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ до РГР з ЦП_1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
699.9 Кб
Скачать

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: