;MicroControllerPascal compiler, vers. 6.54a copyright (C) KSC 1986..2000 ;This file has been compiled by serial #2141 at UTILIA s.r.o. ; With code generation for 89C2051 ;program recst; ;{ zapinani a vypinani kamery pro potapeni STDB >stop> rec >stop> power off ; + zoom} ; ;{p1.0- =L normalni provoz RS 485 =H prime rizeni Lcontrol z PC pres RS 232} ; {p1.3=switch,p1.4-p1.7=led} ; {I0=p3.2 interrupt L,T0=p3.4 cteni a rizeni L} ; {p1.3 okamzik zapisu nebo vzorkovani L control L na konci int H} ; {p1.5 int startbitu prvniho slova Lcontrol} ; {p1.6 okamzik vzorkovani a vysilani seriove linky} ; {p1.7 cely int start bitu i casovych oken Lcontrol} ; {p3.4,p3.2,p3.5 p1.7,p1.6,p1.5,p1.4} ; ;var remin :array[0..10] of byte data; $DEBUG NAME RECST ?RECST?D SEGMENT DATA RSEG ?RECST?D REMIN: DS 0BH ; remout :array[0..12] of byte data ; RSEG ?RECST?D REMOUT: DS 0DH ; ldat :byte data at $18; LDAT EQU 018H ; ldat1:byte data at $19; LDAT1 EQU 019H ; ldat4:byte data at $1A; LDAT4 EQU 01AH ; ldat5:byte data at $1B; LDAT5 EQU 01BH ; ldat6:byte data at $1C; LDAT6 EQU 01CH ; ldat7:byte data at $1D; LDAT7 EQU 01DH ; uldat:byte data at $16; ULDAT EQU 016H ; citldat:byte at $1F; CITLDAT EQU 01FH ; znak: byte data at $0A; {r2} ZNAK EQU 0AH ; uremin: byte data at $0B; {r3} UREMIN EQU 0BH ; dremin: byte data at $0C; {r4} DREMIN EQU 0CH ; dremout:byte data at $0D; {r5} DREMOUT EQU 0DH ; uremout:byte data at $0F; {r7} UREMOUT EQU 0FH ; citbit: byte data at $12; {r2} CITBIT EQU 012H ; pomint: byte data at $13; {r3} POMINT EQU 013H ; lstatus:byte data at $14; {r4} LSTATUS EQU 014H ; crt: byte data at $15; {r5} CRT EQU 015H ; citac:word; RSEG ?RECST?D CITAC: DS 02H ; pok,kot,pomcit:byte; RSEG ?RECST?D POK: DS 01H RSEG ?RECST?D KOT: DS 01H RSEG ?RECST?D POMCIT: DS 01H ; pomci,hod,min,sek,sni,hodp,snip,sekp,minp,pomcit1,nuld:byte; RSEG ?RECST?D POMCI: DS 01H RSEG ?RECST?D HOD: DS 01H RSEG ?RECST?D MIN: DS 01H RSEG ?RECST?D SEK: DS 01H RSEG ?RECST?D SNI: DS 01H RSEG ?RECST?D HODP: DS 01H RSEG ?RECST?D SNIP: DS 01H RSEG ?RECST?D SEKP: DS 01H RSEG ?RECST?D MINP: DS 01H RSEG ?RECST?D POMCIT1: DS 01H RSEG ?RECST?D NULD: DS 01H ; qdat,loknot,rezim,ldat1f1,ldat1f2,ldat1f3,kudlak,cirac:byte; RSEG ?RECST?D QDAT: DS 01H RSEG ?RECST?D LOKNOT: DS 01H RSEG ?RECST?D REZIM: DS 01H RSEG ?RECST?D LDAT1F1: DS 01H RSEG ?RECST?D LDAT1F2: DS 01H RSEG ?RECST?D LDAT1F3: DS 01H RSEG ?RECST?D KUDLAK: DS 01H RSEG ?RECST?D CIRAC: DS 01H ; p35p,rect,stopt,vypnise,krok,reminkon,LOK,timok:boolean; ?RECST?B SEGMENT BIT RSEG ?RECST?B P35P: DBIT 01H RSEG ?RECST?B RECT: DBIT 01H RSEG ?RECST?B STOPT: DBIT 01H RSEG ?RECST?B VYPNISE: DBIT 01H RSEG ?RECST?B KROK: DBIT 01H RSEG ?RECST?B REMINKON: DBIT 01H RSEG ?RECST?B LOK: DBIT 01H RSEG ?RECST?B TIMOK: DBIT 01H ; anuld:word; RSEG ?RECST?D ANULD: DS 02H ; ;const verze:string[22] = (' recst verze 1.0 18.4.1997 '); ?RECST?C SEGMENT CODE RSEG ?RECST?C VERZE: DB 026H DB 020H DB 020H DB 020H DB 020H DB 020H DB 020H DB 072H DB 065H DB 063H DB 073H DB 074H DB 020H DB 076H DB 065H DB 072H DB 07AH DB 065H DB 020H DB 031H DB 02EH DB 030H DB 020H DB 020H DB 031H DB 038H DB 02EH DB 034H DB 02EH DB 031H DB 039H DB 039H DB 037H DB 020H DB 020H DB 020H DB 020H DB 020H DB 020H ; tim1 :byte=$ff; {38400Bd pro 14745600 Hz licha parita} TIM1 EQU 0FFH ; th0s:byte=$f0; TH0S EQU 0F0H ; tl0s:byte=$d6; {2089=1700ms ramec L} TL0S EQU 0D6H ; th0bd:byte=$ff; TH0BD EQU 0FFH ; tl0bd:byte=$a0; {128=104ms 9600Bd write,read 80 96} TL0BD EQU 0A0H ; th0r:byte=$ff; TH0R EQU 0FFH ; tl0r:byte=$56; {192=156ms read prvni 40 56} TL0R EQU 056H ; ; ;procedure interrupt timer0 ;using 2; ;begin USING 2 RSEG ?RECST?C T0INT: PUSH PSW MOV PSW,#010H PUSH ACC PUSH B PUSH DPL PUSH DPH ;tr0:=false;tl0:=tl0bd;th0:=th0bd;tr0:=true; CLR TR0 MOV TL0,#0A0H MOV TH0,#0FFH SETB TR0 ;{$A mov a,r6} {uldat} mov a,r6 ;{$A cjne a,#0,koit0} cjne a,#0,koit0 ;{$A mov a,r2} {citbit} mov a,r2 ;{$A jnz koic0} jnz koic0 ;{$A mov a,ldat} mov a,ldat ;{$A mov r3,a} {pomint} mov r3,a ;{$A koic0: mov a,r3} koic0: mov a,r3 ;{$A clr c} clr c ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov p3.4,c} mov p3.4,c ;{$A ljmp koite} ljmp koite ; ;{$A koit0: cjne a,#1,ksit1} koit0: cjne a,#1,ksit1 ;{$A mov a,r2} {citbit} mov a,r2 ;{$A jnz koic1} jnz koic1 ;{$A mov a,ldat1} mov a,ldat1 ;{$A mov r3,a} {pomint} mov r3,a ;{$A koic1: mov a,r3} koic1: mov a,r3 ;{$A clr c} clr c ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov p3.4,c} mov p3.4,c ;{$A ljmp koite} ljmp koite ; ; ;{$A ksit1: cjne a,#1,ksit2} ksit1: cjne a,#1,ksit2 ;{$A mov a,r2} {citbit} mov a,r2 ;{$A jnz ksic1} jnz ksic1 ;{$A mov a,#0ffh} mov a,#0ffh ;{$A mov r3,a} {pomint} mov r3,a ;{$A ksic1: mov a,r3} ksic1: mov a,r3 ;{$A clr c} clr c ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov p3.4,c} mov p3.4,c ;{$A ljmp koite} ljmp koite ; ;{$A ksit2: cjne a,#1,koit1} ksit2: cjne a,#1,koit1 ;{$A mov a,r2} {citbit} mov a,r2 ;{$A jnz ksic2} jnz ksic2 ;{$A mov a,#0ffh} mov a,#0ffh ;{$A mov r3,a} {pomint} mov r3,a ;{$A ksic2: mov a,r3} ksic2: mov a,r3 ;{$A clr c} clr c ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov p3.4,c} mov p3.4,c ;{$A ljmp koite} ljmp koite ; ; ; ; ; ; ;{$A koit1: cjne a,#4,koit4} koit1: cjne a,#4,koit4 ;{$A mov a,r3} {pomint} mov a,r3 ;{$A mov c,p3.2} mov c,p3.2 ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov a,r2} {citbit} mov a,r2 ;{$A cjne a,#7,koite} cjne a,#7,koite ;{$A mov a,r3} mov a,r3 ;{$A cpl a} cpl a ;{$A mov ldat4,a} mov ldat4,a ;{$A ljmp koite} ljmp koite ; ;{$A koit4: cjne a,#5,koit5} koit4: cjne a,#5,koit5 ;{$A mov a,r3} {pomint} mov a,r3 ;{$A mov c,p3.2} mov c,p3.2 ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov a,r2} {citbit} mov a,r2 ;{$A cjne a,#7,koite} cjne a,#7,koite ;{$A mov a,r3} mov a,r3 ;{$A cpl a} cpl a ;{$A mov ldat5,a} mov ldat5,a ;{$A ljmp koite} ljmp koite ; ;{$A koit5: cjne a,#6,koit6} koit5: cjne a,#6,koit6 ;{$A mov a,r3} {pomint} mov a,r3 ;{$A mov c,p3.2} mov c,p3.2 ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov a,r2} {citbit} mov a,r2 ;{$A cjne a,#7,koite} cjne a,#7,koite ;{$A mov a,r3} mov a,r3 ;{$A cpl a} cpl a ;{$A mov ldat6,a} mov ldat6,a ;{$A ljmp koite} ljmp koite ; ;{$A koit6: cjne a,#7,koit7} koit6: cjne a,#7,koit7 ;{$A mov a,r3} {pomint} mov a,r3 ;{$A mov c,p3.2} mov c,p3.2 ;{$A rrc a} rrc a ;{$A mov r3,a} mov r3,a ;{$A mov a,r2} {citbit} mov a,r2 ;{$A cjne a,#7,koite} cjne a,#7,koite ;{$A mov a,r3} mov a,r3 ;{$A cpl a} cpl a ;{$A mov ldat7,a} mov ldat7,a ;{$A mov r6,#255} {uldat} mov r6,#255 ; lok:=true; {L KONEC} SETB LOK ; tr0:=false;tl0:=tl0s; {hledej synchron L skupiny} CLR TR0 MOV TL0,#0D6H ; th0:=th0s;tr0:=true;ex0:=true; MOV TH0,#0F0H SETB TR0 SETB EX0 ;{$A ljmp koite} ljmp koite ; ;{$A koit7: cjne a,#255,koite} koit7: cjne a,#255,koite ;{$A mov r2,#8} {citbit=8}; mov r2,#8 ; ;{$A koite: inc citbit} koite: inc citbit ;if citbit=9 then begin MOV A,CITBIT XRL A,#09H JZ $+5 LJMP ?L0 ; {$A mov r2,#0} { citbit:=0; } mov r2,#0 ; tr0:=false;ie0:=false;ex0:=true;p3.4:=false; CLR TR0 CLR IE0 SETB EX0 CLR P3.04H ; {$A inc r6} {uldat} inc r6 ; end; ?L0: ;end; POP DPH POP DPL POP B POP ACC POP PSW RETI USING 0 ; ; ;procedure interrupt int0 ;using 2; ;begin USING 2 RSEG ?RECST?C I0INT: PUSH PSW MOV PSW,#010H PUSH ACC PUSH B PUSH DPL PUSH DPH ;if uldat=255 then begin tr0:=false;tl0:=tl0s; {hledej synchron L skupiny} MOV A,ULDAT XRL A,#0FFH JZ $+5 LJMP ?L1 CLR TR0 MOV TL0,#0D6H ; th0:=th0s;tr0:=true; MOV TH0,#0F0H SETB TR0 ; end else LJMP ?L2 ?L1: ;if uldat<4 then begin tr0:=false;tl0:=$ba; {set write} MOV A,ULDAT CLR C SUBB A,#04H JC $+5 LJMP ?L3 CLR TR0 MOV TL0,#0BAH ; th0:=$ff;tr0:=true;ex0:=false; MOV TH0,#0FFH SETB TR0 CLR EX0 ; end else begin tr0:=false;tl0:=$80; {set read} LJMP ?L4 ?L3: CLR TR0 MOV TL0,#080H ; th0:=$ff;tr0:=true;ex0:=false; MOV TH0,#0FFH SETB TR0 CLR EX0 ; end; ?L4: ?L2: ;inc(cirac); INC CIRAC ;end; POP DPH POP DPL POP B POP ACC POP PSW RETI USING 0 ; ; ;begin RSEG ?RECST?C BEGIN: ;p1:=$ff; p3:=$ff; MOV P1,#0FFH MOV P3,#0FFH ;tl0:=tl0s; th0:=th0s; tl1:=tim1; th1:=tim1; tmod:=$21; MOV TL0,#0D6H MOV TH0,#0F0H MOV TL1,#0FFH MOV TH1,#0FFH MOV TMOD,#021H ;tcon:=$51; scon:=$d0; ti:=true; pcon:=$0; MOV TCON,#051H MOV SCON,#0D0H SETB TI MOV PCON,#00H ;ip:=$3; uldat:=255; ie:=$83; dremout:=0; reminkon:=false; MOV IP,#03H MOV ULDAT,#0FFH MOV IE,#083H MOV DREMOUT,#00H CLR REMINKON ;es:=false; {nak comand error kvuli synchronizaci} CLR ES ; vypnise:=false;p3.4:=false; CLR VYPNISE CLR P3.04H ;ldat1f1:=$30;kot:=1;rezim:=$30;citldat:=0;krok:=false;qdat:=$18; MOV LDAT1F1,#030H MOV KOT,#01H MOV REZIM,#030H MOV CITLDAT,#00H CLR KROK MOV QDAT,#018H ;sni:=0;min:=0;sek:=0;hod:=0;lstatus:=0;lok:=false;rect:=false; MOV SNI,#00H MOV MIN,#00H MOV SEK,#00H MOV HOD,#00H MOV LSTATUS,#00H CLR LOK CLR RECT ;kot:=3;citldat:=0;ldat1f3:=$30;ldat1f2:=$30;ldat1f1:=$30;stopt:=false; MOV KOT,#03H MOV CITLDAT,#00H MOV LDAT1F3,#030H MOV LDAT1F2,#030H MOV LDAT1F1,#030H CLR STOPT ;repeat until (lok or not(p3.5));p35p:=false; ?L5: MOV C,LOK MOV A,#00H RLC A MOV R6,A MOV C,P3.05H CPL C MOV A,R6 ORL C,ACC JNC ?L5 CLR P35P ;loknot:=0; MOV LOKNOT,#00H ; ;repeat ?L6: ; ;if ((kot=0) and (citldat=0)) then begin MOV A,KOT ADD A,#0FFH CPL C CLR A RLC A MOV R6,A MOV A,CITLDAT ADD A,#0FFH CPL C MOV A,R6 ANL C,ACC JC $+5 LJMP ?L7 ; ; ;if vypnise then begin {mali se vypnout} JB VYPNISE,$+6 LJMP ?L8 ; ea:=false;p3.4:=false; CLR EA CLR P3.04H ; for pomci:=0 to 10 do MOV POMCI,#00H ?L9: ; for citac:=0 to 60000 do ea:=false; MOV A,POMCI SETB C SUBB A,#0AH JC $+5 LJMP ?L10 MOV CITAC,#LOW(00H) MOV CITAC+01H,#HIGH(00H) ?L11: MOV A,CITAC SETB C SUBB A,#LOW(0EA60H) MOV A,CITAC+01H SUBB A,#HIGH(0EA60H) JC $+5 LJMP ?L12 CLR EA INC CITAC CLR A CJNE A,CITAC,$+5 INC CITAC+01H SJMP ?L11 ?L12: INC POMCI SJMP ?L9 ?L10: ; ea:=true; SETB EA ; end; ?L8: ; ; ;if (stopt=true) then begin {zastav kameru a vypni se} JB STOPT,$+6 LJMP ?L13 ;qdat:=$18;kot:=3;citldat:=0;ldat1f3:=$5e;ldat1f2:=$5e ;ldat1f1:=$5e ; {$30 5e 5e} MOV QDAT,#018H MOV KOT,#03H MOV CITLDAT,#00H MOV LDAT1F3,#05EH MOV LDAT1F2,#05EH MOV LDAT1F1,#05EH ;vypnise:=true; {prikaz power off} SETB VYPNISE ; end; ?L13: ; ; {nenili normal rec dej start/stop} ;if (rect=true) then begin JB RECT,$+6 LJMP ?L14 ;qdat:=$18;kot:=3;citldat:=0;ldat1f3:=$33;ldat1f2:=$0;ldat1f1:=$0;rect:=false; MOV QDAT,#018H MOV KOT,#03H MOV CITLDAT,#00H MOV LDAT1F3,#033H MOV LDAT1F2,#00H MOV LDAT1F1,#00H CLR RECT ; end; ?L14: ; ; if (lstatus<>4) then p1.0:=false MOV A,LSTATUS XRL A,#04H JNZ $+5 LJMP ?L15 ; else begin CLR P1 LJMP ?L16 ?L15: ; if cirac>50 then begin MOV A,CIRAC SETB C SUBB A,#032H JNC $+5 LJMP ?L17 ; cirac:=0;p1.0:=not(p1.0); MOV CIRAC,#00H CPL P1 ; end; ?L17: ; end; ?L16: ; ; ; end; ?L7: ; ; {zoom mimo poradi} ; if not(p1.7) then begin citldat:=5;ldat:=$28;ldat1:=$35; end; JNB P1.07H,$+6 LJMP ?L18 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#035H ?L18: ; if not(p1.6) then begin citldat:=5;ldat:=$28;ldat1:=$37; end; JNB P1.06H,$+6 LJMP ?L19 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#037H ?L19: ; if not(p1.5) then begin citldat:=5;ldat:=$28;ldat1:=$45; end; {focus far } JNB P1.05H,$+6 LJMP ?L20 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#045H ?L20: ; if not(p1.4) then begin citldat:=5;ldat:=$28;ldat1:=$47; end; {focus near } JNB P1.04H,$+6 LJMP ?L21 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#047H ?L21: ; if not(p1.3) then begin citldat:=5;ldat:=$28;ldat1:=$41; end; {focus auto } JNB P1.03H,$+6 LJMP ?L22 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#041H ?L22: ; if not(p1.2) then begin citldat:=5;ldat:=$28;ldat1:=$49; end; {white toggle} JNB P1.02H,$+6 LJMP ?L23 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#049H ?L23: ; if not(p3.7) then begin citldat:=5;ldat:=$28;ldat1:=$77; end; {white reset } JNB P3.07H,$+6 LJMP ?L24 MOV CITLDAT,#05H MOV LDAT,#028H MOV LDAT1,#077H ?L24: ; ; ;IF LOK THEN BEGIN { obsluha Lcontrol } JB LOK,$+6 LJMP ?L25 ; loknot:=0; MOV LOKNOT,#00H ; lok:=false;lstatus:=ldat4; CLR LOK MOV LSTATUS,LDAT4 ; if citldat=0 then begin if kot>0 then begin dec(kot);citldat:=7;end; MOV A,CITLDAT JZ $+5 LJMP ?L26 MOV A,KOT SETB C SUBB A,#00H JNC $+5 LJMP ?L27 DEC KOT MOV CITLDAT,#07H ?L27: ; end ; else dec(citldat); LJMP ?L28 ?L26: DEC CITLDAT ?L28: ; ; if citldat<3 then begin { prazdny prikaz 3 cykly} MOV A,CITLDAT CLR C SUBB A,#03H JC $+5 LJMP ?L29 ; ldat:=$18;ldat1:=$ff; MOV LDAT,#018H MOV LDAT1,#0FFH ; ; end else begin {provedeni prikazu ve fronte} LJMP ?L30 ?L29: ; case kot of 0:begin ldat:=$18;ldat1:=ldat1f1;end; MOV A,KOT JZ $+5 LJMP ?L34 ?L33: MOV LDAT,#018H MOV LDAT1,LDAT1F1 ?L31: LJMP ?L35 ; 1:begin ldat:=$18;ldat1:=ldat1f2;end; ?L34: MOV A,KOT XRL A,#01H JZ $+5 LJMP ?L38 ?L37: MOV LDAT,#018H MOV LDAT1,LDAT1F2 ?L35: LJMP ?L39 ; 2:begin ldat:=$18;ldat1:=ldat1f3;end; ?L38: MOV A,KOT XRL A,#02H JZ $+5 LJMP ?L42 ?L41: MOV LDAT,#018H MOV LDAT1,LDAT1F3 ?L39: LJMP ?L43 ; end; ?L42: ?L43: ; end; ?L30: ; ; end; ?L25: ; ; ; ; ;crt:=20; repeat dec(crt) until crt=0; {obsluha LED diod timer 100mikros} MOV CRT,#014H ?L44: DEC CRT MOV A,CRT JNZ ?L44 ;inc(nuld);if nuld=250 then begin {25ms} INC NULD MOV A,NULD XRL A,#0FAH JZ $+5 LJMP ?L45 ; inc(loknot); INC LOKNOT ; if loknot>20 then stopt:=true; MOV A,LOKNOT SETB C SUBB A,#014H JNC $+5 LJMP ?L46 SETB STOPT ?L46: ; end; ?L45: ;inc(anuld);if anuld=2500 then begin INC ANULD CLR A CJNE A,ANULD,$+5 INC ANULD+01H MOV A,ANULD+01H CJNE A,#9,?L47 MOV A,ANULD CJNE A,#196,?L47 LJMP ?L48 ?L47: LJMP ?L49 ?L48: ; anuld:=0; {25ms} MOV ANULD,#LOW(00H) MOV ANULD+01H,#HIGH(00H) ; if (p35p and not(p3.5)) then rect:=true; MOV C,P35P MOV A,#00H RLC A MOV R6,A MOV C,P3.05H CPL C MOV A,R6 ANL C,ACC JC $+5 LJMP ?L50 SETB RECT ?L50: ; p35p:=p3.5; MOV C,P3.05H MOV P35P,C ; end; ?L49: ; ; ; ; ;until false; LJMP ?L6 ;end. ?L51: SJMP ?L51 CSEG ORG 03H LJMP I0INT ORG 0BH LJMP T0INT ORG 00H SJMP $+026H ORG 026H LCALL ?INITSTACK LJMP BEGIN EXTRN CODE ( ?INITSTACK ) BSEG DBIT 8 END