Hi-Tech C hakkinda bir kac soru

Başlatan Libertador, 01 Kasım 2003, 18:22:19

Libertador

Oncelikle C ile pic programlamanin harika bir sey oldugunu belirtmek isterim. Fakat orjinal manual bana oldukca agir geldi. Ciddi bir zaman ayirarak okumak gerekiyor. Bunun yerine daha basit bir manual adresi veya aciklamalarin oldugu bir adres biliyor musunuz? Ayrica yaptiginiz basit deneme uygulamalarini (Led yakmak gibi) gonderirseniz sevinirim. Gelelim sorulara;
1)
Asagidaki kodda PORTB 'deki ledleri 1 den 255'e kadar yakmak istiyorum. Fakat sonuc olarak sadece PORTB,0 yaptigim sayac kadar yanip sonuyor. Hata nerede bir turlu cozemedim.
---
#include   <pic.h>
main(void)
{
   unsigned int i,k;
   unsigned char j;
   TRISB = 0;      /* all bits output */
   TRISA = 0;
   PORTA = 2;
      for(j = 0;;j++){
         PORTB = j;      
         for(i = 0;i<1000; i++){
               for(k=0;k<100;k++);
         }
      }   
}
---
PORTB = j + 64 dedigimde de PORTB,6 surekli yaniyor, PORTB,0 yanip sonuyor.
Sorununun nereden kaynaklandigini bir turlu cozemedim.
2) Mplab'ta simule ederek sorunu bulayim dedim. Fakat gerekli patchi yuklememe ragmen hata verdi. Hata mesaji:
---
Executing: C:\HT-PIC\bin\picc.exe -Q -MPLAB -C -Eled2.cce -16F648A led2.c -Oled2.obj -IC:\HT-PIC\include -G
Halting build on first failure as requested.
BUILD FAILED: Sat Nov 01 18:17:40 2003
---
Build options-> intermediate directory'i bos birakiyorum, acaba bundan mi kaynaklaniyor?
Mplab ayarlari hakkinda birseyler soylerseniz sevinirim.

Simdiden teşekkürler.

Libertador

Az once Proteus'ta simule ettim ve dogru calisti. Bu nasil mumkun olabilir ki? Cok ilginc. Asagida HEX kodu da bulunmakta.
---
:0C000000830100308A0004288301DC2BFF
:1007B8008316860183128C010C0886008D018E0138
:1007C8008F0190018F0A0319900A003010026430DB
:1007D80003190F02031CE62B8D0A03198E0A033036
:1007E8000E02E83003190D02031CE42B8C0A643056
:0807F8000C020318DE2BE02BBC
:00000001FF
---
Not: programlamak icin Picup.exe kullaniyorum. Bu program dosyayi acarken kodlari biraz tuhaflastiriyor. Asagidaki bir sonuc cikartiyor.
---
830100308A0004288301DC2B-----
-----------------------------------------
------------------------------------------
8316860183128C010C0886008D018E018F0190018F0A0319900A00301002
643003190F02031CE62B8D0A03198E0A03300E02E83003190D02031CE42B
8C0A64300C020318DE2BE02B
---
Bana ana kodun satir basindaki ve satir sonundaki bazi yerleri kirpmis gibi geldi. Bu normal bir sey mi yoksa bir hataya mi isaret?
Picup.exe den baska bir programin linkini verebilir misiniz? Bir de onunla deneyeyim.

Simdiden teşekkürler. :)
Ek not: Icprog.exe 'yi suan indiriyorum.
Ek not2: Icprog.exe'yi indirdim. Sonuc ayni. Bu arada WDT'yi hem acip hem de kapattigimda denedim sonuc ayni. :(

Libertador

Watchdog timer ve power up timer 'i OFF yapinca calisti. Demek ki neymis yilmamak lazimmis. Bu arada PORTB veya PORTA 'nin bir bitini nasil belirtiyoruz? Ornein PORTB,0 ?

ground

tam olarak bilmemekle !!  

sanırım pic up yazdığın programın hexlerini atıyor.. Yani diğer yerlere karışmıyor. Bu yüzden çok hızlı..

icprog ta bu farklı , o hexi yüklüyor geri kalan yerleri boş yüklüyor yani pic in program belleğinin her bitine yazıyor..

bilmem doğrumu...
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

james

PORTB,0 ı h-tech c de RB0 şeklinde belirtiyosun.
RB0 =1 ;   //gibi
ARAMIYORUM , BULUYORUM

Libertador

Cevaplariniz icin teşekkürler. Dedigim gibi WDT ve PWT yi kapatinca Picup.exe'de de programlayabildim. C de program yazmak o kadar zevkli ki bu hafta uc vize bir odevim olmasina ragmen daha yuzlerine bile bakmadim.
Bir de su sayac ilginc geldi. 100.000 lik bir dongu yaptigimda 1sn bekleme yapiyor. Yani bir islem 10us. 4Mhzlik islemci icin daha hizli olmasi gerekmez mi? Ayrica servo motora 100/1900 gibi bir sinyal gonderdigimde cevap alamadim. Bu da ilginc bir sey.  Yazdigim kod asagida.
---
#include   <pic.h>
main(void)
{
   unsigned int i,j;
   TRISB = 0;
   TRISA = 0;
   PORTA = 0;
   for(;;){
      for(i=0;i<100;i++)
      PORTB=1;      
      for(j=0;j<1900;j++)
      PORTB=0;      
      }   
}
---