Elektronik / Mikrodenetleyici Projeleri/

PIC16F877 ile Baskı Devre Matkabı LPT Kontrol C++

Sponsorlu Bağlantılar

Hazırlayan: Soner İL ve Ramazan ERYILDIZ Emeği geçen Kişilere Teşekkürler

Giriş : PIC’ in kelime anlamı PERIPHERAL INTERFACE CONTROLLER giriş-çıkış işlemcisidir. İlk olarak 1994 yılında 16 bitlik ve 32 bitlik büyük işlemcilerin , giriş ve çıkışlarındaki yükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu için geliştirilmiştir.

Biz projemizde 16f877 kullanarak baskı devre matkabı yapıyoruz. Devremizin çalışması iki aşamada incelenebilir. Bunlardan birincisi bilgisayardan delinecek noktaların koordinatları alınıyor ve ikinci bölümde ise step motorlar yardımıyla baskı devre plaketinin delinmesi gerçekleştiriliyor.

Bilgisayardan verilerin gönderilmesinde bitamptan kordinatlara dönüşüm yapan bir C++ programı kullanılıyor

PIC Bellek Organizasyonu: PIC 16C7X ailesi 8K*14 program bellek alanını adresleyebilen bir 13 bit program sayacına sahiptir. Her bir elemanın kullandığı program bellek miktarı aşağıda listelenmiştir.8K dan daha düşük program bellekli bu elemanlarda fiziksel olarak kullanılan adresin üstünde, bir yere erişmek çakışmaya neden olur. Sıfırlama vektörü (reset vector) 0000h ve kesme vektörü 0004h üzerindedir.

Tablo3.2 Program belleği adres aralığı
Program belleği adres aralığı

Veri Bellek Organizasyonu : Veri bellek genel amaçlı registerlar ve özel fonksiyonlu registerlar (kaydediciler) olarak çoklu bankalara bölünmüştür. RP1 ve RP0 bitleri banka seçim bitleridir.

RP1:RP0 (Durum <6:5>)
00 => Bank0
01 => Bank1
10 => Bank2
11 => Bank3

Her banka 7Fh’ a kadar uzamaktadır.(128 bayt). Her bankanın bir altındaki yer, özel fonksiyonlu kaydediciler için ayrılmıştır. Özel fonksiyonlu register’ların üzerinde Statik RAM olarak kullanılan Genel Amaçlı Register’lar vardır. Bütün kullanılan bankalar özel fonksiyonlu register’lar içerir. Bazı “ yüksek kullanımlı “ özel fonksiyonlu register’lar kod redüksiyonu (indirgenmesi) ve daha hızlı bir erişim için bir bankadan başka bir bankaya yansıtılır.

Projede kullanilan genel amaçlı kayıtçılar

Status kaydı (status register) : STATUS kaydı ALU`nun aritmetik statüsünü, RESET statüsünü ve veri belleğinin küme seçim bitini içermektedir. Herhangi bir kayıtla olduğu gibi, STATUS kaydı herhangi bir komut için hedef olabilir. Eğer STATUS kaydı, Z, DC, veya C bitini etkileyen komutun hedefiyse, o zaman bu üç bit üzerine yazma etkinsizleştirilmiş durumdadır. Bu bitler aygıtın lojik durumuna göre uygun olarak kurulmuş veya silinmiştir. Daha ötesinde, TO ve PD bitleri yazılabilir bit değillerdir. Böylece, hedef STATUS kayıtlı komutların sonuçları tasarlanandan farklı olabilir.

Örneğin, CLRF STATUS` komutu yukarı üç biti temizleyerek Z bitini kuracaktır. Bu STATUS kaydından 000u uluu olarak çıkacaktır. (u=değişmeyen). STATUS kaydını değiştirmek için yalnızca BCF, BSF, SWAPF ve MOVWF kullanılmaktadır. Çünkü bu komutlar hiçbir statüs bitini etkilememektedir.

