導航:首頁 > 操作系統 > 單片機串口流程圖

單片機串口流程圖

發布時間:2022-08-27 23:08:41

單片機串口中斷執行流程

流程是:(主程序中)發送數據―等待中斷―發送成功產生中斷―進入中斷清除TL,再次發送―中斷返回―等待中斷―發送成功產生中斷―進入中斷清除TL,再次發送。。。。循環而已。

⑵ 我想問下關於單片機與單片機之間串口通信的電路圖

1、最簡單的話,如果距離不是太遠,直接兩個單片機的RXD和TXD交叉相連就行了。

2、如果距離遠一點,用串口也行,你可以查一下RS232電路,TTL轉RS232電平。

⑶ 單片機串口通信步進電機控製程序流程

一樓的說的有道理啊,還是得靠自己的
給你個類似的你參考一下吧!我也不會的
實驗實現的功能主要是:用PC上的一個軟體通過串口通訊控制單片機I/O口的輸出。本次實驗主要涉及PC端上位機的程序編寫(用VC)與單片機程序的編寫(用Keil)。為了簡化實驗,PC端軟體設計成具有8個按鈕的對話框,每個按鈕分別控制單片機P2口的一個引腳的高低電平。為了體現直觀的結果,P2口上接上8個發光二極體。

PC與單片機的通訊協議如下:採用4800波特率,無校驗位,8個數據位,1個停止位,一次傳輸一個控制位元組。

一、上位機軟體的編寫

本來控制單片機只需單向傳輸數據即可,為了熟悉PC端接受數據的功能,在應用軟體將控制數據傳輸到單片機端後,單片機端回傳數據給應用軟體,並用16進制格式顯示在編輯控制項中。

VC實現對串口的控制主要有兩種方式:mscomm控制項與api函數。由於mscomm控制項實現簡單,本實驗採用該方式。

1. 在VC中創建一個基於對話框的應用程序,在該程序中插入Mscomm控制項。修改對話框資源,增加Mscomm及8個按鈕控制項與一個編輯框。並為Mscomm控制項增加一個控制項變數m-com。

2. 在對話框的OnInitDialog()函數中初始化串口,代碼如下:

if(m_com.GetPortOpen())

m_com.SetPortOpen(FALSE);

m_com.SetCommPort(1);//選擇com1

if(!m_com.GetPortOpen())

m_com.SetPortOpen(TRUE);//打開串口

else

MessageBox("無法打開串口!");

m_com.SetSettings("4800,n,8,1");//波特率4800,無校驗,8個數據位,1個停止位

m_com.SetInputMode(1); //1:表示以二進制方式檢取數據

m_com.SetRThreshold(1);//參數1表示每當串口接收緩沖區中有多於

//或等於1個字元時將引發一個接收數據的OnComm事件

m_com.SetInputLen(0); //設置當前接收區數據長度為0

m_com.GetInput();//先預讀緩沖區以清除殘留數據

3.為每個按鈕添加命令函數。下面為其中一個函數的代碼,其他與此類似。

void CComDlg::OnP20()

{

// TODO: Add your control notification handler code here

Output.Format("%c",0x01);

m_com.SetOutput(COleVariant(Output));

}

4.接受數據時採用Mscomm控制項的響應函數進行對事件的捕捉。處理代碼如下:

void CComDlg::OnComm()

{

// TODO: Add your control notification handler code here

VARIANT Input;

CString temp;

long k,len;

COleSafeArray OleArray;

BYTE rxdata[10];

if (2==m_com.GetCommEvent())

{

Input=m_com.GetInput();

OleArray=Input;

len=OleArray.GetOneDimSize();

for (k=0;k<len;k++)

{

OleArray.GetElement(&k,rxdata+k);

BYTE bt=*(char *)(rxdata+k);

temp.Format("%02X ",bt);

m_recv+=temp;

}

}

UpdateData(FALSE);

}

二、單片機程序的編寫。

單片機程序編寫相對容易,只需進行初始話串口,接受數據,發送數據等工作即可。代碼如下:

#i nclude <reg51.h>

unsigned char inbuf;

unsigned char flag;

//初始化函數

void init_serialcomm(void)

{

SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr,0101000b

TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload,0010000b

PCON |= 0x80; //SMOD=1;10000000b

TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz

IE |= 0x90; //Enable Serial Interrupt

TR1 = 1; // timer 1 run

inbuf=0;

P2=0;

// TI=1;

}

//向串口發送一個字元

