;====RX9CBI Mike Kislinsky ========rx9cbi@qsl.net============= ; Блок Управления Репитером ; V2 Oct.2000 ; -режим МАЯК ; -второго позывного нет ; -timout по бизи 5м ; -позывной - раз в 10 минут, _в деж.режиме тоже_ ; контроль вскрытия - сирена. контр. перегрева - три бипа и выкл-е ; контр.сети - периодический через каждые 5сек нч бип ; WDToff. F RCosc=50 KHz Tc=80uS => Время переполн делителя- ; 20,5мс макс , TMR-5,24c , timer2-1342c(22,5мин)max ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list p=16C54 __CONFIG 0FFB ;****** Register Definition ******** port_a equ 5 port_b equ 6 flag equ 8 ;флаги 0=Timeout 1=выдать Call 2=Раб.реж.(TX on) bufer equ 9 ;буфер кода countr equ 0A ;счетчик сдвигов в Simbol timbuf equ 0B ;буфер длительности посылки timer2 equ 0C ;"второй таймер" bufti equ 0D ;буфер TMR loops equ 0E ;delay loop counter timout equ 0F ;watchdog temp equ 10 ; ;----port b-------------------------------------------- offboff equ 7 ;выкл бипа выключения репитера u220v equ 6 ;датчик 12В от сетевого БП (0=авар пит) hot equ 5 ;датчик температуры alarm equ 4 ;датчик вскрытия secsign equ 3 ; 2oй позывнойXXX режим МАЯК offbeep equ 2 ;Beep busy equ 1 ;вх busy от RX ton equ 0 ;вход от детектора тона ;----port a-------------------------------------------- oubeep equ 3 ;вых БИПов outone equ 2 ;вых тона CW out equ 1 ;выход CW манипуляции __---__ ontx equ 0 ;вкл прд ;******************************************************** org 0 goto PWRUP ;=NOsubroutine====Выдать позывной==_-_---_-___---_-_---_ ; если старш бит 1 то символ пропускается Sign movlw b'00001010' ;r call Simbol movlw b'00001010' ;r call Simbol movlw b'00110000' ;6 call Simbol movlw b'00001001' ;u call Simbol movlw b'00000101' ;a call Simbol bcf flag,1 ;сброс "выдать call" clrf timer2 ; и 10мин таймера goto Retsig ;XXretlw 0 ;=====Выдать 1 символ================================= Simbol clrf countr ; сброс счетчика movwf bufer ;W в буфер btfsc bufer,7 ;если старш бит 1 то смвола нет retlw 0 Sim1 rlf bufer,1 ;сдвиг bufer incf countr,1 btfss bufer,7 ; 1 ? goto Sim1 ;-нет.сдвигаем ещё Next incf countr,1 ; rlf bufer,1 ;-да btfsc countr,3 ;countr=8? goto Delay3 ;-да за новыми данными...и всё сначала btfss bufer,7 ;1 ? goto Dot ;0 -точка movlw .9 ;1 -тиpе. загpузка длины тиpе goto GDD ; Dot movlw .3 ; длина точки ;----Give out Dush/Dot----------- GDD movwf timbuf ;длину в буфеp bsf port_a,out clrf 1 ;очистить таймеp N1 bcf port_a,outone nop nop movf timbuf,0 ;из буфеpа длины в W subwf 1,0 btfsc 3,2 ; время кончилось ? goto Delay1 ;-да. на паузу ;---- _-_-_-_-_-_-_- bsf port_a,outone ;-нет nop ;* nop nop nop goto N1 ;=====Пауза-1 (пауза между элементами)==== Delay1 clrf 1 bcf port_a,out D1n movlw .3 ;загp длины паузы-1 ! subwf 1,0 btfsc 3,2 ; время кончилось ? goto Next ;-да goto D1n ;=====Пауза-3 (после символа)============== Delay3 clrf 1 D3n movlw .9 ;загp длины паузы-3 ! subwf 1,0 btfsc 3,2 ; время кончилось ? retlw 0 ;-да возврат за следующими данными goto D3n ;=====beep================================== Beep movlw .50 ;длительность "пика"в W ! movwf loops Bee1 bsf port_a,oubeep ;__-- nop nop nop nop bcf port_a,oubeep ;--__ nop nop decfsz loops,1 goto Bee1 retlw 0 ;============длинный бип============================= beee movlw .180 ;длительность "пика"в W ! movwf loops H1 bsf port_a,oubeep ;__-- nop nop nop nop nop nop bcf port_a,oubeep ;--__ nop nop nop nop decfsz loops,1 goto H1 retlw 0 ;============низкий длинный бип============================= beee2 movlw .120 ;длительность "пика"в W ! 150 movwf loops b21 bsf port_a,oubeep ;__-- nop nop nop nop nop nop nop nop nop nop nop bcf port_a,oubeep ;--__ nop nop nop nop nop nop nop nop nop decfsz loops,1 goto b21 retlw 0 ;========================================== TimSign btfsc port_b,alarm ;1= goto Ala ; =тревога btfsc port_b,u220v ;0=нет сети goto TimSi ;-------------------=авар питание---- movlw .20 ;~ subwf 1,w btfss 3,2 ;(z) пора ? goto TimSi bsf port_a,ontx ;пора call beee2 TimS btfss flag,2 ;раб реж? bcf port_a,ontx ;no. off TX ;------------------------------------ TimSi btfsc flag,1 ;надо бы давно уже передать позывной goto TXcall2 ; ДА movlw .200 subwf 1,0 ;вр обязат вызова пп ~= 20ms X 50 = 1s btfss 3,0 ;c) время? C=1 if 200...255 - 200 retlw 0 ; нет incf timer2,1 ;да, прибавить 1 в timer2 incf timout,1 ;и в timout clrf 1 ; очистить RTCC movlw .140 ;время "выдать позывной" в W .140=10мин ! subwf timer2,0 btfss 3,2 ;(2=Z) время2 кончилось ? retlw 0 ; нет clrf timer2 ; да bsf flag,1 ;флаг "выдать позывной" xxx ;-------------------- TXcall2 btfss port_b,secsign ;режим МАЯК ? goto TXcall ; ДА btfss flag,2 ;раб.реж? retlw 0 ; нет ;-----передать позывной -------- TXcall bsf port_a,ontx ;вкл прд call Delay3 ;ON AIR waiting call Delay3 goto Sign ;Call выдать (раньше была п\п!) Retsig btfss flag,2 ;раб.реж? bcf port_a,ontx ; нет. выкл прд retlw 0 ;################################################################## PWRUP movlw b'000111' ; clkin/4/256 через делитель ! option ;W-->option reg. ;---------------------------------- movlw b'0000' ;| tris port_a ;| поpт А весь на вывод clrf port_a ; все нули clrf flag clrf 1 clrf timer2 clrf timout bsf flag,1 ;флаг "выдать позывной" ;-=-ожидание вкл-я------------------------------ On btfsc port_b,ton ;есть ТОН ? ''' goto On1 ;да call TimSign ;нет goto On ; и ждать ;=--------------------------- On1 movlw .24 ;загp длины тона для вкл-я реп 20,024x24= 490ms ! addwf 1,0 ;сложить с таймером movwf bufti On2 movf bufti,w subwf 1,w btfsc 3,2 ;z время кончилось ? goto Tx ; да btfsc port_b,ton ;нет проверить ТОН' goto On2 ; есть goto On ; нету ;=====тон' пришёл - вкл TX ===========- Tx bsf port_a,ontx ;вкл передатчика bsf flag,2 ;^flag раб реж clrf timout Tx1 call TimSign btfsc port_b,hot goto Hot ;=перегрев btfss port_b,busy ;нет. есть несущая ? goto Off ; нет Tx2 movlw .75 ; да. 4c x 75 = 5 minutes subwf timout,0 btfss 3,0 ;время кончилось ? goto Tx1 ; нет ;------timeout---------------------- bsf flag,0 ;флаг больш BUSY goto Off31 ; ;====Off============================ Off movlw .2 ;в теч 40-60 мс проверить addwf 1,w ; пропадание несущей movwf temp Off0 movf temp,w subwf 1,w btfsc 3,0 ;'c' время кончилось ? goto Offn ; да btfss port_b,busy ;нет, есть несущая ? goto Off0 ; нет goto Tx2 ; да появилась ;========== Offn clrf timout ;/ btfss port_b,offbeep ;бип 1 выключен ? call Beep ; нет. beep 1000 Hz * call TimSign movlw .10 ;10x22x20ms = 4500 ms ! movwf loops ; время до выключения Of1 movlw .22 ; ! addwf 1,w ;сложить с таймером movwf bufti ;в буфер Of11 movf bufti,w ;из буфера subwf 1,w ;TMR минус W btfsc 3,0 ;'c' время кончилось ? goto Of12 ; да btfss port_b,busy ; нет, есть несущая ? goto Of11 ; нет movlw .8 ; есть. проверить в течении 0,16с ! addwf 1,w ;w сложить с таймером Of2 subwf 1,w btfsc 3,2 ;z время кончилось ? goto Tx1 ; да btfsc port_b,busy ; нет, есть несущая ? goto Of2 ; да goto Of11 ; нет ;========================= Of12 call TimSign decfsz loops,1 goto Of1 ;еще не все ;----------------------------------- Off31 btfss port_b,offboff ; call beee ; бип при выкл TX bcf flag,0 ; бип выключен. сбр фл "низкий тон" bcf port_a,ontx ;выкл прд bcf flag,2 ;сбр "раб реж" goto On ; и ждать вызова` ;=====тревога======================================== Ala movlw .130 subwf 1,0 ; btfss 3,0 ;c. пора ? C=1 if 100...255 - 100 goto TimS ; нет ;--------высокий тон---------------- bsf port_a,ontx ;вкл прд для сигнала movlw .19 addwf 1,w movwf timbuf ;длину в буфеp An1 bcf port_a,oubeep nop nop movf timbuf,0 ;из буфеpа длины в W subwf 1,0 btfsc 3,2 ; время кончилось ? goto Ala2 ;-да ;---- _-_-_-_-_-_-_ ---------------- bsf port_a,oubeep ;-нет nop ;* nop nop nop goto An1 ;-----низкий тон------------------------------- Ala2 movlw .19 addwf 1,w movwf timbuf ;длину в буфеp An2 bcf port_a,oubeep nop nop nop nop nop nop movf timbuf,0 ;из буфеpа длины в W subwf 1,0 btfsc 3,2 ; время кончилось ? goto Ala ;-да ;---- _-_-_-_-_-_-_- bsf port_a,oubeep ;-нет nop ;* nop nop nop nop nop nop nop goto An2 ;============================================ Hot call beee call Delay3 call Delay3 call Delay3 call beee call Delay3 call Delay3 call Delay3 call beee call Delay3 goto PWRUP ;================================================================= end ;_____The End of bu_rep2.asm____rx9cbi@narod.ru , \mail.ru________