1. Григорьев В. Л. Программное обеспечение микропроцессорных систем. – М.: Энергоатомиздат, 1983.
2. Щелкунов Н. Н., Дианов А. П. Микропроцессорные средства и системы. – М.: Радио и связь, 1989.
3. Сташин В. В. Проектирование цифровых устройств на однокристальных микроконтроллерах. – М.: Энергоатомиздат, 1990.
4. Иванов В. И. Полупроводниковые оптоэлектронные приборы: Справочник – 2-е изд., перераб. И доп. – М.: Энергоатомиздат, 1989
5. Хвощ С. Т. Микропроцессоры и микроЭВМ в системах автоматического управления. Справочник. Л.: Машиностроение. Ленингр. отд-ние, 1987.
Текст программы.
; присваивание имен
p4 data 0e8h
p5 data 0f8h
ip0 data 0a9h
ip1 data 0b9h
ien0 data 0a8h
ien1 data 0b8h
adcon data 0d8h
addat data 0d9h
darp data 0dah
st1 data 52h
n_sd data 53h
obor data 54h
chi_3 data 55h
chi_2 data 56h
chi_1 data 57h
chi_t data 58h
zn_h data 59h
zn_l data 5ah
rez_h data 5bh
rez_l data 5ch
rezul data 5dh
dli_i_l data 5eh
dli_i_h data 5fh
dli_l data 60h
dli_h data 61h
temp data 62h
indik data 63h
flag bit 00h
f_ind bit 01h
f_rev bit 02h
f_nap bit 03h
f_sta bit 04h
f_rab bit 05h
f_rez bit 06h
f_rezind bit 07h
; определение векторов прерываний
org 0000h
sjmp start
org 0003h
ljmp klav
org 013h
ljmp int_1
; начальная инициализация
start:mov darp,#00h
mov adcon,#0fh
clr f_rezind
clr f_rab
clr f_rev
clr f_sta
setb f_nap
setb f_rez
mov n_sd,#0bh
mov st1,#3fh
mov ip0,#04h
mov ip1,#04h
mov sp,#65h
mov ien0,#81h
inizial:mov r0,#47h
mov r1,#03h
; начальное обнуление индикатора
numb:mov @r0,#00h
inc r0
djnz r1,numb
; определение режима работы и его индикация
jnb f_sta,re1
jb f_rez,re1
mov 4ah,#19h
sjmp re2
re1:mov 4ah,#10h
re2:clr f_ind
beg:jb f_ind,beg2
; определение режима работы
jnb f_rezind,na2
clr f_rezind
jb f_nap,na1
mov 4ah,#0fh
sjmp na2
na1: mov 4ah,#0ah
; запуск двигателя с проверкой направления вращения
na2: jnb f_rev,beg2
jb f_nap,napr1
clr p3.5
mov 4ah,#0fh
jb f_rez,napr
mov 4ah,#19h
sjmp napr
napr1: clr p3.4
mov 4ah,#0ah
jb f_rez,napr
mov 4ah,#19h
napr: clr f_rev
clr flag
setb f_rab
mov ien0,#85h
; остановка двигателя
beg2: jnb f_ind,beg1
djnz st1,beg1
mov st1,#05fh
; сдвиг индикационных ячеек вправо
mov r0,#0ahov r1,#49h
mov 40h,#10h
sdvig: mov a,@r1
inc r1
mov @r1,a
mov a,r1
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