Ⅰ 如何在LINUX下編寫一個C語言的串口程序
1、參考這個:POSIX操作系統串口編程指南和 UNIX環境高級編程。
2、簡單介紹一下:
《POSIX操作系統的串口編程指南》是在UNIX環境或PC上對串口進行編程的教程,每一章提供的常式都使用POSIX(Portable Standard for UNIX)終端控制函數,只需極少的修改就可運行在IRIX 、HP-UX、 SunOS、 Solaris、 Digital UNIX、 Linux等大多數類UNIX操作系統。
Ⅱ 如何用c語言編寫向串口發送指令的程序 如0x01
#include<windows.h>
#include<stdio.h>
intmain()
{
HANDLEhComm;
hComm=CreateFile(「COM1」,//forCOM1—COM9only
GENERIC_READ|GENERIC_WRITE,//Read/Write
0,//NoSharing
NULL,//NoSecurity
OPEN_EXISTING,//Openexistingportonly
0,//NonOverlappedI/O
NULL);
if(hComm==INVALID_HANDLE_VALUE)
printf(「Errorinopeningserialport」);
else
printf(「openingserialportsuccessful」);
charlpBuffer[]=0x01;
DWORDdNoOFBytestoWrite;//Noofbytestowriteintotheport
DWORDdNoOfBytesWritten=0;//Noofbyteswrittentotheport
dNoOFBytestoWrite=sizeof(lpBuffer);
Status=WriteFile(hComm,//HandletotheSerialport
lpBuffer,//Datatobewrittentotheport
dNoOFBytestoWrite,//Noofbytestowrite
&dNoOfBytesWritten,//Byteswritten
NULL);
CloseHandle(hComm);//ClosingtheSerialPort
return0;
}
Ⅲ c語言怎麼實現串口通信
編程原理
程序1為查詢通信方式介面程序,為一典型的數據採集常式。其中bioscom()函數初始化COM1(此函數實際調用BIOS
INT
14H中斷0號功能)。這樣在程序中就避免了具體設置波特率因子等繁瑣工作,只需直接訪問發送/接收寄存器(3F8H)和線路狀態寄存
Ⅳ 怎樣在WINDOWS下用C語言編寫串口接收數據程序
#include
#include
int
main(void)
{
FILE
*fp;
char
temp;
char
buf[100];
if((fp
=
fopen("com3","r"))
==
NULL)
puts("this
way
doesn't
work!\n");
else
puts("this
way
works!\n");
while(1)
{
temp
=
0;
fscanf(fp,"%c",&temp);
if(temp
!=
0)
putchar(temp);
else
Sleep(100);
}
fclose(fp);
return
0;
}
以前弄的,好久沒看了,不知到對不對。
還有下面這段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include
#include
HANDLE
hCom;
int
main(void)
{
hCom=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE,
//允許讀和寫
0,
//獨占方式
NULL,
OPEN_EXISTING,
//打開而不是創建
0,
//同步方式
NULL);
if(hCom==(HANDLE)-1)
{
printf("打開COM失敗!\n");
return
FALSE;
}
else
{
printf("COM打開成功!\n");
}
SetupComm(hCom,1024,1024);
//輸入緩沖區和輸出緩沖區的大小都是1024
COMMTIMEOUTS
TimeOuts;
//設定讀超時
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//設定寫超時
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts);
//設置超時
DCB
dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600;
//波特率為9600
dcb.ByteSize=8;
//每個位元組有8位
dcb.Parity=NOPARITY;
//無奇偶校驗位
dcb.StopBits=ONE5STOPBITS;
//兩個停止位
SetCommState(hCom,&dcb);
DWORD
wCount;//讀取的位元組數
BOOL
bReadStat;
while(1)
{
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
//清空緩沖區
char
str[9]={0};
printf("%s\n",str);
bReadStat=ReadFile(hCom,str,9,&wCount,NULL);
if(!bReadStat)
{
printf("讀串口失敗!");
return
FALSE;
}
else
{
str[8]='\0';
printf("%s\n",str);
}
Sleep(100);
}
}
以上兩段代碼是一年前弄的,我記得可以用,你試試。
Ⅳ C語言變成實現串口收發數據
#include <reg51.h>
#include <intrins.h>
unsigned char key_s, key_v, tmp;
char code str[] = "welcome!www.willar.com
";
void send_str();
bit scan_key();
void proc_key();
void delayms(unsigned char ms);
void send_char(unsigned char txd);
sbit K1 = P1^4;
main()
{
TMOD = 0x20; // 定時器1工作於8位自動重載模式, 用於產生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 設定串列口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 啟動定時器1
IE = 0x0; // 禁止任何中斷
while(1)
{
if(scan_key()) // 掃描按鍵
{
delayms(10); // 延時去抖動
if(scan_key()) // 再次掃描
{
key_v = key_s; // 保存鍵值
proc_key(); // 鍵處理
}
}
if(RI) // 是否有數據到來
{
RI = 0;
tmp = SBUF; // 暫存接收到的數據
P0 = tmp; // 數據傳送到P0口
send_char(tmp); // 回傳接收到的數據
}
}
}
bit scan_key()
// 掃描按鍵
{
key_s = 0x00;
key_s |= K1;
return(key_s ^ key_v);
}
void proc_key()
// 鍵處理
{
if((key_v & 0x01) == 0)
{ // K1按下
send_str(); // 傳送字串"welcome!...
}
}
void send_char(unsigned char txd)
// 傳送一個字元
{
SBUF = txd;
while(!TI); // 等特數據傳送
TI = 0; // 清除數據傳送標志
}
void send_str()
// 傳送字串
{
unsigned char i = 0;
while(str[i] != '