Ynt: 16F84'te çalışan devrenin programını 16F628'e uyarlamak yardım ?

Başlatan tr_51, 13 Mart 2013, 19:13:37

tr_51

devre simülasyonda çalışıyor 16f84 pic ile yerine 16f628 koyuyorum lcd'ye yazı gelmiyor basketbol skorbord devresi yapıyorum yardımcı olur musunuz?

Devre bu;

http://f1303.hizliresim.com/17/f/l0xyc.jpg

burdaki 16f84 yerine 16f628 koyuyorum ve lcd ye karakterler gelmiyor programında mı bi sıkıntı var acaba ?

Program;

      LIST P=16F84A
      INCLUDE "P16F84.INC"
#DEFINE RS PORTB,2
#DEFINE RW PORTB,1
#DEFINE EN PORTB,0
CBLOCK H'10' ; Değişkenleri tanımla
      CX
      TEMP
      TEMP0
      TEMP1
      SOL_K1
      ORTA_K1
      SAG_K1
      SOL_K2
      ORTA_K2
      SAG_K2
      SAYAC1
      SAYAC2
      SAYAC3
ENDC

BASLA;
      CALL PORT_KUR ; Portları ayarla
      CALL LCD_AYAR ; LCD ilk kullanım için ayarla
      CALL A_SIFIR ; A takımının değişkenlerini sıfırla
      CALL B_SIFIR ; B takımının değişkenlerini sıfırla
      CALL MESAJ1 ; 1. satıra A ve B yaz
      CALL MESAJ2 ; 2. satıra takım A'nın ilk puanını yaz
      CALL MESAJ3 ; 2. satıra takım B'nin ilk puanını yaz
BUTON
      BTFSS PORTB,7 ; Tuşları kontrol et
      CALL A_ART
      BTFSS PORTB,6
      CALL A_AZAL
      BTFSS PORTB,5
      CALL B_ART
      BTFSS PORTB,4
      CALL B_AZAL
      GOTO BUTON
PORT_KUR;
      BSF STATUS,5
      CLRF TRISA
      MOVLW H'F0'
      MOVWF TRISB
      BCF STATUS,5
      RETURN
LCD_AYAR;
      CALL LCD_RESET ; LCD Resetle
      CALL FUNCTION_SET ; 4 bit mod ve iki satır aktif
      CALL DISPLAY_ON ; Ekranı aç ve kursörü kapat
      CALL ENTRY_MODE ; Kursör 1 artan mod
      RETURN
LCD_RESET;
      CALL GECIKME1
      MOVLW H'03'
      MOVWF CX
RESET    MOVLW H'00'
      MOVWF PORTA
      CALL LCD_KOMUT
      DECFSZ CX,1 ; CX ? CX -1
      GOTO RESET
      RETURN
FUNCTION_SET;
      MOVLW H'02' ; 4 bit mod
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVLW H'02' ; 4 bit mod
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVLW H'08' ; 2 satır
      MOVWF PORTA
      CALL LCD_KOMUT
      RETURN
DISPLAY_ON;
      MOVLW H'00'
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVLW H'0C' ; LCD on
      MOVWF PORTA
      CALL LCD_KOMUT
      RETURN
ENTRY_MODE;
      MOVLW H'00'
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVLW H'06' ; Kursor 1 artan mod
      MOVWF PORTA
      CALL LCD_KOMUT
      RETURN
LCD_SIL;
      MOVLW H'00'
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVLW H'01' ; Ekranı temizle, kürsör 1.satır 1.sütunda
      MOVWF PORTA
      CALL LCD_KOMUT
      RETURN
LCD_YAZ;
      MOVWF TEMP ; TEMP ? W
      SWAPF TEMP,F ; Üst 4 bit ile alt 4 biti yer değiştir.
      MOVF TEMP,W ; Üst 4 biti al
      MOVWF PORTA ; LCD'ye gönder.
      BSF EN ; E ? 1
      NOP ; Bekle
      BCF EN ; E ? 0
      CALL BF_TEST ; Meşgul bayrağını test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      SWAPF TEMP,F ; Yazılacak verinin tekrar üst 4 biti
      MOVF TEMP,W ; alt 4 bitini yer değiştir
      MOVWF PORTA ; LCD'ye gönder
      BSF EN ; E ? 1
      NOP ; Bekle
      BCF EN ; E ? 0
      RETURN
