#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)了漢字編程。
#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);
}
}
以上兩段代碼是一年前弄的,我記得可以用,你試試。
#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)