{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset238{\*\fname Courier New;}Courier New CE;}{\f1\fmodern\fprq1\fcharset238{\*\fname Courier New;}Courier New CE;}}
{\colortbl ;\red255\green0\blue0;}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1038\f0\fs20 ;              PROGRAM citace\par
;              --------------\par
;\par
;krystal 24 MHz => 1 cyklus = 0,5us\par
;\par
;verze 1.0 - 4.8.2002\par
;verze 1.1 - 29.12.2002 moznost libovolneho poctu startovani behem limitu 30 sec\par
;\par
;\par
;R7 - pomocna promenna\par
;R6 - delka BEEP x 125ms\par
;R5 - pomocny delitel casovace a uschova ACC v hlavni smycce\par
;R4 - konst. delitel casovace\par
;R3 - konst. delitel casovace\par
;R2 - cyklus cteni TOUCH + casovac BEEP + casovac START\par
;R1 - NC\par
;R0 - citac cyklovani podprogramu\par
;\par
$MOD51                          ;MOD PREKLADACE\par
;\par
;\par
IBTN            BIT     0B0H    ;P3.0 - vstup cidla TOUCH\par
LED             BIT     0B2H    ;P3.2 - kontrolni LED\par
SPK             BIT     0B3H    ;P3.3 - vystup reproduktoru\par
RDY             BIT     0B4H    ;P3.4 - vstup od spinaci skrinky\par
REL             BIT     0B5H    ;P3.5 - pripojeni rele\par
;\par
;\par
                CSEG                    ;programovy segment\par
                ORG     0H              ;adresa po resetu\par
;------------ Initial CPU ----------------------------------\par
INIT:           MOV     SP,#60H          ;inicializace zasobniku\par
                MOV     IE,#00000000B    ;vsechna preruseni zakazana\par
                MOV     P1,#11111111B    ;pocat. nastaveni brany P1\par
                MOV     P3,#11111111B    ;pocat. nastaveni brany P3\par
                MOV     R7,#0255D        ;velikost intervalu blikani\par
                CLR     LED               ;rozsviceni LED\par
;\par
;------------ HLAVNI SMYCKA PROGRAMU -----------------------\par
START:          SETB    REL               ;schozeni rele\par
STR1:           DJNZ    R7,STR11\par
                MOV     R7,#0255D\par
                CPL     LED               ;blikani LED\par
STR11:          ACALL   INIBT\par
                JNC     START             ;TOUCH neni...tedy zpet na START\par
                MOV     R5,#0240D         ;TOUCH byla pritomna...\par
                DJNZ    R5,$              ;cekaci smycka 240us\par
                MOV     A,#00110011B      ;TOUCH prikaz\par
                ACALL   WRI               ;zapis prikaz\par
                MOV     R2,#08D           ;osm cyklu cteni TOUCH\par
STR2:           ACALL   RDA               ;precti bit\par
                MOV     R5,A              ;uschovani ACC do R5\par
                MOV     A,R2\par
                DEC     A                 ;A=A-1\par
                MOV     DPTR,#TBTCH\par
                MOVC    A,@A+DPTR         ;vyzvednuti R1-te 8b pozice TOUCH\par
                XRL     A,R5              ;EXOR ~ R5-A\par
                CJNE    A,#00D,STR1       ;nerovna-li se "0" jdi na START\par
                DJNZ    R2,STR2           ;posledni bit?\par
                CLR     REL               ;sepnuti rele\par
                CLR     LED               ;rozsviceni LED (odblokovano)\par
                MOV     R6,#02D\par
                ACALL   BEEP              ;pipnuti\par
;--- cyklus cekani 2 minut na sepnuti spinaci skrinky ------\par
;--- potom se zase zablokuje (vrati na START) --------------\par
                MOV     R2,#0255D         ;promenna cekaci smycky 255 = 30 s\par
DLY:            MOV     R5,#0250D         ;250=0,125 s testuje hodnotu RDY\par
                ACALL   ZPOZ\par
                DJNZ    R2,DLY            ;cekaci smycka\par
                JNB     RDY,RUN           ;jestli jsi zapnul zapalovani pak jdi na RUN\par
                SJMP    START             ;zpet na zablokovani zapalovani\par
RUN:            SETB    LED               ;zhasnuti LED (nastartovano)\par
                MOV     R5,#0250D\par
                ACALL   ZPOZ              ;pockani na dobeh zakmitu\par
                JNB     RDY,$             ;smycka cekani na vypnuti zapalovani\par
                SJMP    START             ;zpet na zablokovani zapalovani\par
;\par
;------------ Initial TOUCH -> C ----------------------------\par
INIBT:          MOV     R5,#02D            ;0,5 ms\par
                CLR     IBTN               ;Reset Touch\par
                ACALL   ZPOZ\par
                SETB    IBTN               ;nahozeni H\par
                MOV     R0,#060D           ;max. pocet cyklu cekani na pritomnostni pulz\par