LCD_KOMUT;
      CALL BF_TEST ; BF test et
      BCF RS ; RS ? 0 Komut
      BCF RW ; RW ? 0 Yaz
      BSF EN ; E ? 1
      NOP ; Bekle
      BCF EN ; E ? 0
      RETURN
BF_TEST;
      BSF STATUS,5 ; Bank 1'e geç
      MOVLW H'FF'
      MOVWF TRISA ; PORTA ? Giriş
      BCF STATUS,5 ; Bank 0'a geç
      BCF RS ; Veri
      BSF RW ; LCD Oku
      BSF EN ; E? 1
      MOVF PORTA,W ; LCD'den gelen bilgileri W aktar.
      BCF EN ; E ? 0
      ANDLW H'F0' ; Üst 4 biti sıfırla
      MOVWF TEMP1 ; TEMP1'de sakla
      SWAPF TEMP1,F ; Alt 4 bit ile üst 4 biti yer değiştir.
      BSF EN ; E ? 1
      GOTO $+1 ; Bir alt satıra git
      BCF EN ; E ? 0
      BTFSC TEMP1,7 ; BF = 1 mi?
      GOTO BF_TEST ; Evet, BF'yi tekrar test et
      BSF STATUS,5 ; Hayır
      CLRF TRISA ; PORTA ? Çıkış
      BCF STATUS,5
      RETURN
SATIR1W;
      MOVWF TEMP0 ; TEMP0 ? W
      MOVLW H'08' ; LCD 1. satırı aktif
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVF TEMP0,W
      MOVWF PORTA ; 1. satırda W sütununa git
      CALL LCD_KOMUT
      RETURN
SATIR2W;
      MOVWF TEMP0 ; TEMP0 ? W
      MOVLW H'0C' ; LCD 2. satırı aktif
      MOVWF PORTA
      CALL LCD_KOMUT
      MOVF TEMP0,W
      MOVWF PORTA ; 2. satırda W sütununa git
      CALL LCD_KOMUT
      RETURN
A_SIFIR;
      MOVLW H'30' ; 1. sayının karakterlerine H'30'
      MOVWF SOL_K1 ; yani "0 " yükle
      MOVWF ORTA_K1
      MOVWF SAG_K1
      RETURN
B_SIFIR;
      MOVLW H'30' ; 2. sayının karakterlerine H'30'
      MOVWF SOL_K2 ; yani "0 " yükle
      MOVWF ORTA_K2
      MOVWF SAG_K2
      RETURN
MESAJ1;
      MOVLW H'04' ; LCD'nin 1. satırın 4. sütununa git.
      CALL SATIR1W
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVLW H'41' ; Ekrana " A" yaz
      CALL LCD_YAZ
      MOVLW H'0B' ; LCD'nin 1.satır 11. sütununa git.
      CALL SATIR1W
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVLW H'42' ; Ekrana "B" yaz
      CALL LCD_YAZ
      RETURN
MESAJ2;
      MOVLW H'03' ; LCD'nin 2. satır 3. sütununa git
      CALL SATIR2W
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF SOL_K1,W ; W? SOL_K1
      CALL LCD_YAZ ; ilk sayının sol karakterini ekrana yaz
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF ORTA_K1,W ; İlk sayının orta karakterini ekrana yaz
      CALL LCD_YAZ
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF SAG_K1,W ; İlk sayının sağ karakterini ekrana yaz
      CALL LCD_YAZ
      RETURN
MESAJ3;
      MOVLW H'0A' ; LCD'nin 2. satır 10. sütununa git.
      CALL SATIR2W
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF SOL_K2,W ; W? SOL_K1
      CALL LCD_YAZ ; ikinci sayının sol karakterini ekrana yaz.
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF ORTA_K2,W ; ikinci sayının orta karakterini yaz.
      CALL LCD_YAZ
      CALL BF_TEST ; BF test et
      BSF RS ; RS ? 1 Veri
      BCF RW ; RW ? 0 Yaz
      MOVF SAG_K2,W ; İkinci sayının sağ karakterini yaz.
      CALL LCD_YAZ
      RETURN
