Блок управления двигателем на МК
Рефераты >> Программирование и компьютеры >> Блок управления двигателем на МК

subb a,#02h

mov r1,a

djnz r0,sdvig

djnz n_sd,beg1

mov n_sd,#0bh

ljmp inizial

; процедура индикации

beg1: mov r4,#0feh

mov dptr,#tabcod

mov r0,#47h

cycl: mov p4,#0ffh

mov a,@r0

movc a,@a+dptr

mov p5,a

mov a,r4

mov p4,a

rl a

mov r4,a

inc r0

lcall del

cjne r0,#4bh,cycl

ljmp beg

del: mov r1,#10

st_2: mov r2,#10

st_1: nop

nop

nop

djnz r2,st_1

djnz r1,st_2

ret

tabcod: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h

db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0ffh

db 0c6h,0f8h,0c0h,0c8h,88h,8ch,86h,80h,89h,0ceh,91h,0b0h,82h

; клавиатура

klav: push acc

push p4

push psw

setb psw.3

mov r4,#00h

mov r7,#04h

mov r6,#0feh

loop: mov a,r6

mov p4,a

rl a

mov r6,a

mov a,p4

mov r5,#04h

swap a

rotate: rrc a

jnc dbnc

inc r4

djnz r5,rotate

djnz r7,loop

ljmp quit

dbnc: mov r2,#0ah

m1: mov r3,#55h

m2: djnz r3,m2

djnz r2,m1

mov a,#0f0h

wait: mov p4,#0f0h

cjne a,p4,wait

mov r2,#0ah

m3: mov r3,#55h

m4: djnz r3,m4

djnz r2,m3

mov a,#09h

subb a,r4

jc func

rel: mov r0,#03h

mov r1,#48h

new: mov a,@r1

inc r1

mov @r1,a

mov a,r1

subb a,#02h

mov r1,a

djnz r0,new

mov r1,#47h

mov 47h,r4

ljmp quit

; определение режима по функциональной клавише

func: jb f_ind,quit

cjne r4,#0ah,g2

ljmp bakesp

g2: cjne r4,#0bh,g3

ljmp sta

g3: cjne r4,#0ch,g4

ljmp stop

g4: cjne r4,#0dh,g5

ljmp rezim

g5: cjne r4,#0eh,g6

ljmp rezim

g6: ljmp revers

quit: clr psw.3

pop psw

pop p4

pop acc

reti

; удаление символа

bakesp: jb f_rab,quit

mov 47h,48h

mov 48h,49h

mov 49h,#00h

ljmp quit

; старт. DEC->BIN

sta: jb f_rab,quit

mov 4ah,#0ah

mov b,#0ah

mov a,49h

mul ab

add a,48h

mov b,#0ah

mul ab

add a,47h

mov obor,a

; BIN*24

mov b,#18h

mov a,obor

mul ab

mov zn_l,a

mov zn_h,b

; деление1000000 на полученное значение

lcall div24

mov dli_l,rez_l

mov dli_h,rez_h

; старт измерение

mov tl0,#00h

mov th0,#00h

clr flag

mov indik,#00h

mov tmod,#10h

mov tcon,#04h

mov 4ah,#10h

mov 49h,#10h

mov 48h,#10h

mov 47h,#10h

mov 46h,#11h

mov 45h,#12h

mov 44h,#15h

mov 43h,#16h

mov 42h,#12h

mov 41h,#10h

setb f_ind

setb f_rev

setb f_sta

ljmp quit

; стоп

stop: jnb f_rab,quit

mov ien0,#81h

setb p3.4

setb p3.5

clr f_rab

mov 4ah,#10h

mov 49h,#10h

mov 48h,#10h

mov 47h,#10h

mov 46h,#10h

mov 45h,#11h

mov 44h,#12h

mov 43h,#13h

mov 42h,#14h

mov 41h,#10h

setb f_ind

clr f_sta

ljmp quit

; реверс

revers: jnb f_rab,out2

mov ien0,#81h

setb p3.4

setb p3.5

mov 4ah,#10h

mov 49h,#10h

mov 48h,#10h

mov 47h,#10h

mov 46h,#16h

mov 45h,#17h

mov 44h,#18h

mov 43h,#17h

mov 42h,#16h

mov 41h,#11h

jb f_nap,n1

mov adcon,#0eh

sjmp n2

n1: mov adcon,#0fh

n2: setb f_rev

cpl f_nap

