Вращение бинарного изображения вокруг своей оси на произвольный угол. Освоение предметной области ВИСУ на примере практической задачи работы с визуальными сценами, страница 6

.db 83h, 75h, 68h, 5Ah, 4Ch, 3Eh, 2Fh, 21h, 12h, 03h

.db F4h, E5h, D5h, C6h, B6h, A7h, 97h, 87h, 77h, 66h

.db 56h, 46h, 35h, 24h, 14h, 03h, F2h, E1h, D0h, BFh

.db AEh, 9Ch, 8Bh, 7Ah, 69h, 57h, 46h, 34h, 23h, 11h

org 8E00h

tan_h:

.db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h

.db 00h, 00h, 00h, 00h, 01h, 01h, 01h, 01h, 01h, 01h

.db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 02h, 02h, 02h

.db 02h, 02h, 02h, 02h, 02h, 02h, 02h, 03h, 03h, 03h

.db 03h, 03h, 03h, 03h, 03h, 04h, 04h, 04h, 04h, 04h

.db 04h, 05h, 05h, 05h, 05h, 05h, 06h, 06h, 06h, 06h

.db 07h, 07h, 07h, 08h, 08h, 08h, 09h, 09h, 0Ah, 0Ah

.db 0Bh, 0Ch, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 12h, 14h, 16h

.db 18h, 1Bh, 1Fh, 25h, 2Ch, 37h, 4Ah, 6Fh, DFh, FFh

org 8F00h

tan_l:

.db 11h, 23h, 34h, 46h, 57h, 69h, 7Bh, 8Dh, 9Eh, B0h

.db C2h, D5h, E7h, F9h, 0Ch, 1Fh, 32h, 45h, 58h, 6Ch

.db 80h, 94h, A8h, BDh, D2h, E8h, FEh, 14h, 2Ah, 41h

.db 59h, 71h, 89h, A3h, BCh, D7h, F2h, 0Dh, 2Ah, 47h

.db 65h, 84h, A5h, C6h, E8h, 9Ch, 30h, 57h, 7Eh, A8h

.db D3h, 00h, FFh, 60h, 94h, CBh, 04h, 40h, 80h, C4h

.db 0Ch, 59h, ABh, 02h, 61h, C6h, 34h, ABh, 2Dh, BBh

.db 58h, 06h, C7h, 9Fh, 94h, ABh, EBh, 61h, 19h, 27h

.db AAh, CBh, D0h, 2Ah, A6h, DDh, 89h, DCh, CAh, FFh

org 9C00h

frame:

Подпрограмма умножения r2r0*r3r2=r7r6r5r4

umnogeni:

mul42:

mov a, #16

mov r7, #0

mov r6, #0

mov r5, #0

mov r4, #0

mul42_1:

push acc

mov a, r2

rrc a

jnc mul42_2

mov a, r6

add a, r0

mov r6, a

mov a, r7

addc a, r1

mov r7, a

mul42_2:

mov a, r7

rrc a

mov r7, a       

mov a, r6

rrc a

mov r6, a

mov a, r5

rrc a

mov r5, a

mov a, r4

rrc a

mov r4, a

mov a, r3

rrc a

mov r3, a

mov a, r2

rrc a

mov r2, a

pop acc

djnz acc, mul42_1

ret

Подпрограмма деления r7r6r5r4/r1r0=r5r4

;delenie 4b/2b=2b

div42:

mov a, #16

dclk_42:

push acc

clr c

mov a, r4

rlc a

mov r4, a

mov a, r5

rlc a

mov r5, a

mov a, r6

rlc a

mov r6, a

mov a, r7

rlc a

mov r7, a

push psw

per1_42:

clr c

mov a, r6

subb a, r0

mov r6, a

mov a, r7

subb a, r1

mov r7, a

jc per2_42

pop psw

per3_42:

inc r4

sjmp per4_42

per2_42:

pop psw

jc per3_42

mov a, r6

add a, r0

mov r6, a

mov a, r7

addc a, r1

mov r7, a

per4_42:

pop acc

djnz acc, dclk_42

ret


7.  Методика использования программного обеспечения

Входными переменными в программе являются координаты точки, которую нужно передвинуть, и, соответственно, угол, на который она передвигается. За координату х отвечает переменная new_coord_x, за координату у – new_coord_y. А вот за угол отвечают несколько переменных: если требуется повернуть угол в пределах 90 градусов, то нужно записать константу угла в переменную alpha. Если же угол поворота больше 90 градусов, – к примеру, 110, то нужно записать 1 в переменную chetvg и 20 в alpha. Таким образом, увеличивая на 1 chetvg, мы увеличиваем угол поворота на 90 градусов.

Для корректного выполнения программы необходимо совершить следующие действия:

а) Обнулить область памяти фрейма, откомпилировав и запустив на МК эту программу

org 8100h      

mov dph, #9Ch

mov dpl. #00h

m1:           mov a, #0

movx @dptr, a

inc dptr

mov a, dph

cjne a, #FFh, m1

б) Рассчитать по формуле (3) местоположение в памяти исходной точки и записать этот адрес в регистр dptr участка программы “Задание точки”, находящейся по адресам 8460h;

в) Откомпилировать программу и запустить её на МК;

г) Открыть инструментальную среду MK-Vision и нажать кнопку “Порт”, которая установит связь между МК и PC;

д) Задать адрес 8400h в поле “Вкл. камеру” и нажать соответствующую кнопку;

е) Задать адрес 8480h в поле “Задать режим” и нажать соответствующую кнопку;

ж) Задать адрес 8460h в поле “Снять кадр” и нажать соответствующую кнопку – с помощью этого действия начальная точка запишется в область памяти фрейма;