A_ART;
      CALL TIMER1 ; Gecikme
      INCF SAG_K1 ; Sağ karakteri 1 artır.
      MOVLW H'3A' ; Sağ karakter H'3A sayısına eşit mi?
      XORWF SAG_K1,W
      BTFSS STATUS,2
      GOTO SON1 ; Hayır devam et.
      MOVLW H'30' ; Evet sağ karakteri sıfırla.
      MOVWF SAG_K1
      INCF ORTA_K1,F ; Orta karakteri 1 artır.
      MOVLW H'3A' ; Orta karakter H'3A' sayısına eşit mi?
      XORWF ORTA_K1,W
      BTFSS STATUS,2
      GOTO SON1 ; Hayır devam et.
      MOVLW H'30' ; Evet orta karakteri sıfırla.
      MOVWF ORTA_K1
      INCF SOL_K1,F ; Sol karakteri 1 artır.
      MOVLW H'3A' ; Sol karakter H'3A' sayısına eşit mi?
      XORWF SOL_K1,W
      BTFSS STATUS,2
      GOTO SON1 ; Hayır devam et.
      CALL A_SIFIR ; Evet tüm karakterleri sıfırla.
SON1    CALL MESAJ2 ; Karakterleri LCD'ye yazdır.
      RETURN
A_AZAL;
      CALL TIMER1 ; Gecikme
      MOVLW H'30' ; Sağ karakter sıfıra H'30' eşit mi?
      XORWF SAG_K1,W
      BTFSC STATUS,2
      GOTO BIR ; Evet BIR etiketine git
      DECF SAG_K1 ; Hayır sağ karakteri 1 azalt
      GOTO SON2 ; LCD'ye yazdır.
BIR    MOVLW H'30'
      XORWF ORTA_K1,W ; Orta karakter sıfıra eşit mi?
      BTFSC STATUS,2
      GOTO IKI ; Evet IKI etiketine git
      DECF ORTA_K1 ; Hayır orta karakteri 1 azalt
      MOVLW H'39' ; Sağ karakteri "9" yap.
      MOVWF SAG_K1
      GOTO SON2 ; LCD'ye yazdır.
IKI    MOVLW H'30'
      XORWF SOL_K1,W ; Sol karakter sıfıra eşit mi?
      BTFSC STATUS,2
      GOTO SON2 ; Evet SON2 etiketine git
      DECF SOL_K1 ; Hayır sol karakteri 1 azalt
      MOVLW H'39' ; Sağ ve orta karaktere "9"
      MOVWF SAG_K1 ; sayısını yükle
      MOVWF ORTA_K1
SON2    CALL MESAJ2 ; Karakterleri LCD'ye yazdır.
      RETURN
B_ART;
      CALL TIMER1 ; Gecikme
      INCF SAG_K2 ; Sağ karakteri 1 artır
      MOVLW H'3A' ; Sağ karakter H'3A' sayısına eşit mi?
      XORWF SAG_K2,W
      BTFSS STATUS,2
      GOTO SON3 ; Hayır devam et.
      MOVLW H'30' ; Evet sağ karakteri sıfırla.
      MOVWF SAG_K2
      INCF ORTA_K2,F ; Orta karakteri 1 artır
      MOVLW H'3A' ; Orta karakter H'3A' sayısına eşit mi?
      XORWF ORTA_K2,W
      BTFSS STATUS,2
      GOTO SON3 ; Hayır devam et.
      MOVLW H'30' ; Evet orta karakteri sıfırla.
      MOVWF ORTA_K2
      INCF SOL_K2,F ; Sol karakteri 1 arttır.
      MOVLW H'3A' ; Sol karakter H'3A' sayısına eşit mi?
      XORWF SOL_K2,W
      BTFSS STATUS,2
      GOTO SON3 ; Hayır devam et.
      CALL B_SIFIR ; Evet tüm karakterleri sıfırla.
