Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

; лабораторные работы для 80c51fa v1. 001



;

; ЛАБОРАТОРНЫЕ РАБОТЫ ДЛЯ 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

mybiblioteka.su - 2015-2024 год. (0.217 сек.)