INI:            MOV     R5,#02D            ;po 1ms se bude ptat na pritomnostni pulz\par
                JNB     IBTN,OKINI         ;jestli je jiz pritomen skoc na OKINI\par
                DJNZ    R0,INI             ;jestli jsi nevycerpal pokusy tak jdi na INI\par
                CLR     C                  ;C=0 neni\par
                AJMP    INIBE              ;nenasel? vrat se\par
OKINI:          SETB    C                  ;C=1 je tu...\par
INIBE:          RET\par
;\par
;------------ Write BYTE TOUCH -> A -------------------------\par
WRI:            MOV     R0,#08D          ;osm rotaci\par
WR1:            RRC     A                ;rotace prenosu vpravo 1. jde nejnizsi bit\par
                CLR     IBTN             ;IBTN H -> L\par
                JNC     LOG_0            ;vyhodnoceni prenosu\par
                MOV     R5,#010D         ;LOG=1\par
                DJNZ    R5,$             ;smycka 10us\par
                SETB    IBTN             ;IBTN L -> H\par
                MOV     R5,#090D\par
                DJNZ    R5,$             ;smycka 90us\par
                AJMP    LOGOUT\par
LOG_0:          MOV     R5,#0100D\par
                DJNZ    R5,$             ;smycka 100us\par
                SETB    IBTN             ;IBTN L -> H\par
LOGOUT:         DJNZ    R0,WR1           ;jeste nejaky BIT?\par
                RET\par
;\par
;------------ READ BYTE TOUCH -> A -------------------------\par
RDA:            MOV     R0,#08D          ;8 cyklu\par
                MOV     A,#00D           ;vynulovani ACC\par
RD1:            CLR     IBTN             ;IBTN H -> L\par
                NOP                      ;0,5 us\par
                SETB    IBTN             ;1 us, uvolneni IBTN\par
                MOV     R5,#019D\par
                DJNZ    R5,$             ;cekaci smycka 19 us\par
                JNB     IBTN,SUM         ;je-li L jdi na SUM\par
                INC     A                ;je-li H pak ACC+1\par
SUM:            RR      A                ;rotace ACC vpravo\par
                MOV     R5,#0100D\par
                DJNZ    R5,$             ;cekaci smycka 100 us\par
                DJNZ    R0,RD1           ;jeste nejaky bit?\par
                RET\par
;\par
;------------ Zpozdeni R5 x 0,5 ms ----------------------------\par
ZPOZ:           PUSH    PSW\par
ZP1:            MOV     R4,#0125D        ;DELITEL ~ 250\par
ZP2:            MOV     R3,#02D\par
ZP3:            DJNZ    R3,ZP3\par
                DJNZ    R4,ZP2\par
                DJNZ    R5,ZP1\par
                POP     PSW\par
                RET\par
;\par
;------------ BEEP ~ 2kHz, R2 x 125 ms ---------------------------\par
BEEP:         MOV       R2,#0250D\par
BEE1:         MOV       R5,#01D\par
              CLR       SPK\par
              ACALL     ZPOZ\par
              MOV       R5,#01D\par
              SETB      SPK\par
              ACALL     ZPOZ\par
              DJNZ      R2,BEE1\par
              DJNZ      R6,BEEP\par
              RET\par
;\par
;\par
TBTCH:          DB      0\cf1\f1 0A\cf0\f0 H       \cf1\f1 ;CRC\cf0\f0\par
                DB      0\cf1\f1 00\cf0\f0 H       \cf1\f1 ;6. bit\cf0\f0\par
                DB      0\cf1\f1 00\cf0\f0 H       \cf1\f1 ;5. bit\cf0\f0\par
                DB      0\cf1\f1 02\cf0\f0 H       \cf1\f1 ;4. bit\cf0\f0\par
                DB      0\cf1\f1 83\cf0\f0 H       \cf1\f1 ;3. bit\cf0\f0\par
                DB      0\cf1\f1 75\cf0\f0 H       \cf1\f1 ;2. bit\cf0\f0\par
                DB      0\cf1\f1 09\cf0\f0 H       \cf1\f1 ;1. bit\cf0\f0\par
                DB      0\cf1\f1 01\cf0\f0 H       \cf1\f1 ;Family Code DS1990A\cf0\f0\par
;\par
END\par
\par
\cf1\f1 A CRC a Family \'e9s a Bit k\'f3dok a Touch memoryr\'f3l val\'f3 leolvas\'e1suk ut\'e1n a pirossal jel\'f6lt helyre ker\'fclnek!\par
A program elej\'e9n \'fcgyelj\'fcnk az Include-olni k\'edv\'e1nt kontroller t\'edpus\'e1ra- haszn\'e1lhat\'f3 AT 89C2051, vagy AT 89C4051!\cf0\f0\par
\par
\par
\par
}