SON3    CALL MESAJ3 ; Karakterleri LCD'ye yazdır.
      RETURN
B_AZAL;
      CALL TIMER1 ; Gecikme
      MOVLW H'30' ; Sağ karakter sıfıra H'30' eşit mi?
      XORWF SAG_K2,W
      BTFSC STATUS,2
      GOTO UC ; Evet UC etiketine git
      DECF SAG_K2 ; Hayır sağ karakteri 1 azalt
      GOTO SON4 ; LCD'ye yazdır
UC       MOVLW H'30'
      XORWF ORTA_K2,W ; Orta karakter sıfıra eşit mi?
      BTFSC STATUS,2
      GOTO DORT ; Evet DORT etiketine git.
      DECF ORTA_K2 ; Hayır orta karakteri 1 azalt.
      MOVLW H'39' ; Sağ karakteri "9" yap.
      MOVWF SAG_K2
      GOTO SON4 ; LCD'ye yazdır.
DORT    MOVLW H'30'
      XORWF SOL_K2,W ; Sol karakter sıfıra eşit mi?
      BTFSC STATUS,2
      GOTO SON4 ; Evet SON4 etiketine git.
      DECF SOL_K2 ; Hayır sol karakteri 1 azalt.
      MOVLW H'39' ; Sağ ve orta karaktere "9"
      MOVWF SAG_K2 ; sayısını yükle
      MOVWF ORTA_K2
SON4    CALL MESAJ3 ; Karakterleri LCD ye yazdır
      RETURN
GECIKME1;
      MOVLW D'60'
      MOVWF SAYAC1
A1       MOVLW D'50'
      MOVWF SAYAC2
A2       DECFSZ SAYAC2,F
      GOTO A2
      DECFSZ SAYAC1,F
      GOTO A1
      RETURN
TIMER1
   MOVLW H'02'
   MOVWF   SAYAC3
DONGU4
   MOVLW   H'FF'
   MOVWF   SAYAC1
DONGU1
   MOVLW   H'FF'
   MOVWF   SAYAC2
DONGU2
   DECFSZ   SAYAC2,F
   GOTO   DONGU2
   DECFSZ   SAYAC1,F
   GOTO   DONGU1
   DECFSZ   SAYAC3,F
   GOTO   DONGU4
   RETURN
   END



mesaj birleştirme:: 13 Mart 2013, 19:58:05

yok mu yardımcı olacak

haydarpasamikro

628 in A portu öncelikli karşılaştırıcı analog tur. programın başında CMCON=7 yapılarak portları dijital maksatlı kullanacağınızı bildirin. Dahili Osilatör değil de harici kristali kullancağınızı da fuses dan ayarlayın veya programın başında bildirin.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

ipek

öncelikle bir başlık oluştur macroları düzenlerken bu işlemciceye göre Ram başlangıç adresini değiştir.
verdiğim konfigürasyon kristal gerektirmez gerekirse config satırını değiştir.

LIST	p=16F628A		;tell assembler what chip we are using
#include "P16F628A.inc"		;include the defaults for the chip
 __CONFIG  _CP_OFF & DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF

  CBLOCK H'20'
      CX
      TEMP
      TEMP0
      TEMP1
      SOL_K1
      ORTA_K1
      SAG_K1
      SOL_K2
      ORTA_K2
      SAG_K2
      SAYAC1
      SAYAC2
      SAYAC3
  ENDC


;--------------------------------------------------------
 	MOVLW   H'7'
 	MOVWF   CMCON		; PORTA = I/O digital Disable Comparator 
;--------------------------------------------------------

tr_51

Pek anlamıyorum ben sizin programı deneyip bana iletme ihtimaliniz var mı bunu da denedim olmadı program hata verdi bu sefer de..

haydarpasamikro

PORT_KUR;
      BCF STATUS,5
      MOVLW H'07'
      MOVWF CMCON
      BSF STATUS,5
      CLRF TRISA
      MOVLW H'F0'
      MOVWF TRISB
      BCF STATUS,5
      RETURN

şeklinde cmcon a 7 yüklenmeli.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi