Sony RM-839 IR kumanda kodları

Başlatan XX_CİHAN_XX, 17 Temmuz 2008, 23:02:35

XX_CİHAN_XX



Aşağıdaki programla yukarıdaki kumandayı kullanabilirsiniz  8)
Bu programda, Rb7 den kesme ile kumanda verileri alınır. Alınan 7 bitlik kumanda kodu portbe deki ledlerde gözlenir.

;********************************************************
		LIST		P=16F628
		INCLUDE		"P16F628.INC"
        __CONFIG	_CP_OFF & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
;********************************************************
		CBLOCK		0x20
VERIREG
ADRESREG
BIT_SAYAC
		ENDC
		CBLOCK		0x70
YEDEKW
YEDEKS
		ENDC
;********************************************************
#DEFINE	DQ			PORTB,7
;********************************************************
		ORG			0x00
		GOTO		START
		ORG			0x04
KESME
		MOVWF		YEDEKW
		SWAPF		STATUS,W
		MOVWF		YEDEKS
		CLRF		STATUS
;********************************************************
;START BITININ GECMESINI BEKLE
		CLRF		TMR1L
		CLRF		TMR1H
		BCF			PIR1,TMR1IF
		BTFSC		PIR1,TMR1IF
		GOTO		EXIT
		BTFSS		DQ
		GOTO		$-3
		MOVLW		0x20
		SUBWF		TMR1H,W
		BTFSC		STATUS,C
		GOTO		BLANK
;********************************************************
		MOVLW		0x07
		MOVWF		BIT_SAYAC
		CLRF		VERIREG
		CLRF		TMR1L
		CLRF		TMR1H
;********************************************************
READ_DATA
		BCF			PIR1,TMR1IF
		BTFSC		PIR1,TMR1IF
		GOTO		EXIT
		BTFSC		DQ
		GOTO		$-3
		CLRF		TMR1L
		CLRF		TMR1H
		BCF			PIR1,TMR1IF
		BTFSC		PIR1,TMR1IF
		GOTO		EXIT
		BTFSS		DQ
		GOTO		$-3
		MOVLW		0x04
		SUBWF		TMR1H,W
		RRF			VERIREG,F
		DECFSZ		BIT_SAYAC,F
		GOTO		READ_DATA
		BCF			STATUS,C
		RRF			VERIREG,F
;********************************************************
		MOVLW		0x05
		MOVWF		BIT_SAYAC
		CLRF		ADRESREG
		CLRF		TMR1L
		CLRF		TMR1H
;********************************************************
READ_ADRES
		BCF			PIR1,TMR1IF
		BTFSC		PIR1,TMR1IF
		GOTO		EXIT
		BTFSC		DQ
		GOTO		$-3
		CLRF		TMR1L
		CLRF		TMR1H
		BCF			PIR1,TMR1IF
		BTFSC		PIR1,TMR1IF
		GOTO		EXIT
		BTFSS		DQ
		GOTO		$-3
		MOVLW		0x04
		SUBWF		TMR1H,W
		RRF			ADRESREG,F
		DECFSZ		BIT_SAYAC,F
		GOTO		READ_ADRES
		BCF			STATUS,C
		RRF			ADRESREG,F				
		RRF			ADRESREG,F	
		RRF			ADRESREG,F	
;********************************************************
;TUM VERI OKUNDU ADRES BILGISI DOGRUMU
		MOVLW		0x03
		SUBWF		ADRESREG,W
		BTFSC		STATUS,Z
		GOTO		SHOW		;YON TUSLARI
		MOVLW		0x01
		SUBWF		ADRESREG,W
		BTFSS		STATUS,Z
		GOTO		EXIT
SHOW
		MOVF		VERIREG,W
		MOVWF		PORTB
;********************************************************
EXIT
		BCF			INTCON,RBIF
		SWAPF		YEDEKS,W
		MOVWF		STATUS
		SWAPF		YEDEKW,F
		SWAPF		YEDEKW,W		
		RETFIE
