版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)綜合應(yīng)用課程設(shè)計(jì)報(bào)告書計(jì)算機(jī)綜合應(yīng)用課程設(shè)計(jì)說明書 -基于串行通信控制的PWM脈沖發(fā)生系統(tǒng)學(xué) 號(hào): 姓 名: 09030101 班 級(jí): 09計(jì)一 指導(dǎo)教師: 2012年6月18日- 2012年7 月6日目錄摘要2關(guān)鍵字2一.引言3二. 工作原理3三. 硬件設(shè)計(jì)43.1 亮燈設(shè)計(jì)43.2七段碼LED顯示設(shè)計(jì)53.3中斷原理53.4定時(shí)器工作原理63.5串口通信原理7四. 軟件設(shè)計(jì)94.1定時(shí)中斷程序104.2串行通信子程序11五. 軟硬件測(cè)試12六通信協(xié)議136.1通信協(xié)議136.2串行通信協(xié)議13七結(jié)論15八. 結(jié)束語15九附錄16十. 參考文獻(xiàn)25摘要脈沖寬度調(diào)制(PWM)是英文“P
2、ulse Width Modulation”的縮寫,簡(jiǎn)稱脈寬調(diào)制。它是用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用于測(cè)量,通信,功率控制與變換等許多領(lǐng)域。一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管柵極或基極的偏置,來實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出晶 體管或晶體管導(dǎo)通時(shí)間的改變,這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定。脈沖寬度調(diào)制(PWM)是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。
3、電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開的時(shí)候。要帶寬足夠,任何模擬值都可以使PWM進(jìn)行編碼。關(guān)鍵字定時(shí)器;中斷;串行口;PWM基于串行通信控制的PWM脈沖發(fā)生一. 引言隨著電子技術(shù)的發(fā)展,出現(xiàn)了多種PWM技術(shù),其中包括:相電壓控制PWM、脈寬PWM法、隨機(jī)PWM、SPWM法、線電壓控制PWM等。本實(shí)驗(yàn)是把每一脈沖寬度均相等的脈沖列作為PWM波形,通過改變脈沖列的周期可以調(diào)頻,改變脈沖的寬度或占空比可以調(diào)壓,采用適當(dāng)控制方法即可使電壓與頻率協(xié)調(diào)變化。這個(gè)系統(tǒng)是單片機(jī)發(fā)送一定數(shù)目的PWM脈沖控制
4、LED等的明亮程度,利用上位機(jī)和下位機(jī)的串口通信協(xié)議,上位機(jī)向下位機(jī)發(fā)送脈寬百分比和頻率信號(hào),下位機(jī)接收信號(hào)并做出相應(yīng)的反映,如通過跳脈寬百分比控制等的明亮程度,通過調(diào)頻率控制燈是否閃爍。二. 工作原理 89C52上位機(jī)串口圖2-1系統(tǒng)工作原理下位機(jī)通過接收上位機(jī)發(fā)送的數(shù)據(jù)計(jì)算出相應(yīng)的參數(shù),由P1口輸出所得的波形,從而控制LED燈的亮度及閃爍。 使用定時(shí)器中斷產(chǎn)生脈沖,對(duì)時(shí)間常數(shù)計(jì)算:100Hz :周期1×102秒,晶振11.0592M,次數(shù)為(1000000/100)/12*11.0592=461,時(shí)間常數(shù)65536461FE33脈寬的實(shí)現(xiàn)可由總的次數(shù)乘以占空比來實(shí)現(xiàn),所得的次數(shù)即
5、為高電平所需持續(xù)的次數(shù)再計(jì)算出時(shí)間常數(shù)即可對(duì)定時(shí)器實(shí)現(xiàn)高低電平持續(xù)時(shí)間的設(shè)定。三. 硬件設(shè)計(jì)通過上位機(jī)發(fā)送所接收到的數(shù)據(jù),來控制流水燈的亮暗。利用發(fā)送的頻率求出周期,需要用定時(shí)器0的中斷程序來重新設(shè)置定時(shí)器的初始數(shù)據(jù)來控制流水燈亮暗的時(shí)間,從而達(dá)到調(diào)亮調(diào)暗的效果。 P1 P0 89C52LED燈上位機(jī)LED七段顯示器三極管驅(qū)動(dòng)七段顯示驅(qū)動(dòng)串口 圖3-1系統(tǒng)框圖3.1 亮燈設(shè)計(jì)流水燈低電平點(diǎn)亮P1為輸出口圖3-2流水燈控制電路圖3.2七段碼LED顯示設(shè)計(jì)該七段碼顯示器為共陰七段顯示器 圖3-3七段碼顯示器原理圖 圖3-4七段顯示控制電路由上圖可知有兩個(gè)鎖存器分別實(shí)現(xiàn)對(duì)七段顯示器的段選和位選信號(hào)的
6、鎖存,這些信號(hào)均由P0口輸出。且兩個(gè)鎖存器的使能信號(hào)DULA和WELA分別由P2.6和P2.7控制,均為高電平有效。3.3中斷原理中斷系統(tǒng)由與中斷有關(guān)的特殊功能寄存器、中斷入口、順序查詢邏輯電路等組成,包括5個(gè)中斷請(qǐng)求源,4個(gè)用于中斷控制的寄存器IE、IP、ECON和SCON來控制中斷、中斷的開關(guān)和各種中斷源優(yōu)先級(jí)的確定。外部中斷請(qǐng)求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機(jī)上有兩個(gè)引腳,名稱為INT0、INT1,也就是P3.2、P3.3這兩個(gè)引腳。在內(nèi)部的TCON中有四位是與外中斷有關(guān)的。IT0:INT0觸發(fā)方式控制位,可由軟件進(jìn)和置位和復(fù)位,IT0=0,INT0為低電平觸發(fā)方式,IT
7、0=1,INT0為負(fù)跳變觸發(fā)方式。這兩種方式的差異將在以后再談。IE0:INT0中斷請(qǐng)求標(biāo)志位。當(dāng)有外部的中斷請(qǐng)求時(shí),這位就會(huì)置1(這由硬件來完成),在CPU響應(yīng)中斷后,由硬件將IE0清0。IT1、IE1的用途和IT0、IE0相同。內(nèi)部中斷請(qǐng)求源:TF0:定時(shí)器T0的溢出中斷標(biāo)記,當(dāng)T0計(jì)數(shù)產(chǎn)生溢出時(shí),由硬件置位TF0。當(dāng)CPU響應(yīng)中斷后,再由硬件將TF0清0。TF1:與TF0類似。TI、RI:串行口發(fā)送、接收中斷。中斷允許寄存器IE:在MCS51中斷系統(tǒng)中,中斷的允許或禁止是由片內(nèi)可進(jìn)行位尋址的8位中斷允許寄存器IE來控制的。表3-1中斷允許寄存器IEEAXXESET1EX1ET0EX0其中
8、,EA是總開關(guān),如果EA=0,則所有中斷都不允許;ES:串行口中斷允許;ET1:定時(shí)器1中斷允許;EX1:外中斷1中斷允許;ET0:定時(shí)器0中斷允許;EX0:外中斷0中斷允許;中斷響應(yīng)過程:CPU響應(yīng)中斷時(shí),首先把當(dāng)前指令的下一條指令(就是中斷返回后將要執(zhí)行的指令)的地址送入堆棧,然后根據(jù)中斷標(biāo)記,將相應(yīng)的中斷入口地址送入PC,PC是程序指針,CPU取指令就根據(jù)PC中的值,PC中是什么值,就會(huì)到什么地方去取指令,所以程序就會(huì)轉(zhuǎn)到中斷入口處繼續(xù)執(zhí)行。3.4定時(shí)器工作原理80C51單片機(jī)內(nèi)部設(shè)有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器。可編程的意思是指其功能(如工作方式、定時(shí)時(shí)間、量程、啟動(dòng)方式等)均可由
9、指令來確定和改變。在定時(shí)器/計(jì)數(shù)器中除了有兩個(gè)16位的計(jì)數(shù)器之外,還有兩個(gè)特殊功能寄存器(控制寄存器和方式寄存器)。從上面定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)圖中我們可以看出,16位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位專用寄存器組成,即:T0由TH0和TL0構(gòu)成;T1由TH1和TL1構(gòu)成。其訪問地址依次為8AH-8DH。每個(gè)寄存器均可單獨(dú)訪問。這些寄存器是用于存放定時(shí)或計(jì)數(shù)初值的。此外,其內(nèi)部還有一個(gè)8位的定時(shí)器方式寄存器TMOD和一個(gè)8位的定時(shí)控制寄存器TCON。這些寄存器之間是通過內(nèi)部總線和控制邏輯電路連接起來的。TMOD主要是用于選定定時(shí)器的工作方式。定時(shí)器方式控制寄存器TMOD在特殊功能寄存器中,字節(jié)地址為8
10、9H,無位地址。TMOD的格式如下圖所示。 圖3-5 TMOD由圖可見,TMOD的高4位用于T1,低4使用于T0,4種符號(hào)的含義如下:GATE:門控制位。GATE和軟件控制位TR、外部引腳信號(hào)INT的狀態(tài),共同控制定時(shí)器計(jì)數(shù)器的打開或關(guān)閉。CT:定時(shí)器計(jì)數(shù)器選擇位。C/T1,為計(jì)數(shù)器方式;CT0,為定時(shí)器方式。M1M0:工作方式選擇位,定時(shí)器計(jì)數(shù)器的4種工作方式由M1M0設(shè)定。表3-2 定時(shí)器4種工作方式工作方式功能描述00工作方式013位計(jì)數(shù)器01工作方式116位計(jì)數(shù)器10工作方式2自動(dòng)再裝入8位計(jì)數(shù)器11工作方式3定時(shí)器0:分成2個(gè)8位計(jì)數(shù)器定時(shí)器1:停止計(jì)數(shù)3.5串口通信原理口通訊對(duì)單片
11、機(jī)而言意義重大,不但可以實(shí)現(xiàn)將單片機(jī)的數(shù)據(jù)傳輸?shù)接?jì)算機(jī)端,而且也能實(shí)現(xiàn)計(jì)算機(jī)對(duì)單片機(jī)的控制。由于其所需電纜線少,接線簡(jiǎn)單,所以在較遠(yuǎn)距離傳輸中,得到了廣泛的運(yùn)用。波特率選擇:波特率(Boud Rate)就是在串口通信中每秒能夠發(fā)送的位數(shù)(bits/second)。MSC-51串行端口在四種工作模式下有不同的波特率計(jì)算方法。在選擇波特率的時(shí)候需要考慮兩點(diǎn):首先,系統(tǒng)需要的通信速率。這要根據(jù)系統(tǒng)的運(yùn)作特點(diǎn),確定通信的頻率范圍。然后考慮通信時(shí)鐘誤差。使用同一晶振頻率在選擇不同的通信速率時(shí)通信時(shí)鐘誤差會(huì)有很大差別。為了通信的穩(wěn)定,我們應(yīng)該盡量選擇時(shí)鐘誤差最小的頻率進(jìn)行通信。通信協(xié)議的使用:通信協(xié)議是通
12、信設(shè)備在通信前的約定。單片機(jī)、計(jì)算機(jī)有了協(xié)議這種約定,通信雙方才能明白對(duì)方的意圖,以進(jìn)行下一步動(dòng)作。假定我們需要在PC機(jī)與單片機(jī)之間進(jìn)行通信,在雙方程式設(shè)計(jì)過程中,有如下約定:0xA1:?jiǎn)纹瑱C(jī)讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);0xA2:?jiǎn)纹瑱C(jī)從PC機(jī)接收一段控制數(shù)據(jù);0xA3:?jiǎn)纹瑱C(jī)操作成功信息。在系統(tǒng)工作過程中,單片機(jī)接收到PC機(jī)數(shù)據(jù)信息后,便查找協(xié)議,完成相應(yīng)的操作。當(dāng)單片機(jī)接收到0xA1時(shí),讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);當(dāng)單片機(jī)接收到0xA2時(shí),單片機(jī)等待從PC機(jī)接收一段控制數(shù)據(jù);當(dāng)PC機(jī)接收到0xA3時(shí),就表明單片機(jī)操作已經(jīng)成功。硬件連接:51單片機(jī)有一個(gè)全雙工的串
13、行通訊口,所以單片機(jī)和計(jì)算機(jī)之間可以方便地進(jìn)行串口通訊。進(jìn)行串行通訊時(shí)要滿足一定的條件,比如計(jì)算機(jī)的串口是RS232電平的,而單片機(jī)的串口是TTL電平的,兩者之間必須有一個(gè)電平轉(zhuǎn)換電路,我們采用了專用芯片MAX232進(jìn)行轉(zhuǎn)換,雖然也可以用幾個(gè)三極管進(jìn)行模擬轉(zhuǎn)換,但是還是用專用芯片更簡(jiǎn)單可靠。我們采用了三線制連接串口,也就是說和計(jì)算機(jī)的9針串口只連接其中的3根線:第5腳的GND、第2腳的RXD、第3腳的TXD。這是最簡(jiǎn)單的連接方法,但是對(duì)我們來說已經(jīng)足夠使用了,電路如下圖所示,MAX232的第10腳和單片機(jī)的11腳連接,第9腳和單片機(jī)的10腳連接,第15腳和單片機(jī)的20腳連接。圖3-6使用MAX
14、232串口通信電路圖四. 軟件設(shè)計(jì)NYY七段碼顯示串行中斷RI=0RI=1NTI=0接收數(shù)據(jù)Y定時(shí)器中斷高電平定時(shí)初始化Flag=0Flag=1低電平定時(shí)初始化Flag=1N接收數(shù)組下標(biāo)清零rid=0開始rid<3計(jì)算次數(shù)圖4-1下位機(jī)總程序框圖圖4-2上位機(jī)用戶界面圖4.1定時(shí)中斷程序已知晶振頻率為11.0592MHZ,用T0定時(shí)/計(jì)數(shù)器,進(jìn)行50ms的定時(shí)(T0定時(shí)/計(jì)數(shù)器的初始值為TH0=4CH,TL0=00H)。采用中斷方式進(jìn)行溢出次數(shù)累計(jì),計(jì)滿20次即到秒計(jì)時(shí)。從秒到分,從分到時(shí)的計(jì)時(shí),可通過累加器和數(shù)值比較實(shí)現(xiàn)。流程框圖如圖4-3所示圖4-3定時(shí)中斷程序框圖使用定時(shí)器中斷產(chǎn)生
15、脈沖,對(duì)時(shí)間常數(shù)計(jì)算:100Hz :周期1×102秒,晶振11.0592M,次數(shù)為(1000000/100)/12*11.0592=461,時(shí)間常數(shù)65536461FE33脈寬的實(shí)現(xiàn)可由總的次數(shù)乘以占空比來實(shí)現(xiàn),所得的次數(shù)即為高電平所需持續(xù)的次數(shù)再計(jì)算出時(shí)間常數(shù)即可對(duì)定時(shí)器實(shí)現(xiàn)高低電平持續(xù)時(shí)間的設(shè)定。4.2串行通信子程序本實(shí)驗(yàn)中使用了自定義通信協(xié)議,一幀數(shù)據(jù)由5個(gè)字節(jié)組成。第一個(gè)字節(jié)為0;第二個(gè)字節(jié)和第三個(gè)字節(jié)分別為頻率的高8位和低8位;第四個(gè)字節(jié)為占空比(0-100);第五個(gè)字節(jié)為校驗(yàn)位,是前四個(gè)字節(jié)數(shù)據(jù)的異或和。 表4-1自定義串行通信協(xié)議初始位(00)頻率的高8位頻率的低8位占
16、空比校驗(yàn)位采用中斷方式設(shè)計(jì)串行通信程序,在PC機(jī)上發(fā)送數(shù)據(jù),串行通信程序框圖如圖4-4所示圖4-4串行通信子程序框圖 串行通訊模塊:使用串行中斷,只接受數(shù)據(jù),自定義通訊協(xié)議,例如:主機(jī)發(fā) 0 0 100 100 0,表示需發(fā)生100HZ脈沖和100%的高電平脈寬;主機(jī)發(fā)0 0 100 50 86,表示需發(fā)生100HZ脈沖和50%的高電平脈寬;五. 軟硬件測(cè)試在無法確定上位機(jī)與下位機(jī)是否已能正確進(jìn)行通信之前我們可以用串口調(diào)試程序調(diào)試,這樣可以幫助發(fā)現(xiàn)下位機(jī)程序中存在的問題。有利于整個(gè)系統(tǒng)快速高效地在之前步驟都確定正確的情況下進(jìn)行開發(fā),從而在出現(xiàn)錯(cuò)誤時(shí)可基本確定是當(dāng)前步驟出現(xiàn)錯(cuò)誤而與前期開發(fā)關(guān)系不
17、大,利于問題的發(fā)現(xiàn)與改正。用串口調(diào)試程序?qū)ο挛粰C(jī)程序進(jìn)行調(diào)試,在下位機(jī)程序功能實(shí)現(xiàn)正常后將上位機(jī)程序與下位機(jī)程序進(jìn)行聯(lián)合調(diào)試,在串行通信過程中傳送的是字節(jié),因此在上位機(jī)程序中要定義字節(jié)數(shù)組來保存要發(fā)送的數(shù)據(jù)。發(fā)送過程中還需注意的問題有波特率、串行口、校驗(yàn)位、數(shù)據(jù)位和停止位的設(shè)置,以及發(fā)送順序和接收順序的一致性。上位機(jī)程序還要做好異常處理的工作從而實(shí)現(xiàn)良好的人機(jī)對(duì)話。給用戶一個(gè)簡(jiǎn)潔明了的操作體驗(yàn)。硬件測(cè)試環(huán)境是89C52實(shí)驗(yàn)板,軟件環(huán)境是Keil uVision2和串口助手。測(cè)試結(jié)果與預(yù)測(cè)結(jié)果一致功能實(shí)現(xiàn)正常。六通信協(xié)議6.1通信協(xié)議所謂通信協(xié)議是指通信雙方的一種約定。約定包括對(duì)數(shù)據(jù)格式、同步方
18、式、傳送速度、傳送步驟、檢糾錯(cuò)方式以及控制字符定義等問題做出統(tǒng)一規(guī)定,通信雙方必須共同遵守。因此,也叫做通信控制規(guī)程,或稱傳輸控制規(guī)程,它屬于ISO'S OSI七層參考模型中的數(shù)據(jù)鏈路層。目前,采用的通信協(xié)議有兩類:異步協(xié)議和同步協(xié)議。同步協(xié)議又有面向字符和面向比特以及面向字節(jié)計(jì)數(shù)三種。其中,面向字節(jié)計(jì)數(shù)的同步協(xié)議主要用于DEC公司的網(wǎng)絡(luò)體系結(jié)構(gòu)中。6.2串行通信協(xié)議串行通信協(xié)議分同步協(xié)議和異步協(xié)議異步通信協(xié)議的實(shí)例起止式異步協(xié)議:起止式異步協(xié)議的特點(diǎn)是一個(gè)字符一個(gè)字符傳輸,并且傳送一個(gè)字符總是以起始位開始,以停止位結(jié)束,字符之間沒有固定的時(shí)間間隔要求。其格式如圖3所示。每一個(gè)字符的前
19、面都有一位起始位(低電平,邏輯值0),字符本身有57位數(shù)據(jù)位組成,接著字符后面是一位校驗(yàn)位(也可以沒有校驗(yàn)位),最后是一位,或意味半,或二位停止位,停止位后面是不定長(zhǎng)度的空閑位。停止位和空閑位都規(guī)定為高電平(邏輯值),這樣就保證起始位開始處一定有一個(gè)下跳沿。這種格式是靠起始位和停止位來實(shí)現(xiàn)字符的界定或同步的,故稱為起始式協(xié)議。傳送時(shí),數(shù)據(jù)的低位在前,高位在后。面向字符的同步協(xié)議:這種協(xié)議的典型代表是IBM公司的二進(jìn)制同步通信協(xié)議(BSC)。它的特點(diǎn)是一次傳送由若干個(gè)字符組成的數(shù)據(jù)塊,而不是只傳送一個(gè)字符,并規(guī)定了10個(gè)字符作為這個(gè)數(shù)據(jù)塊的開頭與結(jié)束標(biāo)志以及整個(gè)傳輸過程的控制信息,它們也叫做通信
20、控制字。由于被傳送的數(shù)據(jù)塊是由字符組成,故被稱作面向字符的協(xié)議。本實(shí)驗(yàn)以字符串的形式發(fā)送數(shù)據(jù),本實(shí)驗(yàn)使用的波特率為9600,沒有奇偶校驗(yàn),8個(gè)數(shù)據(jù)位和一個(gè)停止位。上位機(jī)通信協(xié)議:Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SerialPort1.BaudRate = 9600 SerialPort1.StopBits = 1 SerialPort1.DataBits = 8 SerialPort1.Parity = IO.Ports.
21、Parity.None SerialPort1.ReadTimeout = 10End Sub下位機(jī)接收函數(shù):void chuanxing() interrupt 4 if(RI) RI=0; d=0;if(rid<5) recrid=SBUF; rid+;if(rid=5) temp=rec0rec1rec2rec3; if(temp=rec4) hebing(rec1,rec2); hz=t1(pwmt); h=t2(rec3,hz); l=hz-h; else TI=0;七結(jié)論在整個(gè)實(shí)驗(yàn)過程中效果和功能都已實(shí)現(xiàn),在20HZ到30HZ的頻率范圍內(nèi),整個(gè)流水燈還是有閃爍的現(xiàn)象產(chǎn)生,隨著
22、頻率的增大,閃爍也逐漸消失。脈寬是從0%到100%,流水燈的亮度也隨著變亮。上位機(jī)發(fā)送字節(jié)是三個(gè)一起發(fā)出去的,而下位機(jī)也會(huì)根據(jù)三個(gè)字節(jié)的先后分別取出并進(jìn)行運(yùn)用。但這個(gè)還存在一些問題,比如程序中使用的是整數(shù)的除法運(yùn)算沒有小數(shù)這就導(dǎo)致了運(yùn)算存在較大誤差,這樣的誤差在頻率較低時(shí)并不影響系統(tǒng)的正常運(yùn)行,但隨著頻率的升高這樣的誤差就會(huì)越來越明顯,以至于在1KHz及以上頻率時(shí)調(diào)節(jié)的效果很不明顯。另外由于定時(shí)中斷和串行中斷的頻繁產(chǎn)生,其間還伴有大量運(yùn)算而導(dǎo)致占用較多的CPU時(shí)間,這就使得七段碼顯示時(shí)出現(xiàn)字跡較暗,偶爾還會(huì)閃爍的現(xiàn)象。八. 結(jié)束語經(jīng)過這三周的課程設(shè)計(jì),使我了解到了什么叫做PWM,以及他的工作原
23、理。同時(shí)也是對(duì)之前學(xué)過的知識(shí)的一次綜合運(yùn)用,不僅提高了我的編程能力同時(shí)還鞏固了我的C51硬件知識(shí)。在大三下學(xué)期我們學(xué)習(xí)了單片機(jī)的一些基本結(jié)構(gòu)和一些基本的編程,在編程之前我們應(yīng)先看懂單片機(jī)的原理圖,知道怎樣的一個(gè)實(shí)現(xiàn)過程。在這次實(shí)驗(yàn)中碰到了一些問題,我是做下位機(jī)的,在我做這個(gè)課題時(shí)我遇到了這樣一個(gè)問題就是在頻率較高(如幾千赫茲時(shí))對(duì)定時(shí)器的初始值進(jìn)行設(shè)定時(shí)就會(huì)出現(xiàn)設(shè)定無效果的情況但在頻率為幾十和幾百時(shí)一切正常,不知是我的程序存在不足還是受C51芯片性能的制約而導(dǎo)致這樣的情況。我知道PC機(jī)和下位機(jī)是通過串口通信的,也是這課設(shè)的重點(diǎn),我在這問題上在網(wǎng)站上看了很多的寫法,其中要解決的問題就是對(duì)接收的字
24、節(jié)數(shù)據(jù)進(jìn)行處理得到我想要的數(shù)據(jù)如程序中頻率是一個(gè)unsigned int型變量而接收的數(shù)據(jù)是字節(jié)數(shù)據(jù)這就需要將兩個(gè)字節(jié)的數(shù)據(jù)合并成頻率。當(dāng)然頻率的實(shí)現(xiàn)和脈寬的調(diào)節(jié)也是一個(gè)難點(diǎn),但知道了原理后也就不是什么問題了。反而覺得這還是挺容易的,難的是在C51單片機(jī)11.0592MHz這樣的頻率下如何合理安排計(jì)算過程盡量少的占用其CPU,從而盡可能好地達(dá)到預(yù)期的效果。在課設(shè)過程中我學(xué)到了很多的知識(shí)也積累了不少經(jīng)驗(yàn)。自學(xué)當(dāng)然能學(xué)到很多知識(shí)同時(shí)也能解決不少問題,但僅靠自己也是不行的,團(tuán)隊(duì)的合作也是很重要的。九附錄上位機(jī)代碼如下:(VB.NET)Public Class Form1 Dim g As Graph
25、ics Dim drawbrush As New SolidBrush(Color.Red) Dim open As Boolean = False Dim send(5) As Byte Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load g = Me.CreateGraphics SerialPort1.PortName = "com4" SerialPort1.BaudRate = 9600 SerialPort1.
26、StopBits = 1 SerialPort1.DataBits = 8 SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.ReadTimeout = 10 ComboBox1.Text = "com4" ComboBox2.Text = "9600" ComboBox3.Text = "8" ComboBox4.Text = "1" TrackBar1.Value = 100 TrackBar2.Value = 100 Timer1.Enabled =
27、False End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged SerialPort1.PortName = ComboBox1.Text End Sub Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventA
28、rgs) Handles ComboBox2.SelectedIndexChanged If ComboBox2.Text = "256000" Then SerialPort1.BaudRate = 256000 End If If ComboBox2.Text = "128000" Then SerialPort1.BaudRate = 128000 End If If ComboBox2.Text = "115200" Then SerialPort1.BaudRate = 115200 End If If ComboBox2.
29、Text = "57600" Then SerialPort1.BaudRate = 57600 End If If ComboBox2.Text = "38400" Then SerialPort1.BaudRate = 38400 End If If ComboBox2.Text = "28800" Then SerialPort1.BaudRate = 28800 End If If ComboBox2.Text = "19200" Then SerialPort1.BaudRate = 19200 End
30、If If ComboBox2.Text = "14400" Then SerialPort1.BaudRate = 14400 End If If ComboBox2.Text = "9600" Then SerialPort1.BaudRate = 9600 End If If ComboBox2.Text = "4800" Then SerialPort1.BaudRate = 4800 End If If ComboBox2.Text = "2400" Then SerialPort1.BaudRate =
31、 2400 End If If ComboBox2.Text = "1200" Then SerialPort1.BaudRate = 1200 End If If ComboBox2.Text = "600" Then SerialPort1.BaudRate = 600 End If End Sub Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.Select
32、edIndexChanged If ComboBox3.Text = "8" Then SerialPort1.DataBits = 8 End If If ComboBox3.Text = "7" Then SerialPort1.DataBits = 7 End If If ComboBox3.Text = "6" Then SerialPort1.DataBits = 6 End If If ComboBox3.Text = "5" Then SerialPort1.DataBits = 5 End If I
33、f ComboBox3.Text = "4" Then SerialPort1.DataBits = 4 End If End Sub Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox4.SelectedIndexChanged If ComboBox4.Text = "1" Then SerialPort1.StopBits = 1 End If If ComboB
34、ox4.Text = "2" Then SerialPort1.StopBits = 2 End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If open = False Then Try SerialPort1.Open() Catch ex As Exception MsgBox("端口不存在或已被另一個(gè)進(jìn)程打開!") Exit Sub End Try op
35、en = True Button1.Text = "關(guān)閉串口" Else Button1.Text = "打開串口" SerialPort1.Close() open = False Timer1.Enabled = False End If End Sub Private Sub TrackBar1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseDown Timer1.Enabled = T
36、rue End Sub Private Sub TrackBar1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseUp Timer1.Enabled = False End Sub Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll Label7.Text = T
37、rackBar1.Value & "Hz" send(0) = 0 send(1) = 0 send(2) = TrackBar1.Value send(3) = TrackBar2.Value send(4) = send(0) Xor send(1) Xor send(2) Xor send(3) End Sub Private Sub TrackBar2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar2.Mous
38、eDown Timer1.Enabled = True End Sub Private Sub TrackBar2_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar2.MouseUp Timer1.Enabled = False End Sub Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar
39、2.Scroll Label8.Text = TrackBar2.Value & "%" send(0) = 0 send(1) = 0 send(2) = TrackBar1.Value send(3) = TrackBar2.Value send(4) = send(0) Xor send(1) Xor send(2) Xor send(3) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
40、 send(0) = 0 send(1) = 0 send(2) = TrackBar1.Value send(3) = TrackBar2.Value send(4) = send(0) Xor send(1) Xor send(2) Xor send(3) Try SerialPort1.Write(send, 0, 5) Catch ex As InvalidOperationException Timer1.Enabled = False MsgBox("串口被關(guān)閉!") Exit Sub End Try End SubEnd Class下位機(jī)代碼如下:#inclu
41、de "reg52.h"unsigned char code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char rec5,flag=0,d=0,rid=0,temp;unsigned int pwmt,b,hz,h,l;sbit P2_7=P27;sbit P2_6=P26;void display(unsigned char x, unsigned char y) P0=0x00; P2_6=1; switch(x) case 0:if(rec3=100) P0=0x3f; else P0=tabrec3%10; break; case 1:if(rec3=100) P0=0x3f; else P0=tabrec3/10; break; case 2:if(rec3=100) P0=0x06; break; case 3:if(rec2=100) P0=0x3f; else P
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 招投標(biāo)項(xiàng)目成本控制與優(yōu)化
- 節(jié)能減排廉潔自律招投標(biāo)守則
- 咖啡館租賃合同草稿
- 腹股溝斜疝修補(bǔ)術(shù)后護(hù)理
- 建筑施工勞務(wù)合同:旅游設(shè)施建設(shè)
- 醫(yī)療機(jī)構(gòu)市場(chǎng)營(yíng)銷與市場(chǎng)定位
- 公路充電設(shè)施維護(hù)合同范本
- 木材加工安全事故預(yù)防
- 屋頂修復(fù)漏水施工合同
- 制造業(yè)用工規(guī)范承諾書
- 2020 ACLS-PC-SA課前自我測(cè)試試題及答案
- 黏膜給藥制劑-精品醫(yī)學(xué)課件
- (完整版)物理化學(xué)上教案
- 軟土地基處理預(yù)應(yīng)力管樁施工要點(diǎn)
- 小兒危重癥的早期識(shí)別(ppt)課件
- 《紙的發(fā)明》優(yōu)秀ppt(共22張ppt)課件
- 外國(guó)古代建筑史-古羅馬
- 世界銀行招標(biāo)采購指南
- 《對(duì)折剪紙》教學(xué)設(shè)計(jì)
- 720--消防自動(dòng)噴水滅火系統(tǒng)(干式)講解
- 認(rèn)識(shí)四邊形評(píng)課稿
評(píng)論
0/150
提交評(píng)論