c語(yǔ)言的串口接收數(shù)據(jù)函數(shù) c語(yǔ)言讀串口數(shù)據(jù)

C語(yǔ)言變成實(shí)現(xiàn)串口收發(fā)數(shù)據(jù)

#include reg51.h

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到克井網(wǎng)站設(shè)計(jì)與克井網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋克井地區(qū)。

#include intrins.h

unsigned char key_s, key_v, tmp;

char code str[] = "welcome!??\n\r";

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; // 定時(shí)器1工作于8位自動(dòng)重載模式, 用于產(chǎn)生波特率

TH1 = 0xFD; // 波特率9600

TL1 = 0xFD;

SCON = 0x50; // 設(shè)定串行口工作方式

PCON = 0xef; // 波特率不倍增

TR1 = 1; // 啟動(dòng)定時(shí)器1

IE = 0x0; // 禁止任何中斷

while(1)

{

if(scan_key()) // 掃描按鍵

{

delayms(10); // 延時(shí)去抖動(dòng)

if(scan_key()) // 再次掃描

{

key_v = key_s; // 保存鍵值

proc_key(); // 鍵處理

}

}

if(RI) // 是否有數(shù)據(jù)到來(lái)

{

RI = 0;

tmp = SBUF; // 暫存接收到的數(shù)據(jù)

P0 = tmp; // 數(shù)據(jù)傳送到P0口

send_char(tmp); // 回傳接收到的數(shù)據(jù)

}

}

}

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)

// 傳送一個(gè)字符

{

SBUF = txd;

while(!TI); // 等特?cái)?shù)據(jù)傳送

TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志

}

void send_str()

// 傳送字串

{

unsigned char i = 0;

while(str[i] != '\0')

{

SBUF = str[i];

while(!TI); // 等特?cái)?shù)據(jù)傳送

TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志

i++; // 下一個(gè)字符

}

}

void delayms(unsigned char ms)

// 延時(shí)子程序

{

unsigned char i;

while(ms--)

{

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

}

}

拓展資料

C語(yǔ)言是一門(mén)通用計(jì)算機(jī)編程語(yǔ)言,應(yīng)用廣泛。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。

盡管C語(yǔ)言提供了許多低級(jí)處理的功能,但仍然保持著良好跨平臺(tái)的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫(xiě)出的C語(yǔ)言程序可在許多電腦平臺(tái)上進(jìn)行編譯,甚至包含一些嵌入式處理器(單片機(jī)或稱MCU)以及超級(jí)電腦等作業(yè)平臺(tái)。

二十世紀(jì)八十年代,為了避免各開(kāi)發(fā)廠商用的C語(yǔ)言語(yǔ)法產(chǎn)生差異,由美國(guó)國(guó)家標(biāo)準(zhǔn)局為C語(yǔ)言制定了一套完整的美國(guó)國(guó)家標(biāo)準(zhǔn)語(yǔ)法,稱為ANSI C,作為C語(yǔ)言最初的標(biāo)準(zhǔn)。目前2011年12月8日,國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)發(fā)布的C11標(biāo)準(zhǔn)是C語(yǔ)言的第三個(gè)官方標(biāo)準(zhǔn),也是C語(yǔ)言的最新標(biāo)準(zhǔn),該標(biāo)準(zhǔn)更好的支持了漢字函數(shù)名和漢字標(biāo)識(shí)符,一定程度上實(shí)現(xiàn)了漢字編程。

怎樣在WINDOWS下用C語(yǔ)言編寫(xiě)串口接收數(shù)據(jù)程序

#include stdio.h

#include Windows.h

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;

}

以前弄的,好久沒(méi)看了,不知到對(duì)不對(duì)。

還有下面這段:

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 Windows.h

#include stdio.h

HANDLE hCom;

int main(void)