Not1: IRP ve RP1 (STATUS<7:6) bitleri bu entegreler tarafından kullanılmamaktadır ve silindiği gibi programlanmalıdır. Bu bitlerin genel amaçlı R/W bitleri olarak kullanılması tavsiye edilmemektedir, çünkü bu gelecekteki ürünlerle yüksek uyumluluğunu etkileyebilmektedir. Not2: Çıkartmalarda, C ve DC bitleri ödünç alan ve sayısal ödünç alan bitler olarak çalışmaktadır. Örnek için SUBLW ve SUBWF komutları incelenebilir.

Şekil 3.2 : Status Kaydı (O3h, 83h Adresi)
Status Kaydı O3h 83h Adresi

NOT:
R= Okunabilir Bit
W= Yazılabilir Bit
U= Uygulanmayan Bit, “0” olarak okunur
N= POR resetindeki değer.

Bit 7:IRP: Kayıt kümesi seçim biti (dolaylı adresleme için kullanılır. )

Bit 6-5:RP1:RPO: Kayıt kümesi seçim bitleri (doğrudan adresleme için kullanılır)

Bit 4:TO= Zaman Aralığı Biti
1= Güç kaynağı yükseltiminden sonra, CLRWDT veya SLEEP komutu
0= WDT zaman aralığı biti meydana gelmektedir.

Bit 3:PD: Güç Alçaltılması Biti
1= Güç yükseltiminden sonra veya CLRWDT komutu ile
0= SLEEP komutunun yürütülmesi ile

Bit 2 :Z: Sıfır Bit
1= Aritmetik veya mantıksal işlemin sonucu sıfırdır.
0= Aritmetik veya mantıksal işlemin sonucu sıfır değildir.

Bit 1:DC: Rakam geçirmesi/ ödünç alan say biti (ADDWF ve AALW komutu)
1= Ortaya çıkan sonucun 4.düşük düzeninden yürütme.
0= Sonucun 4.düşük düzeninden hiç yürütme yoktur.

Bit 0 :C: Geçirme/ ödünç alma biti (ADDWF ve ADDLW komutları)
1= Meydana gelen sonucun en önemli bitinden yürütme
0= Ortaya çıkan sonucun en önemli bitinden hiç yürütme yoktur.

Not: Çıkartma işlemi, ikinci verinin ikili bütünleri ilave edilerek yürütülmektedir. (RRF, RLF) komutların yürütülmesi için, bu bit, kaynak kaydındaki düşük veya yüksek düzenli biti ile yüklenmektedir.

Option_reg kaydı ( seçmeli kaydedici) : Option_reg registeri, TMR0/WDT prescaler, harici INT kesme, TMR0 ve PORTB’ de zayıf çekmenin konfigüre edildiği çeşitli kontrol bitlerinin olduğu, yazılabilir ve okunabilir registerdir. 81h adresinde bulunmaktadır.

Şekil 3.3 : Option kaydı( 81h, 181h Adresi)
Option kaydı 81h 181h Adresi

Bit7: rbpu : PORTB pull-up’ını (yukarı çekme), aktifleme biti.
1: PORTB’yi yukarı seviyeye çekme pasiftir.
0: PORTB’yi yukarı seviye çekme işlemi portun kilit değeri ile birlikte aktiftir.

Bit6: INTEDG: Kenar kesme seçme biti.
1= RB0/INT pinine yükselen kenarda kesme gönderilir.
0= RB0/INT pinine düşen kenarda kesme gönderilir.

Bit5: TOSC: TMR0 Clock kaynağı seçme biti.
1= RA4/TOCKI pininde değişim olur.
0= İç komut çevrim clok’u (CLKOUT) seçilir.

Bit4: T0SE: TMR0 Kenar başlangıcı seçme biti.
1= RA4/T0CKI pini yüksek seviyeden düşük seviyeye geçer
0= RA4/T0CKI pini düşük seviyen yüksek seviye geçer.

Bit3: PSA: Bölümleme (prescale) görev biti.
1= WDT’yi prescaler olarak atar.
0= T.mer0 modülünü prescaler olarak atar.

Bt2-0: PS2:PS0:Prescaler oranını seçme biti.
1= WDT’yi prescaler olarak atar.
0= T.mer0 modülünü prescaler olarak atar.

