當前位置:首頁 » 編程語言 » c語言初始化串口
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言初始化串口

發布時間: 2022-01-16 21:51:02

⑴ 單片機串口初始化的程序段。波特率4800. 89c54,晶振11.0592,c語言

void UartInit(void) //[email protected]
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位數據,可變波特率
TMOD &= 0x0f; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = 0xFA; //設定定時初值
TH1 = 0xFA; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
}

⑵ c語言串口通訊過程

要下竄口調試助手的,你是硬體模擬還是軟體模擬啊,硬體的話要版子的,然後用usb接到電腦上,打開竄口調試助手就可以用了

⑶ 如何用c語言編寫向串口發送指令的程序 如0x01

簡單來說就是根據晶元手冊對串口進行驅動
基本過程就是初始化:配置相關寄存器,設置波特率等屬性
編寫發送和接收函數
調用
網上應該有不少你用的型號的常式,可以搜索閱讀

⑷ 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語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。



⑸ 9針的232口初始化程序,C語言的。

這是我自己整理的一個東西。用的是MOXA的API
用這些API,要添加一個api232.dll

PComm 庫函數
PComm 庫函數是台灣MOXA公司提供的,他為用戶提供了基於win32 api的開發介面。 PComm庫函數分為7大類
控制函數、數據輸入函數、數據輸出函數、狀態函數、事件驅動函數、傳輸文件函數、特殊設定函數
上述函數均返回int型數據,若函數調用成功則返回0,否則返回一個負整數。

控制函數主要包括
sio_open(PortNum) 打開串口
sio_close(PortNum) 關閉串口
sio_ioctl(PortNum, baud, mode)設置串口的工作模式,包括 波特率,數據位元,停止位,效驗等
sio_flush(portNum,func)清除發送、接收緩沖區 其中func 為0清空輸入 ,為1清空輸出,為2清空輸入輸出
sio_SetWriteTimeouts(int port,DWORD TotalTimeouts):設置串口寫操作的超時。
sio_lctrl(Portnum,mode) 設置串口RTS/DTS。 待定

數據輸入函數主要包括
sio_getch(PortNum) 從輸入緩沖區讀一個字元
sio_read(PortNum,buf,len) 從輸入緩沖區讀指定個數的字元
sio_iqueue(Portnum)讀取輸入緩沖區中的字元長度

數據輸出函數主要包括
sio_putch(PortNum) 寫一個字元到輸出緩沖區
sio_write(PortNum,buf,len)寫指定個數的字元到輸出緩沖區

狀態函數主要包括
sio_lstatus(portNum)獲取串口的CTS,DSR,DCD,RI線的狀態
sio_getbaud(portNum)獲取串口的波特率
sio_getmode(portNum)獲取串口的工作模式。對應sio_ioct函數

事件函數主要包括
sio_term_irq(portNum,func,code) 當接收到指定字元時響應事件,func為回調函數名,code為指定的字元
sio_cnt_irq(PortNum,func,count) 當接收到指定個數字元時響應事件,func為回調函數名,count接收的個數

傳輸文件函數主要包括
sio_FtASCIITx(portNum,fname,func,key)發送一個文本文件
sio_FtASCIIRx(portNum,fname,func,Key,sec)接收一個文本文件

int i,Ret,DataLen;
FILE *fp1;
uchar RetDataC[30],WriteData[24],PSC[5];
Ret = sio_open(port);
if (Ret != SIO_OK )
return(-1);//打開串口錯誤
Ret = sio_ioctl (port, B9600, P_NONE | BIT_8 | STOP_1 );
if (Ret != SIO_OK) {
sio_close(port);
return(-2);//設置串口參數失敗
}
/*Ret = sio_lctrl (port, C_DTR | C_RTS );
if (Ret != SIO_OK) {
sio_close(port);
return(-2);//設置串口參數失敗
}*/
/*Ret = sio_flush(port,2);
if (Ret != SIO_OK){
sio_close(port);
return(-3);//清空 輸入和輸出緩沖區的數據
}*/

⑹ c語言怎麼實現串口通信

編程原理
程序1為查詢通信方式介面程序,為一典型的數據採集常式。其中bioscom()函數初始化COM1(此函數實際調用BIOS
INT
14H中斷0號功能)。這樣在程序中就避免了具體設置波特率因子等繁瑣工作,只需直接訪問發送/接收寄存器(3F8H)和線路狀態寄存

