Vibrator.asm

;20110802 ver.0
;Johnny Apell
;Testning att styra en vibratortrafo 12V upp till anodspänning
;med 50Hz och uppehåll mellan perioderna för att transistorerna skall hinna att stänga
;
;    
;
;Processor 12F509....för att jag hade den liggande
;använd intern 4MHz klocka


;**********************************************************************************

;Här talar vi om för assemblerprogrammet vilken processor vi har och vilka adresser
;som vi ska starta ifrån

      
    LIST    P=PIC12F509 ;, R=HEX
	#include "p12F509.inc"

;konfigurering av kretsen
	__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC  



RESET	org 	0x000				;första adressen i programmet


start
		clrf	GPIO				;reset alla utgångar
		movlw	b'00001000'			;gör alla pinnar till utgångar (0), utom den som bara är ingång...
		TRIS 	GPIO				;placera i TRIS-registret
		


		
									;här snurrar programmet runt med att växelvis
									;sätta utgångarna med lämpliga fördröjningar
									;samt anropa respektive fördröjning
puls
		bsf		GPIO,0				;sätt pinne 1 till "1"  Transistor "A"
		call	pulsHz				;hämta lite fördröjning,  pulsfrekvensen
		clrf	GPIO				;reset utgångarna
		call	delay				;hämta den lilla fördröjningen  för "gate off"

									
		bsf		GPIO,1				;sätt pinne 2 till "1" Transistor "B"
		call	pulsHz				;hämta pulsfrekvensen.. alltså fördröjningen
		clrf	GPIO				;reset utgången
		call	delay				;hämta den lilla fördröjningen  för "gate off"

		goto 	puls				;kör en ny cykel

;Pulsfrekvensen						;genom att låta processorn minska register och kolla om det blev "0"
									;så förbrukar vi lite tid..motsvarande pulsfrekvensen
pulsHz	
		movlw	.8					;lagom värde för att skapa ca 60Hz
		movwf	08h					;flyttas in i register 8
		clrf	07h					;nollställ register 7
		decfsz	07h,f				;minska register 7 med ett och kolla om det blev "0"
		goto	$-1					;om inte...hoppa tillbaka ett steg
		decfsz	08h,f				;reg 7 blev "0" minska nästa register och kolla om det blev "0"		
		goto	$-3					;annars gå tillbaka 3 steg och kör minskningen igen
		retlw 0						;fördröjningen är klar!

;time för "gateoff"
delay
		movlw	.2					;lagom värde för att skapa hysteresen
		movwf	08h					;samma funktion som ovan pulsHz
		clrf	07h
		decfsz	07h,f
		goto	$-1
		decfsz	08h,f
		goto	$-3	
		retlw	0					;tebaks till där anropet kom ifrån

		END							;programslut
