pıc asm kodu

Başlatan bceylan07, 23 Mayıs 2005, 15:17:03

bceylan07

bende su asm kodu çözemedim daha dogrusu burda 50 tane hatayı 15 kadar indirdim ama 15 tane hata yı düzeltemedim ark size göndersem 15 taneyi düzelte bilirmisiniz  eğer bilginiz varsa yardımcı olursanız sevinirim tşk
list	p=16f84
	
	#INCLUDE "P16F84.INC" ; Include header file
	#define	bank0	bcf	STATUS, RP0
	#define	bank1	bsf	STATUS, RP0
	
	#define ileri 	0x05	; 00000101
	#define geri  	0x0A	; 00001010
	#define saga  	0x06	; 00000110
	#define sola  	0x09	; 00001001
	#define dur  	0x00	; 00000000
STATUS	EQU	H'0003'
PORTA   EQU     H'0005'
PORTB	EQU	H'0006'
TRISA	EQU	H'0085'
TRISB	EQU	H'0086'
INTCON	EQU	H'000B'
OPTION	EQU	H'0081'
sayac1	EQU     H'000c'
sayac2	EQU     H'000d'
sessur	EQU     H'000e'
depo	EQU     H'000f'
pbmask	equ	h'0010'
ledsay	equ	h'0011'
eepsay	equ	h'0012'
eskib	equ	h'0013'
flag	equ	h'0014'
sesfrek	equ	h'0015'
ldrval	equ	h'0016'
sagval	equ	h'0017'
solval	equ	h'0018'
timer	equ	h'0019'
flag2	equ	h'0020'
timsay	equ	h'0021'
statemp	equ	h'0022'
wtemp	equ	h'0023'
alarme	equ	h'0024'
alarmy	equ	h'0025'
sayac3	equ	h'0025'
saat	equ	h'0026'
dakika	equ	h'0027'
sasay	equ	h'0028'
dasay	equ	h'0029'

geda	equ	h'002a'
gesa	equ	h'002b'


	org	0

start	clrf	INTCON
	goto	main
	nop
	nop

intvec	movwf   wtemp           ; save off current W register contents
	movf	STATUS,w        ; move status register into W register
	movwf	statemp       	; save off contents of STATUS register


       	btfss  	INTCON,T0IF    	; Timer0 interrupt?
       	goto   	pop
	bcf    	INTCON,T0IF    	; Clear the Timer0 interrupt flag
	banksel	PORTB	
	incf	timsay
	btfsc	STATUS,Z
	incf	timer
pop	
	movf    statemp,w     	; retrieve copy of STATUS register
	movwf	STATUS          ; restore pre-isr STATUS register contents
	swapf   wtemp,f
	swapf   wtemp,w         ; restore pre-isr W register contents

	retfie
main
	banksel TRISB
	movlw	b'11111110'	; PORTB giriş, -- 7. biti çıkış (ses ve fan için)
	movwf	TRISB

	movlw	b'00000000'	; PORTA çıkış
	movwf   TRISA

	call	init

	banksel	PORTB

	clrf	PORTB
	bcf	OPTION_REG,7	; Enable portb pullups

	clrf	flag
	clrf	alarme
	clrf	alarmy
	clrf	saat
	clrf	dakika
	
	movlw	d'60'
	movwf	dasay
	movwf	sasay

basadon	
	movlw	0
	movwf	EEADR

	movlw	dur
	movwf	PORTA

	movlw	d'255'
	call	efekt

aprog	
isikara
sagsol	call	carptimi

	movfw	PORTB
	andlw	b'11111000'
	sublw	b'11111000'
	btfss	STATUS,2
	goto	gungit

	movlw	saga
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle
	call	ldrbak
	movwf	sagval

	call	carptimi

	movlw	sola
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle

	call	carptimi

	movlw	sola
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle
	call	ldrbak
	movwf	solval

	call	carptimi

	movlw	saga
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle

	call	carptimi

	movfw	sagval
	subwf	solval,0
	btfss	STATUS,C
	goto	salak

solak	btfsc	flag,1
	call	gitgit
sol1	bsf	flag,2
	bcf	flag,1
	movlw	sola
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle

	call	carptimi

	call	snd
	call	snd
	goto	sagsol

salak	btfsc	flag,2
	call	gitgit
sag1	bsf	flag,1
	bcf	flag,2
	movlw	saga
	movwf	PORTA
	call	azbekle
	movlw	dur
	movwf	PORTA
	call	azbekle

	call	carptimi

	call	snd
	goto	sagsol

