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!