Bt2-0: PS2:PS0:Prescaler oranını seçme biti.

ps2-ps0-prescaler

Intcon kaydı (register) : INTCON Register, bütün kesme bayrakları için çeşitli enable bitlerini içeren okunabilir ve yazılabilir registerdir. 0Bh ve 8Bh adreslerinde bulunmaktadır.

Şekil 3.4 : INTCON kaydı( 0Bh, 8Bh,10Bh,18Bh Adresi)
INTCON kaydı 0Bh 8Bh 10Bh 18Bh Adresi

Bit 7: GIE: Ortak kesme aktifleme biti.
1= Tüm kesmeleri aktifler.
0=Tüm kesmeleri pasifler.

Bit 6: PEIE: Arabirim kesme aktifleme biti.
1= Tüm arabirim kesmelerini aktifler.
0= Tüm arabirim kesmelerini pasifler.

Bit5: T0IE: TMR0 taşma kesmesi aktifleme biti
1=TMR0 kesmesini aktif duruma getirir.
0=TMR0 kesmesini pasif duruma getirir.

Bit4: INTE: RB0/INT Harici kesme aktifleme biti.
1= RB0/INT pini harici kesmesini aktif duruma getirir.
0= RB0/INT pini harici kesmesini pasif duruma getirir.

Bit3: RBIE: RB port değişimi kesmesini aktifleme biti
1=RB port değişim kesmesini aktifler.
0= RB port değişim kesmesini pasifler.

Bit2: T0IF:TMR0 taşması kesme bayrak biti.
1= TMR0 register’ı taşar(yazılımda temizlenmiş olmalıdır).
0= TMR0 register’ında0 taşma olmaz.

Bit1: INTF: RB0/INT harici kesme bayrak biti.
1=RB0/INT pininde harici kesme olur( yazılımda temizlenmiş olmalıdır).
0= RB0/INT pininde harici kesme oluşmaz.

Bit0: RBIF: RB port değişimi kesme bayrak biti.
1=RB7: RB4 pinlerinden en az biri durum değiştirir.
0= RB7:RB4 pinlerinden hiç biri durum değiştirmez.

INDF ve FSR Kayıtçıları : INDF registeri fiziksel bir register değildir. INDF registerinin adreslemesi dolaylı adresleme olacaktır. Dolaylı adresleme INDF registerini kullanarak mümkün olmaktadır. INDF registerini kullanan herhangi bir komut, gerçekte FSR (FileSelect Register (Dosya seçme registeri)) tarafından işaret edilen registere erişir. INDF registerinin kendisi okunduğunda dolaylı olarak (FSR=0) 00h değeri okunacaktır. INDF registerine yazıldığında dolaylı olarak, işlem-yok sonucuna yol açar. (Buna rağmen durum bitleri etkilenir).

Kesmeler : Kesme, harici olayların normal yazılım akışını kesebilmesine izin verdiğinden mikroişlemciler için çok faydalı bir özelliktir. Bu , belirli bir amaç için bir kodun çalıştırılmasına yol açar. Örneğin iletişim yazılımlarında girdi pininden bir kesme yazılımın gelen verinin kodunu çözmesine neden olur.

INT Kesmesi : RBO/INT deki dış Kesmelerin sınırları trigger edilmiştir. Bu sınırlar eğer INTEDG biti kuruluysa (seçenek Reg<6>) yükselmekte veya azalmaktadır, eğer INTENDG silinmiş ise RBO/INT pini üzerinde geçerli sınır ortaya çıktığı zaman, INTF biti (INTCON<1>) kuruludur. Bu Kesme INTE bitinin (INTCON ccp) kontrolünün temizlenmesi ile etkisizleştirilebilir.

INTF sinyal biti, bu Kesmenin yeniden aktifleştirilmesinden önce , Kesme Servis Programı tarafından yazılımdan silinmelidir. INT Kesmesi işlemciyi ilk başta, SLEEP’ e gidilecek şekilde kurulduğu taktirde SLEEP ten çıkarılabilir. GIE biti statüsü, işlemcinin SLEEP ten çıkışı takip eden Kesme vektörüne ayrılıp ayrılmayacağına karar verir.

