1. 單片機實訓總結範文5篇
單片機實訓課程,是農業工程類專業非常重要的專業技術課,是後續專業實踐課的基礎,大家做好實訓 總結 ,總結更多的 經驗 。下面是我給大家帶來的單片機實訓總結 範文 _單片機實訓 工作總結 ,以供大家參考,我們一起來看看吧!
↓ ↓ 更多關於 「 實 訓總 結 」 內容推薦 ↓ ↓
★ 單 片機實 訓報 告 ★
★ 單 片 機實 訓心得 體 會 ★
★ 實 訓總 結報 告范 文 ★
★ 實 訓總 結與心 得 體 會 ★
★ 實 習實訓總 結報 告 ★
▼ 單片機實訓總結範文篇一:
通過今次單片機實訓,使我對單片機的認識有了更深刻的理解。系統以51單片機為核心部件,利用匯編軟體編程,通過鍵盤控制和數碼管顯示實現了基本時鍾顯示功能、時間調節功能,能實現本設計題目的基本要求和發揮部分。
由於時間有限和本身知識水平的限制,本系統還存在一些不夠完善的地方,要作為實際應用還有一些具體細節問題需要解決。例如:不能實現只用兩個按鍵來控制時鍾時間,還不能實現鬧鍾等擴展功能。
踉踉蹌蹌地忙碌了兩周,我的時鍾程序終於編譯成功。當看著自己的程序,自己成天相伴的系統能夠健康的運行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最終都會化為甜美的甘泉。
但在這次實訓中同時使我對匯編語言有了更深的認識。當我第一次接觸匯編語言就感覺很難,特別是今次實訓要用到匯編語言,盡管困難重重,可我們還是克服了。這次的實訓使培養了我們嚴肅認真的做事作風,增強了我們之間的團隊合作能力,使我們認識到了團隊合作精神的重要性。
這次實訓的經歷也會使我終身受益,我感受到這次實訓是要真真正正用心去做的一件事情,是真正的自己學習的過程和研究的過程,沒有學習就不可能有研究的能力,沒有自己的研究,就不會有所突破。希望這次的經歷能讓我在以後學習中激勵我繼續進步。
▼ 單片機實訓總結範文篇二:
通過這一個學期的單片機學習,我收獲了很多關於單片機的知識,並且這些知識和日常的生活息息相關。了解了一些簡單程序的錄入,LED 顯示器 、鍵盤、和顯示器的應用和原理。
LED顯示器:LED顯示器是由發光二管組成顯示欄位的器件。通常的8段LED顯示器是由8個發光二極體組成,LED顯示器分共陽極和共陰極兩種。有段選碼和和位選碼。當LED顯示器每段的平均電流位5MA時,就有較滿意的亮度,一般選擇斷碼5-10MA電流;位線的電流應選擇40-80MA。LED顯示器的顯示方式有動態和靜態兩種。7289A晶元是具有SPI串列介面功能的顯示鍵盤控制晶元,它可同時取得8位共陰極數碼管和64個鍵的鍵盤矩陣。7289A的控制指令分為兩類:8位寬度的單位元組指令和16位寬度雙位元組指令;還有閃爍指令和消隱指令。7289A採用串列方式SPI匯流排與微處理器通信;7289A與AT89C52介面電路,在實際電路中無論接不接鍵盤,電路中連接到其各段上的8個 100千歐的下拉電阻均不可以省去,如果不接鍵盤而只接顯示器可以省去8個10千歐電阻,若僅接鍵盤而不接顯示器,可省去串入DP及SA-SG連線的8個220歐電阻,7289A還需要外接晶體振盪電路。液晶顯示器簡稱LCD,其顯示原理是用經過處後的液晶具有能改變光線傳輸方向的特性,達到顯示字元和圖形的目的。最簡單的筆段式液晶顯示器類似於LCD顯示器,可以顯示簡單的字元和數字,而目前大量使用的是點陣式LCD顯示器,既可以顯示字元和數字也可以顯示漢字和圖形。如果把LCD顯示屏、背光可變電源、介面控制邏輯、驅動集成晶元等部件構成一個整體,是的與CPU介面十分方便。
鍵盤:鍵盤是最常見的計算機輸入設備,它廣泛應用於微型計算機和各種終端設備上。計算機操作者通過鍵盤向計算機輸入各種指令、數據,指揮計算機的工作。按照鍵盤的工作原理和按鍵方式的不同,可以劃分為四種:機械式鍵盤採用類似金屬接觸式開關,工作原理是使觸點導通或斷開,具有工藝簡單、噪音大、易維護的特點。 塑料薄膜式鍵盤鍵盤內部共分四層,實現了無機械磨損。其特點是低價格、低噪音和低成本,已佔領市場絕大部分份額。 導電橡膠式鍵盤觸點的結構是通過導電橡膠相連。鍵盤內部有一層凸起帶電的導電橡膠,每個按鍵都對應一個凸起,按下時把下面的觸點接通。這種類型鍵盤是市場由機械鍵盤向薄膜鍵盤的過渡產品。 無接點靜電電容式鍵盤使用類似電容式開關的原理,通過按鍵時改變電極間的距離引起電容容量改變從而驅動編碼器。特點是無磨損且密封性較好。
按照按鍵方式的不同鍵盤可分為接觸式和無觸點式兩類。接觸式鍵盤就是我們通常所說的機械式鍵盤,它又分為普通觸點式和干簧式。普通觸點式的兩個觸點直接接觸,從而使電路閉合,產生信號;而干簧式鍵盤則是在觸點間加裝磁鐵,當鍵按下時,依靠磁力使觸點接觸,電路閉合。與普通觸點式鍵盤相比,干簧式鍵盤具有響應速度快、使用壽命長、觸點不易氧化等優點。無觸點式鍵盤又分為電容式、霍爾式和觸摸式三種。其中電容式是我們最常用到的鍵盤類型,它的觸點之間並非直接接觸,而是當按鍵按下時,在觸點之間形成兩個串聯的平板電容,從而使脈沖信號通過,其效果與接觸式是等同的。電容式鍵盤擊鍵時無雜訊,響應速度快,但是價格很高一些。
顯示器:按照顯示器的顯示管分類CRT、LCD。按顯示色彩分類單色顯示器、彩色顯示器。按大小分類通常有14寸、15寸、17寸和19寸,或者更大。顯示管的屏幕上塗有一層熒光粉,電子槍發射出的電子擊打在屏幕上,使被擊打位置的熒光粉發光,從而產生了圖像,每一個發光點又由「紅」「綠」「藍」三個小的發光點組成,這個發光點也就是一個象素。由於電子束是分為三條的,它們分別射向屏幕上的這三種不同的發光小點,從而在屏幕上出現絢麗多彩的畫面。顯示器顯示畫面是由顯示卡來控制的。若仔細觀察顯示器上的文本或圖像是由點組成的,屏幕上點越多越密,則解析度越高。
屏幕上相鄰兩個同色點的距離稱為點距,常見點距規格有0.31mm、0.28mm、0.25mm等。顯示器點距越小,在高解析度下越容易取得清晰的顯示效果。電子束採用光柵掃描方式,從屏幕左上角一點開始,向右逐點進行掃描,形成一條水平線;到達最右端後,又回到下一條水平線的左端,重復上面的過程;當電子束完成右下角一點的掃描後,形成一幀。此後,電子束又回到左上方起點,開始下一幀的掃描。這種 方法 也就是常說的逐行掃描顯示。而隔行掃描指電子束在掃描時每隔一行掃一線,完成一屏後再返回來掃描剩下的線,這與電視機的原理一樣。隔行掃描的顯示器比逐行掃描閃爍得更厲害,也會讓使用者的眼睛更疲勞。完成一幀所花時間的倒數叫垂直掃描頻率,也叫刷新頻率,比如60Hz、75Hz等。
通過這幾天的單片機的實訓,我在理論的基礎上更深刻的掌握了單片機的深層內容及實際生活中的應用,實訓鍛煉了自己動手能力和思維能力,還有在軟體方面的編程能力,讓我受益匪淺,同時也暴露出一些平時學習上的問題,讓我深刻 反思 。這些問題的發現將為我以後的學習和工作找明道路,查漏補缺為進一步學習作好准備。通過實訓,讓我懂得了如何編寫一些簡單的程序,學會了如何製作單片機應用程序,並且可以在今後的日常生活中靈活運用。
▼ 單片機實訓總結範文篇三:
一 實習目的
1. 通過對單片機小系統的設計、焊接、裝配,掌握電路原理圖及電子線路的基本焊接裝配工藝、規范及注意事項;
2. 通過對系統板的測試,了解系統板的工作原理及性能,掌握元器件及系統故障的排除方法;
3. 掌握程序編制及調試方法,完成系統初始化、存儲器操作、埠操作、鍵盤顯示等程序的編制及調試(匯編語言、C語言均可);
4. 通過單片機系統的組裝,調試以及程序編制、調試及運行,與理論及實驗的有機結合和指導教師的補充介紹,使學生掌握控制系統的工作原理、開發方法和操作方法。
5. 培養學生解決實際問題的能力,提高對理論知識的感性認識。
二 實習意義
通過本實習不但可以掌握單片機軟、硬體的綜合調試方法,而且可以熟練掌握電路原理圖,激發對單片機智能性的探索精神,提高學生的綜合素質,培養學生應用單片機實現對工業控制系統的設計、開發與調試的能力。在製作學習過程中,不但可以掌握軟、硬體的綜合調試方法,而且可以使學生對單片機智能性產生強烈的慾望。達到最大限度地掌握微機應用技術,軟體及介面設計和數據採集與處理的技能,培養電綜合實踐素質的目的。
三 系統基本組成及工作原理
1 系統基本組成
系統以單片機STC89C52作為控制核心,各部分基本組成框圖如圖1所示。
流水燈部分由單片機、鍵盤模塊等組成;
四位數碼顯示,編程實現30秒倒計時部分由單片機、鍵盤模塊、液晶顯示模塊等組成;
按鍵功能部分通過按鍵控制流水燈部分、四位數碼顯示部分;
電子鍾部分由單片機、鍵盤模塊、液晶顯示模塊等組成;
使用功能鍵實現相應的功能組合部分通過流水燈部分、30秒倒計時部分實現;
模數轉換部分由單片機、ADC0809轉換模塊、鍵盤模塊、液晶顯示模塊等組成。
2 系統工作原理
本設計採用STC89C52RC單片機作為本系統的控制模塊。單片機可把由ADC0809及單片機中的數據利用軟體來進行處理,從而把數據傳輸到顯示模塊,實現阻值大小的顯示。以數碼管顯示為顯示模塊,把單片機傳來的數據顯示出來。在顯示電路中,主要靠按鍵來實現各種顯示要求的選擇與切換。
對於模數轉換部分,單片機89C51通過P0口的I/O線向ADC0809發送鎖存地址以及復位、啟動轉換等信號,並查詢轉換狀態。 ADC0809啟動轉換後,將0-8個通道一次輸入的電壓信號轉換成相應的數字量,供89c51讀取使用,並且將EOC置1供單片機查詢轉換狀態。而滑動變阻器負責將阻值信號轉換成電壓信號,再送到ADC0809的八個通道。當單片機查詢到轉換結束後依次讀取數據並按照現實的需要進行二進制轉BCD碼等處理最後控制顯示電路顯示出數字。 其實現方式是:ADC0809轉換來自3通道的阻值變化信號。80c51的P2口與ADC0809的輸出相連用於讀取轉換結果,同時P0.0-P0.6作控制匯流排,向ADC0809發送鎖存、啟動等控制信息,並查詢EOC狀態。ALE經分頻後給ADC0809提供時鍾信號。P3.0和P3.1口用於向顯示電路輸出段碼,P3.2-P3.7用於數碼管的位選。
四 系統硬體設計
結合本設計的要求和技術指標,通過對系統大致程序量的估計和系統工作的估計,考慮價格因素。選定AT89C51單片機作為系統的主要控制晶元,8位模擬轉換器ADC0809進行阻值轉換。 逐次比較法A/D轉換器是目前種類最多、應用最廣的A/D轉換器,其原理即「逐位比較」,其過程類似於用砝碼在天平上稱物體重量。它由N位寄存器、A/D轉換器、比較器和控制邏輯等部分組成,N位寄存器代表N位二進制碼。目前應用最廣的逐次比較法A/D轉換器有ADC0809。它是一種8路模擬輸入8位數字輸出的逐次比較法A/D轉換器件。其主要性能指標和特性如下:
分表率:8位
轉換時間:取決於晶元時鍾頻率,轉換一次時間位64個時鍾周期
單一電源:+5v
模擬輸入電壓范圍:單極性0-+5v;雙極性-5v-+5v
具有可控三態輸出鎖存器
啟動轉換控制位脈沖式,上升沿使內部所有寄存器清零,下降沿使A/D轉換開始。
通過以上性能比較,我們不難看出ADC0809滿足本設計的要求,所以本設計採用ADC0809作為A/D轉換器
1 按鍵電路設計
利用單片機的P1口擴展一個8位鍵盤。
2 晶振與復位電路設計
本設計採用的是上電復位的形式,如圖3.3所示,上電順進RST獲得高電平,隨著電容器C的充電,RST引腳上的高電平將逐漸下降,只要高電平能保持復位所需要的兩個機器周期以上時間,單片機就能實現復位操作。 晶振電路為單片機提供工作所需要的時鍾信號。震盪頻率越高,系統時鍾頻率也越高,單片機運行的速度就越快。其電路如圖3.4所示。89C51的_TAL1和_TAL2兩個引腳跨接晶體振盪器和微調電容C1、C2形成反饋電路,就構成了穩定的自激振盪器,本設計的震盪器頻率為12MHZ。
3 下載電路設計
4 流水燈模塊設計
5 模數轉換模塊設計
6 顯示電路設計
本設計採用六位數碼管。本系統採用共陽極動態掃描的方式連接。數碼管的段碼數據由89C51的P3.0-P3.1口送出,89C51的P3.2-P3.7輸出位選通信號,只有被選中的那位數碼管才會顯示段碼
7 整體電路設計
五 系統軟體設計
1主程序設計
主程序採用分支結構,以狀態號標識系統所處的狀態。在上電初始化後即進入狀態號的輪詢掃描,狀態號的值決定了分支程序的入口。其中分支程序分別為:AD轉換模塊(狀態號為0),數字模塊狀態號為1),倒計時模塊(狀態號為2),電子鍾模塊(狀態號為3),功能組合模塊(狀態號為4),流水燈模塊(狀態號為5)。
2 功能子程序設計
2.1 流水燈模塊
流水燈模塊利用單片機的P3口,通過給P3口的各位送低電平,相應的實現流水燈有規律的點亮。
2.2 30秒倒計時模塊
30秒倒計時模塊利用單片機的P3.0與P3.1口送相應的段控數據,P3.2-P3.7口送相應的位控數據。通過程序實現30秒倒計時。
2.3 數字加減模塊
利用數碼管實現數字顯示,通過加一鍵或者是減一鍵實現數字變數的加一或者減一,進而實現利用數碼管顯示加一鍵、減一鍵功能。
2.4 電子鍾模塊
利用數碼管實現時間顯示,通過加一鍵或者是減一鍵實現小時變數或者是分鍾變數的加一,從而實現調時功能。
2.5 模數轉換模塊
對於模數轉換部分,單片機89C51通過P0口的I/O線向ADC0809發送鎖存地址以及復位、啟動轉換等信號,並查詢轉換狀態。 ADC0809啟動轉換後,將0-8個通道一次輸入的電壓信號轉換成相應的數字量,供89c51讀取使用,並且將EOC置1供單片機查詢轉換狀態。而滑動變阻器負責將阻值信號轉換成電壓信號,再送到ADC0809的八個通道。當單片機查詢到轉換結束後依次讀取數據並按照現實的需要進行二進制轉BCD碼等處理最後控制顯示電路顯示出數字。 其實現方式是:ADC0809轉換來自3通道的阻值變化信號。80c51的P2口與ADC0809的輸出相連用於讀取轉換結果,同時P0.0-P0.6作控制匯流排,向ADC0809發送鎖存、啟動等控制信息,並查詢EOC狀態。ALE經分頻後給ADC0809提供時鍾信號。P3.0和P3.1口用於向顯示電路輸出段碼,P3.2-P3.7用於數碼管的位選。
六 實習總結 、體會
本次單片機實習我們一共完成了個模塊的程序設計,包括:led顯示模塊、數碼管顯示模塊和鍵盤模塊。分別實現了流水燈的循環點亮控制、數碼管的靜態和動態計數顯示,還有矩陣鍵盤按鍵控制數碼管顯示的程序設計。然後我們分別用protues系統模擬軟體對各個模塊進行了模擬模擬,用keil軟體編制了匯編語言程序,驗證了我們所設計的程序。 這次實習還使我理解了編寫程序的一些技巧。單片機應用系統一般由包含多個模塊的主程序和由各種子程序組成。每一模塊都要完成一個明確的任務,實現某個具體的功能,如計算、接受、發送、延時、顯示等。採用模塊化程序設計方法,就是將這些具體功能程序進行獨立設計和分別調試,最後將這些模塊程序裝配成整體程序並進行聯合調試。模塊化程序設計方法的優點:一個模塊可以為多個程序所共享;單個功能明確的程序模塊的設計和調試比較方便,容易完成;利用已經編好的成熟模塊,將大大縮短開發程序的時間,降低開發成本。採用循環結構和子程序結構可以使程序的容量大大減少,提高程序的效率,節省內存。對於多重循環,要注意各重循環的初值和循環結束的條件,避免出現程序無休止循環的「死循環」現象; 通過這次的實習我發現,只有理論水平提高了,才能夠將課本知識與實踐相結合,理論知識服務於教學實踐,以增強自己的動手能力。這次實習十分有意義,這次實習我們知道了理論和實踐的距離,也知道了理論和實踐相結合的重要性。 回顧起此次課程設計,感覺受益匪淺,從拿到題目到完成整個編程,從理論到實踐,學到很多很多的課堂理論中沒學到過的東西,不僅對鍵盤的識別技術這一章節的知識點有了深刻的認識,而且對這學期開設的單片機這門課程有了更全面的了解,尤其是在學習使用proteus軟體片編程和模擬時收獲良多。通過這次單片機課程設計,還使我懂得了實踐的重要性。同時在程序調試的過程中提高自己的發現問題、解決問題、實際動手和獨立思考的能力。 這次課程設計能順利的完成,除了我們的努力外,當然也離不開指導老師申老師的辛勤指導,致使我在設計的過程中學到了很多實用性的知識。同時,對給過我幫助的所有同學和各位指導老師表示忠心的感謝!
▼ 單片機實訓總結範文篇四:
通過為期一周的單片機實訓,是我們對這門課有了許多新的了解,彌補了在課堂上學習的不足。相信這對我們以後的學習和工作都會有很大的幫助。我們一定要在最短的時間里對這些不足加以改正!
首先,在這次試訓中我被單片機強大的功能所震撼,以前在課堂上完全沒有能理解可編程單片機的優越性。這次通過實體模擬軟體等輔助軟體的共同效果,是這次試訓有了鮮明的活力。換是我們認識到這次試訓不僅僅是一個軟體的應用,更多的是使我們認識到學習到很多在課堂上無法得到的東西。特別是protues軟體的功能是我們了解了當今開發系統的新方向,簡直太不可思議啦!
單片機作為一種最簡單的軟體,與我們的日常生活息息相關,了解一些單片機程序的簡單錄入是非常必要的。如:LED顯示器、鍵盤和顯示器的應用和原理。
在被刺實訓中我們每個人通過一個八位流水燈的製作,使我們深深地體會到了單片機在現實生活中的小小應用,既增強了我們的好奇心,又鞏固了我們的理論知識。更讓我們體會到了單片機手動的開始平台的完善與成熟。只要你有想法,單片機就有可能讓他成為現實。這里我學習完protues軟體後的第一感覺是,雖然這軟體工作不穩定,但是會有相當不錯的效果出來。這對我以後的工作一定會有幫助的。在這次試訓中不僅只對單片機編程有了新的認識,還對整個單片機的開發平台都有了一廳的了解,這是一筆不錯的收獲。
通過這幾天的試訓,使我的感觸很深,真實「條條大路通羅馬」,要達到目的,不同的人就有不同的方法。只要你的方法不錯!五花八門都可以,而且是各有特色。走出來的結果都有各自的獨到之處。在編程中「簡」字貫穿於整個程序設計中,越簡單越好,畢竟單片機留給用戶的資源是有限的,所以我們要充分利用這些資源,達到更好的效果,這些是我們在以後的學習生活中應值得注意的地方。
在試訓中有苦有甜,當我們為一個很難攻破的程序找出路時,心情煩躁,感覺自己很不可理喻,當程序一點一點編好後,自己從心底感覺到一點小小的安慰,看著自己的成果。感覺很欣慰,有一絲絲的甜意,幾天的實訓使自己的思維邏輯也有了小小的進步。
▼ 單片機實訓總結範文篇五:
這是我第一次做單片機實驗,說起來有一些緊張和新奇。在此之前我並沒有接觸過單片機,我本以為與之前的光學實驗及 其它 實驗差不多,可我進到實驗室之後,我就改變了這個看法。
單片機實驗要求的是一種思維的創新,而不是簡單的重復老師所說的實驗步驟。因此第一次實驗,實驗老師向我們講解了CVAVR編譯器的大體情況及使用方法和技巧,並簡單的向我們示例——如何在CVAVR中編寫一段程序。編完程序之後,知道我們如何使用AVRStudio達到將編好的程序輸入到單片機中來使其運行。
之後老師讓我們以組為單位合作編寫一段程序,並使其運行。我們組想要編寫一個跑馬燈的程序。在第一次運行CVAVR時,我們組就遇到了一個麻煩,我們在建立一個新project文件那裡出現了錯誤。在保存這個新project文件的時候,我們單擊了Save,而不是Generate,SaveandE_it.因此它彈不出我們我們所需要的源程序。之後我們通過詢問其他人解決了這個問題。在編程中,我們開始做的是兩盞燈的交替閃爍,間隔時間是1000ms。在運用AVRStudio的時候,我們又犯了一個錯誤。在我們打開編譯好的工程文件時,開始調試,在最後一步點擊Finish時,彈出一對話框,問我們是否更新,然後我們單擊了Yes。這導致了模擬器無法下次使用。這是由於實驗室中的模擬器是盜版的,無法進行更新。
經過我們的不斷努力,我們終於實現了簡單的跑馬燈的運行,便是兩個燈地交替閃爍。我們感到興奮極了。但是我們並沒有滿足於當前,我們又編寫了三個燈地交替閃爍,四個及多個。當我們一步步實現我們的目的時,我得到莫大成就感和自信。
在這次實驗中,我體會到了合作的重要性。一個人也可能實現這一系列的過程,但是要花費很多精力和時間。群策群力,分工明確,可以使我們更好、更快地完成我們的工作。在此期間,你可以更好知道自己的不足和缺陷,來得到改正。還可以知道自己的優勢所在,把握好自己的優勢。
單片機實訓總結相關 文章 :
★ 單片機實訓報告範文精選5篇
★ 單片機實訓總結範文3篇
★ 單片機實驗心得體會範文
★ 單片機實訓報告範文
★ 單片機實訓工作報告範文精選
★ 單片機實習報告範文
★ 單片機實驗的心得體會
★ 單片機課程設計心得體會3篇
★ 實驗總結5篇精選
★ 單片機設計的心得體會
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm..com/hm.js?"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();2. 我們有個數據結構的哈夫曼編碼解碼的課程設計,你能幫幫我嗎
樹和哈夫曼樹實驗報告
一.實驗目的
練習樹和哈夫曼樹的有關操作,和各個演算法程序,理解哈夫曼樹的編碼和解碼
二.實驗環境
Microsoft visual c++
三.實驗問題描述
1. 問題描述:建立一棵用二叉鏈表方式存儲的二叉樹,並對其進行遍歷(先序、中序和後序),列印輸出遍歷結果。
基本要求:從鍵盤接受輸入先序序列,以二叉鏈表作為存儲結構,建立二叉樹(以先序來建立),並將此二叉樹按照「樹狀形式」列印輸出,然後對其進行遍歷(先序、中序和後序),最後將遍歷結果列印輸出。在遍歷演算法中要求至少有一種遍歷採用非遞歸方法。
測試數據:
ABCØØDEØGØØFØØØ(其中Ø表示空格字元)
輸出結果為:
先序:ABCDEGF
先序:CBEGDFA
先序:CGEFDBA
2. 問題描述:利用哈夫曼編碼進行通信可以大大提高信道利用率,縮簡訊息傳輸時間,降低傳輸成本。但是,這要求在發送端通過一個編碼系統對待傳數據預先編碼,在接受端將傳來的數據進行解碼(復原)。對於雙工信道(即可以雙向傳輸信息的信道),每端都需要一個完整的編/解碼系統。試為這樣的信息收發站寫一個哈夫曼碼的編/解碼系統。
基本要求:(至少完成功能1-2)
一個完整的系統應具有以下功能:
I:初始化(Initialization)。從終端讀入字元集大小n,以及n個字元和n個權值,建立哈夫曼樹,並將它存於文件hfmTree中。
基本要求:
E:編碼(Encoding)。利用已建好的哈夫曼樹(如不在內存,則從文件hfmTree中讀入),對文件ToBeTran中的正文進行編碼,然後將結果存入文件CodeFile中。
D:解碼(Decoding )。利用已建好的哈夫曼樹將文件CodeFile中的代碼進行解碼,結果存入文件TextFile中。
P:印代碼文件(Print)。將文件CodeFile以緊湊格式顯示在終端上,每行50個代碼。同時將此字元形式的編碼文件寫入文件CodePrint中。
T:印哈夫曼樹(TreePrinting)。將已在內存中的哈夫曼樹以直觀的方式(樹或凹入表形式)顯示在終端上,同時將此字元形式的哈夫曼樹寫入文件TreePrint中。
測試數據:
設權值w=(5,29,7,8,14,23,3,11),n=8。
按照字元『0』或『1』確定找左孩子或右孩子,則權值對應的編碼為:
5:0001,29:11,7:1110,8:1111
14:110,23:01,3:0000,11:001
用下表給出的字元集和頻度的實際統計數據建立哈夫曼樹,並實現以下報文的編碼和解碼:「THIS PROGRAM IS MY FAVORITE」。
四.實驗主要程序流
實驗題目一主要程序:
1.
void CreatBiTree(BitTree *bt)//用擴展先序遍歷序列創建二叉樹,如果是#當前樹根置為空,否則申請一個新節點//
{
char ch;
ch=getchar();
if(ch=='.')*bt=NULL;
else
{
*bt=(BitTree)malloc(sizeof(BitNode));
(*bt)->data=ch;
CreatBiTree(&((*bt)->LChild));
CreatBiTree(&((*bt)->RChild));
}
}
2.void Visit(char ch)//訪問根節點
{
printf("%c ",ch);
}
3.
void PreOrder(BitTree root)
{
if (root!=NULL)
{
Visit(root ->data);
PreOrder(root ->LChild);
PreOrder(root ->RChild);
}
}
4. void InOrder(BitTree root)
{
if (root!=NULL)
{
InOrder(root ->LChild);
Visit(root ->data);
InOrder(root ->RChild);
}
}
5.int PostTreeDepth(BitTree bt) //後序遍歷求二叉樹的高度遞歸演算法//
{
int hl,hr,max;
if(bt!=NULL)
{
hl=PostTreeDepth(bt->LChild); //求左子樹的深度
hr=PostTreeDepth(bt->RChild); //求右子樹的深度
max=hl>hr?hl:hr; //得到左、右子樹深度較大者
return(max+1); //返回樹的深度
}
else return(0); //如果是空樹,則返回0
}
6.void PrintTree(BitTree Boot,int nLayer) //按豎向樹狀列印的二叉樹 //
{
int i;
if(Boot==NULL) return;
PrintTree(Boot->RChild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c\n",Boot->data);
PrintTree(Boot->LChild,nLayer+1);
}
7.void main()
{
BitTree T;
int h;
int layer;
int treeleaf;
layer=0;
printf("請輸入二叉樹中的元素(以擴展先序遍歷序列輸入,其中.代表空子樹):\n");
CreatBiTree(&T);
printf("先序遍歷序列為:");
PreOrder(T);
printf("\n中序遍歷序列為:");
InOrder(T);
printf("\n後序遍歷序列為:");
PostOrder(T);
h=PostTreeDepth(T);
printf("\此二叉樹的深度為:%d\n",h);
printf("此二叉樹的橫向顯示為:\n");
PrintTree(T,layer);
}
實驗二主要程序流:
1.int main(){
HuffmanTree huftree;
char Choose;
while(1){
cout<<"\n**********************歡迎使用哈夫曼編碼/解碼系統**********************\n";
cout<<"*您可以進行以下操作: *\n";
cout<<"*1.建立哈夫曼樹 *\n";
cout<<"*2.編碼(源文已在文件ToBeTra中,或鍵盤輸入) *\n";
cout<<"* 3.解碼(碼文已在文件CodeFile中) *\n";
cout<<"* 4.顯示碼文 *\n";
cout<<"* 5.顯示哈夫曼樹 *\n";
cout<<"* 6.退出 *\n"; cout<<"***********************************************************************\n";
cout<<"請選擇一個操作:";
cin>>Choose;
switch(Choose)
{
case '1':
huftree.CreateHuffmanTree();
break;
case '2':
huftree.Encoder();
break;
case '3':
huftree.Decoder();
break;
case '4':
huftree.PrintCodeFile();
break;
case '5':
huftree.PrintHuffmanTree();
break;
case '6':
cout<<"\n**********************感謝使用本系統!*******************\n\n";
system("pause");
return 0;
}//switch
}//while
}//main
2.// 建立哈夫曼樹函數
// 函數功能:建立哈夫曼樹(調用鍵盤建立哈夫曼樹或調用從文件建立哈夫曼樹的函數)
void HuffmanTree::CreateHuffmanTree()
{char Choose;
cout<<"你要從文件中讀入哈夫曼樹(按1),還是從鍵盤輸入哈夫曼樹(按2)?";
cin>>Choose;
if(Choose=='2') { //鍵盤輸入建立哈夫曼樹 CreateHuffmanTreeFromKeyboard();
}//choose=='2'
else { //從哈夫曼樹文件hfmTree.dat中讀入信息並建立哈夫曼樹
CreateHuffmanTreeFromFile();
}
}
3. // 從鍵盤建立哈夫曼樹函數
// 函數功能:從鍵盤建立哈夫曼樹
//函數參數:無
//參數返回值:無
void HuffmanTree::CreateHuffmanTreeFromKeyboard(){
int Num;
cout<<"\n請輸入源碼字元集個數:";
cin>>Num;
if (Num<=1) {
cout<<"無法建立少於2個葉子結點的哈夫曼樹。\n\n";
return;
}
LeafNum=Num;
Node=new HuffmanNode[2*Num-1];
for(int i=0;i<Num;i++) {//讀入哈夫曼樹的葉子結點信息
cout<<"請輸入第"<<i+1<<"個字元值";
getchar();
Node[i].sourcecode=getchar(); //源文的字元存入字元數組Info[]
getchar();
cout<<"請輸入該字元的權值或頻度";
cin>>Node[i].weight; //源文的字元權重存入Node[].weight
Node[i].parent=-1;
Node[i].lchild=-1;
Node[i].rchild=-1;
Node[i].code="\0";
}
for(int j=Num;j<2*Num-1;j++) {//循環建立哈夫曼樹內部結點
int pos1,pos2;
int max1,max2;
pos2=pos1=j;
max2=max1=numeric_limits<int>::max( );
//在所有子樹的根結點中,選權重最小的兩個根結點,pos1最後應指向權重最小的根結點的下標
//pos2最後應指向權重第二小的根結點的下標
//max1存放當前找到的權重最小的根結點的權重
//max2存放當前找到的權重第二小的根結點的權重
for(int k=j-1;k>=0;k--) {
if (Node[k].parent==-1){//如果是某棵子樹的根結點
if (Node[k].weight<max1){ //發現比當前最大值還大的權重
max2=max1;
max1=Node[k].weight;
pos2=pos1;
pos1=k;
}
else
if(Node[k].weight<max2){ //發現比當前次大值還大的次大權重
max2=Node[k].weight;
pos2=k;
}
}//if (Node[j].parent==-1)
} //for
//在下標i處新構造一個哈夫曼樹的內部結點,其左、右孩子就是以上pos1、pos2所指向的結點
Node[pos1].parent=j;
Node[pos2].parent=j;
Node[j].lchild=pos1;
Node[j].rchild=pos2;
Node[j].parent=-1;
Node[j].weight=Node[pos1].weight+Node[pos2].weight;
} //for
//產生所有葉子結點中字元的編碼
for (int m=0;m<Num;m++) {
//產生Node[i].sourcecode的編碼,存入Node[i].code中
int j=m;
int j1;
while(Node[j].parent!=-1) { //從葉結點開始往根結點走,每往上走一層,就產生一位編碼存入code[]
j1=Node[j].parent;
if(Node[j1].lchild==j)
Node[m].code.insert(0,"0");
else
Node[m].code.insert(0,"1");
j=j1; }}
cout<<"哈夫曼樹已成功構造完成。\n";
//把建立好的哈夫曼樹寫入文件hfmTree.dat
char ch;
cout<<"是否要替換原來的哈夫曼樹文件(Y/N):";
cin>>ch;
if (ch!='y'&&ch!='Y') return;
ofstream fop;
fop.open("hfmTree.dat",ios::out|ios::binary|ios::trunc); //打開文件
if(fop.fail()) {
cout<<"\n哈夫曼樹文件打開失敗,無法將哈夫曼樹寫入hfmTree.dat文件。\n";
return;
}
fop.write((char*)&Num,sizeof(Num)); //先寫入哈夫曼樹的葉子結點個數
for(int n=0;n<2*Num-1;n++) { //最後寫入哈夫曼樹的各個結點(存儲在Node[]中)
fop.write((char*)&Node[n],sizeof(Node[n]));
flush(cout); }
fop.close(); //關閉文件
cout<<"\n哈夫曼樹已成功寫入hfmTree.dat文件。\n";}
4. // 從文件建立哈夫曼樹函數
// 函數功能:從文件建立哈夫曼樹
//函數參數:無
//參數返回值:無
void HuffmanTree::CreateHuffmanTreeFromFile(){
ifstream fip;
fip.open("hfmTree.dat",ios::binary|ios::in);
if(fip.fail()) {
cout<<"哈夫曼樹文件hfmTree.dat打開失敗,無法建立哈夫曼樹。\n";
return;
}
fip.read((char*)&LeafNum,sizeof(LeafNum));
if (LeafNum<=1) {
cout<<"哈夫曼樹文件中的數據有誤,葉子結點個數少於2個,無法建立哈夫曼樹。\n";
fip.close();
return;
}
Node=new HuffmanNode[2*LeafNum-1];
for(int i=0;i<2*LeafNum-1;i++)
fip.read((char*)&Node[i],sizeof(Node[i]));
fip.close();
cout<<"哈夫曼樹已從文件成功構造完成。\n";
}
5. // 編碼函數
// 函數功能:為哈夫曼樹編碼
//函數參數:無
//參數返回值:無
void HuffmanTree::Encoder()
{
if(Node==NULL) { //內存沒有哈夫曼樹,則從哈夫曼樹文件hfmTree.dat中讀入信息並建立哈夫曼樹
CreateHuffmanTreeFromFile();
if (LeafNum<=1) {
cout<<"內存無哈夫曼樹。操作撤銷。\n\n";
return;
}
}//if
char *SourceText; //字元串數組,用於存放源文
//讓用戶選擇源文是從鍵盤輸入,還是從源文文件ToBeTran.txt中讀入
char Choose;
cout<<"你要從文件中讀入源文(按1),還是從鍵盤輸入源文(按2)?";
cin>>Choose;
if(Choose=='1') {
ifstream fip1("ToBeTran.txt");
if(fip1.fail()) {
cout<<"源文文件打開失敗!無法繼續執行。\n";
return;
}
char ch;
int k=0;
while(fip1.get(ch)) k++; //第一次讀文件只統計文件中有多少個字元,將字元數存入k
fip1.close();
SourceText=new char[k+1]; //申請存放源文的字元數組空間
ifstream fip2("ToBeTran.txt"); //第二次讀源文文件,把內容寫入SourceText[]
k=0;
while(fip2.get(ch)) SourceText[k++]=ch;
fip2.close();
SourceText[k]='\0';
}
else { //從鍵盤輸入源文
string SourceBuff;
cin.ignore();
cout<<"請輸入需要編碼的源文(可輸入任意長,按回車鍵結束):\n";
getline(cin,SourceBuff,'\n');
int k=0;
while(SourceBuff[k]!='\0')
k++;
SourceText=new char[k+1];
k=0;
while(SourceBuff[k]!='\0') {
SourceText[k]=SourceBuff[k];
k++;
}
SourceText[k]='\0';
}
cout<<"需編碼的源文為:";
cout<<SourceText<<endl;
//開始解碼
ofstream fop("CodeFile.dat",ios::trunc); //打開碼文存放文件
int k=0;
while(SourceText[k]!='\0') //源文串中從第一個字元開始逐個編碼
{
int i;
for(i=0;i<LeafNum;i++){ //找到當前要編碼的源文的字元在哈夫曼樹Node[]中的下標
if(Node[i].sourcecode==SourceText[k]) { //將對應編碼寫入碼文文件
fop<<Node[i].code;
break;
};
}
if (i>=LeafNum) {
cout<<"源文中存在不可編碼的字元。無法繼續執行。\n"<<endl;
fop.close();
return;
}
k++; //源文串中的字元後移一個
}
fop.close();
cout<<"已完成編碼,碼文已寫入文件CodeFile.dat中。\n\n";
}
6. // 解碼函數
// 函數功能:對哈夫曼樹進行解碼
//函數參數:無
//參數返回值:無
void HuffmanTree::Decoder()
{//如果內存沒有哈夫曼樹,則從哈夫曼樹文件hfmTree.dat中讀入信息並建立哈夫曼樹
if(Node==NULL)
{
CreateHuffmanTreeFromFile();
if (LeafNum<=1) {
cout<<"內存無哈夫曼樹。操作撤銷。\n\n";
return;
}
}
//將碼文從文件CodeFile.dat中讀入 CodeStr[]
ifstream fip1("CodeFile.dat");
if(fip1.fail()) {
cout<<"沒有碼文,無法解碼。\n";
return;
}
char* CodeStr;
int k=0;
char ch;
while(fip1.get(ch)){
k++;
}
fip1.close();
CodeStr=new char[k+1];
ifstream fip2("CodeFile.dat");
k=0;
while(fip2.get(ch))
CodeStr[k++]=ch;
fip2.close();
CodeStr[k]='\0';
cout<<"經解碼得到的源文為:";
ofstream fop("TextFile.dat");
int j=LeafNum*2-1-1; //j指向哈夫曼樹的根
int i=0; //碼文從第一個符號開始,順著哈夫曼樹由根下行,按碼文的當前符號決定下行到左孩子還是右孩子
while(CodeStr[i]!='\0') { //下行到哈夫曼樹的葉子結點處,則譯出葉子結點對應的源文字元
if(CodeStr[i]=='0')
j=Node[j].lchild;
else
j=Node[j].rchild;
if(Node[j].rchild==-1) { //因為哈夫曼樹沒有度為1的結點,所以此條件等同於Node[j]為葉結點
cout<<Node[j].sourcecode; //屏幕輸出譯出的一個源文字元
fop<<Node[j].sourcecode;
j=LeafNum*2-1-1; //j再指向哈夫曼樹的根
}
i++;
}
fop.close();
cout<<"\n解碼成功且已存到文件TextFile.dat中。\n\n";
}
7. // 輸出碼文函數
// 函數功能:從文件中輸出哈夫曼樹的碼文
//函數參數:無
//參數返回值:無
void HuffmanTree::PrintCodeFile()
{
char ch;
int i=1;
ifstream fip("CodeFile.dat");
ofstream fop("CodePrin.dat");
if(fip.fail())
{
cout<<"沒有碼文文件,無法顯示碼文文件內容。\n";
return;
}
while(fip.get(ch))
{cout<<ch;
fop<<ch;
if(i==50)
{
cout<<endl;
fop<<endl;
i=0;
}
i++;
}
cout<<endl;
fop<<endl;
fip.close();
fop.close();
}
8. // 輸出函數
// 函數功能:從內存或文件中直接輸出哈夫曼樹
//函數參數:無
//參數返回值:無
void HuffmanTree::PrintHuffmanTree()
{
//如果內存沒有哈夫曼樹,則從哈夫曼樹文件hfmTree.dat中讀入信息並建立哈夫曼樹
if(Node==NULL)
{
CreateHuffmanTreeFromFile();
if (LeafNum<=1) {
cout<<"內存無哈夫曼樹。操作撤銷。\n\n";
return; }}
ofstream fop("TreePrint.dat",ios_base::trunc);
fop.close();
PrintHuffmanTree_aoru(2*LeafNum-1-1);
return;
}
3. 求程式控制交換PCM編解碼實驗的畢業設計
程式控制交換原理實驗系統及控制單元實驗
一、 實驗目的
1、熟悉該程式控制交換原理實驗系統的電路組成與主要部件的作用。
2、體會程式控制交換原理實驗系統進行電話通信時的工作過程。
3、了解CPU中央集中控制處理器電路組成及工作過程。
二、 預習要求
預習《程式控制交換原理》與《MCS-51單片計算機原理與應用》中的有關內容。
三、 實驗儀器儀表
1、主機實驗箱 一台
2、三用表 一台
3、電話單機 四台
四、 實驗系統電路組成
(一)電路組成
圖1-1是該實驗系統的原理框圖
圖1-1 實驗系統的原理框圖
圖1—2是該實驗系統的方框圖,其電路的組成及主要作用如下:
1、用戶模塊電路 主要完成BORSCHT七種功能,它由下列電路組成:
A、 用戶線介面電路
B、 二\四線變換器
C、 PCM編解碼電路
用戶線介面電路 二/ 四線變換器 二/四線變換器 用戶線介面電路
用戶1 PCM CODEC電路 PCM CODEC電路 用戶3
用戶線介面電路 二/ 四線變換器 二/ 四線變換器 用戶線介面電路
用戶2 PCM CODEC電路 PCM CODEC電路 用戶4
時鍾信號電路 控制、檢測電路 輸出顯示電路 二次穩壓電路
多種信號音電路 CPU中央處理器 鍵盤輸入電路 直流電源
圖1-2實驗系統方框圖
2、交換網路系統 主要完成空分交換與時隙交換兩大功能,它由下列電路組成:
A、空分交換網路系統
B、時隙交換網路系統
3、多種信號音電路 主要完成各種信號音的產生與發送,它由下列電路組成:
A、450Hz撥號音電路
B、忙音發生電路
C、回鈴音發生電路
D、25Hz振鈴信號電路
4、CPU中央集中控制處理器電路 主要完成對系統電路的各種控制,信號檢測,號碼識別,鍵盤輸入信息,輸出顯示信息等各種功能。
5、系統工作電源 主要完成系統所需要的各種電源,本實驗系統中有+5V,-5V,+12V,-12V,-48V等5組電源,由下列電路組成:
A、內置工作電源:+5V,+12V,-12V,-48V
B、穩壓電源: -8V,-5V
控制部分就是由CPU中央處理系統、輸入電路(鍵盤)、輸出電路(數碼管)、雙音多頻DTMF檢測電路、用戶環路狀態檢測電路、自動交換網路驅動電路與交換網路轉換電路、擴展電路、信號音控制電路等電路組成。
下面簡要說明各部分電路的作用與要求:
1、鍵盤輸入電路:主要把實驗過程中的一些功能通過鍵盤設置到系統中。
2、顯示電路: 顯示主叫與被叫電路的電話號碼,同時顯示通話時間。
3、輸入輸出擴展電路:顯示電路與鍵盤輸入電路主要通過該電路進行工作。主要晶元是D8155A,SN74LS240,MC1413。
4、雙音多頻DTMF接收檢測電路:把MT8870DC輸出的DTMF四位二進制信號,接收存貯後再送給CPU中央集中控制處理系統。
5、用戶狀態檢測電路:主要識別主、被叫用戶的摘掛機狀態,送給CPU進行處理。
6、自動交換網路驅動電路:主要實現電話交換通信時,CPU發出命令信息,由此電路實現驅動自動交換網路系統,其核心集成電路為SN74LS374,D8255A,GD74LS373等晶元。
7、信號音控制電路:它完全按照CPU發出的指令進行操作,使各種信號音按照系統程序進行工作。
8、振鈴控制電路:它也是按照CPU發出的指令進行工作,具體如下:
(A)不振鈴時,要求振鈴支路與供電系統分開。
(B)振鈴時,鈴流送向話機,並且供電系統通過振鈴支路向用戶饋電,用戶狀態檢測電路同時能檢測用戶的忙閑工作狀態。
(C)當振鈴時,用戶一摘機就要求迅速斷開振鈴支路。
(D)振鈴時要求有1秒鍾振、4秒鍾停的通斷比。
以上是CPU中央集中控制處理系統的主要工作過程,要全面具體實現上述工作過程,則要有軟體支持,該軟體程序流程圖見圖1—4。
圖1-3 鍵盤功能框圖
對圖1-3所示的鍵盤功能作如下介紹:
「時間」: 該鍵可設置系統的延時時間。如久不拔號、久不應答、位間不拔號的延時,預設值為10秒,可選擇的時間值有10秒、30秒、1分鍾。按一次該鍵則顯示下一個時間值,三個值循環顯示,當按下「確認」鍵時,就選定當前顯示值供系統使用,按「復位」鍵則清除該次時間的設定。
「會議電話」: 該鍵為召開電話會議的按鍵。電話會議設置用戶1為主叫方,其他三路為被叫方,只能由主叫方主持召開會議,向其他三路發出呼叫。電路完全接通或者接通兩路後,主叫方能和任一被叫方互相通話。除「復位」鍵外,其他鍵均推失去功能。會議結束後,可按「復位」鍵重啟系統。
「中繼」: 該鍵為局內交換切向中繼交換的功能按鍵,按下此鍵,再按「確認」鍵進行確認,則工作模式由局內交換切換為中繼交換,顯示器循環顯示「d」,此時方可通過中繼撥打「長途」電話。按「復位」鍵重啟系統,進入正常局內交換模式。
「確認」: 該鍵完成對其他功能鍵的確認,防止誤按鍵,在鍵盤中除「復位」鍵外,其他功能鍵都必須加「確認」鍵才能完成所定義的功能。
「復位」: 該鍵為重啟系統按鍵。在任何時候或者系統出現不正常狀態時都可按下此鍵重啟系統(有用戶通話時,會中斷通話),所有設置均為默認值。
圖1-5是顯示電路工作示意說明圖。
主叫號碼顯示 計時顯示 被叫號碼顯示
圖1-5 顯示電路
開 始
NO
有用戶呼叫嗎?
呼叫�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1 YES
去 話 接 續
向主叫送撥號音
NO
第一位號碼來了嗎?
撥號開始�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1 YES
停送撥號音,收存號碼
內 部 處 理
撥號完畢�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1
被叫閑嗎? NO
YES
來 話 接 續 向主叫送忙音
向被叫送鈴流,向主叫送回鈴音
被叫應答否? NO
主叫掛機否?
應答�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1 YES
停送鈴流,回鈴音,接通電路 YES
話終掛機否?
掛機�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1�6�1 YES
拆線(釋放復原)
結 束
圖1-4 程序工作流程示意圖
五、實驗內容
1、測量實驗系統電路板中的TP91~TP95各測量點電壓值,並記錄。
2、從總體上初步熟悉兩部電話單機用空分交換方式進行通話。
3、初步建立程式控制交換原理系統及電話通信的概念。
4、觀察並記錄一個正常呼叫的全過程。
5、觀察並記錄一個不正常呼叫的狀態。
圖1-6 呼叫識別電路框圖
五、 實驗步驟
1、接上交流電源線。
2、將K11~K14,K21~K24,K31~K34,K41~K44接2,3腳;K70~K75接2,3腳;K60~K63接2,3腳。
3、先打開「交流開關」,指示發光二極體亮後,再分別按下直流輸出開關J8,J9。此時實驗箱上的五組電源已供電,各自發光二極體亮。
4、按 「復位」鍵進行一次上電復位,此時,CPU已對系統進行初始化處理,數碼管循環顯示「P」 ,即可進行實驗。
5、將三用表拔至直流電壓檔,然後測量TP91,TP92,TP93,TP94,TP95的電壓是否正常:TP91為-12V,TP92為-48V,TP93為+5V,TP94為+12V,TP95為-5V。(-48V允許誤差±10%,其它為±5%)
6、將四個用戶接上電話單機。
7、正常呼叫全過程的觀察與記錄。(現以用戶1為主叫,用戶4為被叫進行實驗)
A、 主叫摘機,聽到撥號音,數碼管顯示主叫電話號碼「68」 。
B、 主叫撥首位被叫號碼「8」,主叫撥號音停,主叫繼續撥完被叫號碼「9」。
C、 被叫振鈴,主叫聽到回鈴音。
D、 被叫摘機,被叫振鈴停,主叫回鈴音停,雙方通話。數碼管顯示主叫號碼和被叫號碼,並開始通話計時。
E、 掛機,任意一方先掛機(如主叫先掛機),另一方(被叫)聽到忙音,計時暫停,雙方都掛機後,數碼管循環顯示「P」 。
8、不正常呼叫的自動處理
A、 主叫摘機後在規定的系統時間內不撥號,主叫聽到忙音。(系統時間可以設置,在系統復位後按「時間」可循環顯示「10」,「30」,「100」,分別表示10秒,30秒,1分鍾,選定一個時間,按「確定」即系統時間被設置,在復位狀態時,系統時間默認為10秒。)
B、 撥完第一位號碼後在規定的系統時間內沒有撥第二位號碼時,主叫聽到忙音。
C、 號碼撥錯時(如主叫撥「56」 ),主叫聽到忙音。
D、 被叫振鈴後在規定的系統時間內不摘機,被叫振鈴音停,主叫聽到忙音。
六、 實驗注意事項
對實驗系統加電一定要嚴格遵循先打開系統工作電源的「交流開關」,然後再打開直流輸出開關J8,J9。實驗結束後,先分別關直流輸出開關J8,J9。最後再關「交流開關」,以避免實驗電路的器件損壞。
七、 實驗報告要求
1、畫出實驗系統電路的方框圖,並作簡要敘述。
2、對正常呼叫全過程進行記錄。
實驗二 用戶線介面電路及二\四線變換實驗
一、實驗目的
1、全面了解用戶線介面電路功能(BORST)的作用及其實現方法。
2、通過對MH88612C電路的學習與實驗,進一步加深對BORST功能的理解。
3、了解二\四線變換電路的工作原理。
二、預習要求
認真預習程式控制交換原理中有關用戶線介面電路等章節。
三、實驗儀器儀表
1、主機實驗箱 一台
2、電話單機 二台
3、20MHz示波器 一台
4、三用表 一台
四、電路工作過程
在現代電話通信設備與程式控制交換機中,由於交換網路不能通過鈴流、饋電等電流,因而將過去在公用設備(如繩路)實現的一些用戶功能放到「用戶電路」來完成。
用戶電路也可稱為用戶線介面電路(Subscriber Line Interface Circuit—SLIC)。任何交換機都具有用戶線介面電路。
模擬用戶線介面電路在實現上的最大壓力是應能承受饋電、鈴流和外界干擾等高壓大電流的沖擊,過去都是採用晶體管、變壓器(或混合線圈)、繼電器等分立元件構成,隨著微電子技術的發展,近十年來在國際上陸續開發多種模擬SLIC,它們或是採用半導體集成工藝或是採用薄膜、厚膜混合工藝,並已實用化。在實際中,基於實現和應用上的考慮,通常將BORSCHT功能中過壓保護由外接元器件完成,編解碼器部分另單成一體,集成為編解碼器(CODEC),其餘功能由所謂集成模擬SLIC完成。
在布控交換機中,向用戶饋電,向用戶振鈴等功能都是在繩路中實現的,饋電電壓一般是-60V,用戶的饋電電流一般是20mA~30 mA,鈴流是25HZ,
90V左右,而在程式控制交換機中,由於交換網路處理的是數字信息,無法向用戶饋電、振鈴等,所以向用戶饋電、振鈴等任務就由用戶線介面電路來承擔完成,再加上其它一些要求,程式控制交換機中的用戶線介面電路一般要具有B(饋電)、O(過壓保護)、R(振鈴)、S(監視)、C(編解碼)、H(混合)、T(測試)七項功能。
模擬用戶線介面電路的功能可以歸納為BORSCHT七種功能,具體含義是:
(1)饋電(B-Battery feeling)向用戶話機送直流電流。通常要求饋電電壓為—48伏,環路電流不小於18mA。
(2)過壓保護(O-Overvoltage protection)防止過壓過流沖擊和損壞電路、設備。
(3)振鈴控制(R-Ringing Control)向用戶話機饋送鈴流,通常為25HZ/90Vrms正弦波。
(4)監視(S-Supervision)監視用戶線的狀態,檢測話機摘機、掛機與撥號脈沖等信號以送往控制網路和交換網路。
(5)編解碼與濾波(C-CODEC/Filter)在數字交換中,它完成模擬話音與數字碼間的轉換。通常採用PCM編碼器(Coder)與解碼器(Decoder)來完成,統稱為CODEC。相應的防混疊與平滑低通濾波器佔有話路(300HZ~3400HZ)帶寬,編碼速率為64kb/s。
(6)混合(H-Hyhird)完成二線與四線的轉換功能,即實現模擬二線雙向信號與PCM發送,接收數字四線單向信號之間的連接。過去這種功能由混合線圈實現,現在改為集成電路,因此稱為「混合電路」。
(7)測試(T-Test)對用戶電路進行測試。
模擬用戶線介面功能見圖2—1。
鈴流發生器 饋電電源
發送碼流
過 振 低通 編
a 壓 測 鈴 饋 混 碼
模
擬 保 試 繼 電 合 平衡 器
用 (編碼信號)
戶 護 開 電 電 電 網路 解
線
b 電 關 器 路 路 碼
路 低通 器
接收碼流
測試 振鈴控台 用戶線
匯流排 制信號彈 狀態信號
圖2-1 模擬用戶線介面功能框
(一)用戶線介面電路
在本實驗系統中,用戶線介面電路選用的是MITEL公司的MH88612C。MH88612C是2/4線厚膜混合用戶線介面電路。它包含向用戶話機恆流饋電、向被叫用戶話機饋送鈴流、用戶摘機後自行截除鈴流,摘掛機的檢測及音頻或脈沖信號的識別,用戶線是否有話機的識別,語音信號的2/4線混合轉換,外接振鈴繼電器驅動輸出。MH88612C用戶電路的雙向傳輸衰耗均為-1dB,供電電源+5V和-5V。其各項性能指標符合郵電部制定的有關標准。
(1)該電路的基本特性
1、向用戶饋送鈴流
2、向用戶恆流饋電
3、過壓過流保護
4、被叫用戶摘機自截鈴
5、摘掛機檢測和LED顯示
6、音頻或脈沖撥號檢測
7、振鈴繼電器驅動輸出
8、語音信號的2/4線轉換
9、能識別是否有話機
10、無需偶合變壓器
11、體積小及低功耗
12、極少量外圍器件
13、厚膜混合型工藝
14、封裝形式為20引線單列直插
圖2-2是它的管腳排列圖
(2)MH88612C引出端功能的說明
0腳:IC Internal Connection:空端。
1腳:TF Tip Feed: 連接外接二極體作為保護電路連到-48V和地。。
2腳:IC Internal Connection:空端。
3腳:VR Voice Receive(input): 四線語音信號的接收端。
4腳:VRef Voltage Reference:設置向用戶電話線送恆流饋電的參考電壓,恆流通過VRef調節;也可接地,一般為21mA環流。
5腳:VEE 負供電電源,通常為-5V DC。
6腳:GNDA 供電電源和饋電電源的地端,模擬接地。
7腳:GS Gain setting(input):低電平時直接接收附加增益為-0.5 dB,
此增益除編解碼增益設置之外的,高電平時為0dB。
8腳:VX Voice Transmit(output):四線語音信號的發送端。
9腳:TIP 連接用戶電話的「TIP」線。
10腳:RING 連接用戶電話的「RING」線。
11腳:RF Ring Feed:外部連接至振鈴繼電器。
12腳:VDD 正供電電源,通常為+5V DC。
13腳:RC Relay Control(input)振鈴繼電器控制輸入端,高電平有效
14腳:RD 振鈴繼電器驅動輸出端,外接振鈴繼電器線圈至地端,內部有一線圈感應箝位二極體。
15腳:RV Ring Feed Voltage:用戶線鈴流源輸入端,外部連接至振鈴繼電器。
16腳:VRLY 振鈴繼電器正供電電源,能常為+5V DC。
17腳:IC Internal Connection:空端。
18腳:VBat 用戶線饋電電壓,通常為-48V DC
19腳:CAP 連接外部電容作為振鈴濾波控制連電阻到地。
20腳:SHK 摘掛機狀態檢測及脈沖號碼輸出端,摘機時輸出高電平。
(3)用戶線介面電路主要功能
圖2-3是MH88612C內部電路方框圖,其主要功能說明如下:
TF VR
TIP
RING VX
RF
RV
VRLY
RC
VRef
RD CAP
SHK
圖2-3 MH88612C內部電路方框圖
1、向用戶話機供電,MH88612C可對用戶話機提供恆流饋電,饋電電流由VBAT以及VDD供給。恆定的電流為25 mA。當環路電阻為2KΩ時,饋電電流為18 mA,具體如下:
A、 供電電源VBat採用-48V;
B、 在靜態情況下(不振鈴、不呼叫),-48V電源通過繼電器靜合接點至話機;
C、 在振鈴時,-48V電源通過振鈴支路經繼電器動合接點至話機;
D、 用戶掛機時,話機叉簧下壓饋電迴路斷開,迴路無電流流過;
E、 用戶摘機後,話機叉簧上升,接通饋電迴路(在振鈴時接通振鈴支路)迴路。
2、MH88612C內部具有過壓保護的功能,可以抵抗保護TIP- -RING埠間的瞬時高壓,如結合外部的熱敏與壓敏電阻保護電路,則可保護250V左右高壓。
3、振鈴電路可由外部的振鈴繼電器和用戶電路內部的繼電器驅動電路以及鈴流電源向用戶饋送鈴流:當繼電器控制端(RC端)輸入高電平,繼電器驅動輸出端(RD端)輸出高電平,繼電器接通,此時鈴流源通過與振鈴繼電器連接的15端(RV端)經TIP––RING埠向被叫用戶饋送鈴流。當控制端(RC端)輸入低電平或被叫用戶摘機都可截除鈴流。用戶電路內部提供一振鈴繼電器感應電壓抑制箝位二極體。
4、監視用戶線的狀態變化即檢測摘掛機信號,具體如下:
A、用戶掛機時,用戶狀態檢測輸出端輸出低電平,以向CPU中央集中控制系統表示用戶「閑」;
B、用戶摘機時,用戶狀態檢測輸出端輸出高電平,以向CPU中央集中控制系統表示「忙」;
5、在TIP––RING埠間傳輸的語音信號為對地平衡的雙向語音信號,在四線VR端與VX端傳輸的信號為收發分開的不平衡語音信號。MH88612C可以進行TIP––RING埠與四線VR端和VX端間語音信號的雙向傳輸和2/4線混合轉換。
6、MH88612C可以提供用戶線短路保護:TIP線與RING線間,TIP線與地間,RING線與地間的長時間的短路對器件都不會損壞。
7、MH88612C提供的雙向語音信號的傳輸衰耗均為-dB。該傳輸衰耗可以通過MH88612C用戶電路的內部調整,也可通過外部電路調整;
8、MH88612C的四線埠可供語音信號編解碼器或交換矩陣使用。
由圖1-1可知,本實驗系統共有四個用戶線介面電路,電路的組成與工作過程均一樣,因此只對其中的一路進行分析。
圖2-4是用戶1用戶線介面電路的原理圖:
圖2-4 用戶線介面電路電原理圖
為了簡單和經濟起見,反映用戶狀態的信號一般都是直流信號,當用戶摘機時,用戶環路閉合,有用戶線上有直流電流流過。主叫摘機表示呼叫信號,被叫摘機,則表示應答信號,當用戶掛機時,用戶環路斷開,用戶線上的直流電流也斷開,因此交換機可以通過檢測用戶線上直流電流的有無來區分用戶狀態。
當用戶摘機時,發光二極體D10亮表示用戶已處於摘機狀態,TP13由低電平變成高電平,此狀態送到CPU進行檢測該路是否摘機,當檢測到該路有摘機時,CPU命令撥號音及控制電路送出f=450HZ,U=3V的波形。
此時,在TP12上能檢測到如圖2—5所示波形
TP12
0 2VP-P t
f = 400~450Hz
圖2-5 450Hz撥號音波形
當用戶聽到450HZ撥號音信號時,用戶開始撥電話號碼,雙音多頻號碼檢測電路檢測到號碼時通知CPU進行處理,CPU命令450HZ撥號音發生器停止送撥號音,用戶繼續撥完號碼,CPU檢測主叫所要被叫用戶的號碼後,立即向被叫用戶送振鈴信號,提醒被叫用戶接聽電話,同時向主叫用戶送回鈴音信號,以表示線路能夠接通,當被叫用戶摘機時,CPU接通雙方線路,通信過程建立。一旦接通鏈路,CPU即開始計時,當任一方先掛機,CPU檢測到後,立即向另一方送忙音,以示催促掛機,至此,主、被叫用戶一次通信過程結束。
通過上述簡單分析,不難得出各測量點的波形。
TP11:通信時有發送話音波形;撥號時有瞬間DTMF波形;不通信時則此點無波形。
TP12:通信時有接收話音波形:摘機後撥號前有450HZ撥號音信號;不通信時則此點無波形。
TP13:摘掛機狀態檢測測量點
掛機:TP13=低電平。
摘機:TP13=高電平。
TP14:振鈴控制信號輸入,高電平有效。即工作時為高電平,常態為低電平。
由於4個用戶線介面電路的測量點相同,故對其它三個用戶線介面電路的測量點就不一一敘述,波形均相同,即:
TP11=TP21=TP31=TP41
TP12=TP22=TP32=TP42
TP13=TP23=TP33=TP43
TP14=TP24=TP34=TP44
(二)二\四線變換電路
在該實驗系統中,二\四線變換由用戶線介面電路中的語音單元電路實現,圖2-6為電路的功能框圖,該電路完成二線–––單端之間信號轉換,在MH88612C內部電路中已經完成了該變換。
T
TR
R
圖2-6 二/四線變換功能框圖
二\四線變換的作用就是把用戶線介面電路中的語音模擬信號(TR)通過該電路的轉換分成去話(T)與來話(R),對該電話的要求是:
1、將二線電路轉換成四線電路;
2、信號由四線收端到四線發端要有盡可能大的衰減,衰減越大越好;
3、信號由二線端到四線發端和由四線收端到二線端的衰減應盡可能小,越小越好;
4、應保持各傳輸端的阻抗匹配;
以便於PCM編解碼電路形成發送與接收的數字信號。
五、實驗內容
1、參考有關程式控制交換原理教材中的用戶線介面電路等單節,對照該實驗系統中的電路,了解其電路的組成與工作過程。
2、通過主叫、被叫的摘、掛機操作,了解B、R、S等功能的具體作用。
六、實驗步驟
1. 接上交流電源線。
2. 將K11~K14,K21~K24,K31~K34,K41~K44接2,3腳;K70~K75接2,3腳;K60~K63接2,3腳。
3. 先打開「交流開關」,指示發光二極體亮後,再分別按下直流輸出開關J8,J9,此時實驗箱上的五組電源已供電,各自發光二極體亮。
4. 按「復位」鍵進行一次上電復位,此時,CPU已對系統進行初始化處理,顯示電路循環顯示「P」,即可進行實驗。
5. 用戶1,用戶3接上電話單機。
6. 用戶電話單機的直流供電(B)的觀測。(現以用戶1為例)
1) 用戶1的電話處於掛機狀態,用三用表的直流檔測量TP1A,TP1B對地的電壓,TP1A為-48V,TP1B為0V,它們之間電壓差為48V。
2) 用戶1的電話處於摘機狀態,用三用表的直流檔測量TP1A,TP1B對地的電壓,TP1A為-10V左右(此時的電壓與電話的內阻抗有關,所以每部電話的測量值不一定相同),TP1B為-3.7V左右。
以上給出的電壓值只是作為參考。
7. 觀察二/四線變換的作用。
1) 用正常的呼叫方式,使用戶1、用戶3處於通話狀態。
2) 當用戶1對著電話講話時(或按電話上的任意鍵),用示波器觀察TP11上的波形,為語音信號(或雙音多頻信號),不講話時無信號。
3) 當用戶1聽到用戶3講話時(或用戶3按電話上任意鍵),用示波器觀察TP12上的波形,為語音信號(或雙音多頻信號),對方不講話時無信號。
4) 用示波器觀察TP1A。不管是用戶1講話還是用戶3講話(或按電話上的任意鍵)此測試點都有語音波形(或雙音多頻信號)。
8. 摘、掛機狀態檢測的觀測。
1) 當用戶1的電話摘機時,用示波器測量TP13為高電平(4V左右)。
2) 當用戶1的電話掛機時,用示波器測量TP13為低電平(0V左右)。
9. 被叫話機振鈴(R)的觀測。
1) 用戶1處於掛機狀態,用戶3呼叫用戶1,即用戶3撥打「68」,使用戶1振鈴。
2)當用戶1的電話振鈴時,用示波器觀察TP14,振鈴時TP14為高電平(3V左右);不振鈴時TP14為低電平(0V左右)。
七、實驗注意事項
當實驗過程中出現不正常現象時,請按一下「復位」鍵,以使系統重新啟動。
八、實驗報告要求
1、畫出本次實驗電路方框圖,並能說出其工作過程。
2、畫出各測量點在各種情況下的波形圖。