;********************************************************
BLANK
		CLRF		TMR1L
		CLRF		TMR1H
		MOVLW		0x4F
		SUBWF		TMR1H,W
		BTFSS		STATUS,C
		GOTO		$-3
		GOTO		EXIT
;********************************************************		
START
		MOVLW		0x07
		MOVWF		CMCON
		CLRF		PORTB
		BSF			STATUS,5
		MOVLW		0x80
		MOVWF		TRISB
		MOVLW		0x03
		MOVWF		OPTION_REG	;PULL UP ACIK / TMR0  1 : 16
		BCF			STATUS,5
;********************************************************
		MOVLW		0x01
		MOVWF		T1CON
		CLRF		TMR1L
		CLRF		TMR1H
		BCF			PIR1,TMR1IF
		BTFSS		PIR1,TMR1IF		;POWER DELAY(65.5mS)
		GOTO		$-1
;********************************************************
		MOVLW		0x88
		MOVWF		INTCON		;RB CHANGE INT ON
;********************************************************
MAIN
	
		NOP
	
		GOTO		MAIN
;********************************************************
		END

Test edilmiştir. Kolay gelsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Aynı programın daha hızlı çalışan ve açıklamalı halidir.
Yani versiyon2  ;)
KUMANDA         ;SONY RM839 KUMANDA OKUMA ALTPROGRAMI BASLANGICI

;START BITININ GECMESINI BEKLE
  CLRF  TMR1L
  CLRF  TMR1H ;ZAMAN RESETLENDI
  BTFSC  TMR1H,7 ;ZAMAN ASIMINI KONTROL ET(KITLENME VAR MI?)
  GOTO  EXIT
  BTFSS  DQ  ;START BITNIN BITMESI BEKLENIYOR
  GOTO  $-3
  MOVLW  0x20
  SUBWF  TMR1H,W
  BTFSC  STATUS,C ;START BITI TAMAM ZAMAN ASIMI OLDU MU ?
  GOTO  EXIT  ;OLDUYSA CIK

;********************************************************
  MOVLW  0x07
  MOVWF  BIT_SAYAC ;7 BIT ALINACAK(DATA)
  CLRF  VERIREG  ;VERI REGISTERI TEMIZLENDI
_READ_DATA_      ;DATA OKUMA DONGUSU
  CLRF  TMR1L  ;ZAMAN RESETLENDI
  CLRF  TMR1H
;********************************************************
  BTFSC  TMR1H,7  ;ZAMAN ASIMI KONTROLU
  GOTO  EXIT
  BTFSC  DQ   ;0 BITI BEKLENIYOR
  GOTO  $-3
  CLRF  TMR1L
  CLRF  TMR1H  ;ZAMAN YENIDEN KURULDU
  BTFSC  TMR1H,7  ;KITLENME VAR MI?
  GOTO  EXIT  ;VARSA CIK
  BTFSS  DQ   ;1 BITI BEKLENIYOR
  GOTO  $-3
  MOVLW  0x04
  SUBWF  TMR1H,W  ;BİT SÜRESİ 1MS OLDUYSA CARRY 1, OLMADIYSA C=0
  RRF   VERIREG,F ;CARRY BİTİNİ VERI REGISTERINE İŞLE
  DECFSZ  BIT_SAYAC,F ;7 BIT ALINDI MI
  GOTO  _READ_DATA_ ;ALINMADIYSA DONGU BAŞINA
  BCF   STATUS,C
  RRF   VERIREG,F ;ALINDIYSA VERIYI 1 BİT SAĞA YASLA
;********************************************************
  MOVLW  0x05
  MOVWF  BIT_SAYAC ;5 BIT ALINACAK(ADRES)
  CLRF  ADRESREG ;ADRES REGISTERI TEMIZLENDI
_READ_ADRES_      ;ADRES OKUMA DONGUSU
  CLRF  TMR1L
  CLRF  TMR1H  ;SAYICI RESETLENDI
