pic c yi basic proya :-)

Başlatan teknikelektronikci, 06 Ağustos 2006, 02:59:12

teknikelektronikci

sayin üstadlar asagidaki c kodounu pic basic proya cevirmeye calistim fakat c dilini bilmedigim icin pek basarili olamadim acaba mümkün ise bunu cevirebilecek üstadlar varmi ya da en azindan derlerken
0x01,0x01,0xFF,0x01,0x01,0x00, // T
0xFF,0x89,0x89,0x89,0x81,0x00, // E
0xFF,0x18,0x24,0x42,0x81,0x00, // K
0xFF,0x04,0x08,0x10,0xFF,0x00, // N
0x84,0xFD,0x84,0x00,       // İ
0xFF,0x18,0x24,0x42,0x81,0x00};// K
kisimda hata veriyor bunun sebebi nedir pic basic de yazilimi farklimi bu kodu lookup komutu ile mi kulanmam gerek pic basic tede aslinda yeniyim simdiden tesekürler saygilar

kodun tamami :

#include <pic.h>
#include <delay.c>
main(void)
{
unsigned char gecici_dizi[16];
unsigned char i,a,toplam_sutun;
signed int kayma,deger;
unsigned const char metin[]={
0xFF,0x89,0x89,0x89,0x76,0x00, // B
0x84,0xFD,0x84,0x00,       // İ
0xFF,0x80,0x80,0x80,0x80,0x00, // L
0x84,0xFD,0x84,0x00,       // İ
0xFF,0x02,0x0C,0x02,0xFF,0x00, // M
0x00,0x00,0x00,0x00,       // Bosluk
0x38,0x40,0x80,0x40,0x38,0x00, // v
0x70,0xA8,0xA8,0xA8,0xB0,0x00, // e
0x00,0x00,0x00,0x00,       // Bosluk
0x01,0x01,0xFF,0x01,0x01,0x00, // T
0xFF,0x89,0x89,0x89,0x81,0x00, // E
0xFF,0x18,0x24,0x42,0x81,0x00, // K
0xFF,0x04,0x08,0x10,0xFF,0x00, // N
0x84,0xFD,0x84,0x00,       // İ
0xFF,0x18,0x24,0x42,0x81,0x00};// K
//Metindeki sütunların sayısını hesapla
toplam_sutun=80; //10x6+5x4=60+20=80
//Port ayarlama işlemleri
TRISB=0;
TRISA=0;
CMCON=0x07;
PORTB=0x00;
for(;;){//Ana döngü
//Geçici diziyi sıfırla
for(i=0;i<=15;i++){
gecici_dizi[i]=0; //Dizi elemanları başlangıçta 0
}
//Kaydırma işlemleri
for(kayma=-14;kayma<=toplam_sutun;kayma++){
//Metni 16 sütunluk parçalara böl
for(i=0;i<=15;i++){
deger=i+kayma;
if(deger<0)gecici_dizi[i]=0; //metin girişi
if(deger>=0&&deger<=toplam_sutun-1)
gecici_dizi[i]=metin[deger];
if(deger>toplam_sutun)gecici_dizi[i]=0; //metin çıkışı
}
//Tarama işlemleri
for(a=0;a<40;a++){ //Aynı görüntüyü 40 kez tekrarla
for(i=0;i<=15;i++){ //Geçici diziyi görüntüle
PORTB=gecici_dizi[i]; // Veriyi PortB'ye gönder
PORTA=i; // ilgili sütun'u seç
DelayUs(200); // 200 mikrosaniye bekle
}}}
}// işlemleri tekrarla
}// Program sonu


aslinda su unsigned char filan birde include larin birde yukaridaki hatayi bilsem problem kalmayacak :-)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ustad

ilk hata veren kısımda heksadesimal sayıları pic basicte $ ile tanımlıyoruz
yani0x56 c kodu bunun basic eşdeğeri 0$56 dır, bu kısımdaki sayıları bu şekile getirmen gerekir.

diziyi lookup komutunu kullanarak işleyebilirsin.

değişken tanımlarıda ise unsigned char ları byte tipinde, unsigned intleri de word tipinde tanımlamak gerekir.

yani unsigned char i nin basic teki karşılığı i var byte dır.

kodu inceleme fırsatım olmadı, ama gelen manada bunlar yardımcı olabilir

Kolay Gelsin...

teknikelektronikci

hocam tesekür ederim cevabiniz icin fakat derlerken  
"bad bank statement" dior acaba sebebi nedir aksama kodu bastan yazcam bir kez daha deniecem ilginiz icin tesekür ederim
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ustad

gecici_dizi VAR WORD[16]
i VAR BYTE
a VAR BYTE
toplam_sutun VAR BYTE
kayma VAR WORD
deger VAR WORD
deneme VAR BYTE
TRISB=0;
TRISA=0;
CMCON=$07;
PORTB=$00;
toplam_sutun=80
basla:
For kayma=-14 to toplam_sutun
For i=0 to 15
deger=i+kayma
IF deger<0 Then
gecici_dizi[i]=0
EndIF
IF deger>=0 AND deger<=toplam_sutun-1 Then
LookUp deger,[ $FF,$89,$89,$89,$76,$00,$84,$FD,$84,$00,$FF,$80,$80,$80,$80,$00,_
$84,$FD,$84,$00,$FF,$02,$0C,$02,$FF,$00,$00,$00,$00,$00,$38,$40,_
$80,$40,$38,$00,$70,$A8,$A8,$A8,$B0,$00,$00,$00,$00,$00,$01,$01,_
$FF,$01,$01,$00,$FF,$89,$89,$89,$81,$00,$FF,$18,$24,$42,$81,$00,_
$FF,$04,$08,$10,$FF,$00,$84,$FD,$84,$00,$FF,$18,$24,$42,$81,$00],deneme
' gecici_dizi[i]=metin[deger]
EndIF
IF deger>toplam_sutun Then
gecici_dizi[i]=0
EndIF
Next i
Next kayma
For a=0 to 40
For i=0 to 15
PORTB=gecici_dizi[i]
PORTA=i
PauseUs 200
Next i
Next a
GoTo basla


bunu bi denersin çevirmeye çalıştım, hata vermedi bende
yol göstermek amacıyla yazdım.

kolay gelsin

teknikelektronikci

üstad cok sagolun hemen deniyecegim

edit: hocam denedim fakat portb den bilgiyi göndermiyor. bir ara vakit bulunca sizin verdiginiz kod bana yol gösterir ve yavas yavas yapmaya denerim ama galiba bu is benim icin biraz erken cünkü daha pic basic proya yeni basladim  ama kayan yazinin mantigini ögrendim yani benim kulandigim yöntem 74154 ile sütünlari taramak :-) ilginiz icin tesekür ederim saygilar
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!