'------------------------------------------------------------ 'Programın adı: Uyg_12_include.bas 'Programın işlevi: Include dosyası olarak kullanılan bir ' programdır. IRSerout adlı bir alt programı barındırır. Bu ' alt program belirlenen bir dijital veriyi 39KHz'lik modüle ' sinyali ile modüle ederek belirlenen pin'den seri olarak ' gönderir. 'Tarih:28/08/2007 Uyarlama:1.00 Derleyici:PBP '------------------------------------------------------------ ' Değişken tanımlamaları Dlctr Var Byte ' Seri gecikme döngüsü için sayıcı Bctr Var Byte ' Gönderilen bit'lerin sayısı. Tr_B Var Byte ' Göndericide kullanılan değişken. Ir_Byteout Var Byte ' Gönderilecek olan dijital veri. IR_Bit Var Bit ' Pulse ON veya OFF değişkeni. Dl_Temp Var Byte ' Seri gecikme döngüsü için 2. sayıcı ON_Delay Var DL_Temp Off_Delay Var DL_Temp Goto IRSEROUT_Atla 'IRSerout alt programı Ana programdan ' çağrılmadığında bu programın sonuna git (programı atla). IRSerout: ASM #Define IR_LED IRSEROUT_PORT , IRSEROUT_PIN ; Port ve pin ;tanımlarını ana programdan al. ; IRSEROUT_PORT tanımlanmamışsa PORTA'ya kur. Ifndef IRSEROUT_PORT IRSEROUT_PORT = PortA IRSEROUT_PORT = PortC endif ; IRSEROUT_PIN tanımlanmamışsa BIT 0'a kur. Ifndef IRSEROUT_PIN IRSEROUT_PIN = 0 endif ; Baud rate tanımlanmadığında 1200 Baud terslenmiş moda kur. Ifndef IRSEROUT_BAUD IRSEROUT_BAUD = 1200 endif Bcf IRSEROUT_PORT,IRSEROUT_PIN ; Uygun pin'i sil Bsf Status,5 ; Bank1'e geç. Bcf IRSEROUT_PORT,IRSEROUT_PIN ; Uygun pin'i çıkışa kur. Bcf Status,5 ; Bank0'a geri dön. ; Farklı baud hızında ve terslenmiş olarak seri veri gönder. Mov w, _Ir_Byteout ; Gönderilecek veriyi W'ye yükle. Clrwdt ; Watchdog timer'ı başlat. Movwf _TR_B Movlw 08 Movwf _Bctr ; 8-bit bir Byte !. Bsf _IR_Bit Call Send_Bit ; Yaklaşık 39Khz'de start bit'i gönder. SIRXmt Rrf _Tr_B ; Sağa kaydırarak verinin LSB bit'ini ' Carry flag'a yükle, Start bit'i de 0 olur. Btfsc Status,0 ; Carry Flag'ı test et. Bcf _IR_Bit ; "0" gönder. Btfss Status,0 ; Carry Flag'ı test et. Bsf _IR_Bit ; "1" gönder. Call Send_Bit ; 39 KHz'de veri bit'i gönder. Decfsz _Bctr ; 8 bit olduysa, sonraki veri bit'ini ; gönder. Goto SIRXmt Bcf _IR_Bit ; "0"a kur. Call Send_Bit ; Yaklaşık 39Khz'de stop bit'i gönder. ; X kadar süre gecikme yap. Clrwdt ; Watchdog timer'ı başlat. Movlw 255 Movwf _DlCtr IRSInner Clrwdt ; Watchdog timer'ı başlat. Nop Nop Nop Nop Nop Nop Decfsz _DlCtr ; "0" olana kadar döngüye devam et. Goto IRSInner Return ; Bu satırlar yaklaşık 39 KHz'de modüleli pals gönderir. Send_Bit ; Baud rate 300 olarak belirlendiyse bu satırları derle. If (IRSEROUT_BAUD == 300) Movlw 128 ; Gecikme süresini 300 baud için kur. endif ; Baud rate 6600 olarak belirlendiyse bu satırları derle. If (IRSEROUT_BAUD == 600) Movlw 64 ; Gecikme süresini 600 baud için kur. endif ; Baud rate 1200 olarak belirlendiyse bu satırları derle. If (IRSEROUT_BAUD == 1200) Movlw 32 ; Gecikme süresini 1200 baud için kur. endif ; Baud rate 2400 olarak belirlendiyse bu satırları derle. If (IRSEROUT_BAUD == 2400) Movlw 16 ; Gecikme süresini 2400 baud için kur. endif Pulse_Bit Movwf _Dlctr ; Gecikme süresini Dlctr'ye yükle Irlp1 Clrwdt ; Watchdog timer'ı başlat. Btfsc _Ir_Bit ; Eğer Ir_Bit=1 ise, Bsf IR_LED ; IR_LED'ini "1" yap. Btfss _Ir_Bit ; If Ir_Bit=0 ise Bcf IR_LED ; IR_LED'ini "0" yap. ; Osilatör 4Mhz seçildiyse bu satırları derle. if (OSC == 4) Movlw 3 Movwf _On_Delay Inner1 Decfsz _On_Delay Goto Inner1 endif ; Osilatör 8Mhz seçildiyse bu satırları derle. if (OSC == 8) Movlw 8 Movwf _On_Delay Inner1 Decfsz _On_Delay Goto Inner1 endif ; Osilatör 10Mhz seçildiyse bu satırları derle. if (OSC == 10) Movlw 12 Movwf _On_Delay Inner1 Decfsz _On_Delay Goto Inner1 endif ; Osilatör 12Mhz seçildiyse bu satırları derle. if (OSC == 12) Movlw 17 Movwf _On_Delay Inner1 Decfsz _On_Delay Goto Inner1 endif Bcf IR_LED ; IR_LED'ini "0" yap. ; Osilatör 4Mhz seçildiyse bu satırları derle. if (OSC == 4) Nop Nop Nop Nop Nop Nop endif ;Osilatör 8Mhz seçildiyse bu satırları derle. if (OSC == 8) Movlw 5 Movwf _Off_Delay Inner2 Decfsz _Off_Delay Goto Inner2 endif ;Osilatör 10Mhz seçildiyse bu satırları derle. if (OSC == 10) Movlw 5 Movwf _Off_Delay Inner2 Decfsz _Off_Delay Goto Inner2 endif ;Osilatör 12Mhz seçildiyse bu satırları derle. if (OSC == 12) Movlw 5 Movwf _Off_Delay Inner2 Decfsz _Off_Delay Goto Inner2 endif Decfsz _Dlctr Goto Irlp1 Return ENDASM IRSEROUT_Atla: '------------------------------------------------------------