setb f_ind

out2: ljmp quit

; режим обороты двигателя/нагрузка

rezim: jnb f_rab,out

cpl f_rez

jb f_rez,rez1

mov 4ah,#10h

mov 49h,#10h

mov 48h,#10h

mov 47h,#10h

mov 46h,#19h

mov 45h,#15h

mov 44h,#1ah

mov 43h,#16h

mov 42h,#1bh

mov 41h,#1ch

setb f_ind

out: ljmp quit

rez1: mov 4ah,#10h

mov 49h,#10h

mov 48h,#10h

mov 47h,#10h

mov 46h,#13h

mov 45h,#1dh

mov 44h,#13h

mov 43h,#16h

mov 42h,#13h

mov 41h,#12h

setb f_rezind

setb f_ind

ljmp quit

; процедура деления 3-х байт на 2-ва

div24: push psw

push acc

mov chi_3,#0fh

mov chi_2,#42h

mov chi_1,#40h

mov rez_h,#00

mov rez_l,#10h

mov a,zn_h

mov b,#10h

mul ab

mov zn_h,a

mov a,zn_l

mov b,#10h

mul ab

mov zn_l,a

mov a,b

add a,zn_h

mov zn_h,a

lp24: mov a,rez_l

rlc a

mov rez_l,a

mov a,rez_h

rlc a

mov rez_h,a

push psw

clr c

mov a,chi_1

rlc a

mov chi_1,a

mov a,chi_2

rlc a

mov chi_2,a

mov a,chi_3

rlc a

mov chi_3,a

push psw

clr c

mov a,chi_2

subb a,zn_l

mov chi_t,a

mov a,chi_3

subb a,zn_h

jc nosav

pop psw

sav: mov chi_3,a

mov chi_2,chi_t

inc rez_l

sjmp qsav

nosav: pop psw

jc sav

qsav: pop psw

jnc lp24

pop acc

pop psw

ret

; прерывание от датчика

int_1: jb flag,iz2

setb flag

setb tr1 ; первое вхождение. запустить таймер

reti

iz2: push psw ; второе вхождение

push acc

clr tr1

mov ien0,#80h

mov dli_i_l,tl1 ; сохранить измеренное значение

mov dli_i_h,th1 ;

; регулировка

clr c

mov a,dli_i_l

subb a,dli_l

mov a,dli_i_h

subb a,dli_h

jc mot_1

jb f_nap,nap11

setb p3.4

sjmp mot_0

nap11: setb p3.5

sjmp mot_0

mot_1: jb f_nap,nap01

clr p3.4

sjmp mot_0

nap01: clr p3.5

mot_0:

; индикация

jb f_ind,inizdp

djnz indik,inizdp

mov indik,#2fh

jb f_rez,chas

; индикация нагрузки

azp0: jnb adcon.4,azp0

mov a,addat

mov b,#0ah

div ab

mov 47h,b

mov b,#0ah

div ab

mov 48h,b

mov 49h,a

inizdp: ljmp iniz

; индикация частоты вращения

chas: jb f_nap,i_nap1

mov a,4ah

cjne a,#0ah,in_ob2

mov 4ah,#10h

in_ob2: dec 4ah

sjmp i_nap2

i_nap1: mov a,4ah

cjne a,#0fh,in_ob1

mov 4ah,#09h

in_ob1:inc 4ah

i_nap2: mov zn_l,dli_i_l

mov zn_h,dli_i_h

lcall div24 ; деление 3 байт на 2 байт

mov rezul,#01h ; деление 2 байт на 24

lp16: clr c

mov a,rezul

rlc a

mov rezul,a

push psw

clr c

mov a,rez_l

rlc a

mov rez_l,a

mov a,rez_h

rlc a

mov rez_h,a

push psw

clr c

mov a,rez_h

subb a,#18h

jc nosav16

pop psw

sav16: mov rez_h,a

inc rezul

sjmp qsav16

nosav16: pop psw

jc sav16

qsav16: pop psw

jnc lp16

; BIN->DEC

mov a,rezul

mov b,#0ah

div ab

mov 47h,b

mov b,#0ah

div ab

mov 48h,b

mov 49h,a

; инициализация нового запуска программы измерения

iniz: mov tl1,#00h

mov th1,#00h

clr flag

port_0: jb p3.3,port_0

port_1: jnb p3.3,port_1

mov ien0,#85h;84

pop acc

pop psw

reti

end


Страница: