16F den 12F'e değişim

Başlatan ipek, 02 Aralık 2011, 04:29:36

ipek

pir için basit bir şey yazdım
16F628 olan istediğim gibi çalıştı
butona hep basıyor isem çıkış var elimi çektiğimde next döngüsü kadar bekleyecek sonra sönecek gayet güzel çalıştı
kutuya baktım 16 f kalmamış . 12F675 mevcut convert etmeye karar verdim tık yok ya ben birşeyi eksik yazdım yada isis su koyverdi..
şema basit gpio 0 da buton var gpio 1 de led var
16F'de pb0 buton pb1 led
internal pullup'ları açtığım için dirence gerek duymadım...

@ device pic12F675, intrc_osc_noclkout, wdt_off, pwrt_on, protect_off , mclr_off


CMCON = 7          ' SETS DIGITAL MODE
ANSEL = 0          ' GPIO.0 TO GPIO.3 SET AS DIGITAL
TRISIO = %00000001    ' 1 input 0 output left start
VRCON.7 = 0       ' TURN OFF VOLTAGE REFERENCE
WPU = %000001       ' any pin pullup  1 pul 0 disable pin
OPTION_REG.7=0      ' pullup enables
'INTCON = 0       ' No interrupt

DEFINE OSCCAL_1K 1    ' TO SAVE OSCILLATOR CALIBRATION
GPIO = 0    'CLEAR Ports
   

X var   Byte

Pause 100

Start:
    If GPIO.0=0 Then
    GPIO.1=1
Again:
    For X = 0 To 100
    Pause 10               
    If GPIO.0=0 Then
    X=0
    GoTo Again
    EndIf
    Next
    GPIO.1=0
    GoTo Start
    EndIf
   
     End

buda çalışan 16F..........................
@ device pic16F628A, intrc_osc_noclkout, wdt_off, pwrt_on, protect_off , mclr_off
CMCON = 7          ' SETS DIGITAL MODE
TRISB = %00000001    ' 1 input 0 output left start
VRCON.7 = 0       ' TURN OFF VOLTAGE REFERENCE
OPTION_REG.7=0      ' pullup enables

    PORTB = 0    'CLEAR Ports
       

X var Byte
    Pause 100      'small init wait mpu disciplined

   
Start:
    If PORTB.0=0 Then
    PORTB.1=1
Again:
    For X = 0 To 100
    Pause 10               
    If PORTB.0=0 Then
    X=0
    GoTo Again
    EndIf
    Next
    PORTB.1=0
    GoTo Start
    EndIf

ete

Bana kalırsa 628 programınında doğru çalışmaması gerekir. Sebebi ise, tuşa basılmadığı zaman programın ensonda yer alan end satırına ulaşıp programı sonlandırmasıdır.
Bu nedenle  end satırından evvel GOTO START komutu eklemeniz gerekir.
Ayrıca programı daha basit yapmak mümkün aşağıdakini bir deneyin isterseniz.

Start:
    If GPIO.0=0 Then
    GPIO.1=1
Again:
      while GPIO.0=0:wend
      For X = 0 To 100
        Pause 10               
      next
      GPIO.1=0
      GoTo Start
    EndIf
    goto start
     End
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

zakbay

program end ile sonlanıyor ondan dolayı

programınızı şu bloğun içine yazın

Start:
.....
....

Goto Start:
Tek dostum çalışmak...

ipek

#3
Ete hocam saygılar verdiğiniz kod mükemmel çalıştı klavyenize sağlık.

16F olanda end yok idi , isiste çalışıyor warning yok yeşil renk.

12F' e end koymuştum çünki sarı uyarı aldım PIC12 core PC=0x0400 underflow executing  retlw instruction  hatasını ancak bununla giderebilmiştim

zakbay hocam verdiğiniz uyarıları dikkate aldım deneme yaptım gelişme  yok kuşkulandım acaba derleyicimi bozuk keyfi derliyor galiba fakat ete hocamın parçası derlendi.

iyi çalışmalar dilerim...


üşenmedim basic' kaldırdım ,yeni kurdum yine aynı .birde mcs yi kaldırıp yeniledim , :)bundan çıktı zakbay hocam yeni mcs ile önerinizden olumlu sonuç aldım saygılar...

ete

#4
Komut satırları sonuna end koymaz sanız pic otomatik olarak yeniden başlar. Sanki Goto ENBASA der gibi. Bu nedenle o çalışmış.
End olursa program orada kalır bekler. Sonsuz döngüye girer yani.

PIC12 core PC=0x0400 underflow executing  retlw instruction  ikazı aslında (bana kalırsa) , işlemcinin 3FF adresinde kayıtlı bulunan osilatör kalibarsyon değerinin üzerine yeniden yazılacağını ikaz ediyor.  Bunuda yazdığınız   DEFINE OSCCAL_1K 1    ' TO SAVE OSCILLATOR CALIBRATION
komut satırı yaptırıyor.

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