Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

HI_TECH C

Başlatan F493, 03 Aralık 2007, 09:46:33

F493

Arkadaşlar hi-tech'te çalışmaya çalışıyorum , şunu söyleyebilirim kod yazmak çok zor ,zorluk kodu yazmak değil derleyiciyle mücadele etmek.:D

 derleyici 9.61 pro  ,mükemmel optimizasyon , hızlı derleme ve derlenen kodu satır satır  c kodu ve asm karşılıgını göstermesi ,yani derlenen kodu asm bilginiz  var ise çok rahat takip edebiliyor ve derleyicinin nasıl optimize ettigini görebiliyorsunuz(tabii bunlar çogu derleyicilerde de var).

 Hİ_TECH kullanımı zorve hassas  olmasının nedeni belkide mükemmele yakın kod yazma imkanı vermesi.Yapamayacagınız hiçbir şey yok denebilir.

şimdi sizlerle yazdıgım bir programı paylaşacagım,




//////////////////////////////////////////////////////////////////////////////
//						HI_TECH C  9.60 									//
//	İŞLEMCİ = 16F877														//
//	ÇALIŞMA = 3-12-2007 23:50												//
//	PORTA.0'A BAGLANAN BUTONA BASILINCA PORB.0'DAKİ LEDİ 50'MS YAKAN PROGRAM//
//////////////////////////////////////////////////////////////////////////////

/////////////////////KÜTÜPHANE TANIMLAMALARI//////////////////////////////////
#include<htc.h>			//16f877											
#include"delay.h"															

////////////////////CONFIGIRASYON AYARLARI(FUSES)/////////////////////////////
__CONFIG(XT & WDTDIS);	//XT ,WDT KAPALI									

//////////////////////////////MAKROLAR////////////////////////////////////////
#define	RBO	PORTB,0 	//RB0=BUZZER;										
#define	RAO	PORTA,0		//RA0=READER;										

/////////////////////FONKSİYON PROTOTİP BİLDİRİMLERİ//////////////////////////
void Putch(char c);
void _UsartInit(void);

//////////////////////////GLOBAL TANIMLAMALAR/////////////////////////////////
	const char* str = "SERi HABERLESME!! ";

//////////////////////////////ANA PROGRAM/////////////////////////////////////																
void main(void)																
{																			
	PORTA = 0XFF;		//PORTA GİRİŞ TÜMÜ 1								
	TRISA = 0XFF;		//PORTA TÜMÜ GIRIŞ									
	PORTB = 0XFF;		//PORTB ÇIKIŞ TÜMÜ 1								
	TRISB = 0X00;		//PORTB TÜMÜ ÇIKIŞ					

				
	ADCON1 = 0X06; 		//PORTA DİJİTAL						

				
	RBPU = 0; 			//PORTB PULL-UP						


				
	_UsartInit();											


				
	while(1){																
		if(!RA0){															
			DelayMs(100);  //debouncig(bunu timerla yapacagım şimdilik böyle kalsın)										
			while(*str != '\0')												
				Putch(*str++);												
				 DelayMs(50);												
			break;															
		}																	
	}																		
}							
						
						
//////////////////////////GÖNDERME FONK:TANIMLASI////////////////////////////
void Putch(char c)
{	//TSR=TRANSMİTTİNG SHİFT REGİSTER
	TXREG = c;
		while(!TRMT)//TSR'deki veri gönderilince TRMT 1 olur
			;		// ve TSR boşalmış demektir.
}

///////////////////////////SERİ PORTU HAZIRLAMA FONK.////////////////////////
void _UsartInit(void){
SPBRG = 25;	//9600 baud rate
BRGH = 1; 	//high speed
SYNC = 0;	//asenkron hab.
SPEN = 1;	//seri port kullanımda
CREN = 1;	//sürekli veri alma etkin
SREN = 0;	//senkron modu ilgilendiriyor
TXIE = 0;	//gönderme kesmesi enable biti etkin değil
RCIE = 0;	//veri alma kesmesi enable biti etkin değil
TX9 =  0;	//9bit veri gön. pasif 8 bit gön. alma etkin
RX9 = 0;	//9bit veri alma pasif 8 bit veri alma etkin
TXEN = 0;	//gönderme pasif
TXEN = 1;	//gönderme aktif
}
////////////////////////////////////////////////////////////////////////////////



DELAY. c****************


