include
__config H'3F39'
LCDVERI EQU 0X25
SAYAC_GECIK EQU 0X26
SAYAC_GECIK2 EQU 0X27
SAYAC_LCD EQU H'0028'
SIFIR_GECICI EQU H'0030'
ORG 0x000
CLRF PCLATH
goto ANAPROGRAM
ORG 0X004
kesme
BTFSS INTCON,0 ;RB4-RB7 KESMESİ GELDİ İSE 1 ADIM ATLA
GOTO KESMESONU
BTFSC PORTB,4
GOTO SUTUN1
BTFSC PORTB,5
GOTO SUTUN2
BTFSC PORTB,6
GOTO SUTUN3
BTFSC PORTB,7
GOTO SUTUN4
SUTUN1
CLRF PORTB ;olduğu bulunup yazdır alt programı ile yazdırıyor
BSF PORTB,0
BTFSC PORTB,4
MOVLW A'1'
BCF PORTB,0
BSF PORTB,1
BTFSC PORTB,4
MOVLW A'4'
BCF PORTB,1
BSF PORTB,2
BTFSC PORTB,4
MOVLW A'7'
BCF PORTB,2
BSF PORTB,3
BTFSC PORTB,4
MOVLW A'*'
BCF PORTB,3
BCF PORTB,4 ;1.SÜTUNU SIFIRLA
GOTO YAZDIR
SUTUN2
CLRF PORTB ;olduğu bulunup yazdır alt programı ile yazdırıyor
BSF PORTB,0
BTFSC PORTB,5
MOVLW A'2'
BCF PORTB,0
BSF PORTB,1
BTFSC PORTB,5
MOVLW A'5'
BCF PORTB,1
BSF PORTB,2
BTFSC PORTB,5
MOVLW A'8'
BCF PORTB,2
BSF PORTB,3
BTFSC PORTB,5
MOVLW A'0'
BCF PORTB,3
BCF PORTB,5 ;2.SÜTUNU SIFIRLA
GOTO YAZDIR
SUTUN3
CLRF PORTB ;olduğu bulunup yazdır alt programı ile yazdırıyor
BSF PORTB,0
BTFSC PORTB,6
MOVLW A'3'
BCF PORTB,0
BSF PORTB,1
BTFSC PORTB,6
MOVLW A'6'
BCF PORTB,1
BSF PORTB,2
BTFSC PORTB,6
MOVLW A'9'
BCF PORTB,2
BSF PORTB,3
BTFSC PORTB,6
MOVLW A','
BCF PORTB,3
BCF PORTB,6 ;3.SÜTUNU SIFIRLA
GOTO YAZDIR
SUTUN4
CLRF PORTB ;olduğu bulunup yazdır alt programı ile yazdırıyor
BSF PORTB,0
BTFSC PORTB,7
MOVLW A'A'
BCF PORTB,0
BSF PORTB,1
BTFSC PORTB,7
MOVLW A'B'
BCF PORTB,1
BSF PORTB,2
BTFSC PORTB,7
MOVLW A'C'
BCF PORTB,2
BSF PORTB,3
BTFSC PORTB,7
MOVLW A'D'
BCF PORTB,3
BCF PORTB,7 ;4.SÜTUNU SIFIRLA
GOTO YAZDIR
YAZDIR
DECFSZ SAYAC_LCD,1 ;16 karakter olup olmadığını kontrol ediyor
INCF PCL ;Olmamışsa PCL++ yapıp satırı sıfırlamayı atlıyor
CALL SATIR1_SIFIRLA ;Olmuşsa Lcd'nin ilk satırını Sıfırlıyor
CALL VERIYAZ
MOVLW H'0F' ;d portu yeniden ayarlanıyor
MOVWF PORTB
BCF INTCON,0 ; KESMEYİ CLEAR YAP (KAPAT)
KESMESONU
RETFIE
GECIKME:
MOVLW H'FF'
MOVWF SAYAC_GECIK
DON1:
MOVLW H'FF'
MOVWF SAYAC_GECIK2
DON2:
DECFSZ SAYAC_GECIK2,F
GOTO DON2
DECFSZ SAYAC_GECIK,F
GOTO DON1
RETURN
SATIR2:
MOVLW H'C0' ;2.satıra geçmek için gerekli kod
CALL KOMUTYAZ
RETURN
SATIR1:
MOVLW H'80' ;1.satıra geçmek için gerekli kod
CALL KOMUTYAZ
RETURN
KOMUTYAZ:
MOVWF LCDVERI ;Komutu geçici değişkene al.
SWAPF LCDVERI, W ;En değerli 4 bit’i gönder.
CALL LCDKOMUTGONDER
MOVF LCDVERI, W ;En değersiz 4 bit’i gönder.
CALL LCDKOMUTGONDER
RETURN
LCDKOMUTGONDER:
ANDLW 0x0F ;En değersiz 4 bit W'de,
MOVWF PORTD ;PortB'ye transfer ediliyor.
BANKSEL PORTD
BSF PORTD,5 ;Lcd ye düşen kenar üretmek için
CALL GECIKME
BCF PORTD,5 ;LCD için düşen kenar üretiyorz
RETURN
VERIYAZ: ;LCD'ye karakter göndermek için
MOVWF LCDVERI ;Komutu geçici değişkene al.
SWAPF LCDVERI, W ;En değerli 4 bit’i gönder.
CALL LCDVERIGONDER
MOVF LCDVERI, W ;En değersiz 4 bit’i gönder.
CALL LCDVERIGONDER
RETURN
LCDVERIGONDER:
ANDLW 0x0F ;En değersiz 4 bit W'de
MOVWF PORTD ;PortB'e transfer ediliyor.
BANKSEL PORTD
BSF PORTD,4 ;Karakter Yazılacağı belirtiliyor
BSF PORTD,5 ;LCD'için 1 yapılır
CALL GECIKME
BCF PORTD,5 ;LCD için düşen kenar üretiyorz
RETURN
TEMIZLE:
MOVLW H'02'
CALL KOMUTYAZ
MOVLW H'0C'
CALL KOMUTYAZ
MOVLW H'01'
CALL KOMUTYAZ
MOVLW H'28'
CALL KOMUTYAZ
MOVLW H'0F'
CALL KOMUTYAZ
MOVLW H'06'
CALL KOMUTYAZ
RETURN
ALT:
MOVLW A'A'
CALL VERIYAZ
MOVLW A'B'
CALL VERIYAZ
MOVLW A'D'
CALL VERIYAZ
MOVLW A'U'
CALL VERIYAZ
MOVLW A'L'
CALL VERIYAZ
MOVLW A'L'
CALL VERIYAZ
MOVLW A'A'
CALL VERIYAZ
MOVLW A'H'
CALL VERIYAZ
MOVLW A' '
CALL VERIYAZ
MOVLW A'E'
CALL VERIYAZ
MOVLW A'R'
CALL VERIYAZ
RETURN
SATIR1_SIFIRLA:
MOVWF SIFIR_GECICI ;Yazılacak olan Karakter tutuluyor
MOVLW H'02' ;1.Satır 1.Sutuna gel Komutu
CALL KOMUTYAZ
MOVLW D'16' ;Sayaç silme işlemi için kuruluyor
MOVWF SAYAC_LCD
SATIR1_DEVAM:
MOVLW A' ' ;Boşluk yazılıyor(16 Defa)
CALL VERIYAZ
DECFSZ SAYAC_LCD,1
GOTO SATIR1_DEVAM
MOVLW H'02' ;1.Satır 1.Sutuna gel
CALL KOMUTYAZ
MOVLW D'16' ;Sayaç Kuruluyor
MOVWF SAYAC_LCD
MOVFW SIFIR_GECICI ;Yazdırılacak karakter W'e geri yazılıyor
RETURN
ANAPROGRAM
BSF STATUS,RP0 ;BANK 1 E GEÇİLDİ
MOVLW B'00000000' ;D PORTU ÇIKIŞ OLARAK AYARLANDI
MOVWF TRISD
MOVLW B'11110000' ;B PORTU GİRİŞ-ÇIKIŞ OLARAK AYARLANDI
MOVWF TRISB
MOVLW B'10011000'
MOVWF INTCON
MOVLW B'10000000'
MOVWF OPTION_REG
BCF STATUS,RP0 ;BANK 0 A GEÇTİK
MOVLW B'00001111'
MOVWF PORTB
MOVLW D'17' ;Lcd de 16 karakterden sonra başa dönmesi için
MOVWF SAYAC_LCD ;gerekli olan sayac'ın değeri atandı
CALL TEMIZLE
CALL SATIR2 ;Lcd 2. Satıra Geçiyor
CALL ALT ;2. Satıra isim yazdırılıyor
CALL SATIR1 ;1. Satıra geri dönüyor
DONGU
GOTO DONGU
END
Hiç yorum yok:
Yorum Gönder