;********************************************************
  BTFSC  TMR1H,7  ;ILK BIT ICIN ZAMAN ASIMI KONTROLU
  GOTO  EXIT  ;ASILDIYSA DIŞARI!
  BTFSC  DQ   ;VERININ SIFIRA DÜŞMESİ BEKLENİYOR
  GOTO  $-3
  CLRF  TMR1L  ;0 BITI ALINDI SAYICI SILINIYOR
  CLRF  TMR1H
  BTFSC  TMR1H,7  ;KITLENME KONTROLÜ
  GOTO  EXIT
  BTFSS  DQ   ;1 BITI ALINIYOR
  GOTO  $-3
  MOVLW  0x04  ;BITIN 1 DE KALMA SÜRESİ KONTROL EDILIYOR
  SUBWF  TMR1H,W  ;1MS VE ÜSTÜ İSE C=1, DEĞİLSE C=0
  RRF   ADRESREG,F ;CARRY E YUKLENEN BIT BILGISI ADRESREGE AKTARILIYOR
  DECFSZ  BIT_SAYAC,F ;TUM ADRES BITLERI ALINDI MI?
  GOTO  _READ_ADRES_ ;HAYIRSA DEVAM
  BCF   STATUS,C
  RRF   ADRESREG,F ;ADRES VERISI 5 BIT OLDUGU ICIN     
  RRF   ADRESREG,F ;KALAN 3 BIT SAGA YASLANIYOR
  RRF   ADRESREG,F ;DATA VE ADRES BILGISI ALINDI!
;********************************************************
;TUM VERI OKUNDU ADRES BILGISI DOGRUMU
  MOVLW  0x03
  SUBWF  ADRESREG,W ;ADRES KODU 3 MÜ
  BTFSC  STATUS,Z
  GOTO  BITTI  ;ADRES=3 YON TUSLARINA BASILMIŞ!
  MOVLW  0x01  
  SUBWF  ADRESREG,W ;ADRES KODU 1 Mİ
  BTFSS  STATUS,Z
  GOTO  EXIT  ;1 DEĞİLSE HATALI VERİ, DIŞARI!
;********************************************************
BITTI       ;ADRES KODU DOĞRU ALINDI
  BSF   VERI  ;KUMANDA DUZGUN OKUNDU flagi set edildi
  GOTO   _EXIT_  ;KESMEDEN DIŞARI
;********************************************************
EXIT       ;YANLIS VERI
  BCF   VERI  ;KUMANDA DUZGUN OKUNAMADI
_EXIT_
  BCF   INTCON,RBIF
  MOVF  PORTB,W
  RETFIE
;********************************************************


Küçük açıklama:

Bu program picprojede ilk yayınladığım programdan sonra geliştirilmiş halidir.

Daha hızlıı ve sorunsuz çalışmaktadır.

Programdan Çıkıldığında Eğer VERI biti (bu ismi #define ile en başta istediğiniz bir registerin bitine tanımlayabilirsiniz)

set ise VERIREG de basılan tuşun kodu vardır. VERI 0 ise VERIREG deki sayı ya önceki tuşundur yada hatalı bilgidir.Değerlendirilmez.

Bu arada DQ ise yine #define ile programın başında sensörün datasının bağlı olduğu pine isimlendirilir.

Bu program RBIF yani portb change kesmesine göre çalışmaktadır. Dolayısıyla DQ ismi RB4 ile RB7 arasında kullanılır. Kullanılan data pini en başta giriş olarak yapılmalıdır.

Program tuşun kodunu düzgün alırsa VERI  bitini set eder ve alınan koduda VERIREG isimli resigere atıp kesmeden çıkar.

Kolay gelsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kuboelekt

devre şeması yok mu acaba proteusta kurulu falan olursa çok iyi olur

XX_CİHAN_XX

Kumanda devresi olduğu için proteusta simulasyon yapamazsınız.
Zaten şemada birşey yok açıklamadan herşey açıkça anlaşılıyor. RB7 den IR alıcı göz çıkışını giriyorsunuz hepsi bukadar.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.