Çift döngülü zaman geciktirme alt programına örnek program. PortB’ye bağlı olan tüm LED’leri belirli zaman aralıklarıyla yakıp-söndürür
LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;----------------------------------------------------------
SAYAC1 EQU H'20' ;SAYAC1 saklayıcısının adresi
SAYAC2 EQU H'21' ;SAYAC2 saklayıcısının adresi
CLRF PORTB ;PortB'yi sıfırla
BANKSEL TRISB ;BANK1'e geç
CLRF TRISB ;PortB'nin tüm uçları çıkış
BANKSEL PORTB ;BANK0'a geç
TEKRAR
MOVLW h'00'
MOVWF PORTB
CALL GECIKME
MOVLW h'FF'
MOVWF PORTB
CALL GECIKME
GOTO TEKRAR
GECIKME ;Alt program başlangıcı
MOVLW h'FF' ;Dış döngü (M sayısı)
MOVWF SAYAC1
DONGU1
MOVLW h'FF' ;İç döngü (Nsayısı)
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYAC1, F
GOTO DONGU1
RETURN
END
BTFSC ve BTFSS komutlarının çalışmasını gösteren program. PortA’nın 0. bitine bağlı butona basınca PortB’nin 0. bit’indeki LED’i söndürür, PortA’nın 4. bit’indeki butona basınca da aynı LED’i yakar.
LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;----------------------------------------------------------
ORG h'0000'
CLRF PORTB ;PORTB'ye bağlı LED'leri söndür
BANKSEL TRISB ;BANK1'e geç
MOVLW b'11111110' ;W saklayıcıya h'08' yükle
MOVWF TRISB ;RB0 çıkış diğerleri giriş
MOVLW b'11111111' ;W saklayıcıya h'FF' yükle
MOVWF TRISA ;PORTA uçlarının tümü giriş
BANKSEL PORTB ;BANK0'a geç
MOVLW h'07' ;W saklayıcıya b’00000111’ yükle
MOVWF CMCON ;PORTA girişleri dijital I/O
TEST_PORTA
BTFSS PORTA,0 ;A port’unun 0. bit’ini test et
BCF PORTB,0 ;"0"sa PORTB.0'daki LED'i söndür
BTFSS PORTA,4 ;A port’unun 4. bit’ini test et
BSF PORTB,0 ;"0"sa PORTB.0'daki LED'i yak
GOTO TEST_PORTA ;PORTA'yı tekrar test et
END