;-----------------------------------------
sondur
	movlw	dur
	movwf	PORTA
	call	azbekle

	bsf 	PORTB,0
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle
	call	bekle

        bcf 	PORTB,0
	call	lbek

	movlw	geri
	movwf	PORTA
	call	bekle
	call	bekle

	return
;****************************
init	movlw  	0x8F           ; Set the timer prescaler.
	banksel OPTION_REG
       	movwf  	OPTION_REG
	banksel	TMR0
	movlw  	0x00
       	movwf  	TMR0
       	bsf    	INTCON,T0IE    ; Enable the timer interrupt.
       	bsf    	INTCON,GIE     ; Enable global interrupts.
	return
;****************************
gungit	
	bsf	flag,3
	goto	basadon

gitgit	movlw	ileri
	movwf	PORTA
	call	bekle
	call	bekle
	movlw	dur
	movwf	PORTA
	call	bekle
	return
;****************************
carptimi
	btfss	PORTB,1
	call	sondur
	btfss	PORTB,2
	call	sondur
	return
;****************************
ldrbak
	banksel	TRISA
	bcf	TRISA,4		; RA4 output
	banksel	PORTA
	bcf	PORTA,4		; discharge capacitor	
	nop
	nop

	banksel	TRISA
	bsf	TRISA,4		; RA4 input
	banksel	PORTA

	movlw	0
	movwf	ldrval
testet	
	movfw	ldrval
	sublw	d'255'
	btfss	STATUS,2
	incf	ldrval,1

	btfsc	PORTA,4
	goto	birdir
	goto	testet
birdir	bcf	STATUS,0
	rrf	ldrval,1
	bcf	STATUS,0
	rrf	ldrval,1
	bcf	STATUS,0
	rrf	ldrval,1

	movfw	ldrval
	sublw	d'255'

	andlw	b'00011111'
	movwf	ldrval
	return
;-----------------------------------------
efekt	
	movwf	sessur

efktlop	
	movfw	sessur
	movwf	sesfrek

	bsf 	PORTB,0

slop1	incfsz	sesfrek
        goto  	slop1

        bcf 	PORTB,0

slop2	incfsz	sesfrek
        goto  	slop2

	decfsz	sessur
	goto	efktlop
	return
;-----------------------------------------
snd	
	movlw	0ffh
	movwf	sessur
	
sndlop	bsf 	PORTB,0
	call	lbek

        bcf 	PORTB,0
	call	lbek

	decfsz	sessur
	goto	sndlop
	return
;-----------------------------------------
lbek	movlw	0xe5
	movwf	sesfrek
	
lbek2	nop
	nop
	nop
        incfsz	sesfrek
        goto  	lbek2
	return

lbeku	movlw	0xd5
	movwf	sesfrek
	
lbek3	nop
	nop
	nop
        incfsz	sesfrek
        goto  	lbek3
	return

azbekle	movlw	d'90'
	movwf	sayac2
	movlw	d'255'
	movwf	sayac1

azbek1	decfsz	sayac1
	goto	azbek1

	decfsz	sayac2
	goto	azbek1
	return


bekle	bsf	PORTA,4
	clrf 	sayac1

loop1   clrf 	sayac2

loop	incf 	sayac2
        nop
        nop
	nop
        btfss 	sayac2,7
        goto  	loop
	nop
	nop
	nop
	incf  	sayac1
	btfss 	sayac1,7		
	goto 	loop1
	bcf	PORTA,4
        return


	end

uysali

:) "şimdi sınavlarım var zamanım olsa bakardım" ama birkaç tane CALL komutu ile çağırdığın alt programların sonuna RETURN eklemeyi unutmuşsun gibi geldi bana bunlara bi bakarsın :)  örn "ldrbak - efekt - efktlop - slop1 - snd - lbek - lbeku.....

aster

err dosyasında hangi satırları gösteriyor ? ne diyor ?

bigbey

Ben dosyayı derledim sadece
OPTION   EQU   H'0081' yerine
OPTION_REG   EQU   H'0081'
yazman yeterli

Ayrıca include dosyası kullandığında default değerler, yani işlemciye ait sabit değerleri tanıtmana gerek yok.

örnek
STATUS   EQU   H'0003'
PORTA   EQU     H'0005'
PORTB   EQU   H'0006'
TRISA   EQU   H'0085'
TRISB   EQU   H'0086'
INTCON   EQU   H'000B'
OPTION   EQU   H'0081'
satırlarını silebilirsin sorun olmaz
TA6R