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

constx:                             equ 42h ; константа оси х

consty:                             equ 43h ; константа оси y

const_dph:                        equ 47h ; старший адрес начала фрейма

const_dpl:                        equ 48h ; младший адрес начала фрейма

x_coord:                           equ 4Bh ; координата точки по х

y_coord:                           equ 4Ch ; координата точки по у

new_coord_x:                  equ 44h ; координата точки по х

new_coord_y:                  equ 45h ; координата точки по у

cyc:                                  equ 4Dh ; количество проходов цикла по tg

tg_h:                                 equ 4Fh ; значение тангенса начального угла

tg_l:                                  equ 41h ; значение тангенса начального угла

alpha:                               equ 65h ; начальный угол

kolvopovt:                        equ 58h ; количество повторяющихся значений tg_h

beta:                                 equ 59h ; угол поворота

gamma:                            equ 5Ah ; конечный угол

sin_g_h:                           equ 5Ch ; синус конечного угла

sin_g_l:                            equ 5Dh ; синус конечного угла

cos_g_h:                           equ 5Eh ; косинус конечного угла

cos_g_l:                           equ 5Fh ; косинус конечного угла

sin_a_h:                           equ 60h ; синус начального угла

sin_a_l:                            equ 61h ; синус начального угла

cos_a_h:                           equ 62h ; косинус начального угла

cos_a_l:                            equ 63h ; косинус начального угла

funk:                                 equ 64h ; текущая функция(tg=0, ctg=1)

chetvg:                             equ 66h ; добавляет 90 градусов(1-90,2-180,3-270 и т.д.)

org 8400h

lcall tune                    ; Настройка камеры

ret

;------------------------------------------; кнопка "Задать режим"

org 8480h

ret      

;-------------------------------------------     

; Задание точки

org 8460h

mov dpl, #F8h ;первая четверть

mov dph, #FDh ;первая четверть

push a

mov a, #FFh

movx @dptr, a

pop a

ret

;------------------------------------------; Загрузка кадра в окно

; кнопка "Загрузить кадр"                    

org 8490h

lcall upload     ; Передача кадра в ЭВМ

ret      

;------------------------------------------;кнопка "Снять кадр" (поворот картинки)

org 8500h

push a

push b

push psw

mov new_coord_x,#60

mov new_coord_y,#1

mov consty, #72

mov constx, #88

mov x_coord,new_coord_x

mov y_coord,new_coord_y

mov funk,#0

mov beta, #0

mov chetvert, #1

mov chetvg, #1

mov alpha, #0

mov cyc, #12

lcall opred_tg

lcall get_gamma

lcall get_new_coords_x

pop psw

pop b

pop a

;------------------------------------------opred_tg:

clr c

mov r1, #0

mov a, new_coord_x

mov r0, new_coord_x

mov r2, new_coord_y

subb a, new_coord_y

jc $no

mov r0, new_coord_y

mov r2, new_coord_x

$no:          mov a,r2

push a

mov r2, #E8h ;домножаем на 1000

mov r3, #03h

lcall mul42

pop a

mov r0,a

mov r1, #0

lcall div42

mov tg_h,r5

mov tg_l,r4

;Определение угла

opr_ygla:

mov a, funk

cjne a, #0, ctg_h

mov dph,#8Eh

mov dpl, #00h

alpha_h:    movx a, @dptr

mov tg_h,r5

cjne a, tg_h, m1

jmp kol_povt

m1:           inc dptr

inc alpha

mov a, alpha

cjne a, #76, alpha_h

ost_ygli:   inc dptr

movx a, @dptr

mov b, a

inc alpha

mov a, tg_h

clr c

subb a, b

jc m2

jmp ost_ygli

ctg_h:       mov dph,#90h

mov dpl, #00h

alfa_h:      movx a, @dptr

inc dptr

mov b, a

inc alpha

mov a, tg_h

clr c

subb a, b

jnc m2

djnz cyc, alfa_h

ost_ygl:    movx a, @dptr

mov tg_h,r5

cjne a, tg_h, $m1

jmp kol_povt

$m1:         inc dptr

inc alpha

mov a, alpha

jmp ost_ygl

kol_povt:  mov tekush, a

m: cjne a,  tekush, m2

inc dptr

mov tekush, a

movx a, @dptr

inc kolvopovt

push a

mov a,kolvopovt

add a, alpha

subb a,#89