freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]基于vc和單片機(jī)的上下位機(jī)串口通訊系統(tǒng)設(shè)計(jì)-文庫吧

2025-01-03 12:54 本頁面


【正文】 b)保持收發(fā)同步,在數(shù)據(jù)塊之前加上前文,在數(shù)據(jù)之后加上后文——幀(frame)。c)接收端:檢測幀中的前文和后文(特定的標(biāo)志序列)保持與發(fā)送端同步。d)數(shù)據(jù)格式:前文和后文的具體格式視傳輸控制規(guī)程而定,有面向字符與面向比特型兩種方案。e)同步傳輸每次傳送的是一個(gè)完整的數(shù)據(jù)幀,發(fā)送端無需在字符間加入附加位和間隙,因而同步傳輸?shù)男时犬惒絺鬏數(shù)男矢?。但由于收發(fā)雙方需建立準(zhǔn)確的同步關(guān)系,所以實(shí)現(xiàn)起來比較復(fù)雜。通過RS—232,modbus協(xié)議將上下位機(jī)連接起來。下位機(jī)Modbus協(xié)議介紹:Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個(gè)品牌)在1979年發(fā)明的,是全球第一個(gè)真正用于工業(yè)現(xiàn)場的總線協(xié)議。Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。當(dāng)在Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測的方法。Modbus特點(diǎn):(1)標(biāo)準(zhǔn)、開放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會(huì)侵犯知識(shí)產(chǎn)權(quán)。目前,支持Modbus的廠家超過400家,支持Modbus的產(chǎn)品超過600種。(2)Modbus可以支持多種電氣接口,如RS23RS485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。(3)Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡單。Modbus傳輸模式:Modbus中一般使用兩種傳輸模式:RTU模式和ASCII模式。當(dāng)采用ASCII模式通信時(shí),在消息中的每個(gè)字節(jié)都作為2個(gè)ASCII字符傳送。這種格式的優(yōu)點(diǎn)是字符發(fā)送的時(shí)間間隔可達(dá)到1s而不產(chǎn)生錯(cuò)誤,缺點(diǎn)是通信速率較慢。當(dāng)采用RTU模式時(shí),其優(yōu)點(diǎn)是數(shù)據(jù)用二進(jìn)制表示,通信速度較快。: ASCII模式和RTU模式第3章 硬件設(shè)計(jì) 單片機(jī)的選擇本設(shè)計(jì)采用的是AT89C52單片機(jī),AT89C52是一種帶4K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。它是一種高效微控制器,因?yàn)樗?jīng)濟(jì)實(shí)惠,用起來靈活方便,而且習(xí)慣了用這種型號(hào)的單片機(jī),所以選擇AT89C52單片機(jī)。 電平轉(zhuǎn)換器MAX232本設(shè)計(jì)采用MAX232芯片進(jìn)行電平轉(zhuǎn)換,MAX232芯片是美信公司專門為電腦的RS232標(biāo)準(zhǔn)串口設(shè)計(jì)的接口電路,使用+5V單電源供電,它的作用就是完成TTL電平與RS232電平的轉(zhuǎn)換。PC機(jī)的串行口采用的是標(biāo)準(zhǔn)的RS 232接口,單片機(jī)的串行口電平是FTL電平,而TTL電平特性與RS 232的電氣特性不匹配,因此為了使單片機(jī)的串行口能與RS 232接口通信,必須將串行口的輸入/輸出電平進(jìn)行轉(zhuǎn)換。通常用MAX232芯片來完成電平轉(zhuǎn)換。 74LS164LED驅(qū)動(dòng)芯片74LS164是常用的芯片,用來驅(qū)動(dòng)led或者其他的設(shè)備,它是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。當(dāng)80C52單片機(jī)的P0口總線負(fù)載達(dá)到或超過P0最大負(fù)載能力時(shí),必須接入74LS164等總線驅(qū)動(dòng)器。當(dāng)片選端低電平有效時(shí),DIR=“0”,信號(hào)由B向A傳輸;DIR=“1”,信號(hào)由A向B傳輸;當(dāng)為高電平時(shí),A、B均為高阻態(tài)。 74ls164原理圖 LED顯示器 LED顯示器工作原理LED顯示是用發(fā)光二極管顯示字段的顯示器件,也稱數(shù)碼管,由圖可知它由8個(gè)發(fā)光二極管構(gòu)成,通過不同的組合可用來顯示0AF及小數(shù)點(diǎn)。 數(shù)碼管原理圖LED顯示器一般分為共陰極和共陽極兩種,共陰極是將8個(gè)發(fā)光二極管的陰極連接在一起作為公共端,而共陽極則是將8個(gè)發(fā)光二極管的陽極連在一起作為公共端[8]。 LED顯示器接口在單片機(jī)系統(tǒng)中,LED顯示接口一般采用靜態(tài)驅(qū)動(dòng)和動(dòng)態(tài)掃描兩種驅(qū)動(dòng)方式。靜態(tài)驅(qū)動(dòng)方式工作原理是每一個(gè)LED顯示器有一個(gè)I/O端口驅(qū)動(dòng),亮度大,占用I/O端口多,顯示位數(shù)多時(shí)很少采用;動(dòng)態(tài)掃描驅(qū)動(dòng)方式的工作原理是將多個(gè)顯示器的段碼同名端連接在一起,位碼分別控制,利用眼睛的余暉暫留效應(yīng),分別顯示。動(dòng)態(tài)掃描驅(qū)動(dòng)方式下,只要保證一定的顯示頻率,看起來的效果和一直顯示是一樣的。第4章 軟件設(shè)計(jì)軟件設(shè)計(jì)主要分為兩大部分:上位機(jī)部分和下位機(jī)部分。上位使用面向?qū)ο蟮腃++語言寫成,下位機(jī)用面向過程的C語言寫成。本設(shè)計(jì)采用VC來實(shí)現(xiàn)編程,上位機(jī)與單片機(jī)進(jìn)行通信的程序編寫可用VB、VC等軟件。由于VB作為面向?qū)ο蟮木幊坦ぞ卟粔蛲耆时萔C低,提供的命令語言環(huán)境較弱,通過串口設(shè)備一次最多只能交換16B的數(shù)據(jù),對(duì)較大數(shù)據(jù)量的傳輸存在很大的局限性,很難實(shí)現(xiàn)較為復(fù)雜的數(shù)據(jù)處理,VC是一種功能強(qiáng)大的面向?qū)ο蟮腤indows編程開發(fā)平臺(tái)。VS2008的優(yōu)點(diǎn)是界面簡潔,占用資源少,操作方便。所以本設(shè)計(jì)采用VC作為串口編程工具。 上位機(jī)控制流程圖上位機(jī)程序界面圖示: 上位機(jī)控制程序界面圖串口參數(shù)設(shè)定菜單實(shí)現(xiàn)程序: 串口參數(shù)設(shè)定菜單串口參數(shù)設(shè)置代碼實(shí)現(xiàn): 由于要設(shè)置的串口參數(shù)較多,所以設(shè)計(jì)為在彈出的對(duì)話框中完成對(duì)串口參數(shù)的設(shè)置: 串口參數(shù)設(shè)置對(duì)話框當(dāng)在串口參數(shù)設(shè)置菜單選項(xiàng)鼠標(biāo)左擊后,程序?qū)l(fā)出一條處理命令的消息。添加相應(yīng)的事件處理程序可以用事件處理程序向?qū)А?用事件處理向?qū)砑邮录幚沓绦驅(qū)⑹录幚硐驅(qū)С绦蛱砑拥南㈨憫?yīng)函數(shù)添加在CUpperComView這個(gè)類中,當(dāng)鼠標(biāo)左擊后發(fā)出系統(tǒng)命令,這樣便在CUpperComView這個(gè)類中調(diào)用OnSetCommDlg這個(gè)成員函數(shù)。 OnSetCommDlg成員函數(shù)的實(shí)現(xiàn)代碼如下:void CUpperComView::OnSetCommDlg(){ // TODO: 在此添加命令處理程序代碼 //m_ComName = 。 if( IDOK == () ) { m_ComName = +1。 if( 0 == ) { m_ParityBit=E。 } else { if( 1 == ) { m_ParityBit=O。 } else { m_ParityBit=N。 } } if( 0 == ) { m_BaudRate=4800。 } else { if( 1 == ) { m_BaudRate=9600。 } else { m_BaudRate=19200。 } } if( 0 == ) { m_StopBit=1。 } else { m_StopBit=2。 } if( 0 == ) { m_DataBit=7。 } else { m_DataBit=8。 } } m_ComVal = m_BaudRate +,+m_ParityBit +, + m_DataBit + , + m_StopBit。}同樣打開和關(guān)閉串口的源程序如下所示:串口打開程序?qū)崿F(xiàn)函數(shù):void CUpperComView::OnMenuOpenCom(){ // TODO: 在此添加命令處理程序代碼 if(()) //如果發(fā)現(xiàn)串口本來是打開的,則關(guān)閉串口 (FALSE)。 (m_ComName)。 //選擇COM3端口 (1)。 //輸入方式為二進(jìn)制方式 (1024)。 //設(shè)置輸入緩沖區(qū) (512)。 //設(shè)置輸出緩沖區(qū) (m_ComVal)。//波特率,無校驗(yàn),數(shù)據(jù)位,停止位 if(!()) { (TRUE)。 //打開串口 (1)。 //每當(dāng)接收緩沖區(qū)有個(gè)字符則接收串口數(shù)據(jù) (0)。 //設(shè)置當(dāng)前緩沖區(qū)長度為 ()。 //預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù) AfxMessageBox(_T(串口打開成功!))。 } else AfxMessageBox(_T(打開端口失敗!),MB_ICONSTOP,0)。}串口關(guān)閉程序?qū)崿F(xiàn)函數(shù):void CUpperComView::OnCloseCom(){ // TODO: 在此添加命令處理程序代碼 if(()) //如果發(fā)現(xiàn)串口本來是打開的,則關(guān)閉串口 (FALSE)。}PID參數(shù)設(shè)置: 上位機(jī)的PID參數(shù)設(shè)置是在客戶區(qū)內(nèi)的視圖完成的,主要由3個(gè)文本框和一個(gè)確定按鈕實(shí)現(xiàn)的。當(dāng)在PID參數(shù)設(shè)置框內(nèi)輸入響應(yīng)的參數(shù)后,點(diǎn)擊確定按鈕,便可以將PID參數(shù)下傳這下位機(jī)。: PID參數(shù)設(shè)定區(qū)PID參數(shù)設(shè)定,及參數(shù)打包發(fā)送,清除上次數(shù)據(jù)確定功能的實(shí)現(xiàn):void CUpperComView::OnBnClickedEnterPid(){ // TODO: 在此添加控件通知處理程序代碼 UpdateData(true)。 //讀取編輯框內(nèi)容 CString tempPID。 tempPID = m_strP +m_strI+ m_strD。 AfxMessageBox(tempPID,MB_ICONSTOP,0)。 (COleVariant(tempPID))。//發(fā)送數(shù)據(jù) ()。 //發(fā)送后清空輸入框 ()。 ()。 UpdateData(false)。 //更新編輯框內(nèi)容 AfxMessageBox(m_ComVal,MB_ICONSTOP,0)。 AfxMessageBox(m_temDat)。} 上位機(jī)程序具有手動(dòng)控制的功能,當(dāng)需要手動(dòng)控制的時(shí)候可以進(jìn)行手動(dòng)和自動(dòng)方式的切換。手動(dòng)和自動(dòng)的切換以及退出按鈕一并在功能按鍵區(qū)實(shí)現(xiàn)。當(dāng)手動(dòng)按鈕按下的時(shí)候,閥門的開度的滑動(dòng)條使能,而PID參數(shù)設(shè)定區(qū)的確認(rèn)按鈕禁用,這樣可以避免手動(dòng)和自動(dòng)調(diào)節(jié)時(shí)的誤操作。 功能鍵區(qū)手動(dòng)按鍵功能函數(shù)實(shí)現(xiàn):void CUpperComView::OnBnClickedButtonMan(){ // TODO: 在此添加控件通知處理程序代碼 GetDlgItem(IDC_SLIDER)EnableWindow(TRUE)。 GetDlgItem(IDC_ENTER_PID)EnableWindow(FALSE)。}自動(dòng)按鍵功能函數(shù)實(shí)現(xiàn):void CUpperComView::OnBnClickedButtonAuto(){ // TODO: 在此添加控件通知處理程序代碼 GetDlgItem(IDC_SLIDER)EnableWindow(FALSE)。 GetDlgItem(IDC_ENTER_PID)EnableWindow(TRUE)。}退出按鍵功能函數(shù)實(shí)現(xiàn):void CUpperComView::OnBnClickedButtonQuit(){ // TODO: 在此添加控件通知處理程序代碼 if( MessageBox(_T(確認(rèn)您要退出?),_T(退出),MB_OKCANCEL|MB_ICONQUESTION) == TRUE) { PostQuitMessage(0)。 }} 手動(dòng)控制的方式是通過滑動(dòng)條的方式去實(shí)現(xiàn)閥門開度的控制的。閥門開度的范圍為0%到100%。同樣閥門開度的控制將由上位機(jī)通過串口發(fā)送到下位機(jī)。由下位機(jī)接收到對(duì)應(yīng)開度的控制信息后進(jìn)行相應(yīng)的控制。 所示: 閥門開度設(shè)置滑動(dòng)條閥門開度設(shè)置滾動(dòng)條實(shí)現(xiàn)代碼:void CUpperComView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 TCHAR szOutput[128] = {0}。 _stprintf(szOutput,_T(當(dāng)前開度:%d%%),())。 SetDlgItemText(IDC_STATICOUTPUT,szOutput)。 (COleVariant(szOutput))。//發(fā)送數(shù)據(jù) CFormView::OnHScroll(nSBCode, nPos, pScrollBar)。} 下位機(jī)編程方案選擇本設(shè)計(jì)單片機(jī)的編程選擇C語言編寫,因?yàn)樗啙嵕o湊、靈活方便、運(yùn)算符豐富、數(shù)據(jù)結(jié)構(gòu)豐富、C是結(jié)構(gòu)式語言、C語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大、C語言允許直接訪問物理地址,可以直接對(duì)硬件進(jìn)行操作、C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高,一般只比匯編程序生成的目標(biāo)代碼效率低10へ20%、C語言適用范圍大,可移植性好C語言有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng), 如DOS、UNIX,也適用于多種機(jī)型。C語言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫它是數(shù)值計(jì)算的高級(jí)語言。所以我選用C語言來編寫此程序。:: 串口發(fā)送程序流程圖如串口接收,參數(shù)設(shè)置及發(fā)送程序?qū)崿F(xiàn)如下:includeinclude define uchar unsigned chardefine uint unsigned intuchar Sign
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1