c語言變成實現串列埠收發資料,C語言變成實現串列埠收發資料

時間 2021-09-06 02:04:31

1樓:杜哥是個小天才

#include

#include

unsigned char key_s, key_v, tmp;

char code str = "welcome! www.willar.com \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; // 定時器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)

void send_char(unsigned char txd)

// 傳送一個字元

sbuf = txd;

while(!ti); // 等特資料傳送

ti = 0; // 清除資料傳送標誌

}void send_str()

// 傳送字串

unsigned char i = 0;

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

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語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。

2樓:

首先是把資料傳送出去,傳送資料協議是自己定義的,一個資料頭2個位元組,20個位元組資料位,2個位元組crc校驗位,每個資料共24位元組的資料。

temp = temp ^ 0x11021

if ((*ptr & i) != 0)

temp = temp ^ (0x10000 ^ 0x11021);

}ptr++;

}crc = temp;

dword dwwrittenlen = 0;

printf("main baseline往串列埠傳送資料成功!");

/***********關閉串列埠***********/

closehandle(hcom);}

資料傳送成功,主要是接收的程式除錯了很久,一開始也是打算一個資料24個位元組24個位元組來迴圈接收,但是每組資料會在固定的第10-13個位元組出錯。

//設定讀超時

timeouts.readintervaltimeout = 1000;

timeouts.readtotaltimeoutmultiplier = 500;

timeouts.readtotaltimeoutconstant = 5000;

//設定寫超時

timeouts.writetotaltimeoutmultiplier = 500;

timeouts.writetotaltimeoutconstant = 2000;

設定超時

dcb dcb1;

getcommstate(hcom1, &dcb1);

dcb1.baudrate = 115200;//波特率為9600

dcb1.bytesize = 8;//每個位元組有8位

dcb1.parity = noparity;//無奇偶校驗位

dcb1.stopbits = twostopbits;//兩個停止位

//dcb1.fparity = false;

//dcb1.fnull = false;

setcommstate(hcom1, &dcb1);

dword wcount=8;//讀取的位元組數

fclose(fp1);

}closehandle(hcom1);

}最後 就是將傳送的資料和接收的資料放到txt檔案裡進行了比對,完全沒有問題。

3樓:匿名使用者

以下是我剛改的程式編譯成功了

請參考#include"reg51.h"

//定義全域性變數

unsigned char data_10[10]=;

unsigned char time_50ms,count;

bit flag=0;

bit data_flag=0;

函式名:uart串列埠初始化函式

調 用:uart_init();

參 數:無

返回值:無

結 果:啟動uart串列埠接收中斷,允許串列埠接收,啟動t/c1產生波特率(佔用)

備 注:振盪晶體為12mhz,pc串列埠端設定 [ 4800,8,無,1,無 ]

void uart_init (void)

函式名:uart串列埠接收中斷處理函式

調 用:[sbuf收到資料後中斷處理]

參 數:無

返回值:無

結 果:uart串列埠接收到資料時產生中斷,使用者對資料進行處理(併傳送回去)

備 注:過長的處理程式會影響後面資料的接收

void uart_r (void) interrupt 4 using 1

if(flag)

函式名:定時/計數器初始化函式

調 用:t_c_init();

參 數:無

返回值:無

結 果:設定sfr中t/c1和(或)t/c0相關引數

備 注:本函式控制t/c1和t/c0,不需要使用的部分可用//遮蔽

void t_c_init (void)

函式名:定時/計數器0中斷處理函式

調 用:[t/c0溢位後中斷處理]

參 數:無

返回值:無

結 果:重新寫入16位計數暫存器初始值,處理使用者程式

備 注:必須允許中斷並啟動t/c本函式方可有效,重新寫入初值需和t_c_init函式一致

void t_c0 (void) interrupt 1 using 1

main()

希望能解決您的問題。

編寫微控制器串列埠收發資料的完整程式(c語言編寫)

4樓:驚鴻

我用的新唐晶片,8051核心,跟51差不多,望採納

void uart_initial (void)

以上是初始化的

void send_data_to_uart1(uint8 c)

void uart_isr (void) interrupt 4 //序列中斷服務程式

else if(receive_date_size > 0 && receive_date_size < 4)

else if(receive_date[c] == last_date && receive_date_size ==4)

else}}接收

c語言 迴圈部分,c語言中的迴圈如何實現

我承認我是來蹭分的哈。include int fac int n double n ieme terme int n int main ifn while return 0 int fac int n else fac double n ieme terme int n n ieme terme l...

資料結構c語言描述,資料結構(C語言描述)

include include include define datatype int define maxsize 1000 typedef struct nodebitreenode datatype bt maxsize bitreenode buildbtree datatype bt,in...

C語言資料結構考試,C語言資料結構考試

桐疏蘭 c語言是一門程序導向 抽象化的通用程式設計語言,廣泛應用於底層開發。c語言能以簡易的方式編譯 處理低階儲存器。c語言是僅產生少量的機器語言以及不需要任何執行環境支援便能執行的高效率程式設計語言。 這個考題應是c程式設計和資料結構在一起的 咖啡巷 直接選擇排序等幾種排序方法書上是有介紹的。基本...