C/C++ İle Port Kontrolu - Ornek Kod İçeride -
-
Mrb hocalar,
gecenlerde c kullanaraktan port kontrolunu soran arkadaslar vardı. bi kitapta konuyla ilgili kaynak koda rastladım. fazla uzun bişe degil: muritlerin işine yarar belki die yaziim dedim. d0 d1 d2 ve d3 pinlerini kontrol edebiliosunuz. program "enter data" dedikten sora ondalık şekilde sayıyı girin o kadar :) bide "DATA" ya aktarılan deger paralel portunuzun base adresi.. onun da kendi bilgisayarınızla uyustugundan emin olun :) zaten cogu pc de 0378 dir ama belki sizin ki degişik fln olabilir.
--- port adresime nası bakılır : winxp/2000 vs için bilgisayarıma sag tıklayıp ozellikler diin, donanıma gelip aygıt yoneticisini secin, baglantı noktalarına tıklayın, sora asagıda yazıcı baglkantı noktasına çift tıklayın. sekmelerden kaynakları secin. orda yazan ilk adres base adres...
ahanda kodlar:
#include <stdio.h>
#include <string.h>
#include <sys/io.h>/* kütüphaneler tanımlandı */
#define DATA 0x378
#define STATUS DATA+1
#define CONTROL DATA+2/* burda port adreslerini tanımladık */
int main()
{
int test;
int again=1;
int datatoport;
int datafromport;
printf("\n*******Parallel Port Control*******\n\n");/*ana fonksiyonlar, degiskenler vs */
while (again)
{
printf("\nenter data\n");
printf("(orn.255): ");
scanf("%d", &datatoport);test=ioperm(DATA, 3. 1);
/*port, num, turn on*/
if (test)
{
printf("\nparallel port is not accessable\n");
exit (-1);
}
else
printf("naccessed to parallel port\n");outb(0000, DATA
ioperm(DATA, 3, 0);
exit (0);
} -
uğraşın için saoll....
visul basicde de olsa bi de
-
sagol hocam, basicte cok daha kolay.. kod soyle:
OUT <Portun adresi>, <Gonderilecek veri>
orn: OUT &h378, 25
baska sorular olursa aksama cvplamaya calşısırım bildigim kadarıyla hocalar.. şimdi yemek yapmam lazım :D
-
o cod lar eski sistemlerde çalışıyor.malesef xp de sorun yaratır onun için en temiz çözüm win32 tabanlı serial port kullanımıdır...
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <fcntl.h>
static HANDLE hSerial;
static DCB dcbSerialParams = {0};
static COMMTIMEOUTS timeouts = {0};
HANDLE hThread;
DWORD dwThreadID;
int serialport(void);
DWORD WINAPI ThreadProc(PVOID param);
DWORD cBytes_out;
BYTE s;
char ch;
int main()
{
std::cout << "-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-" << std::endl;
std::cout << "-------------- ByCodeC terminal -------------\n" << std::endl;
std::cout << ".'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'." << std::endl;
std::cout << "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'" << std::endl;
// hThread = CreateThread(NULL,0,ThreadProc,NULL,0,&dwThreadID);
serialport();
return 0;
}
int serialport(void)
{
char szBuff[10] = {0};
DWORD dwBytesRead = 0;
hSerial = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial == INVALID_HANDLE_VALUE){
if(GetLastError() == ERROR_FILE_NOT_FOUND){
MessageBox(NULL,"error","error serial port",MB_OK);
}
}
printf("com1\n"); //********
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if(!GetCommState(hSerial,&dcbSerialParams)){
MessageBox(NULL,"error","comstate",MB_OK);
}
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
printf("BauD RaTe : 9600\n");
printf("8N1\n\n\n");
if(!GetCommState(hSerial,&dcbSerialParams)){
MessageBox(NULL,"serial port yaratılamadı","serial port yaratılamadı",MB_OK);
}
MessageBox(NULL,"Serial Port OK\n9600 BauD RaTe\n8N1","ByCodeC SmarT TerminaL\n\n",MB_OK);
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier= 10;
if(!SetCommTimeouts(hSerial,&timeouts)){
MessageBox(NULL,"time error","time error",MB_OK);
}
EscapeCommFunction(hSerial,CLRDTR);
// ReadFile(hSerial,&s,1,&dwBytesRead,NULL)
ch = 0x00;
WriteFile(hSerial,&ch,1, &cBytes_out, NULL);Sleep(500); //data yazma
ReadFile(hSerial,&s,1,&dwBytesRead,NULL);printf(" %x ",s);//data okuma
CloseHandle(hSerial);
return 0;
}
//}
