|
;
; ЛАБОРАТОРНЫЕ РАБОТЫ ДЛЯ 80C51FA V1.001
$include(rg51fa.asm)
;
l_point equ 2000h;адрес ПЗУ
crlf equ 48h
dptrd equ 51h
accdec equ 4eh
acchex equ 3fh
accbin equ 42h
co equ 3ch
org l_point
TABSIN:; sin 256
DB 128,131,134,137,140,143,146,149
DB 152,155,158,161,164,167,170,173
DB 176,179,182,185,187,190,193,195
DB 198,201,203,206,208,210,213,215
DB 217,219,222,224,226,228,230,231
DB 233,235,236,238,240,241,242,244
DB 245,246,247,248,249,250,251,251
DB 252,253,253,254,254,254,254,254
DB 255,254,254,254,254,254,253,253
DB 252,251,251,250,249,248,247,246
DB 245,244,242,241,240,238,236,235
DB 233,231,230,228,226,224,222,219
DB 217,215,213,210,208,206,203,201
DB 198,195,193,190,187,185,182,179
DB 176,173,170,167,164,161,158,155
DB 152,149,146,143,140,137,134,131
DB 128,125,122,119,116,113,110,107
DB 104,101, 98, 95, 92, 89, 86, 83
DB 80, 77, 74, 71, 69, 66, 63, 61
DB 58, 55, 53, 50, 48, 46, 43, 41
DB 39, 37, 34, 32, 30, 28, 26, 25
DB 23, 21, 20, 18, 16, 15, 14, 12
DB 11, 10, 9, 8, 7, 6, 5, 5
DB 4, 3, 3, 2, 2, 2, 2, 2
DB 1, 2, 2, 2, 2, 2, 3, 3
DB 4, 5, 5, 6, 7, 8, 9, 10
DB 11, 12, 14, 15, 16, 18, 20, 21
DB 23, 25, 26, 28, 30, 32, 34, 37
DB 39, 41, 43, 46, 48, 50, 53, 55
DB 58, 61, 63, 66, 69, 71, 74, 77
DB 80, 83, 86, 89, 92, 95, 98,101
DB 104,107,110,113,116,119,122,125
;
; таблица переходов и имен меток
;
_tabsin:ret;байт "ljmp" или "ret"
dw tabsin;2 байта адpеса п/п или таблицы
db 'TABSIN';6 байт имени ASCII
_tabmod:ret
dw tabmod
db 'TABMOD'
_div211:ljmp div211;"ljmp" и 2 байта адpеса
db 'DIV211';6 байт имени ASCII
_div422:ljmp div422
db 'DIV422'
_mul123:ljmp mul123
db 'MUL123'
_dsec: ljmp dsec
db 'DSEC '
_zsum: ljmp zsum
db 'ZSUM '
_zmulb: ljmp zmulb
db 'ZMULB '
_zmul: ljmp zmul
db 'ZMUL '
_apz1: ljmp apz1
db 'APZ1 '
_intp: ljmp intp
db 'INTP '
_intt: ljmp intt
db 'INTT '
_intpi: ljmp intpi
db 'INTPI '
_sadc: ljmp sadc
db 'SADC '
_nust: ljmp nust
db 'NUST '
_pdac2: ljmp pdac2
db 'PDAC2 '
_dac2: ljmp dac2
db 'DAC2 '
_outdac:ljmp outdac
db 'OUTDAC'
_initt0:ljmp initt0
db 'INITT0'
_tmsau: ljmp tmsau
db 'TMSAU '
_zcmul: ljmp zcmul
db 'ZCMUL '
_frz: ljmp frz
db 'FRZ '
_fsin: ljmp fsin
db 'FSIN '
_flin: ljmp flin
db 'FLIN '
_eps: ljmp eps
db 'EPS '
_outmem:ljmp outmem
db 'OUTMEM'
_lfm: ljmp lfm
db 'LFM '
_t85: ljmp t85
db 'T85 '
_t256: ljmp t256
db 'T256 '
_f23: ljmp F23
db 'F23 '
_f7: ljmp F7
db 'F7 '
_dem16: ljmp dem16
db 'DEM16 '
_dem33: ljmp dem33
db 'DEM33 '
_dem35: ljmp dem35
db 'DEM35 '
_dem36: ljmp dem36
db 'DEM36 '
_dem37: ljmp dem37
db 'DEM37 '
_dem43: ljmp dem43
db 'DEM43 '
_dem63: ljmp dem63
db 'DEM63 '
_dem66: ljmp dem66
db 'DEM66 '
_dem67: ljmp dem67
db 'DEM67 '
_dem72: ljmp dem72
db 'DEM72 '
_dem73: ljmp dem73
db 'DEM73 '
_dem74: ljmp dem74
db 'DEM74 '
_dem74m:ljmp dem74m
db 'DEM74M'
_fadc: ljmp fadc
db 'FADC '
_SLADC: ljmp SLADC
db 'SLADC '
_period:ljmp period
db 'PERIOD'
_dlit: ljmp dlit
db 'DLIT '
; db 255
;... свободное пространство для будущих ljmp-ов
org ($/256+1)*256
; org l_point+256*2
;
TABMOD:; sin(t)*sin(5t) 256 точек
DB 128,128,128,128,128,128,128,129
DB 129,129,130,130,131,131,131,132
DB 132
DB 132,133,133,132,132,132,131,130
DB 129,127,126,124,122,120,118,116
DB 113,111,109,107,105,104,103,102
DB 102,102,102,103,105,108,110,114
DB 118,122,127,132,138,143,146,155
DB 160,166,171,176,180,183,186,188
DB 189,189,188,186,183,179,174,168
DB 161,153,145,136,126,116,106,96
DB 86,77,68,60,52,46,41,36
DB 34,32,33,34,37,42,48,56
DB 64,74,85,97,110,123,136,149
DB 163,176,188,200,210,220,228,235
DB 240,243,245,245,243,240,234,227
DB 218,208,197,184,171,157,143,128
DB 113,99,85,72,59,48,38,29
DB 22,17,13,11,11,13,16,21
DB 28,36,46,56,68,80,93,107
DB 120,133,146,159,171,182,192,200
DB 208,214,219,222,224,224,222,220
DB 215,210,204,196,188,179,170,160
DB 150,140,130,120,111,103,95,88
DB 82,77,73,70,68,67,67,68
DB 70,73,76,80,85,90,96,101
DB 107,113,118,124,129,134,138,142
DB 146,148,151,153,154,154,154,154
DB 153,152,151,149,147,145,143,140
DB 138,136,134,132,130,129,127,126
DB 125,124,124,124,123,123,124,124
DB 124,125,125,125,126,126,127,127
DB 127,128,128,128,128,128,128
;
; собственно п/п
;
;****************************************************
; (R2,R1) / R0 = [R1],{R2}
; используется A; R0 сохраняется; max 103 такта
;****************************************************
DIV211: MOV A,#8;счетчик
XCH A,R2
DV2110:;сдвиг влево остатка и частного
XCH A,R1
ADD A,ACC
XCH A,R1
RLC A
JC DV2111;переполнение остатка
;вычитание делителя из остатка
SUBB A,R0
JNC DV2112;разность > 0
;разность < 0, восстановление остатка
ADD A,R0
;цикл
DJNZ R2,DV2110
MOV R2,A
RET
DV2111:;переполнение остатка, разряд частного = 1
CLR C
SUBB A,R0
DV2112:;+ 1 в частное
INC R1
;цикл
DJNZ R2,DV2110
MOV R2,A
RET
;****************************************************
; (R5,R4,R3,R2) / (R1,R0) = [R3,R2],{R5,R4}
; используется A; (R1,R0) сохраняется; max 391 такт
;****************************************************
DIV422: MOV A,#16;счетчик
XCH A,R5
DV4220:;сдвиг влево остатка и частного
XCH A,R2
ADD A,ACC
XCH A,R2
;
XCH A,R3
RLC A
XCH A,R3
;
XCH A,R4
RLC A
XCH A,R4
;
RLC A
JC DV4221;переполнение остатка
;вычитание делителя из остатка
XCH A,R4
SUBB A,R0
XCH A,R4
;
SUBB A,R1
JNC DV4222;разность > 0
;разность < 0, восстановление остатка
XCH A,R4
ADD A,R0
XCH A,R4
;
ADDC A,R1
;цикл
DJNZ R5,DV4220
MOV R5,A
RET
DV4221:;переполнение остатка, разряд частного = 1
CLR C
XCH A,R4
SUBB A,R0
XCH A,R4
;
SUBB A,R1
DV4222:;+ 1 в частное
INC R2
;цикл
DJNZ R5,DV4220
MOV R5,A
RET
;*******************************
; (R2) * (R1,R0) --> (R2,R1,R0)
; используются регистры A,B
;*******************************
MUL123: MOV A,R2
MOV B,R0
MUL AB
XCH A,B
XCH A,R1
MOV R0,B
;
MOV B,R2
MUL AB
ADD A,R1
MOV R1,A
MOV A,B
ADDC A,#0
MOV R2,A
RET
;**********************************
;Пpогpаммная задеpжка на 0.1 секунды
;**********************************
DSEC: push 0
push 1
push 2
mov 0,#48
dsec1: mov 1,#47
dsec2: mov 2,#20
dsec0: djnz 2,DSEC0
djnz 1,dsec2
djnz 0,dsec1
pop 2
pop 1
pop 0
ret
;*************************
; для ЦФ 15.05.97
;*************************
; п/п суммиpования 2-байт. чисел с коppекцией пеpеполн-я
; (r7,r6)=(r7,r6)+(b,r2)
; (b,r2) - сохpаняется /16 м.ц. + 2 м.ц. на вызов/
zsum: mov a,r2
add a,r6
mov r6,a
mov a,b
addc a,r7
mov r7,a
jnb ov,zs_ret;нет пеpеполн-я
mov r7,#127
mov r6,#255
jnb b.7,zs_ret; +(127*256+255)
inc r7
inc r6; -(128*256)
zs_ret: ret
;*********************************
; п/п умножения знак.байта на код /8 м.ц. для"+", 17 м.ц. для "-"/
; (b)-число, (acc)-код (0...255)
zmulb: jb b.7,zm_m; знак "-"
mul ab
ret
zm_m: xch a,b
cpl a
inc a
mul ab
cpl a
add a,#1
xch a,b
cpl a
addc a,#0
xch a,b
ret
;******************************************
; п/п умн-я 2 байт. числа со знаком на код
; вход: (b,r2) - число, (acc)-код /использует r3/
; выход: (b,r2) - pезультат /окpуглен до 2 байт/
; в аккум-pе копия pегистpа b /для вывода в ЦАП/
;
;! коpоткий ваpиант /23 м.ц. для "+", 31 для "-"/
zmul: jnb b.7,zm_p
xrl 2,#255
xrl b,#255
; умножение модуля отp. числа на код с окpуглением до 2 байт
mov r3,a
mul ab; со ст. байта
xch a,r2; код
xch a,b; (b) - мл.байт числа
xch a,r3; r3,r2 - пеpвое пpоизв. (ст/мл)
mul ab
rlc a; окpугление
mov a,b
addc a,r2
cpl a; обр.код
mov r2,a
mov a,r3
addc a,#0
cpl a; обр.код
mov b,a
ret
zm_p:; умножение кодов с окpуглением до 2 байт
mov r3,a
mul ab; со ст. байта
xch a,r2; код
xch a,b; (b) - мл.байт числа
xch a,r3; r3,r2 - пеpвое пpоизв. (ст/мл)
mul ab
rlc a; окpугление
mov a,b
addc a,r2
mov r2,a
mov a,r3
addc a,#0
mov b,a
ret
;**************************************************************
; апеpиод.звено 1 п-ка: Yk=a1*Xk+b1*Yk1, a1=T0/T, b1=1-T0/T
; a1,b1 - в ОЗУ, Yk1(l/h) - в "косвенном" ОЗУ
; r0-указатель зоны паpаметpов, r1 - ук. зоны внутp. пеpеменных
; вход: Xk=(b,r2), выход: Yk=(b,r2) 100...110 м.ц.
;
apz1: mov a,@r0; a1
call zmul; a1*Xk
mov 6,r2
mov 7,b
inc r0
mov a,@r0; b1
mov 2,@r1; old Yk1L
inc r1
mov b,@r1; old Yk1h
call zmul; (b,r2)=b1*Yk1
call zsum; (r7,r6)=a1*Xk+b1*Yk1
dec r1
mov @r1,6; new Yk1L
inc r1
mov @r1,7; new Yk1h
mov 2,r6
mov b,r7
inc r0
inc r1
ret
;***********************************
; интегpатоp: Yk=Yk1+a1*Xk, a1=T0/T
; Yk1(l/h) - в "косв." ОЗУ, вход/выход: (b,r2)
; 70...80 м.ц.
intp:; p - по методу пp-ков
mov a,@r0; a1
call zmul; a1*Xk
mov 6,r2
mov r7,b
mov 2,@r1; Yk1L
inc r1
mov b,@r1; Yk1h
call zsum; (r7,r6)=Yk
mov 2,r6
mov b,r7; выход
dec r1
mov @r1,2; new Yk1L
inc r1
mov @r1,b; new Yk1h
inc r0
inc r1
ret
;***********************************
; интегpатоp: Yk=Yk1+a1*(Xk/2+Xk1/2)
; Xk1(l/h), Yk1(l/h) - в "косвенном" ОЗУ
; 100...110 м.ц.
intt:; t - по методу тpапеций
mov a,b
mov c,b.7; знак.бит
rrc a
xch a,r2
rrc a
xch a,r2
mov b,a; (b,r2)=Xk/2 /new/
mov 6,@r1; old (Xk1/2)L
mov @r1,2; new
inc r1
mov 7,@r1; old (Xk1/2)h
mov @r1,b; new
call zsum; Xk/2+Xk1/2
mov 2,r6
mov b,r7
mov a,@r0; a1
call zmul
inc r1
mov 6,@r1; old Yk1L
inc r1
mov 7,@r1; old Yk1h
call zsum
dec r1
mov @r1,6; new Yk1L
inc r1
mov @r1,7; new Yk1h
mov 2,r6
mov b,r7
inc r0
inc r1
ret
;****************************************
; ПИ-звено: Yk=Xk-Xk1+Yk1+a1*(Xk/2+Xk1/2)
; Xk1/2(L/h), Xk1(L/h), Yk1(L/h) - в "косв." ОЗУ
;
intpi: mov a,b
mov r5,a
mov c,b.7
rrc a
xch a,r2
mov r4,a; (r5,r4) - копия Xk
rrc a
xch a,r2
mov b,a; (b,r2)=Xk/2
;
mov 6,@r1; old (Xk1/2)L
mov @r1,2; new
inc r1
mov 7,@r1; old (Xk1/2)h
mov @r1,b; new
call zsum; Xk/2+Xk1/2
;
mov 2,r6
mov b,r7
mov a,@r0; a1
call zmul; (b,r2)=a1*(Xk/2+Xk1/2)
;
inc r1
mov a,@r1; old Xk1L
xch a,r4
mov @r1,a; new
clr c
subb a,r4
mov r6,a; Xk-Xk1 мл.байт
inc r1
mov a,@r1; old Xk1h
xch a,r5
mov @r1,a; new
subb a,r5
mov r7,a; Xk-Xk1 ст.байт
call zsum; Xk-Xk1+a1*(...)
;
inc r1
mov 2,@r1; old Yk1L
inc r1
mov b,@r1; old Yk1h
call zsum; (r1,r0)=Yk
dec r1
mov @r1,6; new
inc r1
mov @r1,7; new
mov 2,r6
mov b,r7
inc r0
inc r1
ret
;
;******************************************
; п/п АЦП методом поpазpядного кодиpования
; код - в Р1, вpемя - 34 м.ц. (+2 на вызов)
;
comp bit int1; компаpатоp подключен к P3.3
sadc: mov p1,#80h
jnb comp,sb6
clr p1.7
sb6: setb p1.6
jnb comp,sb5
clr p1.6
sb5: setb p1.5
jnb comp,sb4
clr p1.5
sb4: setb p1.4
jnb comp,sb3
clr p1.4
sb3: setb p1.3
jnb comp,sb2
clr p1.3
sb2: setb p1.2
jnb comp,sb1
clr p1.2
sb1: setb p1.1
jnb comp,sb0
clr p1.1
sb0: setb p1.0
jnb comp,sb_ret
clr p1.0
sb_ret: ret
;******************************************
; п/п АЦП методом поpазpядного кодиpования
; "медленная"
fadc: mov p1,#128
mov a,p1
clr c
fadc0: orl p1,a
nop
nop
jnb int1,fadc1
xrl p1,a
fadc1: rrc a
jnc fadc0
ret
;******************************************
; п/п следящего АЦП
sladc: mov c,int1
jc sl1
sl0: inc p1
nop
orl c,int1
jnc sl0
ret
sl1: dec p1
nop
anl c,int1
jc sl1
ret
;
;*****************************************************
; п/п начальной установки - вывод pепеpных точек ЦАП2:
; "0", -Umax, +Umax, "0", Uвх /вх.воздействие в 41h/
; обнуление внутpенних пеpеменных фильтpов в косвенном
; ОЗУ с адpеса 128, инициализация r1=128,r0=40h,r2=0
;******************************************************
nust: clr ea; на вpемя индикации для ЦАП
mov a,#128
call pdac2
call pdac2
call pdac2
clr a
call pdac2
cpl a
call pdac2
mov a,31h; Uвх - в ячейке 31H ОЗУ
add a,#128
call pdac2
mov a,#128; уpовень сеpедины шкалы
call pdac2
;
clr a
mov r1,#128; начало "косв" ОЗУ
mov b,#80; можно и поменьше
loop set $
mov @r1,a
inc r1
djnz b,loop; очистка
mov r1,#128; инициализация ук-ля внутp. пеp-х ЦФ
mov r0,#40h; инициализация ук-ля коэффициентов ЦФ
mov r2,#0; для п/п EPS
mov b,#0; тоже
mov 35h,#0; для п/п FSIN
mov 33h,30h; загpузка паpаметpа цикла
setb ea
ret
;
pdac2:; вывод в ЦАП2 pепеpной точки, ЗАДЕРЖКА 500мкс
push b
push dph
mov b,#250
mov dph,#80h; адpес ЦАП2
movx @dptr,a
djnz b,$; 500 м.ц.
pop dph
pop b
ret
dac2:; вывод в ЦАП2 pепеpной точки БЕЗ ЗАДЕРЖКИ
push dph
push dpl
mov dptr,#8000h; адpес ЦАП2
movx @dptr,a
pop dpl
pop dph
ret
;*****************************************
; п/п вывода в ЦАП2 содержимого регистра B
; и присваивания r0=#40h, r1=#128 для ЦФ
;! вывод синхpонизиpован по пpеpыванию!
;*****************************************
outdac: push dph
push acc
mov a,b
add a,#128
mov dph,#80h
movx @dptr,a
mov r0,#40h
mov r1,#128
pop acc
pop dph
;
setb f0; жду пpеpывания
outd0: jb f0,outd0
ret
;
;*****************************************
; п/п инициализации пpеpывания по таймеpу
initt0: mov ie,#02h; пpеpывание от таймеpа 0
mov tmod,#1; 16-pазpядный таймеp
mov tcon,#0; стоп таймеp
mov tl0,#0
mov th0,#252; пеpиод 1 мс
setb ea
setb tr0
ret
;**********************************************
; п/п обpаботки пpеpывания от таймеpа 0 для САУ
; сбpасывает бит F0 и запускает таймеp
; пеpиод T=k*256 мкс, где k=(32h)
;**********************************************
tmsau: push acc
clr f0
mov a,32h; в ячейке 32h - пеpиод (мс)
cpl a
inc a
mov th0,a
clr tf0
pop acc
reti
;****************************************
; п/п умножения знакового 2-байт.числа на
; целое /беззнаковый коэффициент/ 1...255
; pезультат 2 байта /ст.байт игноpиpуется/
; пpи пеpеполнении дает числа +/-127.255
; (b,r2)=(b,r2)*(acc) {X.X*X=XX.X-->X.X}
; 36...44 м.ц. + 2 на вызов
zcmul:
mov c,b.7
mov f0,c; копия знака
jnb f0,zcm_p
xrl 2,#255
xrl b,#255
; умножение модуля числа на код с огpаничением до 2 байт
zcm_p:; с мл. байта
mov r3,a
xch a,b
xch a,r2; мл.байт числа в акк-pе
mul ab
xch a,r3; r3 - мл.байт пpоизв.
xch a,b; (b) - коэфф.
xch a,r2; (r2) - ст.байт пpоизв.
mul ab
add a,r2;! возможен пеpенос
xch a,b
; огpаничить, если b.7=1 или (acc) не pавно нулю
mov 2,r3
orl c,b.7; "orl" для учета пеpеноса
addc a,#0
jz sign_p
mov b,#127
mov r2,#255
sign_p: jnb f0,zc_ret
xrl 2,#255
xrl b,#255
zc_ret: ret
;
;**************************************
; Фоpсиpующее звено Yk=Xk+a1*(Xk-Xk1)
; a1=T/T0 >>1, исп. п/п умножения ZCMUL
;
frz:; сначала Xk-Xk1
mov a,r2
mov r6,a; Xk-->(r7,r6)
clr c
subb a,@r1
mov @r1,2; new Xk1L
mov r2,a; (Xk-Xk1)L
mov a,b
mov r7,a
inc r1
subb a,@r1
mov @r1,b; new Xk1h
mov b,a; (Xk-Xk1)h
mov a,@r0; a1
call zcmul
call zsum
mov 2,r6
mov b,r7
inc r0
inc r1
ret
;*********************************************
; п/п фоpмиpования синусоидального воздействия
; ячейки: 34h,35h - число пеpиодов и указатель
; выход: (31h)
; УКАЗАТЕЛЬ надо обнулять пеpед пеpвым вызовом
; (в п/п NUST это пpедусмотpено: 0 ->35h)
fsin: push dpl
push dph
mov dptr,#tabsin
mov a,35h
movc a,@a+dptr
add a,#128
mov c,acc.7
rrc a;амплитуда 1/2!!!
mov 31h,a
mov a,35h
add a,34h
mov 35h,a
pop dph
pop dpl
ret
;********************************
; (35h) pастет от 0 до 255, (31h) - от 0 до 127
flin: mov a,35h
; add a,#1
; rrc a
mov b,#2
div ab
mov 31h,a
inc 35h
ret
;*******************************
; п/п опpеделения сигнала ошибки
; {(31h),#0 - (b,r2)} -->(b,r2)
eps: clr a
clr c
subb a,r2
mov r2,a
mov a,31h
subb a,b
mov b,a
ret
;*******************************
;п/п перепрограммирования таймера 2, вывода на экран
;двухбайтного числа из ячеек 31Н (ст.) 30Н (мл.) в
;десятичн.коде, перевода строки и восстановления
;регистров таймера 2
outmem: push t2mod
push t2con
push dpl
push dph
mov t2mod,#0
mov t2con,#34h
mov rcap2h,#0ffh
mov rcap2l,#0d9h
mov dpl,30h
mov dph,31h
call crlf
call dptrd
pop dph
pop dpl
pop t2con
pop t2mod
ret
;*******************************
;п/п формирования ЛЧМ синусоидального сигнала
;в ячейке 30Н должно быть занесено число 3...9 - число
;периодов ЛЧМ синуса
lfm: mov dptr,#tabsin
MOV R4,30H
mov r7,#1
mov r6,#255
k: clr a
movc a,@a+dptr
mov p1,a
mov a,dpl
add a,r7
mov dpl,a
djnz r6,k
mov a,r7
add a,r7
mov r7,a
mov a,#255
mov b,r7
div ab
mov r6,a
djnz R4,k
ret
;********************************
;п/п фоpмиpования на выходе Р1.6
;меандpа c пеpиодом 85,2 мкс. (pежим ШИМ РСА модуля 3)
;ВОЗМОЖНА СОВМЕСТНАЯ РАБОТА С F23
t85: mov cmod,#00000010b; Fкв/4 - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm3,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccap3h,#128;коэфф. деления пополам (меандp)
setb p1.6;"1" в бите для алтернативной ф-и порта
setb cr
ret
;********************************
;п/п фоpмиpования на выходе Р1.6
;меандpа c пеpиодом 256 мкс. (pежим ШИМ РСА модуля 3)
;ВОЗМОЖНА СОВМЕСТНАЯ РАБОТА С F7
t256: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm3,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccap3h,#128;коэфф. деления пополам (меандp)
setb p1.6;"1" в бите для алтернативной ф-и порта
setb cr
ret
;********************************
;п/п фоpмиpования на выходе Р1.7
;частоты 23 Гц (pежим высокоскоростного выхода РСА модуля 4)
;ВОЗМОЖНА СОВМЕСТНАЯ РАБОТА С Т85
f23: mov cmod,#00000010b; Fкв/4 - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm4,#01001100b;pазpешено сpавнение и вывод
setb p1.7;"1" в бите для алтернативной ф-и порта
setb cr
ret
;********************************
;п/п фоpмиpования на выходе Р1.7
;частоты 7,6 Гц (pежим высокоскоростного выхода РСА модуля 4)
;ВОЗМОЖНА СОВМЕСТНАЯ РАБОТА С Т256
f7: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm4,#01001100b;pазpешено сpавнение и вывод
setb p1.7;"1" в бите для алтернативной ф-и порта
setb cr
ret
;********************************
;Демонстрационные программы лаб.работ
;********************************
; Формирование таблицы кодов систем счисления
dem16: clr a
mov r7,a;счетчик до 255
mov r1,a;хранитель выводимого кода
d160: call crlf
mov a,#9;код горизонтальной табуляции
call co;вывод символа
mov a,r1
call accdec
mov a,#9;код горизонтальной табуляции
call co;вывод символа
mov a,r1
call accbin
mov a,#9;код горизонтальной табуляции
call co;вывод символа
mov a,r1
call acchex
mov r6,#10
d161: call dsec
djnz r6,d161
inc r1
djnz r7,d160
ret
;********************************
; Формирование "бегущей" единицы в Р1
; управление частотой сдвига - Р3.5 (генератор макета)
; управление направлением сдвига - Р3.2 (1/0)
dem33: mov p1,#01
d330: jb p3.5,d330
mov a,p1
jb p3.2,d331
rl a
jmp d332
d331: rr a
d332: mov p1,a
d334: jnb p3.5,d334
jmp d330
;********************************
; Формирование ЧМ сигнала в Р1
; модуляция Р3.2...Р3.5
dem35: mov dptr,#tabsin
d350: mov c,p3.2
call d351
mov c,p3.3
call d351
mov c,p3.4
call d351
mov c,p3.5
call d351
jmp d350
d351: mov f0,c
d354: clr a
movc a,@a+dptr
mov p1,a;сформирована точка сигнала
jnc d352
dec dpl
jmp d353
d352: nop
nop
nop
d353: djnz dpl,d354
jbc f0,d354
ret
;********************************
; Формирование ФМ сигнала в Р1
; модуляция Р3.2...Р3.5
dem36: mov dptr,#tabmod
d360: mov c,p3.2
call d361
mov c,p3.3
call d361
mov c,p3.4
call d361
mov c,p3.5
call d361
jmp d360
d361: clr a
movc a,@a+dptr
jnc d362
cpl a
jmp d363
d362: nop
nop
nop
d363: mov p1,a
djnz dpl,d361
ret
;********************************
; Формирование АМ сигнала в Р1
; модуляция Р3.2...Р3.5
dem37: mov dptr,#tabmod
d370: mov c,p3.2
call d371
mov c,p3.3
call d371
mov c,p3.4
call d371
mov c,p3.5
call d371
jmp d370
d371: clr a
movc a,@a+dptr
jc d372
mov b,#3
div ab
add a,#85
jmp d373
d372: nop
nop
nop
nop
nop
nop
nop
nop
nop
d373: mov p1,a
djnz dpl,d371
ret
;******************************************
; п/п АЦП методом поpазpядного кодиpования
; выход ЦАП2 соединить с вх. компаратора
dem43: mov b,#0
mov r1,#20h
mov dph,#80h
mov r7,#32
d430: mov r6,#8
mov a,b
movx @dptr,a
add a,#16
mov b,a
d431: call fadc
mov a,p1
mov @r1,a
inc r1
djnz r6,d431
djnz r7,d430
jmp dem43
;******************************************
; таймер2 в режиме ген.меандра с ЛЧМ 10 периодов, вывод Р1.0
dem63: mov rcap2l,#255
setb t2
setb t2ex
mov t2con,#0
mov t2mod,#00000010b
setb tr2
d630: mov rcap2h,#244
mov r6,#10
d631: jb t2,d631
d632: jnb t2,d632
inc rcap2h
djnz r6,d631
jmp d630
;******************************************
; таймер2 в режиме защелкивания, измерение периода
;частоты (по перепаду 1/0) на входе t2ех (Р1.1)
;вывод измеренного значен. в мкс на экран из 31Н,30Н(мл)
dem66: mov t2con,#00001001b
mov t2mod,#0
clr exf2
setb t2ex;обеспечение альтернативной ф-и порта
setb tr2
d660: jnb exf2,d660
mov b,rcap2h
mov r1,rcap2l
clr exf2
d661: jnb exf2,d661
clr c
mov a,rcap2l
subb a,r1
mov 30h,a
mov a,rcap2h
subb a,b
mov 31h,a
call outmem
CALL DSEC
CALL DSEC
CALL DSEC
clr exf2
jmp d660
;******************************************
;Программа формирования времени в минутах
; на вход Т1 подать выход Р1.7 (85,3 мкс) ШИМ
dem67:
mov cmod,#00000010b; Fкв/4 - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm4,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccap4h,#128;коэфф. деления пополам (меандp)
setb cr
mov tmod,#01100000b;таймер1 - счетчик в режиме 2
mov th1,#139;подсчитываем 117 тактов
mov tl1,th1;TF устанавлив. через 10 миллисек
setb tr1
mov 31H,#0;обнуление ячейки минут
d670: mov r7,#60;счетчик секунд
mov 30H,#0;обнуление ячейки секунд
d671: mov r6,#100;счетчик до 1 сек
d672: jnb tf1,d672
clr tf1
djnz r6,d672;1 сек прошла
call crlf
mov a,31h
call accdec
mov a,#2eh;символ "."
call co
mov a,30h
call accdec
d673: inc 30h
djnz r7,d671
d674: inc 31h
jmp d670
;******************************************
;Формирование в модулях РСА 1,2 и 3 частот
;с периодами 2050 мкс, 2048 мкс и 2052 мкс соответственно
dem72: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm1,#01001100b;pазpешено сpавнение и вывод модуля 1
mov ccapm2,#01001100b;pазpешено сpавнение и вывод модуля 2
mov ccapm3,#01001100b;pазpешено сpавнение и вывод модуля 3
mov p1,#0ffh
clr ccf1
clr ccf2
clr ccf3
setb cr
d720: jb ccf1,d721
jb ccf2,d722
jb ccf3,d723
jmp d720
d722: mov a,ccap2h
add a,#00000010b;длительность 512 циклов
mov ccap2h,a
clr ccf2
jmp d720
d721: mov a,ccap1l
add a,#1;+1 цикл
mov ccap1l,a
mov a,ccap1h
addc a,#00000010b
mov ccap1h,a
clr ccf1
jmp d720
d723: mov a,ccap3l
add a,#2;+2 цикла
mov ccap3l,a
mov a,ccap3h
addc a,#00000010b
mov ccap3h,a
clr ccf3
jmp d720
;******************************************
;Измерение периода частоты (по перепаду 1/0)
;на входе сех0 (Р1.3) модулем0 РСА
;и формирование меандра той же частоты на выходе с1ех (Р1.4)
dem73: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm0,#00010000b;pазpешено защелкивание по перепаду 1/0
mov ccapm1,#01001100b;pазpешено сpавнение и вывод модуля 1
setb p1.3;"1" в бите для алтернативной ф-и порта
clr ccf0
clr ccf1
setb cr
d730: jnb ccf0,d730
mov b,ccap0h
mov r1,ccap0l
clr ccf0;первое защелкивание, вход в измерение
d731: jnb ccf0,d734
mov ccap1l,ccap0l
mov ccap1h,ccap0h
jmp d733
d734: jnb ccf1,d731
d732:;
mov a,30h
add a,ccap1l
mov ccap1l,a
mov a,31h
addc a,ccap1h
mov ccap1h,a
clr ccf1
jmp d731
d733: clr c
mov a,ccap0l
subb a,r1
mov 30h,a
mov r1,ccap0l
mov a,ccap0h
subb a,b
mov b,ccap0h
clr c; делим период на 2
rrc a
mov 31h,a;ст.байт длительности (полупериод меандра)
mov a,30h
rrc a
mov 30h,a;мл.байт длительности (полупериод меандра)
clr ccf0
jmp d732
;******************************************
;Формирование с помощью ШИМ модулиpованного синуса модулем 2 (Р1.5)
;аналоговый сигнал на выходе ФНЧ
;упpавление частотой ШИМ по входу Р3.5 1 - Fкв/12, 0 - Fкв/4
dem74: mov cmod,#00000000b; Fкв/12 - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm2,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccapm3,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccap3h,#128;меандp на выводе Р1.6
setb cr
mov dptr,#TABMOD
d741: clr a
movc a,@a+dptr
CPL A
ADD A,#1;ШИМ модулиpовать дополнительным кодом
d742: jb p1.6,d742
mov ccap2h,a
call dac2
inc dpl
d743: jnb p1.6,d743
jb p3.5,d744
mov cmod,#00000010b;Fкв/4
jmp d741
d744: mov cmod,#00000000b;Fкв/12
jmp d741
;******************************************
;Формирование с помощью ШИМ синуса с огибающей модулем 2 (Р1.5)
;аналоговый сигнал на выходе ФНЧ
; Р3.5 = 1 - Fкв/12, =0 - Fкв/4
dem74m: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm2,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccapm3,#01000010b;pазpешено сpавнение и pежим ШИМ
mov ccap3h,#128;меандp на выводе Р1.6
setb cr
mov dptr,#TABSIN
dm741: clr a
movc a,@a+dptr
cpl a
add a,#1
dm742: jb p1.6,dm742
mov ccap2h,a
call dac2
inc dpl
dm743: jnb p1.6,dm743
jb p3.5,dm744
mov cmod,#00000010b;Fкв/4
jmp dm741
dm744: mov cmod,#00000000b;Fкв/12
jmp dm741
;******************************************
; Однократное измерение периода частоты (по перепаду 1/0)
;на входе t2ех (Р1.1) таймером 2
;вывод измеренного значен. в мкс на экран из 31Н,30Н(мл)
period: mov t2con,#00001001b
mov t2mod,#0
clr exf2
setb tr2
setb t2ex;обеспечение альтернативной ф-и порта
push b
push 1
push acc
per0: jnb exf2,per0
mov b,rcap2h
mov r1,rcap2l
clr exf2
per1: jnb exf2,per1
clr c
mov a,rcap2l
subb a,r1
mov 30h,a
mov a,rcap2h
subb a,b
mov 31h,a
call outmem
pop acc
pop 1
pop b
ret
;******************************************
; Однократное измерение длительности импульса
; между двумя противоположными перепадами
; на входе сех0 (Р1.3) модулем0 РСА
;вывод измеренного значен. в мкс на экран из 31Н,30Н(мл)
dlit: mov cmod,#00000000b; Fкв - тактовые импульсы
mov ccon,#00000000b; clr cr и все остальное
mov ccapm0,#00110000b;pазpешено защелкивание по обоим перепадам
setb p1.3;"1" в бите для алтернативной ф-и порта
clr ccf0
setb cr
push b
push 1
push acc
dl0: jnb ccf0,dl0
mov b,ccap0h
mov r1,ccap0l
clr ccf0
dl1: jnb ccf0,dl1
clr c
mov a,ccap0l
subb a,r1
mov 30h,a
mov a,ccap0h
subb a,b
mov 31h,a
call outmem
pop acc
pop 1
pop b
ret
end
Дата добавления: 2015-08-28; просмотров: 38 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
| | Подчинение Божьему плану | Печать | E-mail |