ASEMBLER Kodları

	LIST	p=16f877
	INCLUDE	“P16F877.INC”
	
;CNC TEZGAHI

#DEFINE	DATA	PORTC
#DEFINE	KES	PORTB,0
#DEFINE	X0SW	PORTB,1
#DEFINE	Y0SW	PORTB,2
#DEFINE	Z0SW	PORTB,3
#DEFINE	ZSSW	PORTB,4
#DEFINE	ZASW	PORTB,5
#DEFINE	LCDEN	PORTB,6
#DEFINE	KESEN	PORTB,7
#DEFINE	XMOTY	PORTD,0
#DEFINE	YMOTY	PORTD,2
#DEFINE	XMOTCP	PORTD,1
#DEFINE 	YMOTCP	PORTD,3
#DEFINE	ZMOTY	PORTD,4
#DEFINE	ZMOTEN	PORTD,5
#DEFINE	DELMOT	PORTD,6
#DEFINE	LCDRS	PORTD,7
#DEFINE 	LCD	PORTA
#DEFINE	ERROR	PORTA,4
#DEFINE	WORK	PORTA,5
#DEFINE 	BASBUT	PORTE,0
#DEFINE	BASLED	PORTE,1
#DEFINE	MESGUL	PORTE,2
#DEFINE	INTFLUG	INTCON,1
COPY	EQU	0X7F
XOLD	EQU	0X7E
YOLD	EQU	0X7D
XNEW	EQU	0X7C
YNEW	EQU	0X7B
INDF	EQU	0X00
OPTI	EQU	0X81
INDEX1	EQU	0X7A
INDEX2	EQU	0X79
TMRIN1	EQU	0X78
TMRIN2	EQU	0X77
	org	0x0003
	goto	BASLA
	org	0x0004
	goto	KESME
BASLA 	BSF	STATUS,7	;DOLAYLI ADRESLEMEDE  2VE4. BANK
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
	CLRF	PORTD
	CLRF	PORTE
	BSF	STATUS,RP0
	CLRF	TRISA	; LCD için boş bırakıldı
	MOVLW	0X3F	;BUTONLAR LAMBA VE KESMEDE KULL.
	MOVWF	TRISB	;(KESME İZİN UCU)
	MOVLW	0XFF	;BİLGİSAYARDAN GELEN DATA PİNLERİ
	MOVWF	TRISC	;BU PORTA BAĞLANACAK
	CLRF	TRISD	;MOTOR SÜRME
	MOVLW	0X01	
	MOVWF	TRISE
	MOVLW	b’00001111’
	MOVWF	OPTI
	BCF	STATUS,RP0
	CLRF	COPY
	CLRF	XOLD
	CLRF	YOLD
	CLRF	XNEW
	CLRF	YNEW
	MOVLW	0X8F
	MOVWF	FSR
	MOVLW	b’10010000’
	MOVWF	INTCON
	BSF	KESEN	;PC KESMESİNE İZİN VER ....?????
DON	BTFSS	BASLED
	GOTO	DON
	BCF	INTCON,7	;KESME İPTAL.....?????
	CALL	BTCONT
	BCF	BASLED
	BSF	WORK	;DELİNİYOR.......??????
	CALL	ZERO
	CALL	ZAYAR
	CALL	OKU1
	CLRF	XOLD
	CLRF	YOLD
	CLRF	XNEW
	CLRF	YNEW
	BCF	WORK
	MOVLW	0X8F
	MOVWF	FSR
	BSF	INTCON,GIE
	BSF	KESEN
	GOTO	DON
KESME	BCF	KESEN
	BCF	INTCON,INTF
	BSF	MESGUL	;ÇIKARKEN SIFIR YAPILACAK
	BTFSC	FSR,7
	GOTO	ART_KONT	;FSRYİ ARTIR VE KONTROL ET
ARTDO	CALL	CHANG
	MOVF	DATA,0
	MOVWF	INDF
	COMF	INDF,0
	BTFSC	STATUS,Z
	GOTO	CALIS
	BCF	MESGUL
	BSF	KESEN
	RETFIE
