版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
39/44專業(yè)綜合課程設(shè)計(jì)任務(wù)書學(xué)生姓名:專業(yè)班級(jí):指導(dǎo)教師:工作單位:題目:基于PC機(jī)Windows環(huán)境下數(shù)據(jù)通信、處理及存儲(chǔ)程序設(shè)計(jì)與實(shí)現(xiàn)。初始條件:提供實(shí)驗(yàn)室機(jī)房及安裝Windows系統(tǒng)的PC機(jī);數(shù)據(jù)通信的差不多理論學(xué)習(xí)。要求完成的要緊任務(wù):(包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及講明書撰寫等具體要求):(1)在PC機(jī)Windows環(huán)境下設(shè)計(jì)出一款集數(shù)據(jù)發(fā)送、接收處理及存儲(chǔ)程序;(2)通信接口為RS-232,USB,網(wǎng)卡任意一款;(3)通信的數(shù)據(jù)流自定,處理操作自定;(4)接收的數(shù)據(jù)以文件的形式存在硬盤上;(5)對(duì)結(jié)果進(jìn)行分析;(6)要求閱讀相關(guān)參考文獻(xiàn)許多于5篇;(7)依照課程設(shè)計(jì)有關(guān)規(guī)范,按時(shí)、獨(dú)立完成課程設(shè)計(jì)講明書。時(shí)刻安排:(1)布置課程設(shè)計(jì)任務(wù),查閱資料,確定方案四天;(2)進(jìn)行編程設(shè)計(jì)一周;(3)完成課程設(shè)計(jì)報(bào)告書三天;指導(dǎo)教師簽名:年月日系主任(或責(zé)任教師)簽名:年月日
目錄摘要 I1Proteus軟件簡(jiǎn)介 12VisualBasic6.0簡(jiǎn)介 23串口通信原理 33.1串行通信定義 33.2串行通信的異步通信 43.3波特率 43.4串行接口的差不多特點(diǎn) 53.4.1串行端口工作方式 54單片機(jī)與PC機(jī)通信 84.1AT89C51單片機(jī)上對(duì)應(yīng)端口介紹 84.3單片機(jī)通信代碼 94.4仿真電路圖 115VB設(shè)計(jì)PC機(jī) 125.1界面設(shè)計(jì) 125.2VB設(shè)計(jì)的窗體 125.3VB代碼 126串口通信結(jié)果及其分析 226.1通信結(jié)果 226.2結(jié)果分析 247實(shí)物圖 258心得體會(huì) 26參考文獻(xiàn) 27摘要為了實(shí)現(xiàn)本次課設(shè)的要求,完成基于PC機(jī)Windows環(huán)境下數(shù)據(jù)通信、處理及存儲(chǔ)程序設(shè)計(jì)與實(shí)現(xiàn)。我們采納VisualBasic6.0軟件設(shè)計(jì)和Proteus單片機(jī)串口仿真來完成課程設(shè)計(jì)的要求。我們選取的是通信接口為RS-232,利用單片機(jī)與PC機(jī)的之間相互通信來實(shí)現(xiàn)課設(shè)要求,VisualBasic軟件要緊用于設(shè)計(jì)代表PC機(jī)的窗體,實(shí)現(xiàn)PC機(jī)進(jìn)行串口通信的差不多功能;Proteus軟件仿確實(shí)單片機(jī)用于模擬單片機(jī),完成與PC機(jī)的通信。本次課設(shè)除了要用到VB和Proteus軟件外,還需使用KEIL軟件生成適用于51單片機(jī)的.HEX文件,以及用到VirtualSerialPortDriver軟件來對(duì)PC機(jī)和單片機(jī)之間串口進(jìn)行連接,使用VSPD軟件來設(shè)置連接串口的時(shí)候我將單片機(jī)設(shè)為COM3,PC機(jī)設(shè)為COM1。關(guān)鍵字:RS-232,串口通信,Proteus,VisualBasic6.01Proteus軟件簡(jiǎn)介Proteus是世界上聞名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。Proteus軟件具有其它EDA工具軟件(例:multisim)的功能。這些功能是:1.原理布圖2.PCB自動(dòng)或人工布線3.SPICE電路仿真4.互動(dòng)的電路仿真5.仿真處理器及其外圍電路Proteus擁有豐富的資源,它體現(xiàn)在:1.Proteus可提供的仿真元器件資源:仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個(gè)元件庫。2.Proteus可提供的仿真儀表資源:示波器、邏輯分析儀、虛擬終端、SPI調(diào)試器、I2C調(diào)試器、信號(hào)發(fā)生器、模式發(fā)生器、交直流電壓表、交直流電流表。理論上同一種儀器能夠在一個(gè)電路中隨意的調(diào)用。3.除了現(xiàn)實(shí)存在的儀器外,Proteus還提供了一個(gè)圖形顯示功能,能夠?qū)⒕€路上變化的信號(hào),以圖形的方式實(shí)時(shí)地顯示出來,其作用與示波器相似,但功能更多。這些虛擬儀器儀表具有理想的參數(shù)指標(biāo),例如極高的輸入阻抗、極低的輸出阻抗。這些都盡可能減少了儀器對(duì)測(cè)量結(jié)果的阻礙。4.Proteus可提供的調(diào)試手段Proteus提供了比較豐富的測(cè)試信號(hào)用于電路的測(cè)試。這些測(cè)試信號(hào)包括模擬信號(hào)和數(shù)字信號(hào)。Proteus不僅可將許多單片機(jī)實(shí)例功能形象化,也可將許多單片機(jī)實(shí)例運(yùn)行過程形象化。前者可在相當(dāng)程度上得到實(shí)物演示實(shí)驗(yàn)的效果,后者則是實(shí)物演示實(shí)驗(yàn)難以達(dá)到的效果。課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)是學(xué)生走向就業(yè)的重要實(shí)踐環(huán)節(jié)。由于PROTEUS提供了實(shí)驗(yàn)室無法相比的大量的元器件庫,提供了修改電路設(shè)計(jì)的靈活性、提供了實(shí)驗(yàn)室在數(shù)量、質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實(shí)踐精神、制造精神的平臺(tái)隨著科技的進(jìn)展,“計(jì)算機(jī)仿真技術(shù)”已成為許多設(shè)計(jì)部門重要的前期設(shè)計(jì)手段。它具有設(shè)計(jì)靈活,結(jié)果、過程的統(tǒng)一的特點(diǎn)??墒乖O(shè)計(jì)時(shí)刻大為縮短、耗資大為減少,也可降低工程制造的風(fēng)險(xiǎn)。相信在單片機(jī)開發(fā)應(yīng)用中PROTEUS也能茯得愈來愈廣泛的應(yīng)用。2VisualBasic6.0簡(jiǎn)介VisualBasic(VB)是由\o"微軟"微軟公司開發(fā)的包含\o"協(xié)助開發(fā)環(huán)境(頁面不存在)"協(xié)助開發(fā)環(huán)境的\o"事件驅(qū)動(dòng)"事件驅(qū)動(dòng)編程語言。它源自于\o"BASIC"BASIC編程語言。VB擁有\(zhòng)o"圖形用戶界面"圖形用戶界面(\o"GUI"GUI)\o"快速應(yīng)用程序開發(fā)"快速應(yīng)用程序開發(fā)(\o"RAD"RAD)系統(tǒng),能夠輕易的使用\o"DAO(頁面不存在)"DAO、\o"RDO(頁面不存在)"RDO、\o"ADO"ADO連接\o"數(shù)據(jù)庫"數(shù)據(jù)庫,或者輕松的創(chuàng)建\o"ActiveX"ActiveX控件。程序員能夠輕松的使用VB提供的組件快速創(chuàng)建一個(gè)\o"應(yīng)用程序"應(yīng)用程序。VB的中心思想確實(shí)是要便于\o"程序員"程序員使用,不管是新手或者專家。VB使用了能夠簡(jiǎn)單創(chuàng)建應(yīng)用程序的\o"GUI"GUI系統(tǒng),然而又能夠開發(fā)相當(dāng)復(fù)雜的程序。VB的程序是一種基于\o"窗體(頁面不存在)"窗體的可視化組件安排的聯(lián)合,同時(shí)增加代碼來指定組建的屬性和方法。因?yàn)槟J(rèn)的屬性和方法差不多有一部分定義在了組件內(nèi),因此程序員不用寫多少代碼就能夠完成一個(gè)簡(jiǎn)單的程序。過去的版本里面VB程序的性能問題一直被放在了桌面上,然而隨著\o"計(jì)算機(jī)"計(jì)算機(jī)速度的飛速增加,關(guān)于性能的爭(zhēng)論差不多越來越少。窗體控件的增加和改變能夠用\o"拖放"拖放技術(shù)實(shí)現(xiàn)。一個(gè)排列滿控件的工具箱用來顯示可用控件(比如文本框或者按鈕)。每個(gè)控件都有自己的\o"屬性(頁面不存在)"屬性和\o"事件"事件。默認(rèn)的屬性值會(huì)在控件創(chuàng)建的時(shí)候提供,然而程序員也能夠進(jìn)行更改。專門多的屬性值能夠在運(yùn)行時(shí)候隨著用戶的動(dòng)作和修改進(jìn)行改動(dòng),如此就形成了一個(gè)動(dòng)態(tài)的程序。舉個(gè)例子來講:窗體的大小改變事件中加入了能夠改變控件位置的代碼,在運(yùn)行時(shí)候每當(dāng)用戶更改窗口大小,控件也會(huì)隨之改變位置。在文本框中的文字改變事件中加入相應(yīng)的代碼,程序就能夠在文字輸入的時(shí)候自動(dòng)翻譯或者阻止某些字符的輸入。VB的程序能夠包含一個(gè)或多個(gè)窗體,或者是一個(gè)主窗體和多個(gè)子窗體,類似于\o"操作系統(tǒng)"操作系統(tǒng)的模樣。有專門少功能的對(duì)話框\o"窗口"窗口(比如沒有\(zhòng)o"最大化(頁面不存在)"最大化和\o"最小化(頁面不存在)"最小化按鈕的窗體)能夠用來提供彈出功能。VB的組件既能夠擁有用戶界面,也能夠沒有。如此一來\o"服務(wù)器"服務(wù)器端程序就能夠處理增加的\o"模塊"模塊。VB使用\o"引用計(jì)數(shù)"引用計(jì)數(shù)的方法來進(jìn)行垃圾收集,那個(gè)方法中包含有大量的對(duì)象,提供差不多的\o"面向?qū)ο蟮某绦蛟O(shè)計(jì)"面向?qū)ο笾С?。因?yàn)樵絹碓蕉嘟M建的出現(xiàn),程序員能夠選用自己需要的擴(kuò)展庫。和有些語言不一樣,VB對(duì)大小寫不敏感,然而能自動(dòng)轉(zhuǎn)換關(guān)鍵詞到標(biāo)準(zhǔn)的大小寫狀態(tài),以及強(qiáng)制使得符號(hào)表入口的實(shí)體的變量名稱遵循書寫規(guī)則。默認(rèn)情況下字符串的比較是對(duì)大小寫敏感的,然而能夠關(guān)閉那個(gè)功能。VB使得大量的外界控件有了自己的生存空間。大量的第三方控件針對(duì)VB提供。VB也提供了創(chuàng)建、使用和重用這些控件的方法,然而由于語言問題,從一個(gè)應(yīng)用程序創(chuàng)建另外一個(gè)并不簡(jiǎn)單。3串口通信原理3.1串行通信定義串口是計(jì)算機(jī)上一種特不通用設(shè)備通信的協(xié)議。大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS-232的串口。串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議;專門多GPIB兼容的設(shè)備也帶有RS-232口。同時(shí),串口通信協(xié)議也能夠用于獵取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。3.2串行通信的異步通信字符幀也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位等四部分組成。在串行通信中,發(fā)送端一幀一幀發(fā)送信息,接收端一幀一幀接收信息。兩相鄰字符幀之間能夠無空閑位,也能夠由若干空閑位,自行定義。串行通信的數(shù)據(jù)或者字符是一幀一幀地傳送,在異步通信中,一幀數(shù)據(jù)先用一個(gè)起始位“0”表示字符的開始,然后是5~8位上數(shù)據(jù),即該字符的代碼,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位,最后一個(gè)停止位“1”表示字符的結(jié)束。下面是異步通信一幀數(shù)據(jù)為10位的幀格式見圖3-1。圖3-1字符幀格式圖3.3波特率波特率是通信中對(duì)數(shù)據(jù)傳送速率的要求。在計(jì)算機(jī)通信中,其意義是每秒鐘傳送多少位二進(jìn)制數(shù)。假如異步傳送速率為每秒120個(gè)字符,每個(gè)字符有1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位組成,則其傳送波特率為QUOTE10×120=1200bps=1200波特傳送一位所需要的時(shí)刻為波特率的倒數(shù),即QUOTETd=11200=0.833ms在串行傳輸中,二進(jìn)制數(shù)據(jù)序列是以數(shù)字波形出現(xiàn)的,發(fā)送時(shí)在發(fā)送時(shí)鐘下將通信線上傳來的數(shù)據(jù)串行移入移位寄存器,因此,發(fā)送時(shí)鐘和同意時(shí)鐘也可作移位時(shí)鐘。能產(chǎn)生該時(shí)鐘的電路稱為波特率發(fā)生器。為提高采樣的分辨率,準(zhǔn)確地測(cè)定數(shù)據(jù)位的上升沿或下降沿,時(shí)鐘頻率總是高于波特率的若干倍,那個(gè)倍數(shù)稱為波特率因子。在單片機(jī)中,發(fā)送和接收時(shí)鐘能夠由系統(tǒng)時(shí)鐘fQUOTEfoscoscQUOTEfosc產(chǎn)生,其波特率因子為12,32,64.假如波特率由fQUOTEfoscosc決定稱為固定波特率方式。也能夠由單片機(jī)的內(nèi)部定時(shí)器T1產(chǎn)生,它工作于自動(dòng)重裝8位定時(shí)方式,由于定時(shí)器的計(jì)數(shù)初值能夠人為的改變,T1產(chǎn)生的時(shí)鐘頻率就能夠改變,稱為可變波特率方式。3.4串行接口的差不多特點(diǎn)3.4.1串行端口工作方式MCS-51\o"確實(shí)是一個(gè)微型的電腦,麻雀雖小,五臟俱全"單片機(jī)的串行端口有4種差不多工作方式,通過編程設(shè)置,能夠使其工作在任一方式,以滿足不同場(chǎng)合的需要。其中,方式0要緊用于外接移位寄存器,以擴(kuò)展單片機(jī)的I/O\o"電流流過的路叫做電路"電路;工作方式1多用于雙機(jī)之間或與外設(shè)電路的通信;方式2、3除有方式1的功能外,還能夠作多機(jī)通信,以構(gòu)成分布式多微機(jī)系統(tǒng)。串行端口有兩個(gè)操縱寄存器SCON、PCON,用于設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送波特率[每秒傳送的位數(shù)]以及作為中斷標(biāo)志等。串行端口有一個(gè)數(shù)據(jù)寄存器SBUF[在專門功能寄存器中的字節(jié)地址為99H,該寄存器為發(fā)送和接收所共用。串行端口的波特率能夠用程序來操縱。在不同工作方式中,由時(shí)鐘振蕩\o"頻率"頻率的分頻值或由定時(shí)器T1的定時(shí)溢出時(shí)刻確定,使用十分方便靈活。
串口操縱寄存器:輸入:在QUOTEREN=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時(shí),確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。只有當(dāng)8位數(shù)據(jù)接收完,并檢測(cè)到高\(yùn)o"電平"電平停止位后,只有滿足①Q(mào)UOTER1=0;②或接收到的第9位數(shù)據(jù)為1時(shí),停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。因此在方式1接收時(shí),應(yīng)先用軟件清零RI和SM2標(biāo)志。1.方式2方式2為固定波特率的11位UART方式。它比方式1增加了一位可程控為1或0的第9位數(shù)據(jù)。輸出:發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中地址/數(shù)據(jù)信息的標(biāo)志位,也能夠作為數(shù)據(jù)的奇偶校驗(yàn)位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令且QUOTETI=0時(shí),就啟動(dòng)發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。輸入:在QUOTEREN=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時(shí),確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)滿足①Q(mào)UOTER1=0;②QUOTESM2=0或接收到的第9位數(shù)據(jù)為1時(shí),第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。且不置位RI。2.工作方式3方式3為波特率可變的11位UART方式。除波特率外,其余與方式2相同。
波特率的選擇
如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在MCS-51串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時(shí)器T1的溢出率操縱。1.方式O方式0的波特率固定為主振\o"頻率"頻率
的QUOTE1/12。2.方式2方式2的波特率由PCON中的選擇位SMOD來決定,可表示為:QUOTE波特率=2sMOD×fosc/64也確實(shí)是當(dāng)QUOTESMOD=1時(shí),波特率為QUOTE1/32×fosc,當(dāng)QUOTESMOD=0時(shí),波特率為QUOTE1/64×fosc。3.方式1和方式3定時(shí)器T1作為波特率發(fā)生器,其公式如下:式中T1計(jì)數(shù)率取決于它工作在定時(shí)器狀態(tài)依舊計(jì)數(shù)器狀態(tài)。當(dāng)工作于定時(shí)器狀態(tài)時(shí),T1計(jì)數(shù)率為fosc門2:當(dāng)工作于計(jì)數(shù)器狀態(tài)時(shí),T1計(jì)數(shù)率為外部輸入\o"頻率"頻率,此頻率應(yīng)小于QUOTEfosc/24。產(chǎn)生溢出所需\o"交流電完成一次完整的變化所需要的時(shí)刻叫做周期"周期與定時(shí)器T1的工作方式、T1的預(yù)置值有關(guān)。
定時(shí)器T1工作于方式O:QUOTE溢出所需周期=8192-x
定時(shí)器T1工作于方式1:QUOTE溢出所需周期=65536-x定時(shí)器T1工作于方式2:QUOTE溢出所需周期=256-x
因?yàn)榉绞?為自動(dòng)重裝入初值的8位定時(shí)器/計(jì)數(shù)器模式,因此用它來做波特率發(fā)生器最恰當(dāng)。這種方式下,T1的溢出率[次/秒]計(jì)算式能夠表示為:(二)串行口的通信波特率串行口的通信波特率恰好反映串行口傳輸數(shù)據(jù)的速率。通信波特率的選用,不僅和所選通信設(shè)備、傳輸距離有關(guān),還受傳輸線狀況所制約。波特率設(shè)計(jì)1、方式0的波特率工作方式0時(shí),移位脈沖由機(jī)器周期的第6個(gè)狀態(tài)周期S6給出,每個(gè)機(jī)器周期產(chǎn)生一個(gè)移位脈沖,發(fā)送或接收一位數(shù)據(jù)。因此,波特率是固定的,為振蕩頻率的QUOTE112,不受PCON寄存器中SMOD的阻礙。用公式表示為:工作方式0的QUOTE波特率=fosc/122、方式2的波特率工作方式2時(shí),移位脈沖由振蕩頻率fosc的第二節(jié)拍P2時(shí)鐘(即)給出,因此,方式2波特率取決于PCON中的SMOD位的值,當(dāng)QUOTESMOD=2時(shí),波特率為fosc的QUOTE164;當(dāng)QUOTESMOD=1時(shí),波特率為fosc的QUOTE132,用公式表示為;工作方式2:QUOTE波特率=2SMOD/64×fosc3、工作方式1和方式3的波特率在這兩種方式下,串行口波特率是由定時(shí)器的溢出率決定的,因而波特率也是可變的。相應(yīng)公式為:QUOTE波特率=2SMOD/32×定時(shí)器T1QUOTE定時(shí)器T1溢出率=fosc/12實(shí)際上定時(shí)器T1通常采納方式2,因?yàn)槎〞r(shí)器T1在方式2下工作,TH1和TL1分不設(shè)定為兩個(gè)8位重裝計(jì)數(shù)器。4單片機(jī)與PC機(jī)通信4.1AT89C51單片機(jī)上對(duì)應(yīng)端口介紹本次課設(shè)要緊用到AT89C51單片機(jī)上的P3口,P3口的功能簡(jiǎn)介如下:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些專門功能口,如下表所示:P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(計(jì)時(shí)器0外部輸入)P3.5T1(計(jì)時(shí)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃耀編程和編程校驗(yàn)接收一些操縱信號(hào)本次單片機(jī)部分只需用到P3口的P3.0口和P3.1口,用于和PC連接通信。4.2RS-232簡(jiǎn)介通常RS-232接口以9個(gè)引腳(DB-9)或是25個(gè)引腳(DB-25)的型態(tài)出現(xiàn),RS-232的電器特性、邏輯電平和各種信號(hào)線功能也有規(guī)定。在TxD和RxD上:邏輯1:-3V~-15V邏輯0:+3V~+15V發(fā)送數(shù)據(jù)(TxD)——通過TxD終端將串行數(shù)據(jù)發(fā)送到MODEM,(DTE→DCE)。接收數(shù)據(jù)(RxD)——通過RxD線終端接收從MODEM發(fā)來的串行數(shù)據(jù),(DCE→DTE)。4.3單片機(jī)通信代碼#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintunsignedcharflag,a,i;ucharcodetable[]="OHMYGOD";voiddelay1ms(){ uchari,j; for(i=0;i<10;i++) for(j=0;j<33;j++);}voiddelay(ucharn)//延時(shí)n毫秒{ uchari; for(i=0;i<n;i++) delay1ms();}voidinit(){TMOD=0x20;//T1定時(shí)器方式2TH1=0xfd;TL1=0xfd;//T1定時(shí)器裝初值TR1=1;//啟動(dòng)定時(shí)器T1REN=1;//數(shù)據(jù)同意同意SM0=0;設(shè)定串口方式1SM1=1;//EA=1;//開總中斷ES=1;//同意串口中斷}voidmain(){uchark;init();while(1){ if(flag==1) { ES=0;//關(guān)閉串口中斷 for(i=0;i<17;i++) { SBUF=table[i];//接收數(shù)據(jù) while(!TI);//等待是否發(fā)送完畢 TI=0; } SBUF=a;//發(fā)送數(shù)據(jù) while(!TI); TI=0; ES=1; flag=0; }}}voidser()interrupt4//串口中斷程序{RI=0;//軟件清零,進(jìn)入中斷服務(wù)程序a=SBUF;flag=1;//標(biāo)志位置1,推斷是否已收到數(shù)據(jù)}4.4仿真電路圖圖4-1單片機(jī)電路仿真圖5VB設(shè)計(jì)PC機(jī)5.1界面設(shè)計(jì)本次設(shè)計(jì)需要添加MSComm控件,可用Project--Components—commcontrol6.0進(jìn)行添加。在設(shè)計(jì)窗體時(shí)要添加以下控件:1個(gè)ComboBox、9個(gè)Label、1個(gè)Option、7個(gè)CommandButton、2個(gè)TextBox。5.2VB設(shè)計(jì)的窗體圖5-1VB設(shè)計(jì)軟件5.3VB代碼OptionExplicit'OptionBase1PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)DimcomportAsByteDimrateAsLongDimdata_cntAsIntegerDimstop_cntAsIntegerDimdisp_onAsIntegerDimmutAsBooleanDimout()AsByte——————————————————————————————————PrivateSubcom_change()DimflagAsBooleanOnErrorResumeNextErr.ClearIfmut=FalseThenExitSub'初始化完成前本過程無效flag=MSComm1.PortOpenIfflagThenMSComm1.PortOpen=False'已打開先關(guān)閉MSComm1.CommPort=comport'設(shè)置串行端口MSComm1.Settings=CStr(rate)+",N,"+CStr(data_cnt)+","+CStr(stop_cnt)'設(shè)置波特率及數(shù)據(jù)幀格式MSComm1.PortOpen=TrueIfErr.NumberThenIfErr.Number=8002ThenMsgBox"串口"+CStr(comport)+"不存在!",vbOKOnly,"警告"IfErr.Number=8005ThenMsgBox"串口"+CStr(comport)+"已打開!",vbOKOnly,"警告"Option1.BackColor=RGB(0,0,0)Command1.Enabled=FalseCommand6.Enabled=FalseErr.ClearElseOption1.BackColor=RGB(255,0,0)Command1.Enabled=TrueCommand1.Caption="關(guān)閉串口"Command6.Enabled=TrueEndIfEndSub——————————————————————————————————-PrivateSubCombo1_click()comport=Combo1.ListIndex+1com_changeEndSub——————————————————————————————————PrivateSubCombo2_click()SelectCaseCombo2.ListIndexCase0rate=300Case1rate=600Case2rate=1200Case3rate=2400Case4rate=4800Case5rate=9600Case6rate=19200Case7rate=38400Case8rate=56000Case9rate=57600Case10rate=115200EndSelectcom_changeEndSub——————————————————————————————————PrivateSubCombo3_click()data_cnt=8-Combo3.ListIndexcom_changeEndSub——————————————————————————————————PrivateSubCombo4_click()stop_cnt=1+Combo4.ListIndexcom_changeEndSub——————————————————————————————————PrivateSubCommand1_Click()IfCommand1.Caption="關(guān)閉串口"ThenMSComm1.PortOpen=FalseCommand1.Caption="打開串口"Option1.BackColor=RGB(0,0,0)ElseMSComm1.PortOpen=TrueCommand1.Caption="關(guān)閉串口"Option1.BackColor=RGB(255,0,0)EndIfEndSub——————————————————————————————————PrivateSubCommand2_Click()Text1.Text=""EndSub——————————————————————————————————PrivateSubCommand3_Click()Staticf2AsByteIff2=0Thendisp_on=0f2=1Command3.Caption="接著顯示"Elsedisp_on=0f2=0Command3.Caption="停止顯示"EndIfEndSub——————————————————————————————————PrivateSubCommand4_Click()DimtimeAsDatetime=Now()Open"C:\Users\Lenovo\Desktop\NICE.txt"ForOutputAs#5Print#5,timePrint#5,Text1.TextClose#5EndSub——————————————————————————————————PrivateSubCommand5_Click()Text2.Text=""EndSub——————————————————————————————————PublicFunctionIsHex(cAsString)AsIntegerIfc>="0"Andc<="9"ThenIsHex=Val(c)-Val("0")ElseIfc>="a"Andc<="f"ThenIsHex=Asc(c)-Asc("a")+10ElseIfc>="A"Andc<="F"ThenIsHex=Asc(c)-Asc("A")+10ElseIsHex=16EndIfEndFunction——————————————————————————————————PrivateSubCommand6_Click()DimoutsAsStringouts=Text2.TextCallToChar(out,CStr(outs))MSComm1.Output=outExitSubDimsAsStringDimlAsIntegerDimiAsInteger,jAsInteger,cntAsIntegerDimaAsIntegerDimtmpAsStringDimsend_buf()AsByteReDimsend_buf(1024)cnt=0s=Trim(Text2.Text)l=Len(s)DoWhile(l)DoUntilIsHex(Left(s,1))<>16l=l-1Ifl=0ThenExitDotmp=Right(s,l)Loopa=IsHex(Left(s,1))l=l-1s=Right(s,l)Ifl<>0AndIsHex(Left(s,1))<>16Thena=a*16+IsHex(Left(s,1))l=l-1s=Right(s,l)EndIfcnt=cnt+1send_buf(cnt)=aLoopIfcnt>128Thencnt=128ReDimPreservesend_buf(cnt)MSComm1.Output=send_buf()EndSub——————————————————————————————————PrivateSubCommand7_Click()UnloadMeEndSub——————————————————————————————————PrivateSubForm_Activate()OnErrorResumeNextmut=FalseCombo1.ListIndex=0Combo2.ListIndex=5Combo3.ListIndex=0Combo4.ListIndex=0mut=TrueMSComm1.PortOpen=TrueIfErr.NumberThenMsgBox"串口1已打開!",vbOKOnly,"警告"Option1.BackColor=RGB(0,0,0)Command1.Enabled=FalseCommand6.Enabled=FalseErr.ClearEndIfCommand1.SetFocusEndSub——————————————————————————————————PrivateSubForm_Load()MSComm1.CommPort=1'設(shè)置串行端口com1MSComm1.Settings="9600,N,8,1"'設(shè)置波特率及數(shù)據(jù)幀格式MSComm1.InputLen=0'讀取接收緩沖區(qū)的所有字符MSComm1.InBufferSize=256'數(shù)據(jù)同意緩沖區(qū)大小為4000字節(jié)MSComm1.OutBufferSize=256'數(shù)據(jù)發(fā)送緩沖區(qū)大小為4000字節(jié)MSComm1.RThreshold=1'每10位數(shù)據(jù)到接收緩沖區(qū)都觸發(fā)接收事件'MSComm1.SThreshold=1'發(fā)送緩沖區(qū)空觸發(fā)發(fā)送事件'MSComm1.InputMode=comInputModeText'字節(jié)模式'設(shè)定InputMode以讀取二進(jìn)位資料MSComm1.InputMode=comInputModeBinarydisp_on=1comport=1rate=9600data_cnt=8stop_cnt=1EndSub——————————————————————————————————PrivateSubLabel3_Click()EndSub——————————————————————————————————PrivateSubMSComm1_OnComm()StaticcntAsIntegerDimreceive_cntAsIntegerDimiAsIntegerDimBufferAsVariantDimArr()AsByteDimsAsStringSelectCaseMSComm1.CommEventCasecomEvReceivereceive_cnt=MSComm1.InBufferCount'接收緩沖區(qū)的字節(jié)數(shù)'往暫存區(qū)存二進(jìn)位資料Buffer=MSComm1.Input'指定給位元組陣列以便處理Arr=Buffers=""Fori=0Toreceive_cnt-1IfArr(i)>=32AndArr(i)<=126Thens=s&Chr(Arr(i))cnt=cnt+1EndIfNextiText1.Text=Text1.Text&s&vbCrLfIfcnt>=300ThenText1.Text=""cnt=0ExitSubEndIfCasecomEvSendEndSelectEndSub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人健康保險(xiǎn)合同范本2篇
- 長(zhǎng)沙南方職業(yè)學(xué)院《俄語基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度智能倉儲(chǔ)物流設(shè)施建設(shè)合同范本3篇
- 2024物業(yè)權(quán)益讓與擔(dān)保合同 權(quán)益方與受讓方協(xié)議
- 思政教育團(tuán)隊(duì)建設(shè)與教師專業(yè)成長(zhǎng)
- 二零二五版集成墻板家裝裝修環(huán)保評(píng)估合同范本3篇
- 2025年校園歷史文化宣傳欄制作與教育推廣合同3篇
- 二零二五年度建筑設(shè)計(jì)創(chuàng)意大賽參賽合同2篇
- 2025年新型農(nóng)業(yè)技術(shù)培訓(xùn)合同范本3篇
- 2025年度定制化鋁材加工與銷售一體化合同4篇
- 獵聘-2024高校畢業(yè)生就業(yè)數(shù)據(jù)報(bào)告
- 2024虛擬現(xiàn)實(shí)產(chǎn)業(yè)布局白皮書
- 車站值班員(中級(jí))鐵路職業(yè)技能鑒定考試題及答案
- JTG∕T E61-2014 公路路面技術(shù)狀況自動(dòng)化檢測(cè)規(guī)程
- 高中英語短語大全(打印版)
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運(yùn)算300題
- 寺院消防安全培訓(xùn)課件
- 比摩阻-管徑-流量計(jì)算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗(yàn)
- 五年級(jí)數(shù)學(xué)應(yīng)用題100道
評(píng)論
0/150
提交評(píng)論