/*
 *	Delay functions
 *	See delay.h for details
 *
 *	Make sure this code is compiled with full optimization!!!
 */

#include	"delay.h"

void
DelayMs(unsigned char cnt)
{
	unsigned char i;
	while (cnt--) {
		i=4;
		while(i--) {
			DelayUs(uS_CNT);	/* Adjust for error */
		} ;
	} ;
}



DELAY.h****************************************


/*
 *	Delay functions for HI-TECH C on the PIC18
 *
 *	Functions available:
 *		DelayUs(x)	Delay specified number of microseconds
 *		DelayMs(x)	Delay specified number of milliseconds
 *
 *	Note that there are range limits: 
 *	- on small values of x (i.e. x<10), the delay becomes less
 *	accurate. DelayUs is accurate with xtal frequencies in the
 * 	range of 4-16MHZ, where x must not exceed 255. 
 *	For xtal frequencies > 16MHz the valid range for DelayUs
 *	is even smaller - hence affecting DelayMs.
 *	To use DelayUs it is only necessary to include this file.
 *	To use DelayMs you must include delay.c in your project.
 *
 *	Set the crystal frequency in the CPP predefined symbols list
 *	on the PICC-18 commmand line, e.g.
 *	picc18 -DXTAL_FREQ=4MHZ
 *
 *	or
 *	picc18 -DXTAL_FREQ=100KHZ
 *	
 *	Note that this is the crystal frequency, the CPU clock is
 *	divided by 4.
 *
 *	MAKE SURE this code is compiled with full optimization!!!
*/

#define	MHZ	*1

#ifndef	XTAL_FREQ
#define	XTAL_FREQ	4MHZ		/* Crystal frequency in MHz */
#endif

#if	XTAL_FREQ < 8MHZ
#define	uS_CNT 	238			/* 4x to make 1 mSec */
#endif

#if	XTAL_FREQ == 8MHZ
#define uS_CNT  244
#endif

#if	XTAL_FREQ > 8MHZ
#define uS_CNT  246
#endif

#define FREQ_MULT	(XTAL_FREQ)/(4MHZ)

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
			  else _dcnt=1; \
			  while(--_dcnt > 0) \
				{\
				asm("nop");\
				asm("nop");\
				continue; }\
		} 

extern void DelayMs(unsigned char);

 bu kodu derleyip çok rahat çalıştırabilirsini .

 bu program RA0' baslınca seri porta mesaj gönderiyor.

program  dijital giriş olarak porta'yı konfigüre etmek ,seri portun kullanımı ve işaretci kullanımının anlaşılması açısından faydalı ..

bu konuda çalışmalarım oldukça olayın özünü anlatan programlar eklemeye çalışacagım,eger hi-tech konusunda sıkışan arkaşlar , olursa elimden gelen yardımı yapmaya çalışırım.
birde , bilipte paylaşmak isteyen arkadaşlar olursa sevinirim...

arslan74

Merhaba,

Hi-Tech adına zaten forum başlığı var. o forum başlığı altında devam etmem daha güzel olur en azından konular dağilmamış olur.

Hi- Tech program yazman güzel. Bende Hi-Tech beğeniyorum.

Seri haberleşme için kütüphane yaptım onu kullaniyorum. böylece kodlar daha derli toplu gözüküyor.

Örneğin;

       while(*str != '\0')                                     
            Putch(*str++);                                    


Yerine ben bir fonksiyon yazdım

void usart_puts(const char * s)
{
	while(*s)
		putch(*s++);
}


O zaman bu bu durumda programının içinde cok daha anlaşılır kodlar olur.

Örneğin şu şekilde yapabilirsin;

usart_puts(str);


yada

usart_puts("SERi HABERLESME!! ");


Selamlar

F493

ok arslan74 arkadaşım , dedigin gibi dagıtmadan yapalım ,umarım iyi paylaşımlarımız olur , ortak fikirlerle yeni düşünceler oluşturabiliriz.

dediklerini dikkate alacagım. nekadar soru okadar ayrıntı ve cevap buda dagarcıgı geliştir..
 
     iyi çalışmalar..

cenkishan

nerde bir hitech c yazısı görsem okuyorum.arslan74 arkadasım bir ara ders seklinde verecegini soylemiştin boş zamanın olmadı heralde.bu tip ornek kodlara ve anlatıma ihtiyacımız var.hitech C bende cok kullanmak istiyorum paylasımlarınızı bekliyoruz.ARSLAN74  arkadsımızın dedigi gibi bir baslık altında toplayabilirsek daha derli toplu olur.
Bir bit olsam dolaşsam C de byte byte

arslan74

Alıntı yapılan: "cenkishan"nerde bir hitech c yazısı görsem okuyorum.arslan74 arkadasım bir ara ders seklinde verecegini soylemiştin boş zamanın olmadı heralde.bu tip ornek kodlara ve anlatıma ihtiyacımız var.hitech C bende cok kullanmak istiyorum paylasımlarınızı bekliyoruz.ARSLAN74  arkadsımızın dedigi gibi bir baslık altında toplayabilirsek daha derli toplu olur.

Merhaba,

Evet yazmaya niyetim oldu ama bir türlü fırsatım olmadı, birde gerceği söylemek gerekirse, üzerinde fazla durmadım. Ama bu konuda fazla istek var ise, kendi bilgim ölçüşünde biraz özel gayret gösterib bir tane hazırlıyayım.

Selamlar

cenkishan

bekliyorum hocam  8O  8O  8O  8O  8O  8O  8O  8O  8O  8O  8O  8O
Bir bit olsam dolaşsam C de byte byte

XX_CİHAN_XX

Hocam asm ye yakınlığından dolayı benimde hi-tech te gözüm var vakit buldukça birşeyler hazırlarsanız bizler için oldukça faydalı olacaktır.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

arslan74

Alıntı yapılan: "XX_CİHAN_XX"Hocam asm ye yakınlığından dolayı benimde hi-tech te gözüm var vakit buldukça birşeyler hazırlarsanız bizler için oldukça faydalı olacaktır.

Merhaba,

Bu yoğun istek üzerine bir tane hazırlamaya niyetliyim, ancak sizlerden küçük bir ricam olacak.
Hangi konulara daha cok değinmemi istiyorsunuz?
Zira C nin kendi cok derin bir konu, onu birde PIC ilişkinlerdin mi? Cok büyük bir kitap hazırlanması gerek. Ancak bunu hazırlamaya benim şuan o kadar vaktim yok. Sizler hi-tech'de öncelikli öğrenmek istediğiniz konuları yazarsanız. Ona göre bir yazı hazırlarım. Kabaca ana başlıklarıyla yazmanız yeterli.

Selamlar

XX_CİHAN_XX

Çok teşekkürler hocam.Ete hocanın pbp dersleri gibi parti partide yayınlayabilirsiniz.Böylelikle birden yüklenmemiş ve zamanı daha verimli kullanmış oluruz. 1. dersi çalışırken bu süreç içersinde vakit buldukça 2. ders toparlanır ve tamamlanıncada buraya koyulur.Başka bilen arkadaşlar varsa ünite payalaşımı yapılarak sırtınızdaki yük hafifletilebilir.Tüm üniteler tamalanıncada bir arkadaşımız bunları toparlayıp bu süreç içersinde geliştirilen örneklerle birleştirilip güzel bir kitap haline getirilebilir.
Tek solukta oturup tüm konuları toparlayıp bize kitap halinde sunmanızdansa bu şekilde bir yol izlemek sizin üzerinizdeki bu zorluğu azda olsa hafifletir diye düşünüyorum.
Genel olarak bence şu konular olabilir.

*Operatörler
*Kontrol döngüleri
*Temel Fonksiyonlar
*Diziler
*İşaretçiler
*Yapılar

Bunları vakit buldukça ünite ünite yapıp yayınlayabilirseniz oldukça faydalı olacağına eminim.Tekrar teşekkürler hocam.Saygılar...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Bu arada hocam yukarıda yazdıklarıma ek olarak bu dersleri hazırlarken mevcut picproje ccs c kitabındaki ifadelerden-örneklerden yola çıkarak hi- tech c ile arasındaki farkları zaman zaman derslerinizde gösterebilirseniz çok sevinirim.Ortak noktaları direk ccs c kitabından kopyala yapıştır bile yapabilirsiniz.Demek istediğim sadece farklı yerlerde bilmemiz gerekenleri verseniz bize fazlasıyla yetecektir.
Birde program başında yapılan tanımlamalar.
#use ile başlayan
#define ile başlayan
#reserve ..... vb
Standart olarak programın başında kullanılan ifadelerede değinirseniz dört dörtlük bir eser olacaktır.
Çok şey istediğimin farkındayım bu nedenle yukarıdaki gibi ünite ünite paraçalara bölünüp hatta bu parçalarında başka isteyen kişiler olursa onlarla paylaşılıp hazırlık süreciniinde istediğiniz şekilde zamana yayılmasından yanayım.
Saygılar hocam...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Veli B.

Boyle bir calisma gercekten cok faydali olacaktir Ustadim.
Benim onerecegim konular;
- Konfigirasyon icin puf noktalari
- Optimizasyon icin puf noktalari
- Diziler
- Pointerlar
- Makrolar
- Tur donusumleri
.
.

arslan74

Merhaba,

Verdiğiniz öneriler için teşekür ederim. Ancak benden istediğiniz bazı konular zaten genel C ait konulardır. Örneğin;

- Diziler
- Pointerlar
- Makrolar
- Tur donusumleri

*Operatörler
*Kontrol döngüleri
*Temel Fonksiyonlar
*Diziler
*İşaretçiler
*Yapılar

Bu saydıklarınız herhangi bir C kitabında zaten ayrıntılı bir bicimde anlatılmıştır. Hi-Tech Ansi-C uyumlu olduğu için,yani genel C dili için kabul edilmiş evrensel kurallara uygundur.

O yüzden büyük coğunlukla başka bir işlemci için yazılmış bir kodu neredeyse hiçbir değişliklik yapmadan aynı kodları ve fonksiyonları kullanabiliyorsunuz. Yanı cok rahatlıklar Pc için yazılmış bir C kodunu, örneğin qsort ve pow gibi fonksiyonları olduğu gibi Hi-techte kullanabilirsiniz. Ancak Kodlar PC değilde PIC de olduğu için bazı özel ayrıntılar var. O ayrıntılar üzerinde durmak bence daha faydalı değilmi?

Size C nin bütün kurallarını anlatan Necati Ergin hocamın ders notları yolluyorum. Eğer oku kitabı iy okur ve anlarsanız gerisi zaten cocuk oyuncağı.

http://rapidshare.com/files/74511437/CFull3_11.pdf.html

Şifre: cdernek

XX_CİHAN_XX

Alıntı yapılan: "arslan74"Merhaba,
.......
Ancak Kodlar PC değilde PIC de olduğu için bazı özel ayrıntılar var. O ayrıntılar üzerinde durmak bence daha faydalı değilmi?
Hocam kesinlikle katılıyorum zaten mesajımdada bunu vurgulamıştım.Hi-tech in genel farklılıkları kendine özgü bilinmesi gereken ifadeleri-farkları bizim için çok önemli.Yoksa C ile ilgili zaten çok güzel ebook çalışmaları yapıldı.Ancak CCS C kullanan birisi bile hi tech te yabancılık yaşadığı noktalar oluyor.Bu noktaları biraz aydınlatırsanız bir çeşit e book tan ziyade püf noktaları gösteren el kitabi tarzında bir çalışma çok hoş olurdu.Bu arada verdiğiniz kitap oldukça doyurucu bilgiler içeriyor.Çok teşekkürler.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

cenkishan

slm hocam dedigim meshur c kitabı buydu bu pdf'i okuyorum.bastırmayı dusunuyorum 15 ytl basılcak yerde buldum hem burdan hem de sizin anlatımınızla geliştiricez işallah.
Bir bit olsam dolaşsam C de byte byte

arslan74

Alıntı yapılan: "cenkishan"slm hocam dedigim meshur c kitabı buydu bu pdf'i okuyorum.bastırmayı dusunuyorum 15 ytl basılcak yerde buldum hem burdan hem de sizin anlatımınızla geliştiricez işallah.

Kitabı orjınalinide herhalde 20YTL ye alırsın. Fotokobi ile uğraşmana değmez.

http://www.csystem.org dan sipariş isteyebilirsin. Yada Kaan Aslan hocamızın cıkardığı standart C kitabı var onunda alabilirsiniz.

İki kaynakta cok güzel bilgiler içeriyor.

Şunu söyleyim C öğrendikten sonra ASM cok daha iyi anlamaya başladım. En basidinden ASM de direkt adresleme ve indireckt adresmemeyi, C deki pointeri öğrene kadar işlevini tam kavrayamamıştım. Bunun gibi bir cok örnek var.

Selamlar