15 Mayıs 2011 Pazar

PİC ASEMBLY

Ç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