標題: 應用8051IP核設計頻率測量系統設計論文 [打印本頁]
作者: 魏春梅 時間: 2017-5-11 23:26
標題: 應用8051IP核設計頻率測量系統設計論文
摘 要
等精度頻率測量系統是在電子測量技術領域應用得較多的電子測量設備。對于一個用戶界面和內部運算都較復雜的等精度頻率測量系統,當前國內的一般的解決方案是單片機+FPGA方案,其中FPGA完成高速的脈沖計數功能,而單片機則進行脈沖計數后的有關計算和LCD、鍵盤等用戶界面的控制。此方案中的FPGA內部資源往往利用不足,造成比較大的浪費。本設計應用SOPC和8051單片機IP技術,通過在FPGA中嵌入8051單片機IP來取代單片機+FPGA方案中的實際的單片機,這樣既少用一個實際的單片機又充分利用FPGA內部資源,大大節省了硬件成本,是一個更好的方案。
目 錄
引言 ................................................................ 1
1 設計內容 ...............................................1
1.1 設計要求 ........................................................1
1.1.1 知識要求 ......................................................1
1.1.2 能力要求 ......................................................1
1.1.3 素質要求 ......................................................1
1.2 研究等精度頻率計的背景與意義 ....................................2
1.3 杭州康芯公司KX_7C5H開發板介紹 ..................................2
1.4 VHDL語言環境簡 ..................................................3
1.5 8051單片機IP簡介 ..............................................3
1.5.1 基本結構 ......................................................4
1.5.2 結構框圖 ......................................................4
1.5.3 特點 .......................................................... 5
1.6 LCD1602液晶顯示器電路的介紹 ...................................5
1.6.1在單片機系統中應用晶液顯示器作為輸出器件的優點 ...............5
1.6.2 液晶顯示簡介 ............................ ......................5
1.6.3 1602字符型LCD簡介 ........................................... 7
1.7 試驗、測試、試制加工所需主要儀器設備及條件 .......................7
2 設計系統方案 ................................................... 8
2.1 系統框架 .........................................................8
2.2 頻率測量模塊 .....................................................8
2.2.1 周期測量方法 ...................................................8
2.2.2 測頻原理 .......................................................9
2.2.3 用VHDL描述硬件電路 ...........................................10
2.3 標準頻率源晶振 ..................................................11
2.4 單片機控制模塊 ..................................................11
2.5 LCD 顯示模塊 ....................................................14
2.6 鍵盤模塊 ........................................................16
2.7 信號放大整形輸入模塊 ............................................16
3 外圍電路設計 ...........................................16
4 系統測試 ...............................................17
4.1 單片機程序調試 ..................................................17
4.2信號放大整形調試 ................................................. 17
4.3 綜合調試 ........................................................18
4.4調試中出現的問題 .................................................18
5 結論 ............................................................18
謝 辭 .............................................................19
參考文獻 ..........................................................20
附錄一:利用VHDL語言設計測頻模塊 ............................21
附錄二:顯示模塊 .................................................22
附錄三:VHDL語言設計代碼 .......................................23
附錄四:單片機匯編語言程序清單 .................................26
引言
隨著微電子技術和計算機技術的迅速發展,以單片機作為核心的測量控制系統層出不窮。其中,數字頻率計是為電子測試、資源勘探以及自動化控制等設備中不可缺少的重要模塊。
對于以頻率為參數的被測信號,通常多采用的是測頻法或測周法。對于頻率變化較小的被測信號, 采用測頻或測周法的效果已經足夠。但當被測信號頻率變化范圍較大,如100Hz~100kHz時,上述方法將很難滿足在整個頻率變化范圍內所要求的測量精度。所以,如果要求有一種測量技術能對頻率變化范圍較大的信號的測量達到相當高的精度時, 就必須采用等精度頻率測量技術。
1 設計內容
設計并通過測試基于8051單片機IP的頻率測量系統。
1.應用8051單片機IP,用VHDL設計一等精度頻率測量儀。
2.設計并制作測量儀的輸入電路。
3.將設計下載到FPGA開發板,連接制作的輸入電路,通過測量儀的測試和檢驗。
1.1 設計要求
1.1.1 知識要求
(1)使用Quartus II軟件設計等精度頻率測量模塊。
(2)使用Quartus II軟件設計應用8051單片機IP的系統頂層模塊。
(3)使用Keil 51軟件設計系統的匯編語言控制程序。
(4)使用Quartus II軟件對以上系統設計進行仿真。
(5)設計、制作外圍電路板。
(6)使用Quartus II軟件把以上設計下載到實際FPGA開發板進行實際測試。
1.1.2.能力要求
(1)通過對等精度頻率測量儀的設計與制作,培養學生勤于思考,勇于實踐的良好作風。
(2)通過實訓,培養學生科學、嚴謹的工作態度,使學生具有發現問題、解決問題的能力。
(3)通過實訓,培養學生對電子系統的設計制作能力。
1.1.3. 素質要求
(1)結合教學內容,注重培養學生的設計意識、工藝分析意識、質量意識。
(2)使學生能鍛煉自己快速收集、整理與分析信息資料的能力。
(3)培養學生敬業和創新的精神,進一步提高團隊合作能力。
1.2 研究等精度頻率計的背景與意義
隨著微電子技術和計算機技術的迅速發展,以單片機作為核心的測量控制系統層出不窮。其中,數字頻率計是為電子測試、資源勘探以及自動化控制等設備中不可缺少的重要模塊。
對于以頻率為參數的被測信號,通常多采用的是測頻法或測周法。對于頻率變化較小的被測信號, 采用測頻或測周法的效果已經足夠。但當被測信號頻率變化范圍較大,如100Hz~100kHz時,上述方法將很難滿足在整個頻率變化范圍內所要求的測量精度。所以,如果要求有一種測量技術能對頻率變化范圍較大的信號的測量達到相當高的精度時, 就必須采用等精度頻率測量技術。本設計利用VHDL語言和復雜系統可編程邏輯器件FPGA開發了一種等精度頻率測量系統。該系統采用VHDL語言編寫程序,選用EDA開發軟件QuartusII作為開發平臺,在FPGA中嵌入8051單片機IP來取代單片機,并具體給出了系統的軟硬件設計流程,完成調試。
1.3 杭州康芯公司KX_7C5H開發板介紹
本次設計采用的是杭州康芯公司KX_7C5H開發板,配置工業級全兼容8051核,實現SOC系統設計,CPU主頻高達250MHz,速度是普通51單片機的20倍,可完成部分DSP處理,還配DDS函數信號發生器IP核,并附有3032CPLD、EPCS Flash、4X4鍵盤、蜂鳴器、20MHz有源晶振蕩、8鍵、8 LED、3數碼管。JTAG、USB電源口/線、混合電壓源、USB線,光盤資料等。含多種類型液晶驅動口,可直接插入并驅動多種類型字符型液晶、點陣型液晶、或/和數字彩色液晶顯示屏。KX_7C系列板貌似一塊普通的FPGA開發板,然而它配有符合工業標準的嵌入CPU-51單片機核,因此可以實現常規FPGA板無法企及的強大功能!
圖1-1 杭州康芯公司KX_7C5H開發板file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
1.4 VHDL語言環境簡介
VHDL主要用于描述設計復雜數字系統的結構、行為、功能和接口,在電子工程設計方面有很多優點。
1.與其他的硬件描述語言相比,VHDL具有更強的行為描述能力,從而決定了它成為系統設計領域最佳的硬件描述語言。
2.VHDL技術完備,具有豐富的仿真語句和庫函數,使得在任何大系統的設計早期就能查驗設計系統的功能可行性,隨時可對設計進行仿真模擬;另外,它還支持同步電路、異步電路和其他電路的設計。
3.VHDL設計方法靈活,對設計的描述具有相對的獨立性,設計者可以不懂硬件的結構,可不管最終設計實現的目標器件是,而進行獨立的設計。
4.VHDL語句的行為描述能力和程序結構決定了他具有支持大規模設計的分解設計功能和已有設計的再利用功能。符合市場要求的多人進行并行研發的大規模系統的迅速完成。
5.VHDL支持廣泛,目前大多數DEA工具幾乎都在不同程度上支持VHDL。
1.5 8051單片機IP簡介
51 單片機最初是由Intel 公司開發設計的,但后來Intel 公司把51 核的設計方案賣給了幾家大的電子設計生產商,譬如 SST、Philip、Atmel 等大公司。如是市面上出現了各式各樣的但均以51 為內核的單片機,倒是Intel 公司自己的單片機卻顯得遜色了。這些各大電子生產商推出的單片機都兼容51 指令、并在51 的基礎上擴展一些功能而內部結構是與51 一致的。
1.5.1基本結構
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpgfile:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
(a) (b)
圖1-2 8051引腳圖
1.5.2結構框架
PC 機的CPU 是基于馮諾伊曼的體系結構,然而MCU(單片機)、Dsp(數字信號處理器)都是基于哈佛結構的體系結構。哈佛結構與馮諾伊曼結構有很大的不同,在馮諾伊曼體系結構下只有一個地址空間,ROM 和RAM 可以隨意安排在這一地址范圍內的不同空間,即ROM 和RAM 地址統一分配。CPU 訪問存儲器時,一個地址對應唯一的存儲單元,可能是ROM,也可能是RAM。而哈佛結構下ROM 和RAM 是分開編址,即程序和數據分開保存,訪問時用不同的指令加以區分,并可同時訪問,在這樣的體系結構下有利于提高指令的執行速度。接下來我們將詳細介紹單片機的存儲器配置。
(1)一個8 位的微處理器(CPU)。
(2)片內數據存儲器RAM(128B/256B),用以存放可以讀/寫的數據,如運算的中間結果、最終結果以及欲顯示的數據等,SST89 系列單片機最多提供1K 的RAM。
(3)片內程序存儲器ROM/EPROM(4KB/8KB),用以存放程序、一些原始數據和表格。但也有一些單片機內部不帶ROM/EPROM,如8031,8032,80C31 等。目前單片機的發展趨勢是將RAM 和ROM 都集成在單片機里面,這樣既方便了用戶進行設計又提高了系統的抗干擾性。SST 公司推出的89 系列單片機分別集成了16K、32K、64K Flash 存儲器,可供用戶根據需要選用。
(4)四個8 位并行I/O 接口P0~P3,每個口既可以用作輸入,也可以用作輸出。
(5)兩個定時器/計數器,每個定時器/計數器都可以設置成計數方式,用以對外部事件進行計數,也可以設置成定時方式,并可以根據計數或定時的結果實現計算機控制。為方便設計串行通信,目前的52 系列單片機都會提供3 個16 位定時器/計數器。
(6)五個中斷源的中斷控制系統。現在新推出的單片機都不只5 個中斷源,例如SST89E58RD 就有9 個中斷源。
(7)一個全雙工UART(通用異步接收發送器)的串行I/O 口,用于實現單片機之間或單機與微機之間的串行通信。
(8)片內振蕩器和時鐘產生電路,但石英晶體和微調電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD 最高允許振蕩頻率達40MHz,因而大大的提高了指令的執行速度。
1.5.3 特點
(1)指令系統與8051單片機完全兼容, 硬件部分也基本相同, 時鐘頻率可比傳統的8051單片機要高。
(2)8051單片機I P core一般無內部ROM 和RAM,所有程序ROM和內部RAM都必須外接。用FPGA實現時, 可使用FPGA片內ROM、RAM資 源 實 現 。
(3)輸出與輸入(I /O)口是分開的。如果需要使用雙向口功能, 必須外接一些電路才能實現。
(4)單片機程序可使用普通8051單片機程序編譯器生成單片機HEX程序代碼, 再在FPGA的EDA開發平臺下下載到充當程序ROM的FPGA片內ROM以供使用。
1.6 LCD1602液晶顯示器電路的介紹
1.6.1在單片機系統中應用液晶顯示器作為輸出器件的優點
(1)顯示質量高
由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質高且不會閃爍。
(2)數字式接口
液晶顯示器都是數字式的,和單片機系統的接口更加簡單可靠,操作更加方便。
(3)體積小、重量輕
液晶顯示器通過顯示屏上的電極控制液晶分子狀態來達到顯示的目的,在重量上比相同顯示面積的傳統顯示器要輕得多。
(4)功耗低
相對而言,液晶顯示器的功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其它顯示器要少得多。
1.6.2液晶顯示簡介
(1)液晶顯示原理
液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規模集成電路直接驅動、易于實現全彩色顯示的特點,目前已經被廣泛應用在便攜式電腦、數字攝像機、PDA移動通信工具等眾多領 域。
(2)液晶顯示器的分類
液晶顯示的分類方法有很多種,通常可按其顯示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據驅動方式來分,可以分為靜態驅動(Static)、單純矩陣驅動(Simple Matrix)和主動矩陣驅動(Active Matrix)三種。
(3)液晶顯示器各種圖形的顯示原理:
①線段的顯示
點陣圖形式液晶由M×N個顯示單元組成,假設LCD顯示屏有64行,每行有128列,每8列對應1字節的8位,即每行由16字節,共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區1024字節相對應,每一字節的內容和顯示屏上相應位置的亮暗對應。例如屏的第一行的亮暗由RAM區的000H——00FH的16字節的內容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。
②字符的顯示
用LCD顯示一個字符時比較復雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應的顯示RAM區的8字節,還要使每字節的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內帶字符發生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。
③漢字的顯示
漢字的顯示一般采用圖形的方式,事先從微機中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據在LCD上開始顯示的行列號及每行的列數可找出顯示RAM對應的地址,設立光標,送上要顯示的漢字的第一字節,光標位置加1,送第二個字節,換行按列對齊,送第三個字節……直到32B顯示完就可以LCD上得到一個完整漢字。
1.6.3 1602字符型LCD簡介
字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。一般1602字符型液晶顯示器實物如下圖:
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
圖1-3 LCD1620引腳圖
圖1-4 1602字符型液晶顯示器實物
1.7 試驗、測試、試制加工所需主要儀器設備及條件
(1)主要儀器及設備:示波器、指針式萬用表、數字式萬用表、FPGA開發板等。
(2)仿真及編程軟件:Quartus II、Keil uvision4編程調試軟件。
(3)電路板制作焊接設備:Protell99SE、打印機、轉印機、腐蝕槽、手動鉆臺、電烙鐵等。
2 設計系統方案
2.1 系統框架
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png 本設計應用SOPC 和 8051 單片機IP 技術, 通過在FPGA 中嵌入8051單片機IP 來取代單片機,其框圖如圖2-1。本系統主要包括信號放大整形輸入模塊 、標準頻率源晶振 、 測頻模塊、單片機控制模塊、LCD 顯示模塊和鍵盤模塊。其中,信號放大整形輸入模塊用來對待測信號的進行前端處理,以便作為測頻模塊的輸入信號。測頻模塊用來測量被測信號的頻率,用 VHDL 語言設計 , 由FPGA 實現計數。 單片機控制模塊使用 8051 單片機 IP核在 FPGA中 實現。單片機控制模塊控制測頻模塊進行測頻,讀取測頻數據 , 并作相應數據處理 , 通過 LCD顯示模塊顯示測量結果。晶振為 FPGA 中的測頻模塊和單片機控制模塊提供標準頻率信號和時鐘信號。
圖2-1 系統框架圖
2.2頻率測量模塊
2.2.1周期測量方法
(1) 直接周期測量法:用被測信號經放大整形后形成的方波信號直接控制計數門控電路,使主門開放時間等于信號周期Tx,時標為Ts的脈沖在主門開放時間進入計數器。設在Tx期間計數值為N,可以根據以下公式來算得被測信號周期:
Tx=NTs (2.1)
經誤差分析,可得結論:用該測量法測量時,被測信號的頻率越高,測量誤差越大。
(2)等精度周期測量法:該方法在測量電路和測量精度上與等精度頻率測量完全相同,只是在進行計算時公式不同,用周期1/T代換頻率f即可,其計算公式為
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
Tx= (2.2)
2.2.2測頻原理
測頻模塊內部結構如圖2-2所示。主要通過一個預置門控制和兩個計數器A,B實現。給CLK一個標準時鐘頻率fc,當測頻開始使,先將CLR置1,使兩個計數器清零。單片機給預置門CTRL置0,不讓計數器計時,然后單片機在給預制門信號CTRL置1,當被測信號Tsig上升沿到來時與預制門信號同步時使能端EN為1,開始計數,經過一個預置時間T時,單片機將預置門信號CTRL置0時,計數器仍然計數,只有Tsig上升沿來臨時使能端EN為0,計數才停止。一個預置時間是被測信號周期的整數倍, 計數器B 沒有普通頻率計的計數器計數最大為一個周期的誤差, 實現等精度測量。計數器A 雖然還有最大為一個周期的誤差, 但由于此誤差與被測信號無關, 并且標準時鐘信號的頻率 fc通常非常高, 故可忽略。在一個預制門時間內,計數器A的計數值為QA=fc*T,計數器B的計數時間為QB=fx*T,由于QA/fc=QB/fx=T,fx=(QA/QB)*fc。一個預制門時間之后,兩計數器的計數值AQ 和BQ 通過多路選擇器MUX64-8,在單片機發出的選通信號SEL 控制下分8 次通過DOUT讀入單片機控制模塊。在單片機控制模塊中由單片機軟件通過以上公式計算待測頻率 fx。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
圖2-2 測頻模塊內部結構圖
2.2.3用VHDL描述硬件電路
(1)D觸發器
D觸發器是現代數字系統中最基本的時序單元和底層元件,本設計的D觸發器在復位信號為高電平CP脈沖的上升沿(或者下降沿)的作用下,把D端的數據打入D觸發器,在復位信號為低電平時,D觸發器的輸出端Q和Qb分別輸出0和1,程序見附錄三。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg
D觸發器邏輯符號
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png
(2)32位計數器
計數器能夠記憶時鐘信號脈沖個數的時序邏輯電路,不僅可以對脈沖進行計數,還可以分頻、定時等。本設計中的32為計數器分別用來計表針頻率信號和被測頻率信號的周期數,計數器是以二進制數據的形式計數,為了提高測量精度所以講計數器設為32位。在計數器使能端EN高電平時,當CLR置1時,計數器清零;當CLR置0,上升沿到來時計數值加1,程序見附錄三。
32位邏輯符號
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg圖2-3 32位計數器仿真圖
(3)MUX64-8多路選擇器
因為單片機的數據總線有限,一次只能讀取一個8位的二進制數據。MUX64-8多路選擇器的作用就是將兩個計數器的64位數值暫存,通過單片機控制限號sel下分八次分八次將數值讀入,程序見附錄三。
MUX64-8多路選擇器邏輯符號
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg
圖2-4 MUX64-8多路選擇器仿真圖
2.3 標準頻率源晶振
本設計使用的是杭州康芯公司KX_7C5H開發板24M本振頻率,進行32次分頻當做計數頻率,將24M頻率進行二分頻用作單片機頻率。
2.4 單片機控制模塊
(1)單片機總流程
首先將操作界面初始化,判斷是否有按鍵按下,確認按鍵按下時,測頻模塊開始測頻,測好的數據讀取單片機,單片機按公式計算:
fx=(QA/QB)*fc (2.3)
主程序不斷掃描鍵盤子程序,當某鍵按下時,程序跳轉到相應的子程序執行其功能,然后返回繼續執行鍵盤掃描主程序。當鍵盤子程序掃描到測頻鍵按下時,讀入鍵值后跳轉到測頻子程序,測頻子程序先置測頻控制位CLR(P1.6)、AS(P1.4)將FPGA內的計數器清零,選擇測量被測信號。并將CS(P1.3)置零,即為選擇測頻,然后通過鍵盤將預置門的時間讀入單片機,打開預置門進行測頻計數,等預置門時間到后,關斷預置門,FPGA關斷預置門后將給單片機一個結束信號,單片機讀入結束信號后,分四次將測頻結果的32位數據讀入單片機,計算后將結果換為BCD碼送LCD1620顯示輸出。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg
圖2-5 單片機總流程圖
(2)測頻子程序流程
測頻開始時,STR口置1讀準備,CTRL置1預制閘門關閉,CLR置1,是兩個計數器同步清零,CTLR置0預制閘門打開,,當STR信號為0,一個時間周期完成,計數完畢,P2數據口準備讀數,分別讀取計數器的數值,測頻結束。該模塊主要完成單片機對FPGA的控制。單片機P0口連接上的8根線路為控制信號線,具體控制功能如下:
P0.0(CLR):脈寬計數復位端,CLR=1時計數器清零,D觸發器觸發狀態。
P0.1(CTRL):單片機給預置門預置時間信號,當CTRL=1,預制門打開,當CTRL=0時,預制門關閉。
P0.7(STR):測頻塊給單片機的信號端,單片機接受到STR=0時,測頻沒有計數完畢,當STR=1,計數接受,將測得的數據傳入單片機。
P0.6 P0.5 P0.4 (sel):計數值讀出選通控制。sel=000,001,010.011,100,101,110,111時可從P2口由低8位至高8位分別讀出兩組4個8位計數值。程序見附錄四。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg
圖2-6 測頻子程序流程
2.5 LCD顯示模塊
使用杭州康芯公司KX_7C5H開發板自帶的LCD1620液晶顯示器和相應的電路,根據相應的字符代碼將數據轉移為可是別的字母和數字,達到顯示的效果。
表2-1 字符型 LCD 的引腳
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg
DDRAM 就是顯示數據 RAM, 用來寄存待顯示的字符代碼。共80個字節, 其地址和屏幕的對應關系 如下表2-2:
表2-2 DDRAM地址和屏幕的對應關系
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image031.png
HD44780的指令集及其設置說明,通過瀏覽該指令集,并找出對DDRAM 的內容和地址進行操作的指令。操作指令共 11 條指令:
(1)清屏指令功能:<1> 清除液晶顯示器,即將 DDRAM 的內容全部填入"空白 "的 ASCII 碼20H; <2> 光標歸位,即將光標撤回液晶顯示屏的左上方; <3> 將地址計數器(AC) 的值設為0。
(2)光標歸位指令功能:<1> 把光標撤回到顯示器的左上方; <2> 把地址計數器(AC) 的值設置為 0; <3> 保持 DDRAM 的內容不變。
(3)進入模式設置指令功能:設定每次定入1位數據后光標的移位方向,并且設定每次寫入的一個字符是否移動。參數設定的情況如下所示:位名設置 I/D 0=寫入新數據后光標左移1=寫入新數據后光標右移S0=寫入新數據后顯示屏不移動 1=寫入新數據后顯示屏整體右移1個字符
(4)顯示開關控制指令功能:控制顯示器開/關、光標顯示/關閉以及光標是否閃爍。 參數設定的情 況如下:位名 設置D 0=顯示功能關 1=顯示功能開C 0=無光標 1=有光標 B0=光標閃爍1=光標不閃爍 。
(5)設定顯示屏或光標移動方向指令功能:使光標移位或使整個顯示屏幕移位。 參數設定的情況如下: S/C R/L 設定情況00光標左移1格,且 AC 值減101光標右移1格,且 AC值加 110 顯示器上字符全部左移一格,但光標不動11顯示器上字符全部右移一格,但光標不動 。
(6)功能設定指令功能:設定數據總線位數、顯示的行數及字型。參數設定的情況如下:位名 設置 DL 0=數據總線為4位 1=數據總線為8位 N0=顯示1行1=顯示2行 F 0=5× 7 點陣/每字符 1=5× 10 點陣/每字符
(7)設定CGRAM 地址指令功能:設定下一個要存入數據的CGRAM的地址。 DB5DB4DB3為字符號,也就是你將來要顯示該字符時要用到的字符地址。(000~111)( 能定義八個字符) DB2DB1DB0 為行號。( 000~111 )(八行)
(8)設定 DDRAM 地址指令功能:設定下一個要存入數據的 DDRAM 的地址。
(9)讀取忙信號或 AC 地址指令功能: <1> 讀取忙碌信號BF的內容,BF=1 表示液晶顯示器忙,暫時無法接收單 片 機送來的數據或指令;當 BF=0 時,液晶顯示器可以接收單片 機送來的數據或指令; <2> 讀取地址計數器(AC) 的內容。
(10)數據寫入 DDRAM 或 CGRAM 指令一覽 功能: <1> 將字符碼寫入 DDRAM,以使液晶顯示屏顯示出相對應的字符; <2> 將使用者自己設計的圖形存入 CGRAM。 DB7DB6DB5 可為任何數據,一般取“000” 。DB4DB3DB2DB1DB0 對應于每行5點的字模數據。
(11)從 CGRAM 或 DDRAM 讀出數據的指令一覽 功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應的字符; <2> 將使用者自己設計的圖形存入CGRAM。 DB7DB6DB5 可為任何數據,一般取“000”。DB4DB3DB2DB1DB0對應于每行 5點的字模數據。功能:讀取DDRAM或CGRAM中的內容。基本操作時序:讀狀態輸入:RS=L,RW=H, E=H 輸出: DB0~ DB7=狀態字 寫指令 輸入:RS=L,RW=L,E=下降沿脈沖,DB0~ DB7=指令碼 輸出:無讀數據 輸入:RS=H,RW=H,E=H 輸出:DB0~ DB7=數據 寫數據輸入:RS=H, RW=L,E=下降沿脈沖,DB0~ DB7=數據 輸出:無
在程序設計中先將液晶初始化,顯示初始操作界面,當測頻開始,按鍵按下,液晶第一行顯示 DIANXIN 1201,第二行顯示待測頻率的大小多少KHz ,可保留兩位小數點。
2.6 鍵盤模塊
本設計因為使用按鍵不多,因此鍵盤使用的是獨立按鍵,主要作用是當按鍵按下時,給單片機信號,開始測頻。鍵盤設計主要是對按鍵進行消抖,分別有軟件消抖和硬件消抖兩種方法。本設計用KX_7C5H開發板上第八個獨立按鍵用做測頻按鍵。使用的是軟件消抖,當按鍵按下時,延時10ms,然后再判斷按鍵是否閉合,若閉合按鍵有效,從而達到消抖的作用。讀取按鍵是否按下,用一個外部中斷0實現 。
2.7 信號放大整形輸入模塊
因為外來信號一般是模擬信號,而單片機的輸入是邏輯電平,也就是高電平的電壓一般在2.4V以上,低電平在0.7V以下,無法直接讀取信號,因此需要對輸入信號進行放大整形,首先是放大幅度,使幅度滿足邏輯電平的需要,其次對于整形我的理解是,單片機采集信號需要使用內部的時鐘進行采集,如果脈沖寬度小于單片機工作的機器周期則單片機是不能采集到的,因此必須用整形電路將信號的幅度進行規范同時將信號的寬度進行規范,以便單片機可以正確識別,因此必須進行整形放大。
3 外圍電路設計
信號放大整形的輸入,利用了UA741CD可以實現把微弱的信號進行放大,uA741通用高增益運算通用放大器,早些年最常用的運放之一.應用非常廣泛,雙列直插8腳或圓筒8腳封裝。工作電壓±22V,差分電壓±30V,輸入電壓±18V,允許功耗500mW.。U2A707相當一個非門,對波形進行整形濾波,得到數字信號,使FPGA能接收信號。電路圖如圖3-1。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image033.jpg 圖3-1 外圍電路設計圖
4 系統測試
調試是系統開始總體運行以前必須要做的工作,為的是檢驗各子程序及功能模塊的性能。調試時要使用測試程序和專門的測試儀器。因此我們在編寫正式程序的同時,還要編寫簡潔有效的測試程序,以便查錯和糾錯。對于本題目我們可以進行以下方面的調試。對于部分FPGA程序(例如計數器程序等),我們可以采用仿真的形式調試。
4.1 單片機程序調試
(1)顯示程序調試:檢驗LCD1620是否有顯示;
(2)鍵盤輸入程序調試:檢驗鍵盤輸入鍵值是否正確;
(3)計算程序調試:觀察運算結果是否正確,是否出現溢出情況;
(4)單片機與FPGA通信調試:測試FPGA能否將數據準確地傳給單片機;
(5)FPGA內部程序調試;
4.2信號放大整形調試
(1)閘門信號調試:用示波器觀察閘門信號波形,以及高電平寬度。
(2)中斷信號調試:首先用示波器觀察波形,然后編寫測試程序,觀察單片機是否能夠接收到中斷信號,并執行中斷程序。
(3)標準頻率測試:用示波器觀察波形以及頻率值。
4.3 綜合調試
完成以上各模塊調試工作之后,可以進行系統整體調試。在調試過程中,認真觀察FPGA與單片機的配合情況,在FPGA端口上設置若干測點,比如中斷測點,閘門信號測點等,便于在系統出現故障時,檢查測試。
4.4 調試中出現的問題
編程VHDL語言時,出現一下編程上的語法錯誤,一開始無從下手,后面經過查找資料,明白了Quartus II軟件報錯的處理方式,Quartus II軟件會把報錯的行數顯示出來便于程序員查找,可以很快的解決問題。VHDL語言對編程上的格式比較嚴格,在編程過程中經常遇到由于語言格式上的出錯而報錯,例如符號上標示的錯誤等,一旦報錯根據報錯的信息一一解決即可。雖然調試過程問題眾多,但經過多次的調試和修改,在最后也能實現最終的功能。
5 結論
本次設計結合了軟硬件的設計,各項功能達基本能達到預定的設計指標。測頻系統克服了傳統的測頻法或測周期法的不足,能在頻率范圍變化較大時,仍然有比較高的測量精度。而且本系統將單片機靈活的控制性能和FPGA模塊具有定時精確及時和速度快的特點結合起來,使整個系統體積較小,價格也不高。由于數碼管采用靜態顯示,因此,操作可靠,顯示比較清晰。該設計具有測試精度高,制作簡單,測量的精度不會隨著被測信號頻率的大幅度變化而變化等優點,由于該電路對頻率的測試范圍為100Hz~100kHz測量范圍比較寬,在頻率測試中有一定的應用前景。由于時間和實驗條件所限,本設計在測頻精度和硬件電路方面還存在著一些不足,需要進一步的完善和提高。
通過本次的畢業設計,我更加了解單片機的結構與功能與FPGA模塊的原理;對Quartus II軟、Keil 51軟件的運用更加熟練,以前在學習這兩個軟件時,總覺得難度挺大的,每次老師布置任務時,總是得看課本來進行操作,但經過這一次的了解,相信如果在今后的工作中遇到,這一次的認識是個很好的參考對象;以及更加了解軟硬件相結合的道理。雖然在設計過程中遇到的困難也不少,由一開始的迷茫,到后來的漸入佳境,我的導師給了我很大的幫助,教會我如何看待設計中遇到的每一個問題,找到問題的關鍵,然后一一破解,很感激導師對我的指導,讓我懂得了在今后的生活中即使困難重重也要迎難而上。
謝 辭
隨著畢業設計的完成,想著自己在未來的不久手上會多了一本本科的畢業證書,我心中無比激動,常言道:“多一份選擇,就多一份希望”,我相信我這一份多的選擇會讓我未來的人生有更多的選擇,在這里我想感謝當初支持我的所有人。
首先,我要感謝我的父母,感謝他們二十多年來對我的培育和支持,感謝他們當初明智的決定,不但讓我完成了應有的學業,還讓我的未來多了一份選擇。
接下來,我要感謝所有上專本銜接的老師們,謝謝他們本應該在休息的周末,卻來陪著是我們一起上課學習,教給我們更多的知識,再次感謝他們的付出。
最后,我要感謝我的母校對我的再造之恩,在這里我學會了很多從出生到現在自己從來不具備的東西,不單單指那些書本知識,更多的是在精神上熏陶、心靈上灌溉。還讓我們有再一次選擇的機會,繼續學習更多的知識,謝謝母校給我們的再次選擇,相信在未來的不久我們會因這一次多的選擇而有更精彩的人生。
在這里我還要衷心感謝,我的導師(廖超平老師),不但在周末陪著我們一起上課學習,還在我出去實習中經常督促我的畢業設計進度狀況。在整個畢業設計過程中,只要我有任何疑惑都會耐下心來指導我一一解決,很感謝他的引導。
同時我也很感謝我自己,在本設計中即使困難重重,也沒有想過放棄的精神;在學習的空余中,繼續學習了更多的知識。通過這次的畢業設計,使我對單片機的認識更加的清晰,同時也提高了我對系統設計及軟件設計的能力。
參考文獻
[1] 楊剛,龍海燕.現代電子技術——VHDL與數字系統設計.北京:電子工業出版社,2004,39-59.
[2] 倪云峰等,單片機原理與應用,西安電子科技大學出版社,2009.
[3] 曾繁泰,李冰,李曉林.EDA工程概論.北京:清華大學出版社,2002,98-138.
[4] 陳海宴,51單片機原理及應用,北京航空航天大學出版社,2010.
[5] 潘松 黃繼業,EDA技術實用教程,科學出版社,2009.
[6] 陳權昌,李興富.單片機與應用.廣州:華南理工大學出版社,2007.8.
[7] 任曉東、文博.CPLD/FPGA高級應用開發指南.北京:電子工業出版社,2003,22-29.
[8] 數字系統設計VerilogHDL(第四版),電子工業出版社,2011年.
[9] 譚浩強,C程序設計,清華大學出版社,2007.
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg附 錄一 利用VHDL語言設計測頻模塊
附 錄二 顯示模塊
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image037.png
附 錄三 VHDL語言設計代碼
(1)計數閘門信號產生模塊VHDL 設計
libraryieee;
use ieee.std_logic_1164.all;
entity dff1is
port( CTRL: in std_logic;
Tsig: in std_logic;
CLR: in std_logic;
en: out std_logic);
end dff1;
architecturea of dff1 is
begin
en <='0' when(CLR ='1')
else CTRL when(Tsig = '1' andTsig'event)
else unaffected;
end a;
(2) 三十二位計數器模塊VHDL 設計
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt32 is
port( en: in std_logic;
CLK: in std_logic;
CLR: in std_logic;
QA: out std_logic_vector(31 downto 0));
end cnt32;
architecturev1 of cnt32 is
signal f:std_logic_vector(31 downto 0);
begin
process(en,clk,clr)
begin
if CLR ='1' then
f<= (others=>'0');
elsif clk'event and clk = '1'and en='1' then
f<=f+1;
else
null;
end if;
end process;
QA<=f;
end v1;
(3) 多路選擇器MUX64-8模塊VHDL 設計
libraryieee;
useieee.std_logic_1164.all;
entitymux64_8 is
port( sel: in std_logic_vector(2 downto 0);
QA: in std_logic_vector(31 downto 0);
QB: in std_logic_vector(31 downto 0);
Dout: out std_logic_vector(7 downto 0));
endmux64_8;
architecturebehv of mux64_8 is
begin
process(sel,QA,QB)
begin
case sel is
when "000"=>
Dout<=QA(7 downto 0);
when "001"=>
Dout<=QA(15 downto 8);
when "010"=>
Dout<=QA(23 downto 16);
when "011"=>
Dout<=QA(31 downto 24);
when "100"=>
Dout<=QB(7 downto 0);
when "101"=>
Dout<=QB(15 downto 8);
when "110"=>
Dout<=QB(23 downto 16);
when others=>
Dout<=QB(31 downto 24);
end case;
end process;
end behv;
附 錄四 單片機匯編語言程序清單
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
DAT EQU 30H
DAT1 EQU 31H
ORG 0000H
MOV 0FFH,#0FFH
MOV SP,#60H
MOV DAT,#01H ; CLEAR 液晶顯示初始化
LCALL ENABLE ; 如果使用LCD液晶顯示,在程序開頭必須加 上這句
LCALL DISP3
MOV DAT,#01H ; CLEAR
LCALL ENABLE
MOV R5,#80H
MOV DPTR,#KONX
LCALL FB6
MOV DPTR,#TC1
MOV R5,#0C0H
LCALL FB1
MOV DAT,#0CH ; 關閉光標
LCALL ENABLE
MOV 7AH,#00H
MOV 7BH,#00H
MOV 7CH,#00H
MOV 7DH,#00H
KKE1: LCALL KKEYI ;鍵盤信號搜索
KCACOM: LCALL KCOM1 ; A > 9 執行鍵盤命令
LJMP KKE1
;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KCOM1: CJNE A,#01H,KN88 ; 鍵1 (04):---------------------------(1)
RET
;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 鍵2(K05) LLLLLLLLLLLLLLLLLLLLLLLLUUUUUUUUUUUUUUUUUUUUUUUKKKKKKKKKKKKKKKK
KNJ99: LJMP MMKL
KN88: CJNE A,#02H,KNJ99 ; ----------------(2)
MOV DAT,#01H ; CLEAR 液晶顯示初始化
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#32H
MOV B,#81H
LCALL DISP2
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 鍵3(K06) JJJJJJJJJJJJJJJJJJJLLLLLLLLLLLLLLLLLLL
KAAN7: LJMP KAAN ;
MMKL : CJNE A,#03H,KAAN7
MOV DAT,#01H ; CLEAR 液晶顯示初始化
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#33H
MOV B,#81H
LCALL DISP2
RET
;--------------------------------------------------------------------------------------------------------------
;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 鍵4(K07)SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
KBBN: LJMP KBBN3
KAAN: CJNE A,#04H,KBBN ;
MOV DAT,#01H ; CLEAR 液晶顯示初始化
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#34H
MOV B,#81H
LCALL DISP2
RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ 鍵5(K14) KKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJ
KDDN : LJMP KDDN7
KBBN3: CJNE A,#05H,KDDN ; 鍵5僅
MOV DAT,#01H ; CLEAR 液晶顯示初始化
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#35H
MOV B,#81H
LCALL DISP2
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 鍵6(K15) LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KEEN: LJMP KEEN8
KDDN7: CJNE A,#06H,KEEN ; 鍵6
MOV DAT,#01H ; CLEAR
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#36H
MOV B,#81H
LCALL DISP2
RET
; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ 鍵7(K16) KKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJ
KDDN8: LJMP KFFN
KEEN8: CJNE A,#07H,KDDN8
MOV DAT,#01H ; CLEAR
LCALL ENABLE
MOV A,#4BH
MOV B,#80H
LCALL DISP2 ;
MOV A,#38H
MOV B,#81H
LCALL DISP2
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL鍵8(K17)LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KFFN: CJNE A,#08H,KF8 ; 鍵8控制
MOV DAT,#01H ; CLEAR
LCALL ENABLE
; -----------------------------------------------測頻主程序-------------------------------------
MOV DPTR,#FN_A ;以上程序顯示液晶設置
MOV R5,#80H
LCALL FCN9
RRRV: LCALL TESTF ; 測頻率子程序
LCALL TESTFF ; 數據顯示調整子程序
SJMP RRRV
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KF8:
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KKEYI: LCALLKKS1 ; KEY SCANNING PROG
JNZ KLK1 ; 有鍵盤, 轉跳 KLK1
KN1: LCALL DELAY
LCALL DELAY
SJMP KKEYI ; 無鍵,轉跳 KKEYI 繼續測鍵
KLK1: LCALLDELAY
LCALL DELAY
LCALL KKS1
JNZ KLK2 ; 確實有鍵,轉跳至 KLK2
LCALL DELAY
SJMP KKEYI
;--------------------------------------------
KLK2: ;MOV P1,#0FEH ; THERE IS KEYI
NOP
JB P1.1,NOK1
MOV A,#02H
LJMP GOHM
NOK1: NOP
JB P1.2,NOK2
MOV A,#03H
LJMP GOHM
NOK2: NOP
JB P1.3,NOK3
MOV A,#04H
LJMP GOHM
NOK3: NOP
JB P1.4,NOK4
MOV A,#05H
LJMP GOHM
NOK4: NOP
;---------------------------------------------
; MOV P1,#0FDH ; THERE IS KEYI
NOP
JB P1.5,NOK5
MOV A,#06H
LJMP GOHM
NOK5: NOP
JB P1.6,NOK6
MOV A,#07H
LJMP GOHM
NOK6: NOP
JB P1.7,NOKR
MOV A,#08H
LJMP GOHM
NOKR: RET
;---------------------------------------------
GOHM: PUSH ACC
KLK3: LCALLDELAY
LCALL KKS1
JNZ KLK3
LCALL DELAY
LCALL KKS1
JNZ KLK3
POP ACC
RET
KKS1:
NOP
NOP
NOP
NOP
NOP
MOV A,P1
CPL A
RET ; IF THERE IS KEYING THEN A =/= 0;如果A=0表示沒有任何鍵
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
ENABLE: CLR RS
CLR RW
MOV P1,DAT
CLR E
nop
SETB E
LCALL DDT9
RET
;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK顯示子程序
ASC: MOV DPTR,#TA6
MOVC A,@A+DPTR
RET
TA6: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,20H,48H,7AH,4DH
DB 0E4H,73H,2EH ; 0EH- u ; 0FH- s ;10H ->.
DISP3: MOV DAT,#38H;8bit 2 Rol 5*7
LCALL ENABLE
MOV DAT,#0FH ;OPEN LCD : 00001DCB
LCALL ENABLE
MOV DAT,#06H ;LEFT TO RIGHT:
LCALL ENABLE
RET
;
;
FB1: MOV R4,#14H
MOV R6,#00H
RC5: MOV A,R6
INC R6
MOVC A,@A+DPTR
MOV B,R5
INC R5
LCALL DISP2
DJNZ R4,RC5
RET
TC1: DB 44H,69H,61H,6EH,20H,58H,69H,6EH,20H,31H,32H,4FH ,31H ,20H,20H,20H
; DIANXIN 1201
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
FB6: MOV R4,#0AH ; SQUARE: ,SAWTOOTH , TRIANGLE, LADDER
MOV R6,#00H
RCV: MOV A,R6
INC R6
MOVC A,@A+DPTR
MOV B,R5
INC R5
LCALL DISP2
DJNZ R4,RCV
RET
KONX: DB 20H,20H,47H,75H,61H,6EH,67H,20H,58H,69H,20H,20H,20H ; GUANGXI
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
FCN9: MOV R4,#05H ;
MOV R6,#00H
RCT9: MOV A,R6
INC R6
MOVC A,@A+DPTR
MOV B,R5
INC R5
LCALL DISP2
DJNZ R4,RCT9
RET
;
FN_A : DB 46H,52H,45H,51H,3AH ; FREQ:
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
DISP2: MOV DAT,B ; B是地址;A是顯示數據
LCALL ENABLE
MOV P1,A
SETB RS
CLR RW
nop
CLR E
nop
SETB E
LCALL DDT9
RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
DELAY: MOV R1,#0FH ; 9H
WWW: MOV R0,#0FFH
NMN: DJNZ R0,NMN
DJNZ R1,WWW
RET
DDT9: MOV R3,#1FH
DDT8: MOV R2,#0FFH
DDT7: DJNZ R2,DDT7
DJNZ R3,DDT8
RET
;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
; 測頻子程序
;MOV 10H,#07H
; MOV 11H,#06H
; MOV 12H,#05H
; MOV 13H,#04H
;MOV 14H,#03H
;MOV 15H,#02H
; MOV 16H,#01H
;RET
TESTF:
SETB P0.7
CLR P0.1
CLR P0.0
SETB P0.0
CLR P0.0
SETB P0.1
;LL: JNB P0.7, LL
LCALLTIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
LCALL TIS
CLR P0.1
FLO:
JB P0.7,FLO ;等待計數,中斷延時結束.即計數完
CLRP0.6
CLRP0.5
CLR P0.4
MOV A,P2
MOV 20H,A
CLR P0.5
SETBP0.4
MOV A,P2
MOV 21H,A
SETB P0.5
CLR P0.4
MOV A,P2
MOV 22H,A
SETB P0.5
SETB P0.4
MOV A,P2
MOV 23H,A
SETB P0.6
CLR P0.5
CLR P0.4
MOV A,P2
MOV 24H,A
CLR P0.5
SETB P0.4
MOV A,P2
MOV 25H,A
SETB P0.5
CLR P0.4
MOV A,P2
MOV 26H,A
SETB P0.5
SETB P0.4
MOV A,P2
MOV 27H,A
MOV 4AH, #24H
MOV 4BH, #61H ;40MHz的數值
MOV 4CH, #39H
MOV 4DH, #0CAH
MOV 4EH, #80H
MOV 4FH, #00H
MOV 5AH, #00H
MOV 5BH, #00H
MOV 5CH, 27H ;QB的數值
MOV 5DH, 26H
MOV 5EH, 25H
MOV 5FH, 24H
ACALL MULNM
ACALL SEND8
MOV 5AH, #00H
MOV 5BH, #00H
MOV 5CH, 23H ;QA的數值
MOV 5DH, 22H
MOV 5EH, 21H
MOV 5FH, 20H
ACALL DIVD1
MOV 36H,#00H
MOV 35H, 4AH
MOV 34H, 4BH
MOV 33H, 4CH
MOV 32H, 4DH
MOV 31H, 4EH
MOV 30H, 4FH
ACALL HEXBCD
ACALL PP
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
SEND8: MOV R2,#0CH
SEND7: MOV R0,#44H
MOV R1,#54H
RRQ9: MOV A,@R1
INC R1
MOV @R0,A
INC R0
DJNZ R2,RRQ9
RET
RRQ10: MOV R2,#07H
WWE4: MOV A,@R1
DEC R1
MOV @R0,A
INC R0
DJNZ R2,WWE4
RET
TIS:
MOV 2AH,#0FFH ;256*256uS延時
TSM3:
MOV 2BH,#0FFH
TSM4:
DJNZ 2BH,TSM4
DJNZ 2AH,TSM3
RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
DIVD1: NOP ; 2N BYTE / N BYTE= N BYTE ,HERE N=6 IN 31H
MOV 30H,#0CH ; (44,45,46,47,48,49,4A,4B,4C,4D,4E,4FH)/(5A,5B,5C,5D,5E,5FH)=(4A,4B,4C,4D,4E,4FH)
MOV 31H,#06H ; 除法程序,30H放置被除數字節數,31H放置除數字節數
DIVPP: MOV A,AD1
MOV R2,A
RL A
RL A
RL A
MOV R3,A
CLR 0F0H
CLR C
MOV A,#ADA
SUBB A,R2
MOV AD3,A
MOV R1,#ADB
DIVMB2B: MOV A,@R1
JNZ DIVM2B
DEC R1
DJNZ R2,DIVMB2B
SETB 0F0H
RET
DIVM2B: MOV R2,AD1
MOV R1,#ADB
MOV R0,AD3
DIVM2L: MOV A,@R0
SUBB A,@R1
DEC R0
DEC R1
DJNZ R2,DIVM2L
JNC DIVM20
DIVM2D: LCALL SHIL1
JC DIVM2S
DIVM2C: MOV R0,AD3
MOV R1,#ADB
MOV R2,AD1
DIVM2CL: MOV A,@R0
SUBB A,@R1
DEC R0
DEC R1
DJNZ R2,DIVM2CL
JC DIVM2E
DIVM2S: INC ADA
MOV R2,AD1
MOV R0,AD3
MOV R1,#ADB
LCALLSUBMBB
DIVM2E: DJNZ R3,DIVM2D
RET
DIVM20: SETB 0F0H
RET
DB 02H,12H
SHIL1: MOV R2,AD0
MOV R0,#ADA
SHIL1B: CLR C
SHILL: MOV A,@R0
RLC A
MOV @R0,A
DEC R0
DJNZ R2,SHILL
RET
SUBMBB: CLR C
SUBMB1: MOV A,@R0
SUBB A,@R1
MOV @R0,A
DEC R0
DEC R1
DJNZ R2,SUBMB1
RET
AD0 EQU 30H
AD1 EQU 31H
AD2 EQU 32H
AD3 EQU 33H
AD4 EQU 34H
AD5 EQU 35H
AD6 EQU 36H
ADA EQU 4FH
ADB EQU 5FH
ADC EQU 4DH
ADDV EQU 5DH
MULNM: NOP ; N BYTES X MBYTES = N+M BYTES HERE N=6;M=6
MOV 30H,#06H ; (4A,4B,4C,4D,4E,4FH)*(5A,5B,5C,5D,5E,5FH)=(54--5FH)
MOV 31H,#06H ; 乘法程序,30H放置被乘數字節數,31H放置乘數字節數
MULTT: MOV A,AD0
MOV R3,AD1
MOV R2,A
ADD A,R3
INC A
MOV AD2,A
MOV A,#ADB
CLR C
SUBB A,R3
MOV AD6,A
MOV R1,A
SUBB A,R2
MOV AD5,A
INC R2
MULNMZ: MOV @R1,#00H
DEC R1
DJNZ R2,MULNMZ
MULNMB: MOV R2,AD0
MOV R1,AD6
MOV R0,#ADA
CLR 00H
MULNML: MOV A,ADB
JZ MULNMD
MOV B,@R0
MUL AB
ADD A,@R1
MOV @R1,A
JNB 00H,MULNM1
INC B
MULNM1: MOV A,B
DEC R1
ADDC A,@R1
MOV @R1,A
MOV 00H,C
DEC R0
DJNZ R2,MULNML
MULNMD: MOV R0,AD5
CLR A
MOV R2,AD2
MULNMS: XCH A,@R0
INC R0
DJNZ R2,MULNMS
DJNZ R3,MULNMB
RET
; LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;llllllllllllllllllllllllllllllllllllllllllll
HEXBCD : NOP ; 7 BYTE HEX TO 8 BYTE BCD : HEX(36H-30H)-->BCD(47H-40H)
MUBTD: MOV R0,#40H
MOV R7,#08H
CLR A
LOPP1: MOV @R0,A
INC R0
DJNZ R7,LOPP1
MOV R7,#38H
LOOP4: MOV R1,#30H
MOV R6,#07H
CLR C
LOPP2: MOV A,@R1
RLC A
MOV @R1,A
INC R1
DJNZ R6,LOPP2
MOV R5,#08H
MOV R0,#40H
LOOP3: MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ R5,LOOP3
DJNZ R7,LOOP4
RET
;*************************************************************************************
PP: MOV 16H,#0FH
MOV A,47H
ANL A,#0FH
JNZ JB47
MOV A,46H
ANL A,#0F0H
JNZ H46N
MOV A,46H
ANL A,#0FH
JNZ L46N
MOV A,45H
ANL A,#0F0H
JNZ H45N
MOV A,45H
ANL A,#0FH
JNZ L45N
MOV A,44H
ANL A,#0F0H
JNZ H44N
MOV A,44H
ANL A,#0FH
JNZ L44N
MOV A,43H
ANL A,#0F0H
JNZ H43N
MOV A,43H
ANL A,#0FH
JNZ L43N
SJMP L43Y
JB47: SJMP JM47
L43Y: MOV R0,#40H ; 0.5HZ
LCALL DIS_A
MOV 16H,#00H
MOV 0AH,#40H
RET
L43N: MOV R0,#40H ; 1HZ,4HZ
LCALL DIS_A
MOV 0AH,#40H
RET
H43N: MOV R0,#40H ; 16H
LCALL DIS_B
MOV 0AH,#20H
RET
L44N: MOV R0,#41H
LCALL DIS_A
MOV 0AH,#10H
RET
H44N: MOV R0,#41H
LCALL DIS_B
MOV 0AH,#08H
RET
L45N: MOV R0,#42H
LCALL DIS_A
MOV 0AH,#04H
RET
H45N: MOV R0,#42H
LCALL DIS_B
MOV 0AH,#02H
RET
L46N: MOV R0,#43H
LCALL DIS_A
MOV 0AH,#01H
RET
H46N: MOV R0,#43H
LCALL DIS_B
MOV 0AH,#60H
RET
JM47: MOV R0,#44H
LCALL DIS_A
MOV 0AH,#70H
RET
;llllllllllllllllllllllllllllllllllllll
DIS_A: MOV A,@R0 ; 40H ; 顯示
ANL A,#0FH
MOV 10H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 11H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 12H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 13H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 14H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 15H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 16H,A
RET
DIS_B: MOV A,@R0 ; 43H
ANL A,#0F0H
SWAP A
MOV 10H,A
INC R0
MOV A,@R0 ; 44H ; 顯示
ANL A,#0FH
MOV 11H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 12H,A
INC R0
MOV A,@R0 ; 45H
ANL A,#0FH
MOV 13H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 14H,A
INC R0
MOV A,@R0 ; 46H
ANL A,#0FH
MOV 15H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 16H,A
RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
TESTFF:
MOV 1BH,#0C4H
MOV 1CH,#17H
MOV 0DH,#0CH ; z
MOV 0EH,#0BH ; H
MOV 0FH,#0AH ;
MOV 0CH,#0AH
MOV A,0AH
CJNE A,#01H,POIN1
BASE: MOV B,#0CCH
SJMP POI8 ; LCALL DISP2
POIN1: CJNE A,#02H,POIN2
MOV B,#0CBH
SJMP POI8 ;
POIN2: CJNE A,#04H,POIN3
MOV B,#0CAH
SJMP POI8 ;
POIN3: CJNE A,#08H,POIN4
MOV B,#0C9H
SJMP POI8 ;
POIN4: CJNE A,#10H,POIN5
MOV B,#0C8H
SJMP POI8 ;
POIN5: CJNE A,#20H,POIN6
MOV B,#0C7H
SJMP POI8 ;
POIN6: CJNE A,#40H,POIN7
MOV B,#0C6H
SJMP POI8 ;
POIN7: CJNE A,#60H,POIN8
MOV B,#0C7H
SJMP POI8 ;
POIN8: CJNE A,#70H,POIN9
MOV B,#0C8H
SJMP POI8 ;
POIN9: RET
POI8: MOV A,#2EH ; . 數據
MOV 1AH,B ;顯示 . 的地址
LCALL DISP2 ; 顯示 .
MOV R7,#0BH
RRD1: MOV A,1BH ; 1BH中裝地址
INC A
CJNE A,1AH,NOEQ
INC A
NOEQ: MOV 1BH,A
MOV R1,1CH ; 1CH裝數據
DEC R1
MOV 1CH,R1
MOV A,R1
CJNE A,#0FH,NOTX6
MOV A,0AH
ANL A,#60H
CJNE A,#60H,NOTX6
MOV 0FH,#0DH
NOTX6: MOV A,@R1
LCALL ASC
MOV B,1BH
LCALL DISP2
DJNZ R7,RRD1
RET
END
;----------------------------------------------------------------------------------------
作者: 量子工業 時間: 2023-10-19 11:03
膩害,論文
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |