Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

hi tech c seri port örneği ???

Başlatan ferdi0435, 30 Aralık 2011, 01:21:29

ferdi0435

iyi günler arkadaşlar


elinde hi tech c seri port örneği olan var mı daha önce denemiş olan ??? paylaşırsa sevinirim...


Erol YILMAZ

ilgili PIC in datasheetini açıp UART   veya USART bölümüne göz atınız,
Hepsi çok açık ve net şekilde yazıyor...

mozkan87

Hitech c'nin kurulum klasörünün içindeki örnek dosyaların içinde mevcut. Kolay gelsin.

sigmoid

16f877 ve 628 için kullandığım kodu vereyim.

Ekleme yapmak ve kullandığın pice uyarlamak sana kalmış.

usart.h
#ifndef	XTAL_FREQ
	#define	XTAL_FREQ	4MHZ
	#define	MHZ	*1000UL
	#define	KHZ	*1			
#endif


#define USARTHIZ 9600      
#define usartspbrg ((int)(((XTAL_FREQ*1000UL)/(16UL * USARTHIZ)) -1)) //bağlantı hızını hesapla


#if defined(__PIC16F62XA_H) || defined(_16F628)
	#define rxpin	TRISB1
	#define txpin	TRISB2
#else
	#define rxpin	TRISC7
	#define txpin	TRISC6
#endif


void usart_baslat(void);
void usart_yaz(char veri);
char usart_oku(void);
void putch(unsigned char byte);   //printf kullanımı için gerekli


usart.c
#include <pic.h>
#include <stdio.h>
#include "usart.h"

void usart_baslat(void)
{
  rxpin=1;	//RX pinini giriş yap
  txpin=1;	//TX pinini giriş yap
  SPBRG=usartspbrg; //bağlantı hızını yükle
  TXSTA=0x24;
  RCSTA=0x90;
    
	
}

void usart_yaz(char veri)
{
	while(!TRMT);	//gönderilen veri olduğu müddetce dur.
	TXREG=veri;	//veriyi gönder.
}

char usart_oku(void)
{
	while(!RCIF);	//veri gelene kadar bekle
	if(OERR)	//hata varmı
	{
		CREN=0;
		CREN=1;
	}	
	if(FERR)
		asm("MOVF _RCREG,W");

	return RCREG;
}

void putch(unsigned char byte)
{
	usart_yaz(byte);
}


Örnek kullanım
main.c
#include <pic.h>
#include <stdio.h>
#include "usart.h"


__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & BORDIS & LVPDIS);

char harf;
void main()
{
	usart_baslat();

	printf("Usart Test Programı\r\n");
	printf("Selam Millet..\r\n");


	while(1)
	{
		harf=usart_oku();	//gelen byte oku
		usart_yaz(harf);	//ve gönder.
	}
}


Kolay gelsin.

ferdi0435


canbulut

ben hitechten anlamıyorum sadece göz atıyorum hocam ama..usart.c içinde tx pinini giriş olarak tanımlamışsınız.problem olurmu?

sigmoid

pic16F628Anın datasheetinde yazanı aynen kopyalıyorum.

Alıntı Yap
1. TRISB<1> and TRISB<2> should both be set to
'1' to configure the RB1/RX/DT and RB2/TX/CK
pins as inputs. Output drive, when required, is
controlled by the peripheral circuitry.

ferdi0435

#7
sagolun hocam

ferdi0435

@canbulut hocam orda giriş yapılmamış aktif yapılmış ...