Takaisin
;*****************************************************************************************
;                                                                                        *
;    Tiedostonimi:	    testi.asm    				                 *
;    Päiväys:               28.02 2005       			                         *
;    Tiedosto versio:       1B				                                 *
;                                                                                        *
;    Omistaja:              Matti Järvinen					         *
;                                                                                        *
;*****************************************************************************************
;                                                                                        *
;    Ohjelman toiminta lyhyesti:                                                         *
;                          Ohjelma vilkuttaa LEDiä PORTIN B bitissä 7, pinni 13		 *
;                                                                                        *
;*****************************************************************************************
	list      p=16F84         ; list määrittää käytetyn piirin
	#include <p16F84.inc>     ; Prosessorille valmiiksi määritellyt 
				  ; muuttujat tiedostossa p16F84.inc
	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;*****************************************************************************************
; Muuttujien määritys.

COUNT0	EQU	0X20		; Aikalaskija 0
COUNT1	EQU	0X21		; Aikalaskija 1
COUNT2	EQU	0X22		; Aikalaskija 2

;*****************************************************************************************
	ORG     0x000           ; Resetointi osoite, ohjelma alkaa aina tästä osoitteesta
  	GOTO    ALKU            ; Hyppykäsky varsinaisen ohjelman aloituskohtaan 
;*****************************************************************************************
ALKU				; Käynnistyksen ja määrittelyjen jälkeen varsinainen 
				; ohjelma alkaa tästä.
;*****************************************************************************************
; OHJELMAKOODI. Aloitetaan piirin asetuksilla.
; Ajastimen määritys.

	BSF	STATUS,RP0	; Asetetaan STATUS rekisterin Bitti 5 1:ksi
	MOVLW	b'11010001'	; OPTION_REG Lasketaan sisäisiä käskyjaksoja PSA (5)=0
	MOVWF	OPTION_REG	; Käytetään esijakajaa T0CS (3)=0 ja jakajaa asetuksella 
		 		; n/2 PS2-PS0 (2-0)=001
; Lähtöportin määritys.
	MOVLW	b'00001111'	; Portin bitit 7-4 lähdöksi ja 3-0 tuloksi.
	MOVWF	TRISB		; Siirretään portin B asetukseksi.
	BCF	STATUS,RP0	; Asetetaan STATUS rekisterin Bitti 5 0:ksi	

;*****************************************************************************************
; Asetusten jälkeen ohjelma joka vilkuttaa LEDiä PORTB bit7 pinnissä 13
; Samoilla määrityksillä voidaan käyttää myös muita PORTIN B bittejä 6,5,4 LEDin 
; vilkutukseen muuttamalla (PORTB,7) seiskaa, 6, 5 tai 4:ksi.

VILKKUPIN8
	BSF	PORTB,7		; Asetetaan PORTB bit7 = 1
	CALL	AIKA050		; Kulutetaan aikaa n.0,5s
	BCF	PORTB,7		; Asetetaan PORTB bit7 = 0
	CALL	AIKA050		; Kulutetaan aikaa n.0,5s
	GOTO    VILKKUPIN8	; Uusi kierros
	
;*****************************************************************************************
; Ajan määritys aliohjelmat.
; Käytettäessä 4MHz kidettä, jokaiseen ohjelmakäskyyn kuluva aika on 1/4 kellotaajuudesta
; eli kellojakso on 1/4000000MHz=0,00000025s ja käskyjakso on 4 X kellojakso = 0,000001s
; Jos nyt aikoo saada näkyvää vilkutusta jollekin LEDille lähtöporttiin niin tarvitaan
; esimerkiksi 0,5s:n aikaan, jonka ajan LED palaa, 500000 käskyjaksoa ja saman verran aikaan
; jonka LED on sammuneena. Tämä pitäisi toteuttaa laskijoilla jotka ovat 8 bittiä, eli
; laskija laskee 0-255, jonka jälkeen se aloittaa taas nollasta, tai päinvastoin eli 
; vähennetään, jolloin 0:n jälkeen tulee 255. Jollei aika ole tarkka voidaan käyttää esi
; jakajaa (t0pre), jolla jaetaan käskyjaksot 2,4,8,16,32,64,128,256:lla, joka määritellään 
; OPTION_REG rekisterissä, PS2-PS0 bitit 2-0. Samoin määritellään T0CS bitti 5=0, jolloin 
; käytetään sisäistä käskyjaksoa ja PSA bitti 3=0 jolloin esijakaja on käytössä. 
; Option rekisterin bittejä päästään muuttamaan, kun ensin vaihdetaan STATUS rekisterin 
; bitti 5 (RP0) 0:sta 1:n.
; Näitten määritysten jälkeen voidaan kirjoittaa jonkinkaltainen aliohjelma joka kuluttaa
; määritellyn ajan.
;
;-----------------------------------------------------------------------------------------
; Aika joka kuluu tähän silmukkaan on n.500us. Yhden käskyn suorittamiseen kuluva aika 1us

AIKA01
	MOVLW 	d'247'		; 1 ; Asetetaan laskijaan COUNT0 luku 247
	MOVWF	COUNT0		; 1
AIKA01A
	DECFSZ	COUNT0,F	; 1 ; Vähennetään laskijaa COUNT0
	GOTO	AIKA01A		; 1 ; Jos EI nolla vähennetään lisää
	RETURN			; 1 ; Jos ON nolla jatketaan kutsutusta paikasta

;-----------------------------------------------------------------------------------------
; Aika joka kuluu tähän silmukkaan on n.100ms. Yhden kierroksen suorittamiseen kuluva aika 
; 500us

AIKA10
	MOVLW 	d'200'		; 1 ; Asetetaan laskijaan COUNT1 luku 200
	MOVWF	COUNT1		; 1
AIKA10A
	CALL	AIKA01		; 1 ; Kulutetaan aikaa 500us
	DECFSZ	COUNT1,F	; 1 ; Vähennetään laskijaa COUNT1
	GOTO	AIKA10A		; 1 ; Jos EI nolla vähennetään lisää
	RETURN			; 1 ; Jos ON nolla jatketaan kutsutusta paikasta

;-----------------------------------------------------------------------------------------
; Aika joka kuluu tähän silmukkaan on n.500ms. Yhden kierroksen suorittamiseen kuluva aika 
; 100ms

AIKA050
	MOVLW 	d'5'		; 1 ; Asetetaan laskijaan COUNT2 luku 5
	MOVWF	COUNT2		; 1
AIKA050A
	CALL	AIKA10		; 1 ; Kulutetaan aikaa 100ms
	DECFSZ	COUNT2,F	; 1 ; Vähennetään laskijaa COUNT1
	GOTO	AIKA050A	; 1 ; Jos EI nolla vähennetään lisää
	RETURN			; 1 ; Jos ON nolla jatketaan kutsutusta paikasta

;*****************************************************************************************
		END                     ; Ohjelmakoodi loppuu tähän.

Takaisin