void send_char_com(unsigned char ch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

//串口接收中斷函數

void serial () interrupt 4 using 3

{

if(RI)

{

RI = 0;

inbuf=SBUF;

}

flag=1;

}

main()

{

init_serialcomm(); //初始化串口

while(1)

{

if(flag)

{

P2=inbuf;

send_char_com(inbuf);

flag=0;

}

}

}

⑷ 單片機程序流程圖,速求。只要流程圖,不要太復雜,簡單點最好。

1開機初始化
2串口中斷接收
3當串口接收到 + 號 P1最低位 輸出高 延時加5US --關P1最低位
4當串口接收到 - 號 P1最低位 輸出高 延時減5US --關P1最低位
5重復3,4步驟

此處不能畫圖,只能這樣描述

⑸ 51單片機和計算機之間實現串口通信的電路圖

串口通訊參考程序如下:

來源:深入淺出AVR單片機

#include<reg51.h>

unsignedcharUART_RX;//定義串口接收數據變數

unsignedcharRX_flag;//定義穿行接收標記

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

函數名:UART串口初始化函數

調用:UART_init();

參數:無

返回值:無

結果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(佔用)

備註:振盪晶體為12MHz,PC串口端設置[4800,8,無,1,無]

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

voidUART_init(void){

EA=1;//允許總中斷(如不使用中斷,可用//屏蔽)

ES=1;//允許UART串口的中斷

TMOD=0x20;//定時器T/C1工作方式2

SCON=0x50;//串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)

TH1=0xF3;//定時器初值高8位設置

TL1=0xF3;//定時器初值低8位設置

PCON=0x80;//波特率倍頻(屏蔽本句波特率為2400)

TR1=1;//定時器啟動

}

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

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

函數名:UART串口接收中斷處理函數

調用:[SBUF收到數據後中斷處理]

參數:無

返回值:無

結果:UART串口接收到數據時產生中斷,用戶對數據進行處理(並發送回去)

備註:過長的處理程序會影響後面數據的接收

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

voidUART_R(void)interrupt4using1{//切換寄存器組到1

RI=0;//令接收中斷標志位為0(軟體清零)

UART_RX=SBUF;//將接收到的數據送入變數UART_data

RX_flag=1;//標記接收

//用戶函數內容(用戶可使用UART_data做數據處理)

//SBUF=UART_data;//將接收的數據發送回去(刪除//即生效)

//while(TI==0);//檢查發送中斷標志位

//TI=0;//令發送中斷標志位為0(軟體清零)

}

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

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

函數名:UART串口發送函數

調用:UART_T(?);

參數:需要UART串口發送的數據(8位/1位元組)

返回值:無

結果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式

備註:

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

voidUART_T(unsignedcharUART_data){//定義串口發送數據變數

ES=0;//禁止穿行中斷

SBUF=UART_data;//將接收的數據發送回去

while(TI==0);//檢查發送中斷標志位

TI=0;//令發送中斷標志位為0(軟體清零)

ES=1;//打開穿行中斷

}

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

函數名:UART串口發送字元串函數

調用:UART_S(?);

參數:需要UART串口發送的數據(8位/1位元組)

返回值:無

結果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式

備註:

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

voidUART_S(unsignedchar*str)

{

while(1)

{

if(*str=='')break;

UART_T(*str++);

}

}

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

函數名:主函數

調用:main();

參數:

返回值:無

結果:

備註:

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

voidmain()

{

unsignedcharBuf_data[]={"welcometoMCUworld. "};

UART_init();

UART_S(Buf_data);

while(1){

if(RX_flag==1)

{

UART_T(UART_RX);

RX_flag=0;

}

}

}

祝願樓主馬到功成

⑹ 怎樣編寫單片機的串口通信的程序,一般的步驟是怎麼樣

編寫串口通訊程序步驟為:

1、設置波特率

2、設置串口工作方式

3、收發數據。

比如:

main()
{
unsignedchardat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0);
RI=0;
dat=SBUF;
SBUF=~dat;
while(TI==0)
TI=0;
}
}

⑺ 單片機程序,需要程序流程圖

這個程序main()函數都沒有,你還需要什麼樣的程序框圖?就一個初始化加串口中斷程序和發送程序。

閱讀全文

與單片機串口流程圖相關的資料

熱點內容
廣東加密貨幣 瀏覽:214
利用python批量查詢系統 瀏覽:491
什麼app看左右臉 瀏覽:302
台灣小公主s解壓密碼 瀏覽:568
易語言鎖機軟體源碼 瀏覽:156
迅雷下載完成無法解壓 瀏覽:592
硬碟分區命令圖解 瀏覽:445
當前雲伺服器如何關閉 瀏覽:78
mac下python在哪 瀏覽:641
廣東惠州DNS伺服器地址 瀏覽:357
編譯影片時軟體渲染錯誤 瀏覽:625
流星蝴蝶劍解壓失敗 瀏覽:294
如何確認方舟編譯器 瀏覽:664
奶粉源箱源碼什麼意思 瀏覽:178
台州程序員兼職一般去哪些網站 瀏覽:396
舊版本怎麼下載到新的安卓 瀏覽:969
flash個人網站源碼下載 瀏覽:724
javasocketbyte 瀏覽:266
素描基礎教程pdf 瀏覽:542
香港商報pdf版 瀏覽:428