Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

16f886 lcd sorunu

Başlatan illgnsyyz, 26 Nisan 2013, 23:37:05

illgnsyyz

merhaba arkadaşlar
aslında uygulamamda lcd kullanmıyorum fakat bir değişkeni simulasyon üzerinde denetlemek için lcd kullanacaktım fakat bir derya hata aldım.
16f886 kullanıyorum ilgili kod ve hatalar aşağıdaki şekilde. LCDOUT komutunu kullandığımda hataları alıyorum. aslında kod karman çorman durumda  yardım bekliyorum.



@ __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
@ __config _CONFIG2, _WRT_HALF 


ON INTERRUPT GoTo SAYAC 'kesme oluşursa sayaç adlı etikete git.
OPTION_REG=%00000000 'dahili  Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok
INTCON=%10010000 'Tüm  Kesmeler aktif ve RB0/INT kesmesi aktif
TRISB=%00000001 'PortB.0  giris digerleri giriş yapıldı.
TRISA=%00000000 'A portu  tamamı çıkıs yapıldı.
TRISC=%00000000 'C portu  tamamı çıkıs yapıldı.
adcon1=7 '16F886 de  komparatör pinleri iptal hepsi giris çıkıs
CM1CON0=0 'C1 Komparatör iptal
CM2CON0=0 'C2 Komparatör iptal
ANSEL= 0 'A portu analog pinler iptal
ANSELH=0  'B portu Analog pinler iptal
;______________________

DEFINE LCD_DREG    PORTC 'LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT    4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG    PORTC 'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT    3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTC 'LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT 2 'LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTC 'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS    4 'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 'LCD 2 sıra olarak çalışıyor.

'—————————————————————–
YUZUS var BYTE         '100x mikro saniye
MS VAR WORD            'mili Saniye
SN VAR WORD            'Saniye
SURE VAR WORD          'devir suresi
SYMBOL sinyal=PORTB.0  'sensör sinyali
SYMBOL LED1=PORTA.0    '''''''''''''''''''''''''''''''''
SYMBOL LED2=PORTA.1    '
SYMBOL LED3=PORTA.2    '
SYMBOL LED4=PORTA.3    '
SYMBOL LED5=PORTA.4    '
SYMBOL LED6=PORTA.5    '
SYMBOL LED7=PORTA.6    '
SYMBOL LED8=PORTA.7    '
SYMBOL LED9=PORTB.1    ' Led bağlantıları
SYMBOL LED10=PORTB.2   '
SYMBOL LED11=PORTB.3   '
SYMBOL LED12=PORTB.4   '
SYMBOL LED13=PORTB.5   '
SYMBOL LED14=PORTB.6   '
SYMBOL LED15=PORTB.7   '
SYMBOL LED16=PORTC.0   '
SYMBOL LED17=PORTC.1   '
SYMBOL LED18=PORTC.2   '''''''''''''''''''''''''''''''''
clear
'——————————————————————-
PORTA=0
PORTB=0
PORTC=0

SURE=1000
PAUSE 100
BASLA:
LOW PORTC.2
lcdout $FE
PAUSE 800

goto basla              ' bu satırlar  arasında dolasır




DISABLE                 'yeniden kesme  oluşması önleniyor
SAYAC:                  'KESME

IF INTCON.2=1 THEN
YUZUS=YUZUS+1
    IF YUZUS=10 THEN
    MS=MS+1
    YUZUS=0
        IF MS=1000 THEN
        SN=SN+1
        MS=0
        ENDIF
    ENDIF
INTCON.2=0   
ENDIF   

IF INTCON.1=1 THEN
SURE=((1000*SN+MS)/18)
YUZUS=0
MS=0
SN=0
INTCON.1=0 'RB0/INT Bayragı (flag) silindi.
GOTO BASLA
ENDIF

Resume 'geldigin yere dön
Enable 'kesmeler yeniden  aktif.
End

ete

#1
Anlaşılan mpasm kullanarak derleme yapıyorsun.  Aşağıdaki linkte yazılanları dikkatlice oku. Özellikle pbp klasöründe. İslemci.inc. Dosyasında kapatılmadı gereken satırlar konusunu iyi oku ve uygula.

http://etepic.com/index.php/topic,300.0.html

Lcdout $FE. Şeklinde eksik komut kullanılmaz. Bunu ya lcdout $fe,1. İle değiştir yada komutun devamında ne vermek istiyorsan onu yaz.

not: asıl sorun LCD tanımlama komut satırlarına yazdığın açıklamaların başına koydığın satır iptal işaretinin yanlış olması. O açıklamaları komut satırı gibi değerlendiriyor program. O satırları aşağıdakiler ile değiştir.
DEFINE LCD_DREG    PORTC ''LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT    4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG    PORTC 'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT    3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTC 'LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT 2 'LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTC 'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS    4 'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 'LCD 2 sıra olarak çalışıyor.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

illgnsyyz

#2
teşekkür ederim ete dediklerini yaptım. asıl sorun ufak bi syntex hatasıymış lcd nin define komutlarından sonraki comment kısmı doğru ayıraçla ayrılmamış. dün gece saatlerce uğresıp farkedememiştim sabah duru zihinle hemen farkettim.