;*******************************************************************************
;* Sugárzás jelző *
;* Egytekercses feszültségnövelő 400 V-os GM csővel PIC10F322-vel *
;*******************************************************************************
LIST P=PIC10F322 ; lista megadása
RADIX hex ; alapértelmezett számrendszer megadása
#include "p10F322.inc"
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
CBLOCK 0x40
WAIT ;Várakozás
MENT_WREG ;W regiszter értéktároló
MENT_STATUS ;STATUS regiszter értéktároló
SIP_IDO ;Hangjelzés időtartama részecske becsapódáskor
TOLTES_H ;A 400V meglétét figyelő várakozás felső byte-ja
TOLTES_L ;A 400V meglétét figyelő várakozás alsó byte-ja
MB ;Belső kapcsolók
ENDC
IDOZITO MACRO MENNYI ;Időzítő értékfeltöltése macro.
MOVLW HIGH MENNYI
MOVWF TOLTES_H
MOVLW LOW MENNYI
MOVWF TOLTES_L
ENDM
#define BUZZER LATA,2 ;Hangjelző
#define ISW MB,1 ;Időzítő segédkapcsoló
#define TGYSW MB,2 ;Telep gyenge segédkapcsoló
org 0x0000 ;Programmemória kezdő címe
nop
GOTO INICIALIZALAS
org 0x0004
GOTO MEGSZAKITAS
nop
org 0x000A
INICIALIZALAS
CLRF LATA ;Kimenetek kikapcsolása
MOVLW B'00000010' ;\
MOVWF ANSELA ; \
MOVLW B'1100101' ;--Analóg bemenet beállítása
MOVWF ADCON ;_/
MOVLW B'00001010' ;\
MOVWF TRISA ;-Ki és bemenetek beállítása
MOVLW B'00001000' ;\
MOVWF WPUA ;-RA3-on belső felhúzó ellenállás bekapcsolása
MOVLW B'01110000' ;\
MOVWF OSCCON ;-Oszcillátor beállítása 16MHz-re
MOVLW B'11001000' ;\
MOVWF INTCON ;-Megszakítás bemenet változásra engedélyezése
MOVLW B'00000010' ;\
MOVWF PIE1 ;-Timer 2 megszakítás engedélyezése
CLRF IOCAP ;\
MOVLW B'00001000' ;-Megszakítást kiváltó bemenet kiválasztása
MOVWF IOCAN ;/
CLRF OPTION_REG ;OPTION_REG törlése
MOVLW B'01111100' ;\
MOVWF T2CON ; \
MOVLW D'99' ; \
MOVWF PR2 ;---PWM beállítása 40KHz-re 70%-os kitöltéssel, FLAG
CLRF PWM1DCL ;---bit beállítása 400 usecenkénti bebillenésre.
MOVLW D'70' ; /
MOVWF PWM1DCH ;_/
CLRF MB ;Belső kapcsolók törlése
MAIN
BTFSC TGYSW ;Ha telep gyenge kapcsoló be van kapcsolva, a program
GOTO TELEP_GYENGE ;átugrik TELEP_GYENGE rutinra.
INCFSZ WAIT ;Mivel a 400V-os feszültség felépülése jóval lassabb
GOTO $-1 ;folyamat annál, mint amennyi idő alatt a program
BCF INTCON,GIE
BSF ADCON,1 ;körbefordul, ezért kivárok két mérés között.
BTFSC ADCON,1 ;Bár az időközben bejövő megszakítás elronthatja a
GOTO $-1 ;mérési eredményt, a teljes működésre nincs komoly
BSF INTCON,GIE
MOVLW D'100' ;kihatása, viszont ha ilyenkor leállítom a megsza-
SUBWF ADRES,W ;kítást, lemaradhatok egy jelről, ezért nem teszem.
BTFSS STATUS,C ;Ezután ellenőrzöm, elérte-e a feszültség a kívánt
GOTO MAIN2 ;értéket. Ha nem, MAIN2-re ugrok. Ha igen, leállítom
CLRF PWM1CON ;a PWM kimenetet, kikapcsolom az időzítő segédkapcsoló-
BCF ISW ;ját és visszatérek a program elejére.
GOTO MAIN
MAIN2
MOVLW B'11000000' ;Ha a program ide jön, bekapcsolom a PWM-et, és be-
MOVWF PWM1CON ;állítom a PWM kimenetét.
BTFSC ISW ;Ellenőrzöm időzítő segédkapcsolóját. Ha be van kap-
GOTO MAIN ;csolva, visszatérek a program elejére. Ha nincs,
IDOZITO D'12500' ;feltöltöm értékkel az időzítőt, majd bekapcsolom
BSF ISW ;időzítő segédkapcsolóját.
GOTO MAIN ;Visszatérek a program elejére.
;-------------------------------------------------------------------------------
TELEP_GYENGE ;Ha a telep gyengesége, vagy egyéb okból nem jön
CLRF PWM1CON ;létre megadott időn belül a 400V, akkor kikapcsolom
BSF BUZZER ;a PWM csatornát, és szaggatott hangjelzést adok.
IDOZITO D'1250'
BSF ISW
NOP
BTFSC ISW
GOTO $-1
BCF BUZZER
IDOZITO D'800'
BSF ISW
NOP
BTFSC ISW
GOTO $-1
GOTO TELEP_GYENGE
;-------------------------------------------------------------------------------
MEGSZAKITAS
MOVWF MENT_WREG ;Elmentem W regiszter aktuális értékét
SWAPF STATUS,W
MOVWF MENT_STATUS
BTFSS INTCON,0 ;Ellenőrzöm, mi váltotta ki a megszakítást. Ha nem
GOTO MSZ1 ;részecske becsapódás, akkor csak Timer 2 lehetett,
MOVLW D'100' ;ezért átugrom MSZ1-re. Ha mégis, akkor SIP_IDO-be
MOVWF SIP_IDO ;100-at töltök, bekapcsolom a Buzzert, törlöm IOC
BSF BUZZER ;FLAG bitjét, valamint IOCAF regisztert, majd MSZ4-re
BCF INTCON,0 ;ugrok.
CLRF IOCAF
GOTO MSZ4
MSZ1
BTFSS ISW ;Ha időzítő segédkapcsoló be van kapcsolva, akkor
GOTO MSZ2 ;visszaszámoltatom a beálított értékről.
MOVLW 1 ;Mivel a PIC10-es nem ismeri a SUBWFB parancsot, és a
SUBWF TOLTES_L ;DECF parancs nincs hatással a CARRY bitre, ezért
BTFSC STATUS,C ;kicsit kacifántosabb a két byteos érték visszaszámolá-
GOTO MSZ2 ;sa. Valamint nem 0-nál, hanem csak mínusz 1-nél jár
SUBWF TOLTES_H ;le, de ennek nincs nagy jelentőssége.
BTFSC STATUS,C ;Ha lejár, kikapcsolom időzítő segédkapcsolóját, és
GOTO MSZ2 ;bekapcsolom telep gyenge segédkapcsolót.
BSF TGYSW
BCF ISW
MSZ2
BTFSC TGYSW ;Ha a telep gyenge segédkapcsoló be van kapcsolva, ezt
GOTO MSZ3 ;a rutint átugrom. Ez a rutin a becsapódáskori hang-
BTFSS BUZZER ;jelzés idejét állítja be 40msec-re.
GOTO MSZ3
DECFSZ SIP_IDO
GOTO MSZ3
BCF BUZZER
MSZ3
BCF PIR1,1 ;Timer 2 FLAG bitjének kikapcsolása.
MSZ4
SWAPF MENT_STATUS,W
MOVWF STATUS
MOVF MENT_WREG,W ;W regiszter tartalmának visszatöltése
RETFIE ;Kilépés a megszakításból.
END