TMR0 sayacı ve döngü oluşturma

Başlatan ennginar, 16 Şubat 2013, 16:09:50

ennginar

İyi günler;
Ben pic16f84a nın RA4 bacağından kesme devresi yardımıyla bir döngü oluşturmam gerekiyor. Öncelikle kesme devresinin çalıştığını TMR0 sayacına devreden gelen sinyallerle B portunda binary olarak artan örnek kodlarla denedim ve çalıştı. Benim istediğim TMR0 dan örneğin 10 sinyal aldığında kesecek ve bu işlemi belli bir miktar tekrar edecek. Bunu nasıl yapabilirim acaba ?

Ben şöyle bir program düzenledim ama bazen hatalı çalışıyor. Ben tam 36 sinyalde portb'ye bağlı ledlerin sönmesini istiyorum ama bazen 36 dan fazla sinyal alınca sönüyor.Döngüde zero biti kısmında mı hata var acaba ?
list	p=16F84		;hangi pic kullanılyor
	include"P16F84A.inc"

	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC  
	

SAYAC1 		EQU 	D'12'				
		CLRF 	PORTA
		CLRF 	PORTB

		
		BSF 	STATUS,5 	;Bankl
		MOVLW	b'11111111'
		MOVWF	TRISA
		CLRF 	TRISB		;PORTB tüm uçları çıkıs
		MOVLW 	b'00101000' 	;W¬b'00000lll' 1/256
		MOVWF 	h'81'	 	;OPTION_REG¬W
		BCF 	STATUS,5 	;BANK0
BASLA
		
		CLRWDT			
		MOVLW 	b'10111000' 	
		MOVWF 	INTCON 		
		MOVLW 	b'11111111'	;portb'deki ledleri yak
		MOVWF	PORTB	
		MOVLW	b'00100100'	;decimal---36
		MOVWF	SAYAC1
DONGU
		BCF	STATUS,2
		CLRF	TMR0
		MOVF 	TMR0,W 	 	
		SUBWF	SAYAC1,W	;w registerine sinyalden geleni yaz ve sayaçtan(36) çıkar
		BTFSS	STATUS,2	;zero biti test et,1 ise atla	
		GOTO 	$-3
		CLRF	PORTB
		GOTO DONGU
		END