{\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 }