{

hCom=CreateFile(TEXT("COM3"),//COM1口

GENERIC_READ|GENERIC_WRITE, //允許讀和寫(xiě)

0, //獨(dú)占方式

NULL,

OPEN_EXISTING, //打開(kāi)而不是創(chuàng)建

0, //同步方式

NULL);

if(hCom==(HANDLE)-1)

{

printf("打開(kāi)COM失敗!\n");

return FALSE;

}

else

{

printf("COM打開(kāi)成功!\n");

}

SetupComm(hCom,1024,1024); //輸入緩沖區(qū)和輸出緩沖區(qū)的大小都是1024

COMMTIMEOUTS TimeOuts;

//設(shè)定讀超時(shí)

TimeOuts.ReadIntervalTimeout=1000;

TimeOuts.ReadTotalTimeoutMultiplier=500;

TimeOuts.ReadTotalTimeoutConstant=5000;

//設(shè)定寫(xiě)超時(shí)

TimeOuts.WriteTotalTimeoutMultiplier=500;

TimeOuts.WriteTotalTimeoutConstant=2000;

SetCommTimeouts(hCom,TimeOuts); //設(shè)置超時(shí)

DCB dcb;

GetCommState(hCom,dcb);

dcb.BaudRate=9600; //波特率為9600

dcb.ByteSize=8; //每個(gè)字節(jié)有8位

dcb.Parity=NOPARITY; //無(wú)奇偶校驗(yàn)位

dcb.StopBits=ONE5STOPBITS; //兩個(gè)停止位

SetCommState(hCom,dcb);

DWORD wCount;//讀取的字節(jié)數(shù)

BOOL bReadStat;

while(1)

{

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空緩沖區(qū)

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);

}

}

以上兩段代碼是一年前弄的,我記得可以用,你試試。

能寫(xiě)出查詢方式UART0接收和發(fā)送數(shù)據(jù)的C語(yǔ)言程序

#includepic.h //包含單片機(jī)內(nèi)部資源預(yù)定義

#ifndef uchar

#define uchar unsigned char

#define uint unsigned int

#endif

//__CONFIG(0x2129);

bit rec_flag; //串口中斷標(biāo)志位,有串口中斷,置1

uchar uartdata; //串口數(shù)據(jù)保存到此位置中

void Uart_char(uchar dat);//串口發(fā)送一個(gè)數(shù)據(jù)

/*************************************************************

函數(shù)原型:void main(void)

功 能:等待串口發(fā)送中斷到來(lái),將接收到的設(shè)計(jì)再通過(guò)串口發(fā)回

*************************************************************/

void main(void)

{

TRISB1=1;

TRISB2=1;

SPBRG=0X19; //設(shè)置波特率為9600BPS

TXSTA=0X24; //使能串口發(fā)送,選擇高速波特率

RCSTA=0X90; //使能串口工作,連續(xù)接收

RCIE=0X1; //使能接收中斷

GIE=0X1; //開(kāi)放全局中斷

PEIE=0X1; //使能外部中斷

//INTCON=0X00;

/* while(1) //查詢模式下

{

RCIE=1;

while(RCIF==0);

RCIE=0;

Send_char(RCREG);

}

*/

while(1) //中斷模式下,等待中斷的到來(lái)

{

if(rec_flag==1) //如果接收中斷到來(lái)

{

rec_flag=0; //接收標(biāo)志清零

Uart_char(uartdata); //將接收來(lái)的數(shù)據(jù)發(fā)送到串口

}

}

}

/**********************************************

函數(shù)原型:void Uart_char(uchar dat)

功 能:將dat數(shù)據(jù)通過(guò)串口傳送出去

**********************************************/

void Uart_char(uchar dat)

{

TXREG=dat; //將dat數(shù)據(jù)存入TXREG

// TXEN=1; //啟動(dòng)發(fā)送,TSR開(kāi)始移位操作。

while (TRMT==0); //判斷是否TSR發(fā)送完畢,未完等待。

// TXEN=0; //關(guān)發(fā)送功能,防止TXREG空時(shí),TXIF產(chǎn)生置位

}

/**********************************************

函數(shù)原型:void interrupt usart(void)

功 能:串口接收到數(shù)據(jù),接受發(fā)來(lái)的數(shù)據(jù)將接

收到數(shù)據(jù)標(biāo)志位rec_flag置1

**********************************************/

void interrupt usart(void)

{

if(RCIF) //判斷是否為串口接收中斷

{

rec_flag = 1;

//RCIF=0;

uartdata = RCREG; // 接收數(shù)據(jù)并存儲(chǔ)

//TXREG=recdata ; //把接收到的數(shù)據(jù)發(fā)送回去

}

}

這段程序應(yīng)該對(duì)你有用

分享題目:c語(yǔ)言的串口接收數(shù)據(jù)函數(shù) c語(yǔ)言讀串口數(shù)據(jù)
瀏覽地址:http://muchs.cn/article22/doeiijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化網(wǎng)站營(yíng)銷、外貿(mào)建站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化