ART_KONT	INCF	FSR,1
	MOVF	FSR,0
	SUBLW	0XF0
	BTFSS	STATUS,Z
	GOTO	ARTDO
CALIS	BSF	BASLED
	BCF	MESGUL
	RETFIE
CHANG	BTFSS	FSR,7
	GOTO	SIFIR
	BCF	FSR,7
	RETURN
SIFIR	BSF	FSR,7
	RETURN
ZAYAR	BCF	ZMOTY
	BCF	ZMOTEN
	BTFSC	Z0SW
	RETURN
	BSF	ZMOTEN
	NOP
	NOP
	NOP
	GOTO	ZAYAR
OKU1	MOVLW	0X0F
	MOVWF	FSR
OKU	BCF	FSR,7
	MOVF	FSR,W
	SUBLW	0X6F
	BTFSC	STATUS,Z
	RETURN
	INCF	FSR,F
	MOVF	INDF,W
	MOVWF	XNEW
	BSF	FSR,7
	MOVF	INDF,W
	MOVWF	YNEW
	COMF	XNEW,W
	BTFSC	STATUS,Z
	RETURN
GIT	BCF	XMOTY
	MOVF	XOLD,W
	SUBWF	XNEW
	BTFSC	STATUS,C
	BSF	XMOTY
	CALL	XFIND
	BCF 	YMOTY
	MOVF	YOLD,W
	SUBWF	YNEW
	BTFSC	STATUS,C
	BSF	YMOTY
	CALL	YFIND
DEL	BSF	DELMOT
	BSF	ZMOTY
	BSF	ZMOTEN
	BTFSS	ZSSW
	GOTO	DEL
	BCF 	ZMOTEN
BAK	BTFSS	ZASW
	GOTO	BAK
	CALL	B1S
	CALL	ZAYAR
	GOTO	OKU
XFIND	MOVF	XOLD,W
	SUBWF	XNEW
	BTFSC	STATUS,Z
	RETURN
	MOVLW	0X3D	;HER 0,05 İNCH İÇİNMOTOR ADIM SAY.
	MOVWF	INDEX1
AAAA	BSF	XMOTCP
	CALL	B3MS
	BCF	XMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	AAAA
	INCF	XOLD,1
	BTFSC	XMOTY
	GOTO	XFIND
	DECF	XOLD,F
	DECF	XOLD,F
	GOTO	XFIND
YFIND	MOVF	YOLD,W
	SUBWF	YNEW
	BTFSC	STATUS,Z
	RETURN
	MOVLW	0X3D	;MOTOR ADIM SAYISI
	MOVWF	INDEX1
BBBB	BSF	YMOTCP
	CALL	B3MS
	BCF	YMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	BBBB
	INCF	YOLD,1
	BTFSC	YMOTY
	GOTO	YFIND
	DECF	YOLD,F
	DECF	YOLD,F
	GOTO	YFIND
ZERO	MOVLW	0XF0
	MOVWF	INDEX1
	BSF	XMOTY
	BSF	YMOTY
XXXX	BSF	XMOTCP
	BSF	YMOTCP
	CALL	B3MS
	BCF	XMOTCP
	BCF	YMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	XXXX
	BCF	XMOTY
	BCF	YMOTY
	CALL	B1S
XXX1	CALL	B30MS
	BSF	XMOTCP
	BSF	YMOTCP
	CALL	B30MS
	BTFSS	X0SW
	BCF	XMOTCP
	BTFSS	Y0SW
	BCF	YMOTCP
	BTFSS	X0SW
	GOTO	XXX1
	BTFSS	Y0SW
	GOTO	XXX1	
	RETURN
B196MS	MOVLW	0XFF
	MOVWF	TMRIN1
SS	MOVLW	0XFF
	MOVWF	TMRIN2
CCCC	DECFSZ	TMRIN2,1
	GOTO	CCCC
	DECFSZ	TMRIN1,1
	GOTO	SS
	RETURN
