###16g628a sorunu###

querman

Üye
Katılım
30 Ara 2009
Mesajlar
14
Puanları
1
Merhaba arkadaslar elimde 16f628a ile yaptıgım bir devre var
devre breadboard da denedim çalışıyor
pcb yaptım taktım tum fonksiyonları calısıyor ancak soyle bi durum var
PORTA.2=1 olduktan sonra PORTA.1=1 oldugunda PORTA.2=0 oluyor
yani kendisi çıkısını 0 yapıyor.nasıl cozum buluruz

-----------------------------------------------------------------------

acaba pic porta1 cıkısının 1 olmasından ethileniyor olabilir mi?kapasite felan koymak gerekirmi?
 
Moderatör tarafında düzenlendi:
Merhaba Yazdıgınız kodu gorebılırmıyız.
 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
TRISA=%00000001
TRISB=%00000001
CMCON=7 '16F628a de komparatör pinleri iptal hepsi giris çıkıs
'------------------------------TANIMLAMALAR------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
PORTA=0
PORTB=0
PAUSE 200
LCDOUT $FE,1
'-------------------------------DEGISKENLER--------------------
SAYAC VAR WORD
RX1 VAR WORD
RX2 VAR WORD
RX3 VAR WORD
RX4 VAR WORD
RX5 VAR WORD
RX6 VAR WORD
RX7 VAR WORD
RX8 VAR WORD
RX9 VAR WORD
RX10 VAR WORD
RX11 VAR WORD
RX12 VAR WORD
RX13 var word
'--------------------------------BASLANGIC---------------------
READ 0,SAYAC
IF SAYAC=255 THEN
SAYAC=0
WRITE 0,SAYAC
ELSE
ENDIF
LCDOUT $FE,1,"SISTEM BASLIYOR!"
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=1",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=2",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=3",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=4",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=5",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=6",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=7",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=8",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=9",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=10",13]
pause 1000
LCDOUT $FE,1,#SAYAC
'--------------------------------ANA PROGRAM-------------------
BASLA:
SerIn PORTA.0,0,500,SAY,["+CMT"],RX4
PAUSE 1000
LCDOUT $FE,1,#SAYAC
LCDOUT $FE,$C0,"SORGULAMA"
IF RX4="I" THEN
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGR=1",13]
SerIn PORTA.0,0,1000,SAY,["+08"],RX5,RX6,RX7,RX8
PAUSE 1000

IF RX8="1" THEN
LCDOUT $FE,1,#SAYAC
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGS=+905368698018",13]
pause 1000
SEROUT PORTA.1,0,[#sayac,$1A]
pause 2000
SEROUT PORTA.1,0,[$1A]
pause 1000
ENDIF

IF RX8="2" THEN
LCDOUT $FE,1,#SAYAC

PORTA.2=1

ENDIF


IF RX8="3" THEN
LCDOUT $FE,1,#SAYAC

PORTA.2=0

ENDIF


ENDIF
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT",13]
pause 1000
SEROUT PORTA.1,0,["AT+CMGD=1",13]
GOTO SAY









SAY:
LCDOUT $FE,1,#SAYAC
IF PORTB.0=1 THEN
SAYAC=SAYAC+1
WRITE 0,SAYAC
PAUSE 200
LCDOUT $FE,1,#SAYAC"
PORTB.0=0
ENDIF
GOTO basla
 
bold olan yere kadar hersey normal ama daha sonra porta.1'den veri gondermeye basladıgı zaman porta.2 0 oluyor :(
 
querman kardes,


IF RX8="2" THEN
LCDOUT $FE,1,#SAYAC ;eger RX8="2" ise PORTA.2=1 olsun demıssın
PORTA.2=1 ;sart dogruysa burda PORTA.2=1 olur
ENDIF

pause 3000 ;bu satırı bı olave edın.acaba 3 sn sonramı 0 oluyor.


IF RX8="3" THEN
LCDOUT $FE,1,#SAYAC ;demekki burda RX8="3" sartı gerceklesıyor ve PORTA.2=0
PORTA.2=0 ;oluyor.Zaten baska yerde PORTA.2=0 yazan satır goremedım.
ENDIF ;mutlaka burda 0 oluyordur.Yukarıda pause 3000 satırını
;ekleyerek bı deneme yapınız.
;sonucu bıldırırsenız sevınırım.
 
pause 3000 ekledim ama olmadı
rx8'in 3 olma sansı yok
yani aynı anda 1-2-3 olamıyor sadece seri porttan 3 mesajı geldiginde 3 oluyor
ben 2 mesajı gonderiyorum sadece
zaten o satırları kaldırdıgımda duzelmedi ancak
serout porta.1 satırını kaldırdıgımda duzeliyor
yani porta.1 porta2 ye etki ediyor
 
A1 A2'yi toprağa cekiyor
ve 3-4 piclede denedim aynı sonuc
acaba fuse'ler ile alakası olabilirmi sadece intosc'yi kullanıyorum gerisi default
 
PB bilmiyorum o nedenle sorununa doğrudan yardımcı olamam. Derlendiğinde oluşan asm veya lst dosyası varsa orada ilgilendiğiniz satırların karşılığında nasıl asm kodu oluşmuş ona bakın. Kesin sonuç alırsınız.

Başla dan sonraki if in end if i yok. O zaman ifi takip eden satır o if için kullanılır. Bilmiyorum belki de amacınız o idi. Fakat karışıklıkları önlemek ve kod takibini kolaylaştırmak için o if i takip eden satırı if ile aynı satıra getirebilirsiniz.

Başka küçük bir öneri:
Kod:
IF RX8="1" THEN
LCDOUT $FE,1,#SAYAC
...
ENDIF

IF RX8="2" THEN
LCDOUT $FE,1,#SAYAC
...
ENDIF

IF RX8="3" THEN
LCDOUT $FE,1,#SAYAC
...
ENDIF

bu bloku şöyle yazsanız daha kolay takip edersiniz.

LCDOUT $FE,1,#SAYAC
IF   RX8="1" THEN
   ...
ELSE IF RX8="2" THEN
   ...
ELSE IF RX8="3" THEN
   ...
ENDIF
 
'--------------------------------BASLANGIC---------------------
READ 0,SAYAC bellekten oku, sayaca yaz__OK
IF SAYAC=255 THEN Sayaç 255 olduğunda
SAYAC=0 sıfırla__OK
WRITE 0,SAYAC Sayacı belleğe yaz__OK
ELSE değilse devamı nerde?
ENDIF If döngüsünü bitir__OK

Hepsine bakmadım ama bundan olabilir mi?
 
yok arkadaşlar gercekten kafayı yiyecem
porta.2=1 diyorum
ardından porta1=1 diyorum
porta.2=0'a cekiliyor
 

Forum istatistikleri

Konular
129,838
Mesajlar
930,669
Kullanıcılar
452,673
Son üye
loran laran

Yeni konular

Geri
Üst