⑺ windows下C語言怎麼對串口進行讀寫操作

windows下對串口的操作可以通過WindowsAPI進行,也可以通過Linux下的read什麼的直接操作,但是這種情況需要了解電路結構,比較麻煩,第三種有第三方提供的庫,但是大多數針對C++,所以可能比較難找到順手的第三方庫.
那麼,接下來就見要介紹一下串口通信用WindowsAPI通信的方式.

我們會發現,在文件名的位置填上"comX" X表示com口號,超過十的com口號需要另外的書寫方式,這里不說了,因為網上一抓一大把,接下來,我們要對串口進行一系列的明確設置,這里就用到了一個結構體DCB結構,是專門用來描述一個com口的工作方式的,由於次結構體有28個成員,非常多,而且大部分的設置都是全世界通用的,所以,我們偷個懶,在打開一個com口之後,建立DCB結構體,接下來調用一個函數GetCommState用這個函數把現在com口的數據都寫到DCB里,這樣,比較通用的com口設置就已經弄好了,我們一般情況下只需要改一下DCB的波特率就好了,改好後馬上用SetCommState把剛改好的結構體再寫回去,這樣串口就設置好了,現在還有點麻煩,串口設置好了,我們要它干什麼呢?廢話,讀寫數據唄,嘟~~~~~~可不能用fwrite和fread因為這個com口句柄不是文件句柄,是內核句柄,要用ReadFile和WriteFile來進行讀寫,又出麻煩了,我們怎麼知道單片機什麼時候發數據過來,就算我們知道,計算機什麼時候知道啊?所以,一般的情況下,用ReadFile一直在哪檢查,又是麻煩,通常情況下,一個com口的ReadFile設置是阻塞函數,影響編程啊!!!!!!

怎麼辦,很簡單,你不阻塞嗎,打通你唄,我們再建立里一個結構體COMMTIMEOUTS這個結構體描述里一個com口的相關超時設置,我們用GetCommTimeouts把數據讀回來,具體的設置方法在網上也有,但是要注意,有一個MAXDWORD用它來設置讀間隔超時設置就可以使ReadFile向kbhit()函數一樣完全非阻塞了.
經過一些列的設置,事實上,現在已經可以通信了,要是有人覺得緩存不舒服,用SetupComm函數來重設緩存大小,對於傳輸速度比較快的通信,要把緩存設置的大些.

⑻ 一道51單片機的C語言程序,關於串口通訊的,很簡單......

#include<reg52.h> //增強型52寄存器的定義
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定義變數flag,a,i
uchar code table[]="I receive,thanks"; //定義一個字元串數組

void init()
{
} //設置工作方式,這個懂。

void main()
{
init(); //系統初始化,你懂的
while(1) //主循環部分,一直運行
{
if(flag==1) //等待flag標志位置位,當接收到數據的時候在串口接收中斷中置位
{
ES=0; //禁止串口中斷,但是注意發送中斷標志位的置位仍然正常
for(i=0;i<18;i++) //for循環為了一個個把之前定義的字元串
{
SBUF=table[i]; //向串口收發緩沖器中寫入回應的內容「I receive,thanks」
while(!TI); //等待發送完成,發送中斷標志被置一,否則while循環一直進行
TI=0; //清除發送中斷標志位
}
SBUF=a; //繼續通過串口向串口收發緩沖器發送a,回顯收到的數據
while(!TI); //等待發送完成
TI=0; //清除發送中斷標志位
ES=1; //重新使能串口中斷
flag=0; //清除flag,為了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中斷服務程序,優先順序為4
{
RI=0; //當接收完成之後RI被置一,發生串口中斷,清標志位
a=SBUF; //讀取收到的字元,並賦給變數a
flag=1; //置接收完成標志flag為一,便於主程序中發送響應
}

⑼ C語言串口問題

串口要接收/發送數據,必須初始化。初始化的數據要與你的代碼能夠配合起來,一般情況下串口動作快,而你的代碼動作慢或同速就可以,反過來則不行,會出現重疊出錯。你用了串口大師就是給串口初始化了……