B1S	MOVLW	0X05
	MOVWF	TMRIN1
	CALL	B196MS
	DECFSZ	TMRIN1,1
	GOTO	B1S
	RETURN
B30MS	MOVLW	0X0A
	MOVWF	TMRIN1
	CALL	B3MS
	DECFSZ	INDEX1,1
	GOTO	B30MS
	RETURN
B3MS	MOVLW	0X06
	MOVF	TMRIN1
XXX3	MOVLW	0XB4
	MOVWF	TMRIN2
XXX2	DECFSZ	TMRIN2,F
	GOTO	XXX2
	DECFSZ	TMRIN1,F
	GOTO	XXX3
	RETURN
BTCONT	BTFSS	BASBUT
	GOTO	BTCONT
	RETURN
	END

Devre Şeması
baski-devre-matkabi-devre-semasi-lpt-kontrol

Baskı Devre pcb Alt,üst görünüm
baski-devre-matkabi-semasi-lpt-kontrol-pcb-alt baski-devre-matkabi-semasi-lpt-kontrol-pcb-ust

C++ Programı

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
char kor[2][952];

void bul (void);
void kur (void);
void topic (void);
void yeni (void);

main (){
clrscr ();
bul ();
kur ();
topic ();
clrscr ();
printf ("\n\n\n\n\nbaski devre kordinatlari basari ile gonderildi...\n\n\ncikis icin bir tusa basiniz");
getche ();
}
void bul (void){
int x,y,a=0;
int  r,g,b;
char str1[60],str2[60];
FILE *bmp,*ref,*h1,*h2;
if (!(bmp=fopen ("c:\\soner\\son.bmp","r"))){
	printf ("\n\ndosya bulunamadi veya dosya bozuk\a\n\ncikis icin bir tusa basiniz");
	fcloseall();
	yeni ();
	}
if (!(ref=fopen ("c:\\soner\\son.b","r"))){
	printf ("\n\ndosya bulunamadi veya dosya bozuk\a\n\ncikis icin bir tusa basiniz");
	getche ();
	fcloseall();
	exit (0);}
if (!(h1=fopen("c:\\soner\\ramazan.db","w"))){
	printf ("\n\ndisk uzerine yazilamiyor VEYA belirtilen yol bulunamadi\a\n\ncikis icin bir tusa basiniz.");
	getche ();
	fcloseall();
	exit (0);}
if (!(h2=fopen("c:\\soner\\soner.db","w"))){
	printf ("\n\ndisk zerine yazilamiyor VEYA belirtilen yol bulunamadi\a\n\ncikis icin bir tusa basiniz.");
	getche ();
	fcloseall();
	exit (0);}
fgets (str1,53,bmp);
fgets (str2,53,ref);
if (strcmp ( str1 , str2)){
fcloseall ();
yeni ();}
fclose (ref);
fseek(bmp,54,SEEK_SET);
for (x=599;x>=0;x--){
for (y=0;y<900;y++){
r=fgetc (bmp);
if (r==110 && g==120 && b==130){
kor[1][a]=x/5;
kor[0][a]=y/5;
a++;
if (a>950){printf ("cok fazla kordinat\n\ncikis icin bir tusa basiniz.");
getche ();
exit (0);}
fprintf (h1,"%d\t%d\n",x/5,y/5);
fprintf (h2,"%c%c",x/5,y/5);}
}}
if (a<1){printf ("Islem yapilacak nokta bulunamadi\n\n\n\n\n\
€ikis icin bir tusa basiniz.");getche (); exit (0);}
printf ("%d adet kordinat bulundu. \n\n\nDevam etmek icin bir tusa basiniz \n\n\t\t\tcikis icin ESC...",a);
if (getche ()==27) {fcloseall();exit (0);}
fcloseall();
}
void kur (void){
char cev;
unsigned int gecik=0;
clrscr ();
/*tek:
gotoxy (1,1);
printf ("Kopya sayisini giriniz.        :               \b\b\b\b\b\b\b\b\b\b\b\b");
scanf ("%d",&copy);
if (copy<1 || copy>255){printf ("\n\ngirilen de§er 1 ile 255 arasinda olmalidir."); goto tek;}*/
kont:
printf ("\n\n\t\t\tDonanim ile baglanti kuruluyor...");
while ((inportb(0x379))!=0 && (inportb (0x379))!=128){delay (1000);
gecik++;
if (gecik>9){
printf ("\n\n\n\n\t\tDonanim ile on kez denemede baglanti kurulamadi\n\nYeniden dene / Iptal");
cevtek:
cev=getch ();
if (cev == 'i' || cev =='I'){
printf ("\n\n\n\n\ncikis icin bir tusa basiniz.");
getche ();
exit (0);}
else if (cev=='y'||cev =='Y'){
clrscr ();
gecik=0;
goto kont;}
else goto cevtek;}}
clrscr ();
printf ("\n\nbaglanti kuruldu");
delay (3000);
}
void topic (void) {clrscr ();
int a=0;
while (kor[0][a] !=255){
	son:
	while ((inportb(0x379))!=128){
		if ((inportb(0x379)) != 0){
			printf ("Donanim ile baglanti koptu.... \nFiziksel baglantiyi gerceklestirip bir tusa basiniz.\n\n\n\n€ikis icin ESC");
			if (getche ()==27) exit (0);
		}
	}
	delay (1);
	outportb (0x37a,12);
	delay (1);
	outportb (0x378,kor[0][a]);
	delay (1);
	outportb (0x37a,8);
	delay (1);
	while ((inportb (0x379)) != 128);
	outportb (0x37a,12);
	delay (1);
	outportb (0x378,kor[1][a]);
	delay (1);
	outportb (0x37a,8);
	delay (1);
	outportb (0x37a,4);
	delay (1);
	a++;
	}
delay (1);
while ((inportb (0x379)) != 128);
delay (1);
outportb (0x37a,12);
delay (1);
outportb (0x378,255);
delay (1);
outportb (0x37a,8);
delay (10);
}
void yeni (void){
clrscr ();
FILE *bm,*db;
printf ("\n\nMevcut olan dosya bicimi okunamiyor....      (600 X 900)\n\n\n\n\
yeni bir BMP dosyasi olusturmak icin herhangi bir tusa basiniz			\n\n\n\
cikis icin ESC...\n\n\n Dikkat yeni bir BMP olusturmak icin  mevcut olan verileriniz kaybolacak.");
if (getche () !=27){
if (!(bm=fopen ("c:\\soner\\son.bmp","w"))){
	printf ("\n\nDisk uzerine yazilamiyor.\a\n\n€ikis icin bir tusa basiniz");
	getche ();
	fclose(bm);
	exit (0);}
if (!(db=fopen ("c:\\soner\\ram.db","r"))){
	printf ("\n\ndosya bulunamadi veya dosya bozuk\a\n\n€ikis icin bir tusa basiniz");
	getche ();
	fcloseall();
	exit (0);}
fputc ('B',bm);
while (!(feof (db)))
fputc ((fgetc (db)),bm);
fcloseall ();
printf ("dosyalar basariyla olusturuldu");}
printf ("\n\n\n\nProgrami kapatmak icin bir tusa basiniz.");
getche ();
exit (0);
}

dosyalar: PIC16F877 ile Baskı Devre Matkabı LPT Kontrol C++

Dosya indirme LINK listesi (TXT formatında) link-4117.zip şifre-pass: 320volt.com

  • Ramazan ERYILDIZ

    Vay be bu devreyi üniversite yıllarında 2003 de yapmıştık, ne günlerdi. Şimdi bu sitede yayınlanması çok hoş gerçekten.

  • feridun

    Tüm dosyalar hex ve exe dahil tek paket elde edemezmiyiz.

  • soner

    “Tüm dosyalar hex ve exe dahil tek paket elde edemezmiyiz.” demiş feridun Ramazan ERYILDIZ çalışma dosyalarınız elinizdeyse paylaşabilir misiniz?

  • feridun

    Arkadaşlar bu c++ kodlarını derleyemedim. masıl derlerim. bilgisi olan yada derleyip paylaşabilecek olan arkadaşımız var mı?