導航:首頁 > 編程語言 > c串口編程詳解

c串口編程詳解

發布時間:2022-12-11 14:44:57

Ⅰ 如何在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] != '')

{

SBUF = str[i];

while(!TI); // 等特數據傳送

TI = 0; // 清除數據傳送標志

i++; // 下一個字元

}

}

void delayms(unsigned char ms)

// 延時子程序

{

unsigned char i;

while(ms--)

{

for(i = 0; i < 120; i++);

}

}

拓展資料

C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。



Ⅵ 《Visual+C++_Turbo+C串口通信編程實踐》與《Visual C++串口通信技術詳解》哪本內容好,望高手指點一下

我用的是《Visual+C++_Turbo+C串口通信編程實踐》,感覺還好,串口編程時遇到的問題基本都有。

Ⅶ 如何用C語言寫一個讀、寫串口的程序

大致過程就是

配置串口通信,包括串口號、波特率、校驗位、停止位這些信息;
打開串口,和打開文件一樣,在Linux下是這樣,Windows下沒試過,估計也差不多;
發送數據,即寫串口,就跟寫文件類似;
讀取串口,用read就行。
具體的函數和配置參數可以參考一些別人的代碼。

Ⅷ 51單片機串口通信c語言編程

#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int

sbit ring=P3^7;
sbit CASE1=P2^0;
sbit CASE2=P2^1;
sbit CASE3=P2^2;
sbit CASE4=P2^3;

uchar se=0,re=0;
uchar temp=0;

void wait(uint cnt)
{
while(--cnt);
}

//串口發送程序
void send(uchar se)
{
SBUF=se; //發送數據
while(TI == 0);
TI = 0;
}
//串口接收程序
uchar receive(void)
{
re=SBUF; //接收數據
while(RI==0);
RI=0;
return re;
}
//串口初始化
void sinti(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
}
void delay(int cnt)
{
while(--cnt);
}

//主程序
int main (void)
{
int i;
sinti(); //串口初始化程序
ring=1;
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a');
ring=0;
break;
}
if(CASE2==0)
{
send('b');
ring=0;
break;
}
if(CASE3==0)
{
send('c');
ring=0;
break;
}
if(CASE4==0)
{
send('d');
ring=0;
break;
}
}
if(ring==0)
{
wait(60000);
ring=1;
}
for(i=0;i<10000;i++);
}
}
//串口中斷程序
void UART_SER (void) interrupt 4 //串列中斷服務程序
{

if(RI) //判斷是接收中斷產生
{
RI=0; //標志位清零
temp=SBUF;
}
if(TI) //如果是發送標志位,清零
TI=0;
}

Ⅸ Windows下的C語言串口編程

大概說下思路,串口在編程里相當於一個文件,因此要創建句柄來操作,還要給DCB結構休賦值進行串口配置等,你可以查下DCB結構體,記得在DOS下編程時,使用#include <windows.h>。藏的深是為了更簡單的使用。還有就是由於接受要一直進行檢測,所以一般都專門開一線程進行監聽。

Ⅹ c語言寫的串口程序,rx_index為定義的一個串口指針,我想知道最後if語句是怎麼計算的

rx_index應該不是指針吧,應該是串口收到的數據的計數。
當rx_index大於18,也就是為19時,會進入第一個if。

第二個if等價於if(rx_temp[0])=='t' && if(rx_temp[1]=='i')&&...
第三個if等價於if(rx_temp[12]=='-').
當然這種數據處理方式是有風險的,如果恰好收到20個數據,也就是rx_index為19時,可以正確處理。如果大於20個數據,比如前面有一個亂碼,那麼會把正確數據也丟掉。當然現在可以不考慮這種情況,等遇到了再說。

閱讀全文

與c串口編程詳解相關的資料

熱點內容
匯編程序員待遇 瀏覽:357
怎麼批量有順序的命名文件夾 瀏覽:209
杭州程序員健身 瀏覽:17
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362