64
自動控制工程學系專題製作 液位感測器的應用 The Application of Liquid-Level Sensor 指導教授:張寧群 :余承儒 黃俊祥 中華民國九十三年五月

逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

逢 甲 大 學

自動控制工程學系專題製作

專 題 論 文

液位感測器的應用 The Application of Liquid-Level Sensor

指導教授:張寧群

學 生 :余承儒

黃俊祥

中華民國九十三年五月

Page 2: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31
Page 3: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

感言

這次專題的研究,我們是做液位感測器,我們利用超音波元件來建立感測器,這

次的專題研究,我們是跟隨張寧群教授做此專題,此次專題是我們大四以來第一

次遇到這麼大的電路,所以中間遇到許多的困難,這些過程中張寧群教授一直細

心的教導我們,幫助我們克服了許多電路上的問題,也讓我們從中學習到了許多

有關電路設計和超音波元件的使用原理。之前我們對於電路設計相當的陌生,但

是經過這次的專題研究讓我們對於電路設計有了初步的了解,在此我們相當感謝

張寧群教授,在這次的專題指導之中對我們細心的教導和鼓勵。在這次的專題之

中,遇到了許多電子零件上的問題,我們都求助於張志華助教,相當感謝張志華

助教對於我們的教導。在我們專題的最後階段的時候,遇到了洗電路和畫電路板

的問題,自控四甲的丁輔善同學從中幫助我們許多,讓我們能夠克服許多的問題。

i

Page 4: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

中文摘要 本專題是利用超音波的原理來測量液位的高低變化,並透過容器尺寸及液體

密度的參數將其轉換成以重量或體積的物理量。本裝置之應用甚廣諸如可決定以

不同計量單位決定價格的販售,輸送液體的體積及重量變化的資料提供等。

ii

Page 5: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

Abstract

This study applies the supersonic theory to measure the liquid level, and that can

transfer it to the physical quantities of weight or volume through the container size

and the liquid density. The application of this device is very wide. For example, it can

determine the price with different measurement units, and can provide the data of

weight changing and the volume of transmitting liquid.

iii

Page 6: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

目錄

感謝...............................................................................................................................i

中文摘要......................................................................................................................ii

英文摘要......................................................................................................................iii

圖目錄..........................................................................................................................vi

表目錄..........................................................................................................................vii

第一章 前言.................................................................................................................1

1-1 系統方塊圖...................................................................................................2

1-2 何謂超音波...................................................................................................3

1-3 超音波的特長與應用...................................................................................3

1-4 超音波元件...................................................................................................5

1-5 超音波元件的原理與構造...........................................................................5

1-6 測量距離之應用...........................................................................................6

第二章 電路分析.........................................................................................................7

2-1 555 內部電路及其動作原理..........................................................................7

2-2 555 之應用電路.............................................................................................8

2-3 40KHZ 震盪電路...........................................................................................11

2-4 40KHZ 接收回路..........................................................................................11

2-5 LCM 原理......................................................................................................12

2-6 LCM 硬體說明.............................................................................................12

2-7 LCM 暫存器及指令碼說明.........................................................................17

2-8 LCM 連接方式與時序.................................................................................22

第三章 軟體分析........................................................................................................26

3-1 89C51 的特性................................................................................................26

3-2 89C51 的接腳功能........................................................................................27

iv

Page 7: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

3-3 89C51 程式...................................................................................................34

第四章 實體上的應用................................................................................................51

4-1 液位感測器的運用......................................................................................51

第五章 結論................................................................................................................53

參考文獻......................................................................................................................55

v

Page 8: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖目錄

圖 1-1 系統方塊圖...................................................................................................…2

圖 2-1 555 內部電路.....................................................................................................7

圖 2-2 不穩態多諧振盪器...........................................................................................9

圖 2-3 單穩態多諧振盪器.........................................................................................10

圖 2-4 文字型 LCD 功能方塊圖................................................................................14

圖2-5 LCD讀取操作時序圖.....................................................................................23

圖2-6 LCD讀取操作時序特性................................................................................23

圖2-7 LCD寫入操作時序圖.....................................................................................24

圖2-8 LCD入操作時序特性.....................................................................................24

圖2-9 LCD與8051標準連線方式...........................................................................25

圖 3-1 89C51 內部結構圖...........................................................................................27

圖 3-2 振盪電路.........................................................................................................28

圖 3-3 開機重置電路.................................................................................................29

圖 3-4 特殊功能暫存器重置後之預設值.................................................................30

圖 3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法..........................................31

圖 4-1 感測器流體控制圖..........................................................................................51

vi

Page 9: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

表目錄

表 1-1 物質的音波傳送速度........................................................................................4

表2-1 文字型 LCD接腳說明....................................................................................13

表2-2 LCD字元碼與字型對應表............................................................................17

表2-3 LCD指令表一覽表.........................................................................................18

vii

Page 10: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

第一章 前言

當我們看到日常生活中偶爾在馬路上看到油灌車在路上跑,我們就想路上的過磅

站是利用重量感測器去量測的,但是如果一般的油灌車駕駛員想要看自己的載重

量到底有多少了,是無法判斷的必須要有過磅站的機器才有辦法測試,於是我們

想利用超音波元件去設計出一個可以量測重量的感測器,我們利用超音波元件發

射出訊號後,碰到待測物體反射,由接受感測元件接受,但發現接受的訊號很薄

弱,所以必須在加一個放大器來放大,最後在由類比轉數位轉成我們所需的數

據,是因為油灌車而突然有的一些啟發。一般大部分的油罐車都無法知道自己的

載重量,如果利用這套感測器就可以清楚自己需要多少的過路費等資訊,再也不

需要利用過磅站去量測重量了。於是我們專題研究方向是先真對測距方面下手,

我們利採用超音波的發射接受的原理利用其反射時間,來得到和物體間的距離,

得知距離後再得到容器的底面積,便可以知道該容器的液體還剩下多少高度、重

量和體積等等。因為我們選用的超音波感測器頻率為 40KHz,所以首先我們先

利用 555 振盪器產生 40KHz,驅動超音波發射感測元件,這部分雖然比較簡單,

但接受方面卻是比較不容易克服的,在接受方面由於信號經過一次反射後,變的

更加薄弱,所以必須加上放大,,但由於介質的不同所反射訊號強弱以及快慢都會

有些影響,所以再做調整時必須針對你所需的待測物做調整,我們基本上是以油

做為基準,再加上一些零件的特性和音波反射的速度,所以可量的長度範圍約為

50cm 至 110cm,在搭配 8051 的一些程式,假設底面積固定,高度我們經由超音

波感測原件測量知,接下來重量和體積就可呼之欲出了,在搭配一些外部程式,

相信不只運用在油罐車,更可以用在很多廣泛的地方。

1

Page 11: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

1-1 系統方塊圖

89C2051 CPU

16X1 LCM OR 16X2LCM LED

LM393

NE555

穩壓 +5VDC+12V

DIP SW

+12V電池

壓電SP

+12V

+5V

40R

40T

圖 1-1 系統方塊圖

2

Page 12: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

1-2 何謂超音波

所謂音波,乃指透過具有彈性與慣性的介質,例如空氣,當空氣本身一旦產生膨脹

或壓縮時,則透過其分子的運動而有波動的傳播產生。因此,音波無法在真空中進

行傳播。人類聽覺能察覺的波動,稱之為聲音。此時的音波,即稱之為可聽波。

雖然對超音波所下的定義是"非人類以耳聞為目的之聲音",但是一般把它視作"

頻率較耳朵聽得見的成音為高之音波"。

通常,吾人所稱之聲音乃是空氣的疏密波 (即由空氣的分子密集而呈壓力高

的部分,和相反地呈疏鬆而壓力低的部分交替出現所振動的音波),因個人而有所

差別,然人類的耳朵所能聽見的最大限度不出 20〜20,000Hz 左右之範圍。疏密波

本身,不論在空氣中乃至液體中和固體中都可以發生和傳播。

1-3 超音波的特長與應用

大家都知道波的傳播速度是頻率與波長之乘積。電磁波的速度是 3x10E8m/s,

但空中的音波傳播速度邦非常緩慢,約為 340m/s,所以波長短。

此項事實,就成為超音波應用之中的一大特徵。而且,介質並不限於氣體還有

液體和固體,同時也會表現出隨此介質而產生之特徵。各該物質的密度和音速之

積叫做固有音響阻抗。而此數值相形之下,顯然液體和固體方面要比氣體大得多。

超音波,如果在行進中碰到不同性質的物質就會引起反射。假設超音波所通

過最初物質的固有音響阻抗為 ρlC1,所碰到的物質其固有音響阻抗以 ρlC2 表示,

則原來的振幅與反射波的振幅之比 Ar 為:

Amplitude-out ρlCl-ρ2C2

Ar = =

Amplitude-in ρlCl+ρ2C2

碰到前的原有能量 E1 和反射的能量 E2 之比,也就是反射率 K,則為:

3

Page 13: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

E2 ρ1C1-ρ2C2

K = = [ ]

E2 ρ1C1+ρ2C2

再者,氣體﹑液體裏邊只是縱波,固體則為橫波,而且也有表面波存在,相同的

物質音速也有所不同。不過,除非預先聲明,否則一般所說之音速皆指縱波之音速

而言。

表 1-1 物質的音波傳送速度

根據以上所述,超音波的特長可歸納如下:

(a)由於波長短所以指向性強,能量集中。也就是說,能夠增強

方向之分解能。

(b) 振動數高,可得巨大的加速度。

(c) 大部分的音響功率碰到音響阻抗不同的物質境界面將被反射。利用此

4

Page 14: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

特性可藉以做物質的探知和距離的測試。

(d) 如果在媒體中或其界面有密度差存在,其境界將會發生界面擾亂作用,

並引起乳化,攪拌混合等之作用。

(e) 若適當選擇頻率,則可使其引起和乳化(分散)相反的凝縮作用。

(f) 把超音波放射於液體中引起孔蝕現象(Cavitation),並藉其局部的巨

大壓力變化可發生強烈的破壞作用。

(f) 利用孔蝕現象形成的排氣氣體之活性化,可以引起氧化作用及其他化

學作用。

(h) 利用媒體中的音波吸收,可在音場內產生熱。

1-4 超音波元件

空中超音波送受波器所使用之頻率,一般皆為 20〜40KHz。頻率低的話超音波的

到達距離遠,但空中的雜音容易增多,未必可喜。反之,頻率升高則衰減增大,超音

波的到達距雖縮短。上面所說的 20〜45KHz,不妨把它當作是找到其妥協點的妥

當頻率。再者,可使用之距離為 lOm 左右以內,一般則以 2-5m 居多。市面上所販

賣的元件,大部分是 40KHz 的超音波,所以我們這次的實驗也是選用 40KHZ 的

超音波元件來使用。

能夠當作空中超音波送受波器利用者,有高音用揚聲器,圓筒形瓷質振動

子、雙形態瓷質振動子等各式各樣的元件,不過我們是使用高感度價格又低廉的

雙形態瓷質振動子和單一形態振動子的,超音波送受波器之原理與構造加以說

明。

1-5 超音波元件的原理與構造

壓電陶瓷體供加以電壓的話,將會有順應電壓和頻率的機械性的歪變產生並

起振動。反之,另以歪變壓力施加於壓電陶瓷體則有電荷產生。應用此原理,如果

把壓電陶瓷體兩片,分極方向倒反相貼之雙形態振動子供加於電壓,則一方將伸

5

Page 15: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

展而另一方則收縮。而且,極性反過來的話伸展收縮也同樣反轉。

還有,關於壓電陶瓷體貼在金屬板而構成之單一形態振動子,同樣藉電壓之

供加使陶瓷體伸縮而產生屈曲振動,亦可利用作共振頻率為 20〜45KHz 之超音

波送受波器用振動子。

構造:

(a)標準型(寬頻帶型):這是彈性接著劑把先前所說明的雙形態振動子之節部固

定在基部。而且,為改善感度起見,另於雙形態振動子之上接合以樹脂的共振喇叭

體。要求寬頻帶的場合,構造在基本上雖無二致,但是另外在基部與共振喇叭。

(b)防滴型:為供屋外或易沾積灰塵之處使用起見,特以陶瓷振動子接合在金屬盒

內之構造來發生屈曲振動。另外,又以充填樹脂的密閉構造加工完成。

1-6 測量距離之應用

超音波在空氣中傳播速度 S =331 公尺 + 0.6 t° (t° = 測定時溫度)

因為要求折射波所走之速度,因此超音波行走 1cm 折射回來所消耗之時間 T 如下

列公式所示(當 t° = 23時)

2

T = = 58 µs

(331 + 0.6 x 23) x 100

因此只要計算超音波發射到收到折返波之時間除以 58µs,其商數=測量距離。

6

Page 16: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

第二章 電路分析

2-1 555 內部電路及其動作原理

1972 年,Signetics 公司發表了雙極系定時器 IC NE555,是目前使用最普遍

IC 之一,之後,IntersiI 公司推出 C-MOS 系列之 ICM 7555,使其用途更加廣泛。

圖 2-1 555 內部電路

圖 2-1 所示為 ICM7555 (NE555) 之內部電路方塊圖(a)、動作邏輯表(b)及

接腳圖(c)。其內部電路係由 R-S-FF 及 2個比較器等構成,此較器 A 比較電源

電壓 V+ 之 2/3 電壓及臨界輸入電壓( Threshold Voltage) 兩個電壓,而比較器

7

Page 17: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

B 則比較 V+ 之 1/3 電壓及輸入觸發電壓兩個電壓。

現在,假設比較器 A 之 "+" 輸入端子電壓(臨界電壓:Threshold )略為高於

"-" 輸入端子電壓時,則 A 之輸出反相而變成 "l" 之狀態,結果 R-S-FF 被重

置 (Reset),因此,輸出電壓 (第 0 腳輸出電壓) 變成 "0",同時,放電用 FET

(或電晶體) 呈導通狀態。另外一方面,假如此較器 B 之 "-" 輸入端子 (觸發

信號輸入端子) 的輸入電壓稍微低於 "+" 輸入端子之電壓時,則在該瞬間

R-S-FF 被重置,輸出電壓變成 "1 ",同時,放電用 FET (或電晶體) 變成不導

通狀態。

以上所述為 555 內部電路之基本動作原理,除此之外,當 Reset (重置) 輸

入電壓變成 "O" 時,則不論其他之狀態如何,其輸出必定變成 "0",而放電用

FET (或電晶體)則被強制導通。圖(b)之動作邏輯表所示即為以上所述之動作的

概要。此外,假如由外部輸入控制電壓於第(5)腳時,則可由外部來改變比較器

之基準電壓,這樣子就能夠應用在特殊之用途。

2-2 555 之應用電路

為了讓大家對 555 之動作更深入了解起見,在此以幾個具體的應用電路為

例來作更進一步的說明。

圖 2-2 所示為使用 555 構成之不穩態多諧振盪器 (Astable Multivibrator )之電

路圖及其動作波形圖。

8

Page 18: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖 2-2 不穩態多諧振盪器

現在,假設圖中之輸出電壓處於 "0" 之狀態時,則表示在此之前之臨界電壓

(Threshold) (即第(6)腳輸入電壓) 大於 (2 / 3) V+電壓,因此,連接於第(6)

腳之電容器C的電壓 Ec 經由R2而被處於導通狀態之 FET 放電,使 Ec 逐漸降低,

經過一段時間後,Ec 降低至 (l/3) V+ 以下時,此較器 B 動作而令 R-S-FF 被設

置 (Set),使輸出電壓反轉而變成 "1" 之狀態,同時,放電用 FET 變成不導通

狀態。

結果,C 之放電停止,相反地,V+電壓經由 R1、R2 而開始向 C 充電,於

是,Ec 止跌回昇,經過一段時間後,Ec 超過 2/3 V+,這個時候比較器 A 動作

而將 R-S-FF 電置 (Reset),使輸出電壓回復到最初之 "0" 狀態。以上所述這

種動作反復不停地進行,因此,輸出端子 (第 0 腳) 之輸出電壓為方波電壓,方

波之頻率可由圖中之公式求出,由該公式得知,C 及 (R1+R2) 值越大則方波頻

9

Page 19: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

率越低。

我們看圖 2-3(a)所示為單穩態多諧振盪器 (One Shot Multivibrator): 即所

謂之定時器 Timer) 之電路及其動作波形圖,圖(b)所示為脈波寬度調變電路及

其動作波形圖。

在圖(a)之電路內,以負向觸發脈波信號輸入 ICM7555 之第 2腳令其電壓在

瞬間低於 (1/3)V+ 電壓時,則 V+ 經由 R 向 C 充電,於是,第 6﹑7腳電壓

經過一段時間 T 後上昇至 (2/3)V+,在此之前輸出電壓維持 "1" 之狀態,T 即

為定時器之時間,經過 T 時間後 ICM7555 之第 3 腳輸出電壓回復到 "0" 之

狀態。圖(b)所示之脈波寬度調變電路在基本上是單穩熊多諧振盪器 (One Shot

Multivib- rator),不同的地方是調變信號輸入第 5 腳,由外部輸入電壓來改變比

較器 A﹑B 之比較基準電壓。換言之,當輸入第 5 腳之電壓昇高時,則比較基

準電壓亦成此倒地昇高,於是,振盪輸出脈波寬度 (相當於圖(a)之 T) 隨之增

加,完成脈波寬度調變 (PWM: Pulse Width Modulation) 之任務。

圖 2-3 單穩態多諧振盪器

10

Page 20: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

2-3 40KHZ 震盪電路

Vcc

50K/25RVR1

0.01 0.01C8C7

5

3

超音波40T

100R4

Vc

Vout R6

TR 2

12KR5

R 4

8

10K

GND

1

IC51010

6

0.001C9

TH

IC3555

+5V

SW12a

+12V

P3.6

R7390

MylarCCCC

40T+

40T-

F40KHz

OSC_CONT

555IC﹑R5﹑VR1﹑C9 組成一不穩態多諧震盪器,由第 3腳產生脈波,調整 VR1

使第 3腳輸出脈波為 40.000〜40.250KHz。

C8 為 555 之雜訊抑制濾波器。

C7,R4 與 40KHZ 超音波產生器配合產生超音波輸出其能量來源由 555 之第

3腳供應。

555IC 之 R(第 4 腳)為 H 時,555 產生震盪,R 為 L 時停止震盪。

2-4 40KHZ 接收回路

B

E

C

1

3

0.001C11

24

1kR12

120KR11

100PFC12

+5V

R141K

3KR13

8

IC4

TRACE

P3.7

LM393

C100.02

R101.8K

C945Q2

40R-

40R+R8

120K

超音波40R

470KR9

CC

Mylar

CC

Q2﹑R8﹑R9﹑R10 組成一寬頻帶放大器,將 40R 之超音波接收器收到之信號放

大約 60db,經由 C10 將信號送到 IC4 做信號零位比較檢出。

IC4﹑R11﹑R12﹑C11 組成一零電位準比較器,C11 是用來抑制雜訊用,R13 是

11

Page 21: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

用來提昇輸出為 H 時之電流(因 LM393 輸出電流非常小)。

2-5 LCM 原理

LCD為 Liquid Crystal Dispaly 縮寫,也分為繪圖模式LCD及

文字模式LCD,市面上很容易買到不同廠牌之顯示文字的 LCD,但

似乎 LCD 控制器皆為同樣一顆,編號為 HD44780A。所以不論16字

X1列,20字X2列,40字X2列之文字模式 LCD,其控制方法皆相同,

HD44780A 之特性為:

顯示資料 RAM (Display Data RAM) 共 80 個BYTES。

字元產生器 ROM (Character Generator ROM,簡稱 CG ROM)

160 個 5X7 點矩陣字型 (Pattern)。

字元產生器 RAM (Character generator RAM,簡稱 CG RAM) 可

寫入 8 個字型,使用者可自行設計 8 個 5X7 點矩陣字型。

多種控制指令如:清除顯示器﹑游標歸位﹑顯示器關閉/開啟﹑

游標關閉/開啟﹑字元閃爍﹑游標移位﹑移位顯示等等。

2-6 LCM 硬體說明

圖3-2為方塊圖,在圖下方之對外輸出入信號共 14 條線,

也就是文字型 LCD 模組的 14 支實際接腳,一般為 1X14 PIN 或

2X7 PIN方式連接,各腳說明請參考圖2-6。

12

Page 22: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

表2-1 文字型 LCD 接腳說明

13

Page 23: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖 2-4 文字型 LCD 功能方塊圖

依圖各方塊之功能,依編號說明如下:

1. 暫存器 (Registers), LCD 共有兩個八位元暫存器,即指令

暫存器 (Instruction Register,IR),和資料暫存器 (Data

14

Page 24: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

Register, DR)。功能為:

A. 指令暫存器可存放指令碼 (instruction code) 或 DD RAM

位址或 CG RAM 位址,此暫存器僅可寫入。

B. 當寫資料到 LCD 時,前一個位址指令已決定了是要寫入 DD

RAM 或 CG RAM,資料首先存放在資料暫存器,在自動地移

入 DD RAM 或 CG RAM。

C. 當讀取 LCD 資料時 DD RAM 或 CG RAM 的資料會暫時存放

在資料暫存器,再由 CPU 讀去。其實,在前一個位址值寫

入指令暫存器時,資料已先從 DD RAM 或 CG RAM 移入資料

暫存器每讀一次,一個 RAM 位址的資料自動地又移入資料

暫存器。

2. 忙碌旗標 Busy Flag,F): 當 BF = 1,表示 LCD 正在執行內部

運作,並且不接受新的指令。BF 可由 RS = 0 時讀取位元 7 得

到旗標狀態。

3. 位址計數器 (Address Counter,AC): 位址計數器可產生 DD

RAM 及 CG RAM 之位址。位址值及選擇那一個 RAM 可一次寫

入指令暫存器決定之;讀寫 RAM 資料後,位址計數器將自動

遞增 (Increment) 或遞減 (Decrement)。位址計數器亦可由

RS = 0 時讀取低的 7 個位元得之。

4. 顯示資料 RAM (Display Data RAM,DD RAM): 共 80 bytes,

存放顯示資料的字元碼 (character code),一個 DD RAM 位

址 (address) 對應一個顯示位置 (position), 寫入不同的

字元碼就顯示不同的字型沒有對應到顯示的 RAM 可由使用者

儲存資料或自行運用。

5. 字元產生器 ROM (Character Generator ROM,CG ROM): CG

ROM 中存放著 160 個 5X7 點矩陣字型及 32 個 5X10 點矩陣

15

Page 25: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

字型。每個字型對應著不同 8 位元字元碼 (character code),

部份與 ASCII 相同其餘為日文字型。LCD 字元碼與字型對應

表請參表3-3。

6. 字元產生器 RAM (Character Generator RAM,CG RAM): 使

用者可自行設計任意的 5X7 點矩陣字型。

7. 時序產生器 (Timing Generator): 供應 DD RAM,CG RAM 及

CG ROM 內部運作之時序信號。

8. 游標/閃爍控制器 (Cursor/Blink Controller): 用來產生

一個游標和一個閃爍的字元,顯示在 DD RAM 目前位址所指

的顯示位置,游標為字元下的一條橫線。

9. 並列對串列轉換器 (Parallel-to-Serial Converter): 將CG

ROM 或 CG RAM 中讀出的並列資料轉成串列資料送到顯示驅動

器 (display driver)。

10.偏壓產生器 (Bias Voltage Generator): 用來產生液晶顯示

器 (LCD) 顯示時所需要的偏壓準位。

11.LCD 驅動器 (LCD Driver): 此電路接收顯示資料,時序信號

和偏壓來產生共用背景顯示及各段顯示信號。

12.LCD 面板 (LCD Panel): 點矩陣液晶顯示面板,有一列16字,

兩列16字,兩列20字及兩列40字等種類。字元與字元間有一

個點距離的間隙。

16

Page 26: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

表2-2 LCD字元碼與字型對應表

2-7 LCM 暫存器及指令碼說明

表3-4為 LCD 所有指令控制碼及暫存器一覽表。其中 1- 8

項為 RS = 0,寫入指令暫存器,寫入不同的控制碼即產生不同的控

制功能。第 9 項為令 RS = 0 時,讀取 LCD,此時讀入資料的位元

7 為忙碌旗標,其他位元為位址計數器之內容。第 10﹑11 項為令

RS = 1,即可讀寫 CG RAM 或 DD RAM 中的資料,至於是前者或後者,

要由使用者所設定的資料是 CG RAM 位址或 DD RAM 位址而決定(第

7 或第 8 項)。

17

Page 27: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

表2-3 LCD 指令表一覽表

表2-7右邊一行為每個的執行時間,此為使用者每一次讀寫LCD 暫存器後要

等待的時間,因為 LCD 控制器本身接收一個指令後在內部做處理及運算,需要

花費時間,此時間過後 CPU 才可再下另一指令,否則會被忽略。各指令說明如

下:

1.清除顯示器 (Display clear): 將 DD RAM 內資料皆填入空碼

20H。

2.位址計數器清為零。若顯示移位過,也會恢復原始位置。執行

此指令,使所有顯示消失,游標及字元閃爍位置移到左上角。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

18

Page 28: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

0 0 0 0 0 0 0 0 0 1

3.顯示/游標歸位 (Display/Cursor home): 位址計數器清為零

顯示恢復原始位置,游標移到左上角。DD RAM 中資料無影響。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 0 1 X

3.進入設定模式 (Entry Mode Set)

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 1 I/D S

I/D:位址計數器遞增 (I/D = 1) 或遞減 (I/D = 0),每讀寫

DD RAM 中字元碼一次則位址計數器加一或減一。游標顯

示之位置亦同時向右 (I/D = 0) 或向左 (I/D = 0) 移一

個位置。讀寫 CG RAM 亦相同效果。

S:當 S = 1,寫入一個字元碼到 DD RAM 時,整個顯示幕向

左 (I/D = 1) 或向右 (I/D = 0) 移一格位置,而游標能

停留在相對的顯示位置。當 S = 0,顯示幕不移動。寫入

CG RAM 時顯示幕不移動。

4.顯示啟/閉 (Display ON/OFF)

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 1 D C B

D:當 D = 1,顯示幕開啟 (turn on)。當 D = 0,顯示幕關閉

19

Page 29: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

(turn off),顯示資料仍保留在 DD RAM 中。

C:當 C = 1,游標被顯示在位址計數器所指的位置上。

當 C = 0,游標不會出現。游標是在 5X8 矩陣之第 8 列

五個點構成,其餘 5X7 點為字型。對 5X10 之字型則在第

11 列的五個點構成。

B:當 B = 1,在游標位置之字元會閃爍,閃爍方式為所有5X8

的點 (含游標),變黑 409.6ms,然後字元出現 409.6ms,

如此交替顯示所有點及字元而成閃爍現象。

5.顯示/游標移位 (Display/Cursor Shift),顯示幕和/或游

標被向右或向左移動。對於雙列顯示器游標會從第一列的第 40

個位置移到第二列第一個位置,但移到第二列第 40 個位置後不

會歸回原點,而是移到第二列第一個位置。

指令碼為:

RS R/W D7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 1 S/C R/L X X

S/C R/L

0 0 ----- 游標向左移(AC ← AC-1)

0 1 ----- 游標向右移(AC ← AC+1)

1 0 ----- 整個顯示幕和游標向左移

1 1 ----- 整個顯示幕和游標向右移

當顯示幕被移動時,不會影響位址計數器。

6.功能設定 (Function Set),此指令一定要在所有其他指令碼

之前。

指令碼為:

20

Page 30: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 1 DL N F X X

DL:選擇介面資料長度,DL = 1 為 2bit 資料轉移 (Transfer)

DL 為 4bit 資料轉移。使用 4bit資料轉移時,一個完整

字元資料要讀或寫兩次。

F:F = 1,5X10 點矩陣。F = 0,5X7點矩陣。

N:選擇顯示之列數為雙列或單列,N = 0 表單列。N = 1 表示

雙列若單列顯示器以雙列定址方式仍要選 N = 1。

7.字元產生器 RAM 位址設定 (CG RAM Address Set),可將 CG

RAM 位址載入位址計數器中,位址由 6 個位元所組成。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 1 A A A A A A

A = Address bit

8.顯示資料 RAM 位址設定 (DD RAM Address Set),可將 DD

RAM 位址載入位址計數器中,位址由 7 個位元所組成。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 1 A A A A A A A

A = Address bit

9.忙碌旗標/位址計數器讀取 (Busy flag/Address Counter

Read)

指令碼為:

21

Page 31: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 1 BF A A A A A A A

A = Address bit

10.字元產生器 RAM/顯示資料 RAM 的資料寫入 (CG RAM/DD RAM

Data Write),資料是寫入 CG RAM 還是 DD RAM 中的那一個位

址,皆由先前所下的位址設定指令決定。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

1 0 D D D D D D D D

D = Data bit

11.字元產生器 RAM/顯示資料 RAM 的資料讀取 (CG RAM/DD RAM

Data Read),資料是由 CG RAM 還是 DD RAM 中的那一個位址

讀出,皆由先前所下的位址設定指令決定,與寫入類似。讀或

寫資料都會使位址自動加一或減一。

指令碼為:

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

1 1 D D D D D D D D

2-8 LCM 連接方式與時序

LCD 的資料匯流排可以 8 位元或 4 位元介面方式與微處理機連

接在此專題線路為 8 位元方式連接,因此不討論 4 位元介面連接方

式。

圖2-5為LCD讀取操作時序圖

圖2-6為LCD寫入操作時序圖

22

Page 32: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖2-7為LCD讀取操作時序特性

圖2-8為LCD寫入操作時序特性

圖2-9為LCD與8051標準連線方式

圖2-5 LCD 讀取操作時序圖

圖2-6 LCD 讀取操作時序特性

23

Page 33: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖2-7 LCD 寫入操作時序圖

圖2-8 LCD 入操作時序特性

24

Page 34: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖2-9 LCD 與 8051 標準連線方式

25

Page 35: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

第三章 軟體分析

3-1 89C51 的特性

1.最適合控制應用的8位元CPU。

2.具布林代數處理(單位元邏輯)能力。

3.64KBytes的程式記憶體位址空間(ROM)。

4.64KBytes的資料記憶體位址空間(RAM)。

5.晶片內部有4KBytes的程式記憶體。

6.晶片內部有128Bytes的資料記憶體。

7.32個可雙向和獨立定址的I/O線。

8.兩組16位元計時器/計數器。

9.一組全雙工UART(通用非同步接收和傳送器)。

10.具兩層優先權的5個中斷源結構。

11.晶片內部有時脈振盪器(最高為12MHz)。

12.具有4K/8KBytes的快速可規劃和可抹除的ROM可寫入/抹除

1000次以上, 程式可保存10年以上。

13.操作電壓範圍:Vcc=5V±10%或20%。

14.操作頻率:0Hz〜24MHz。15.三個可規劃的記憶體上鎖位元。

26

Page 36: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖 3-1 89C51 內部結構圖

3-2 89C51 的接腳功能

Vss :

(1) 第 20 腳。

(2) 電路之地電腳。

Vcc :

(1) 第 40 腳。

(2)電源接腳。

XTAL1 及 XTAL2 :

(1)第 19 腳及第 18 腳。

27

Page 37: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

(2) 兩腳之間需接一個 3.5〜12MHZ 之石英晶體。

(3) 請參考圖 2-3-1

(4) 常用之石英晶體有 3.58MHZ、6MHZ、11.0592MHZ

12MHZ。

+5V

89C51

RESET

10K

10UF

9

40

+5V

RESET

圖 3-2 振盪電路

RESET :

(1) 第 9 腳。重置輸入腳。

(2) 此腳內部已有一個 50kΩ〜300kΩ的電阻器接地,

所以只需接一個電容器至+VCC 即可在電源 ON 時產

生開機重置的功能。

(3) 如有需要,亦可在電容器兩端並聯一個常開按鈕,

以便壓此按鈕時可強迫系統重置。

(4) 請參考圖 3-2-1。

(5) 當重置信號發生後會產生下列作用:

a. 重置特殊功能暫存器的值。

b. 所有的埠(Port1,Port3)都成為輸入狀態。

c. 令 CPU 從位址 0000H 開始執行程式。

28

Page 38: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

19

XTAL2

XTAL1

GND

20

X1

C1 C2

18 89C51

C1,C2 = 20 ± 10PF

圖 3-3 開機重置電路

29

Page 39: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

圖 3-4 特殊功能暫存器重置後之預設值

/EA :

第 31 腳。

(1) 當 /EA 腳接地時,內部程式記憶體失效,CPU 被迫只

讀取外部的程式記憶體。

30

Page 40: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

(2) 8051、8052、8751、8752 等編號,此腳必需接至+ Vcc。

(3) 8031、8032 等編號,此腳必需接地。

P0.0〜P0.7:

(1) 第 32〜39 腳。

(2) 8 位元之輸入/輸出埠。稱為 Port0,簡稱為 P0。

(3) 每隻腳均可當成輸入或輸出腳用。

(4) 接腳 P0.0〜P0.7 均為開汲極(open drain) 結構,若欲輸

出 Hi 或 Low 之電壓需自己在接腳上外部提升電阻

(external pull-up)。

(5) 當外接記憶體或外接 I/O 時,必須利用 P0.0〜P0.7 作為

位址匯流排及資料匯流排。

圖 3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法

(6) Port 0 做輸出埠用時,每隻接腳均可沉入(sink) 8

個 LS TTL 負載。

(7) 若某接腳欲當作輸入腳用,則需先將 1 寫入這隻接腳。

P1.0〜P1.7:

(1) 第 1〜第 8 腳。

(2) 8 位元之輸入/輸出埠。稱為 Port1,簡稱為 P1。

(3) Port 1 為具有內部提升電阻(約 30kΩ)的雙向輸入

/輸出埠。可以驅動 4 個 LS TTL 負載。

(4) 每隻腳均可當成輸入腳或輸出腳使用。

(5) 若某接腳欲當成輸入腳用,則需先將 1 寫入這隻腳。

31

Page 41: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

P2.0〜P2.7:

(1) 第 21〜第 28 腳。

(2) 8 位元之輸入/輸出埠。稱為 Port 2,簡稱為 P2。

(3) Port 2 是具有內部提升電阻器(約 30kΩ)的雙向輸

入/輸出埠。可以驅動 4 個 LS TTL 負載。

(4) 每隻腳均可當成輸入腳或輸出腳用。

(5) 若某接腳欲當作輸入腳用,則需先將 1 寫入這隻接

腳。

(6) 當 CPU 使用 16 位元的位址對外部記憶體進行存取時

Port 2 被用來輸出位址的高位元組。

P3.0〜P3.7:

(1) 第 10〜第 17 腳。

(2) 8 位元之輸入/輸出埠。稱為 Port3,簡稱為 P3。

(3) Port 2 是具有內部提升電阻器的雙向輸入/輸出埠。

可以驅動 4 個 LS TTL 負載。

(4) 每隻腳均可當成輸入腳或輸出腳使用。

(5) 若某接腳欲當成輸入腳用,必需先將 1 寫入這隻腳。

Port 3 的接腳可以作為下列特殊用途

32

Page 42: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

接腳名稱 特 殊 功 能

P3.0 RXD(串列埠的輸入腳)

P3.1 TXD(串列埠的輸出腳)

P3.2 /INT0(外部中斷 0的輸入腳)

P3.3 /INT1(外部中斷 1的輸入腳)

P3.4 T0(計數器 0的輸入腳)

P3.5 T1(計數器 1的輸入腳)

/WR(當 CPU 欲資料送至外部 RAM 或外部

P3.6 I/O 裝置時,此腳會產生負脈波。稱為

寫入脈波輸出腳。)

/RD(當 CPU 欲從外部 RAM 或外部 I/O 讀

P3.7 取資料時,此腳會產生負脈波。稱為

讀取脈波輸出腳。)

ALE:

(1) 第 30 腳。位址閂鎖致能(address latch enable)輸出腳。

(2) 當 CPU 對外部裝置存取資料時,此腳輸出脈波之負

緣可用來鎖住(latch)由 Port 0 送出之低位元組位址。

/PSEN:

(1) 第 29 腳。外部程式記憶體致能(program store enable)

輸出腳。

(2) 當 CPU 欲讀取外部程式記憶體的內容時,此腳會自

動產生負脈波。

33

Page 43: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

3-3 89C51 程式

SYMBOLS ON ;起動符號除錯檔

LCM_E .REG P2.5 ;P2.5 = LCM E

LCM_RW .REG P2.6 ;P2.6 = LCM RW

LCM_RS .REG P2.7 ;P2.7 = LCM RS

TEST_SW .REG P3.1 ;P3.1 = TEST SW

ALM_SP .REG P3.2 ;P3.2 = SP

TEST_LED .REG P3.3 ;P3.3 = TEST LED

OSC_CONT .REG P3.6 ;P3.6 = OSC CONT

SINGLE_IN .REG P3.7 ;P3.7 = SINGLE IN

;--------------------------------

ORG 0000H ;程式起點

LJMP MAIN ;GO 主程式

;--------------------------------

;# T1 中斷服務副程式

;--------------------------------

ORG 001BH ;T1 中斷起點

LCALL T1_INT ;T1 中斷服務副程式

RETI ;中斷返回

;--------------------------------------------------------------------

;# 主程式區由此開始

;--------------------------------------------------------------------

MAIN:

LCALL SET_IO ;I/O PORT 初值設定

LCALL INIT_LCM ;LCM 初值化,2 行,8 BIT,AC = 0

LCALL LCM_TEST_OK ;LCM 顯示 LCM TEST OK !

LCALL SET_T0_T1 ;設定 T0 = 65.536MS

LCALL LCM_STANDBY ;LCM 顯示 DEVICE STANDBY !

MAIN_L:

LCALL D_1S ;延時 1SEC

JNB TEST_SW,MAIN_N ;TEST SW = L,GO MAIN_N

LCALL TEST_DISCONT ;測距離

LCALL SP_DIS ;蜂鳴器鳴叫

LCALL D_1S ;延 1 SEC

LJMP MAIN_L ;GO MAIN_L

MAIN_N:

LCALL TEST_LED_ON ;TEST LED 亮

34

Page 44: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

LCALL OSC_ON ;555 開始振盪

JNB TEST_SW,$ ;TEST_SW = L,等待放開

LCALL OSC_OFF ;TEST_SW = H,555 停止震盪

LCALL TEST_LED_OFF ;TEST LED 熄

LJMP MAIN_L ;GO MAIN_L

;--------------------------------------------------------------------

; 副程式區由此開始

;--------------------------------------------------------------------

;# T1 中斷服務副程式

;# 每隔 R1 X 20MS 反相一次 ALM_SP

;--------------------------------

T1_INT:

MOV TH1,#>(65536 - 20000);20MS

MOV TL1,#<(65536 - 20000);

DEC R2 ;R2 - 1

CJNE R2,#FFH,T1_INT_O ;R2 <> FFH,GO T1_INT_O

MOV A,R1 ;ACC = R1

MOV R2,A ;R2 = ACC = R1

CPL ALM_SP ;ALM_SP 反相

T1_INT_O:

RET ;返回

;--------------------------------

;# I/O PORT 初值設定

;--------------------------------

SET_IO:

SETB TEST_SW ;TEST_SW = H(設為輸入)

SETB ALM_SP ;ALM SP = H(OFF)

LCALL TEST_LED_OFF ;TEST_LED = L(LED 熄)

LCALL OSC_OFF ;OSC_CONT = L(OSC OFF)

SETB SINGLE_IN ;SINGLE_IN = H(設為輸入)

SETB LCM_RS ;LCM RS = H

CLR LCM_RW ;LCM_RW = L

CLR LCM_E ;LCM E = L

RET ;返回

;--------------------------------

;# LCM 初值化,2 行,8 BIT,AC = 0

;--------------------------------

INIT_LCM:

35

Page 45: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

LCALL D_2MS ;延時 2MS

MOV A,#38H ;

LCALL WRINS ;1 行 = 30H,2 行=38H

MOV A,#38H ;

LCALL WRINS ;LCM 為 2 行顯示,

MOV A,#38H ;8 位元介面,5X7 點字形

LCALL WRINS ;

LCALL LCM_OFF ;LCM OFF

LCALL LCM_RAM_CLR ;LCM RAM 填入 ASCII 碼 20H

LCALL LCM_AC_1 ;LCM 每收一筆資料後 AC + 1

LCALL LCM_ON ;LCM ON

LCALL CURSOR_OFF ;LCM CURSOR OFF

LCALL CURSOR_1_1 ;LCM CURSOR 第 1 列第 1 行

RET ;返回

;--------------------------------

;# LCM ON

;--------------------------------

LCM_ON:

MOV A,#0CH ;ACC = 0CH

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# LCM OFF

;--------------------------------

LCM_OFF:

MOV A,#08H ;ACC = 08H

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# LCM RAM 填入 ASCII 碼 20H

;--------------------------------

LCM_RAM_CLR:

MOV A,#01H ;ACC = 01H

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

36

Page 46: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;# LCM 每收一筆資料後 AC + 1

;--------------------------------

LCM_AC_1:

MOV A,#06H ;ACC = 06H

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# LCM CURSOR ON

;--------------------------------

CURSOR_ON:

MOV A,#0EH ;ACC = 0EH

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# LCM CURSOR OFF

;--------------------------------

CURSOR_OFF:

MOV A,#0CH ;ACC = 0CH

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# LCM CURSOR FLASH

;--------------------------------

CURSOR_FLASH:

MOV A,#0FH ;ACC = 0FH

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# 游標指向第 1 列第 1 字

;--------------------------------

CURSOR_1_1:

MOV A,#10000000B ;游標歸位至第 1 列第 1 個字元

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

37

Page 47: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;# 游標指向第 2 列第 1 字

;--------------------------------

CURSOR_2_1:

MOV A,#11000000B ;游標歸位至第 2 列第 1 個字元

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# 游標指向第 2 列第 9 字

;--------------------------------

CURSOR_2_9:

MOV A,#11001000B ;游標歸位至第 2 列第 9 個字元

LCALL WRINS ;將指令碼寫入 LCM

RET ;返回

;--------------------------------

;# 將指令碼寫入 LCM

;--------------------------------

WRINS:

CLR LCM_RS ;RS = 0

CLR LCM_RW ;R/W = 0

CLR LCM_E ;E = 0

SETB LCM_E ;E = 1

MOV P0,A ;P0 = ACC = 指令碼送到 LCM DB0 - DB7

CLR LCM_E ;E = 0

LCALL D_2MS ;延時 2MS

RET ;返回

;--------------------------------

;# 將字串送到 LCM 中

;--------------------------------

WR_LCM_STR:

PUSH 7 ;R7 推入堆疊

MOV R7,#00H ;

WR_LCM_STR_L: ;

MOV A,R7 ;

MOVC A,@A+DPTR ;

CJNE A,#10H,WR_LCM_STR_N ; 將 RAM ?0H - ?FH 之字元碼逐一送出

POP 7 ;

RET ;

WR_LCM_STR_N: ;

38

Page 48: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

LCALL WR_DATA_LCM ;

INC R7 ;

LJMP WR_LCM_STR_L ;

;--------------------------------

;# 將 R0 所指起始位址 RAM 共 R7 個送到 LCM

;--------------------------------

WR_R0_R7_LCM:

MOV A,@R0 ;ACC = R0 所指內部 RAM 位址內容

DJNZ R7,WR_R0_R7_N ;R7 - 1 > 0,GO WR_R0_R7_N

RET ;返回

WR_R0_R7_N:

LCALL WR_DATA_LCM ;將資料寫入 LCM

INC R0 ;R0 + 1

LJMP WR_R0_R7_LCM ;GO WR_R0_R7_LCM

;--------------------------------

;# 將資料送入 LCM

;--------------------------------

WR_DATA_LCM:

SETB LCM_RS ;RS = 1

CLR LCM_RW ;R/W = 0

CLR LCM_E ;E = 0

SETB LCM_E ;E = 1

MOV P0,A ;P0 = ACC = 指令碼送到 LCM DB0 - DB7

CLR LCM_E ;E = 0

LCALL D_80US ;延時 80US

RET ;返回

;--------------------------------

;# "SUPERWAVE LENGTH"

;# "TEST.LCM TEST OK"

;--------------------------------

LCM_TEST_OK:

LCALL CURSOR_1_1 ;游標指向第 1 列第 1 字

MOV DPTR,#LCM_STR1 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

39

Page 49: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

LCALL CURSOR_2_1 ;游標指向第 2 列第 1 字

MOV DPTR,#LCM_STR2 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

RET ;返回

;--------------------------------

;# "STANDBY! "

;# "LENGTH = CM "

;--------------------------------

LCM_STANDBY:

LCALL CURSOR_1_1 ;游標指向第 1 列第 1 字

MOV DPTR,#LCM_STR3 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

LCALL CURSOR_2_1 ;游標指向第 2 列第 1 字

MOV DPTR,#LCM_STR4 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

RET ;返回

;--------------------------------

;# "DISTANCE TEST..."

;--------------------------------

LCM_TEST:

LCALL CURSOR_1_1 ;游標指向第 1 列第 1 字

MOV DPTR,#LCM_STR5 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

RET ;返回

;--------------------------------

;# "DISTANCE OVER..."

;# "LENGTH = ??? CM "

;--------------------------------

LCM_OVER:

LCALL CURSOR_1_1 ;游標指向第 1 列第 1 字

MOV DPTR,#LCM_STR6 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

LCALL CURSOR_2_1 ;游標指向第 2 列第 1 字

MOV DPTR,#LCM_STR7 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

RET ;返回

;--------------------------------

;# 遮沒無效 0

40

Page 50: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;--------------------------------

CLR_NO_ZERO:

MOV R7,#00H ;R7 = 0

MOV R0,#20H ;R0 = 20H

CLR_NO_ZERO_L:

MOV A,@R0 ;ACC = R0 所指內部 RAM 位址內容

CJNE A,#30H,CLR_NO_ZERO_O;ACC <> 30H,GO CLR_NO_ZERO_O

MOV A,#20H ;ACC = 30H,ACC = 20H

MOV @R0,A ;R0 所指內部 RAM 位址內容 = ACC

INC R0 ;R0 + 1

INC R7 ;R7 + 1

CJNE R7,#23H,CLR_NO_ZERO_L;R7 <> 23H,GO CLR_NO_ZERO_L

CLR_NO_ZERO_O:

RET ;返回

;--------------------------------

;# 將距離值寫到 LCM 第 2 列 9,10,11,12 位址

;--------------------------------

WR_LENGTH_LCM:

LCALL CURSOR_2_9 ;游標指向第 2 列第 9 字

MOV R0,#20H ;R0 = 20H

MOV R7,#05H ;R7 = 5

LCALL WR_R0_R7_LCM ;將 R0 所指起始位址 RAM 共 R7 個送到 LCM

RET ;返回

;--------------------------------

;# 設定 T0 MODE 1(65.5536MS)

;--------------------------------

SET_T0_T1:

MOV TMOD,#00010001B ;T0 = MODE 1,T1 = MODE2

MOV TH0,#0 ;65.536MS

MOV TL0,#0 ;

MOV TH1,#>(65536 - 20000);50MS

MOV TL1,#<(65536 - 20000);

SETB EA ;中斷源致能

SETB ET1 ;T1 中斷致能

RET ;返回

;--------------------------------

;# 測距離 T > 3.58MS(62CM〜840CM 實測有效距離)

;--------------------------------

41

Page 51: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

TEST_DISCONT:

CLR TR1 ;T1 OFF

SETB ALM_SP ;ALM SP OFF

LCALL TEST_LED_ON ;TEST_LED ON

LCALL CLR_RAM ;RAM 20H - 23H = 30

LCALL LCM_TEST ;LCM 顯示測試中

LCALL D_2MS ;延時 2MS

LCALL OSC_ON ;555 開始振盪

SETB TR0 ;T0 ON

LCALL D_250US ;延時 250US

LCALL OSC_OFF ;555 停止震盪

LCALL D_2500US ;延時 3.25MS

TEST_L:

JNB SINGLE_IN,TEST_N1 ;SINGLE IN = L,GO TEST_N1

JNB TF0,TEST_L ;SINGLE IN = H,TF0 = 0,GO TEST_L

CLR TF0 ;TF0 = 1,TF0 = 0,超過距離(> 1130 CM)

CLR TR0 ;T0 OFF

LCALL LCM_OVER ;LCM 顯示 OVER

LCALL D_1S ;延時 1S

LCALL LCM_STANDBY ;LCM 顯示 STANDBY

LJMP TEST_O ;GO TEST_O

TEST_N1:

LCALL CHK_L_10US ;檢查 SINGLE IN = L 超過 10US ?

JNZ TEST_L ;ACC <> 0(假信號),GO TEST_L

CLR TR0 ;ACC = 0,T0 OFF

LCALL CONV_T0_RAM ;轉換 T0 值到 RAM 20H - 23H(除 58)

LCALL CLR_NO_ZERO ;遮沒無效 0

LCALL WR_LENGTH_LCM ;將距離值寫到 LCM 第 2列 10〜13 字位址

LCALL TEST_LED_OFF ;TEST LED 熄

LCALL CURSOR_1_1 ;游標指向第 1 列第 1 字

MOV DPTR,#LCM_STR3 ;DPTR 指向欲顯示字串之起始位址

LCALL WR_LCM_STR ;將字串送到 LCM 中

TEST_O:

MOV TH0,#0 ;65.536MS

MOV TL0,#0 ;

RET ;返回

;--------------------------------

;# 蜂鳴器鳴叫

42

Page 52: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;--------------------------------

SP_DIS:

MOV A,22H ;ACC = RAM 22H

ANL A,#0FH ;ACC 保留低四位元組

MOV R1,A ;R1 = ACC

MOV A,21H ;ACC = RAM 21H

ANL A,#0FH ;ACC 保留低四位元組

MOV B,#10 ;B = 10

MUL AB ;ACC * B(10)

ADD A,R1 ;ACC + R1

MOV R1,A ;R1 = ACC

MOV A,20H ;ACC = RAM 20H

ANL A,#0FH ;ACC 保留低四位元組

MOV B,#100 ;B = 100

MUL AB ;ACC * B(100)

ADD A,R1 ;ACC + R1

CLR C ;C = 0

SUBB A,#05H ;ACC - 5 - C

MOV R1,A ;R1 = ACC

MOV R2,A ;R2 = ACC = R1

CLR ALM_SP ;ALM_SP ON

SETB TR1 ;T1 ON

RET ;返回

;--------------------------------

;# RAM 20H - 23H = 30

;--------------------------------

CLR_RAM:

MOV 20H,#30H ;RAM 20H = 30H

MOV 21H,#30H ;RAM 21H = 30H

MOV 22H,#30H ;RAM 22H = 30H

MOV 23H,#30H ;RAM 23H = 30H

RET ;返回

;--------------------------------

;# TEST LED 亮

;--------------------------------

TEST_LED_ON:

CLR TEST_LED ;TEST LED 亮

RET ;返回

43

Page 53: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;--------------------------------

;# TEST LED 熄

;--------------------------------

TEST_LED_OFF:

SETB TEST_LED ;TEST LED 熄

RET ;返回

;--------------------------------

;# 555 輸出 40KHZ 方波

;--------------------------------

OSC_ON:

SETB OSC_CONT ;OSC CONT = H,555 致能

RET ;返回

;--------------------------------

;# 555 輸出 OFF

;--------------------------------

OSC_OFF:

CLR OSC_CONT ;OSC CONT = L,555 除能

RET ;返回

;--------------------------------

;# 檢查 SINGLE IN = L 超過 10US ?

;# SINGLE IN = L > 10US ACC = 00H

;# SINGLE IN = L < 10US ACC = FFH

;--------------------------------

CHK_L_10US:

NOP ;延時 1US

NOP ;延時 1US

JNB SINGLE_IN,CHK_L_10US_O;SINGLE_IN = L,GO CHK_L_10US_O

MOV A,#FFH ;SINGLE_IN = H,ACC = FFH

RET ;返回

CHK_L_10US_O:

MOV A,#00H ;ACC = 00H

RET ;返回

;--------------------------------

;# 轉換 T0 值到 RAM 20H - 23H

;# 1SEC 超音波傳播距離 D = 331 + 0.6xt (t = 當時溫度)

;# 2

;# 距離 1CM 超音波行走時間 T = ――――――――――― = 58 US

;# (發射到接收折射波所需時間) (331 + 0.6 x 23) x 100

44

Page 54: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

;# 如果以攝式 0 - 40 度作溫度與距離誤差補償(需另追加溫度 A/D),必需將測

得之

;# T0 值 x10 倍。1CM 距離超音波行走時間 T(US),取小數點一位 x10 倍,再

和 x10

;# 倍之 T0 值相除,所得之商即等於 ????CM,如需要轉換英制單位,餘數要保

留起來

;# [????CMx100 倍+(餘數四捨五入 x100 倍)] / INCH X100 倍,所得商既為

inch,餘

;# 數作小數點四捨五入,inch 總數超過 12 以上須再作一次換算(/12),如果

feet

;# 超過 3 以上需作碼換算(/3)。

;# 其 英制和公制換算法如下換算法如下:

;# 1 英吋 = 2.54 公分 1 公分 = 0.394 英吋

;# 1 英尺 = 30.48 公分 1 公寸 = 0.328 英尺

;# 1 英尺 = 12 英吋 1 公尺 = 3.28 英尺

;# 1 碼 = 3 英尺 1 公尺 = 1.0936 碼

;# 距離較正方法:(標準距離以外接盒尾端為準)

;# 1.程式燒錄後,將發射與接收單元相距約 4CM - 5CM(中心點距離固定)

;# 切上電源 12V,使用計頻器(數位電表 F)壓下 TEST SW,調整 VR2,測量 F 點

之頻率

;# 為 40KHZ(誤差 250HZ 以內),然後找一面光華之平面(鏡子亦可),距離

100CM,看

;# LCM 指示 ?CM,無誤差,則無須修正,有誤差再調整 DIPSW

;--------------------------------

CONV_T0_RAM:

MOV 24H,TH0 ;RAM 24H = T0 高八位元

MOV 25H,TL0 ;RAM 25H = T0 低八位元

MOV R4,#00H ;R4 = 30(LCM 0 顯示碼)

MOV R5,#00H ;R5 = 30(LCM 0 顯示碼)

MOV A,P1 ;ACC = P1 值

SWAP A ;ACC 高低位元組互換

ANL A,#0FH ;ACC 保留低四位元

MOV R6,A ;R6 = ACC

MOV A,P1 ;ACC = P1 值

ANL A,#0FH ;ACC 保留低四位元

MOV R7,A ;R7 = ACC

MOV A,25H ;ACC = RAM 25H 位址值

CONV_T0_RAM_L:

45

Page 55: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

CLR C ;C = 0

SUBB A,#58 ;ACC - C - 58(1CM 基準值,室溫 23 度)

JNC CONV_T0_RAM_2 ;C <> 1,GO CONV_T0_RAM_2

CLR C ;C = 1,C = 0

DEC 24H ;RAM 24H - 1

MOV B,A ;B = ACC 值

MOV A,24H ;ACC = RAM 24H

CJNE A,#FFH,CONV_T0_RAM_1;ACC <> FFH,GO CONV_T0_RAM_1

LJMP CONV_T0_RAM_X ;ACC = FFH,GO CONV_T0_RAM_X

CONV_T0_RAM_1:

MOV A,B ;ACC = B

CONV_T0_RAM_2:

INC R7 ;R7 + 1

CJNE R7,#0AH,CONV_T0_RAM_L;R7 <> 3AH,GO CONV_T0_RAM_L

MOV R7,#00H ;R7 = 3AH,R7 = 30H

INC R6 ;R6 + 1

CJNE R6,#0AH,CONV_T0_RAM_L;R6 <> 3AH,GO CONV_T0_RAM_L

MOV R6,#00H ;R6 = 3AH,R6 = 30H

INC R5 ;R5 + 1

CJNE R5,#0AH,CONV_T0_RAM_L;R5 <> 3AH,GO CONV_T0_RAM_L

MOV R5,#00H ;R5 = 3AH,R5 = 30H

INC R4 ;R4 + 1

CONV_T0_RAM_X:

LCALL DAA_R4_R7 ;調整 R4 - R7 為 LCM 顯示碼

MOV 20H,R4 ;RAM 20H = R4

MOV 21H,R5 ;RAM 21H = R5

MOV 22H,R6 ;RAM 22H = R6

MOV 23H,R7 ;RAM 23H = R7

RET ;返回

;--------------------------------

;# 調整 R4 - R7 為 LCM 顯示碼

;--------------------------------

DAA_R4_R7:

MOV A,R4 ;ACC = R4

ORL A,#30H ;ACC .OR. 30H

MOV R4,A ;R4 = ACC

MOV A,R5 ;ACC = R5

46

Page 56: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

ORL A,#30H ;ACC .OR. 30H

MOV R5,A ;R5 = ACC

MOV A,R6 ;ACC = R6

ORL A,#30H ;ACC .OR. 30H

MOV R6,A ;R6 = ACC

MOV A,R7 ;ACC = R7

ORL A,#30H ;ACC .OR. 30H

MOV R7,A ;R7 = ACC

RET ;返回

;--------------------------------

;# 延時 80US

;--------------------------------

D_80US:

PUSH 7 ;R7 推入堆疊

MOV R7,#40 ;R7 = 40

DJNZ R7,$ ;R7 - 1 > 0,重複執行

POP 7 ;取回 R7

RET ;返回

;--------------------------------

;# 延時 250US

;--------------------------------

D_250US

PUSH 7 ;R7 推入堆疊

MOV R7,#122 ;R7 = 122

DJNZ R7,$ ;R7 - 1 > 0,重複執行

POP 7 ;取回 R7

RET ;返回

;--------------------------------

;# 延時 2.5MS

;--------------------------------

D_2500US:

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R6,#50 ;R6 = 50

D_2500US_L

47

Page 57: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

MOV R7,#25 ;R7 = 25

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_2500US_L ;R6 - 1 > 0,GO D_2500US_L

POP 7 ;取回 R7

POP 6 ;取回 R6

RET ;返回

;--------------------------------

;# 延時 1MS

;--------------------------------

D_1MS:

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R6,#2 ;R6 = 2

D_1MS_L:

MOV R7,#250 ;R7 = 250

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_1MS_L ;R6 - 1 > 0,GO D_1MS_L

POP 7 ;取回 R7

POP 6 ;取回 R6

RET ;返回

;--------------------------------

;# 延時 2MS

;--------------------------------

D_2MS:

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R6,#4 ;R6 = 4

D_2MS_L:

MOV R7,#250 ;R7 = 250

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_2MS_L ;R6 - 1 > 0,GO D_2MS_L

POP 7 ;取回 R7

POP 6 ;取回 R6

RET ;返回

;--------------------------------

;# 延時 50MS

;--------------------------------

D_50MS:

48

Page 58: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R6,#100 ;R6 = 100

D_50MS_L:

MOV R7,#250 ;R7 = 250

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_50MS_L ;R6 - 1 > 0,GO D_50MS_L

POP 7 ;取回 R7

POP 6 ;取回 R6

RET ;返回

;--------------------------------

;# 延時 1SEC

;--------------------------------

D_1S:

PUSH 5 ;R5 推入堆疊

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R5,#10 ;R5 = 20

D_1S_L1:

MOV R6,#200 ;R6 = 200

D_1S_L2:

MOV R7,#250 ;R7 = 250

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_1S_L2 ;R6 - 1 > 0,GO D_1S_L2

DJNZ R5,D_1S_L1 ;R6 - 1 > 0,GO D_1S_L1

POP 7 ;取回 R7

POP 6 ;取回 R6

POP 5 ;取回 R5

RET ;返回

;--------------------------------

;# 延時 2SEC

;--------------------------------

D_2S:

PUSH 5 ;R5 推入堆疊

PUSH 6 ;R6 推入堆疊

PUSH 7 ;R7 推入堆疊

MOV R5,#20 ;R5 = 20

49

Page 59: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

D_2S_L1:

MOV R6,#200 ;R6 = 200

D_2S_L2:

MOV R7,#250 ;R7 = 250

DJNZ R7,$ ;R7 - 1 > 0,重複執行

DJNZ R6,D_2S_L2 ;R6 - 1 > 0,GO D_2S_L2

DJNZ R5,D_2S_L1 ;R6 - 1 > 0,GO D_2S_L1

POP 7 ;取回 R7

POP 6 ;取回 R6

POP 5 ;取回 R5

RET ;返回

;--------------------------------

;# LCM 提示字串

;--------------------------------

LCM_STR1:

DB "SUPERWAVE LENGTH" ;

DB 10H ;結束碼

LCM_STR2:

DB "TEST.LCM TEST OK" ;

DB 10H ;結束碼

LCM_STR3:

DB "STANDBY! " ;

DB 10H ;結束碼

LCM_STR4:

DB "LENGTH = CM " ;

DB 10H ;結束碼

LCM_STR5:

DB "DISTANCE TEST..." ;

DB 10H ;結束碼

LCM_STR6:

DB "DISTANCE OVER..." ;

DB 10H ;結束碼

LCM_STR7:

DB "LENGTH = ??? CM " ;

DB 10H ;結束碼

;--------------------------------------------------------------------

END ;程式到此結束

50

Page 60: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

第四章 實體上的應用

4-1 液位感測器的運用

圖 4-1 感測器流體控制圖

利用位移感測器測量出水位的位移,把水位的高度顯示出來,在透過 8051

的程式轉換,把水位的高度轉換成體積,利用液位感測器來測量出水位的剩餘。

我們可以利用液位感測器在桶子外外加一個電磁開關,把電磁開關跟液位感測器

51

Page 61: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

連接一起,可以利用這樣的組合感測器製造出液位流量控制器來。利用這套系

統、我們可以把它利用到許多的場合上來做流量上的管控。像是水庫的流量管制

何時該洩洪,利用這套系統可以讓水庫的流量的掌控更加的精準。除此之外,像

日常生活之中,我們常看到的水塔,也可以利用這套系統來進行監控,來加以監

視水塔的庫存水位。像一般化學工廠的流量管控,也可以利用這套系統來加以控

管,能夠幫助工廠在工作上能夠更加輕鬆的了解化學原料的儲存量和多少化學原

料需要排除。我們希望把液位感測器發揮到最大的功能,不只是在油罐車的測重

而已。

52

Page 62: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

第五章 結論

我們這組所做的實驗是利用超音波發射與接受的性質來截取距離,,然後在利用

此功能發揮到其他地方,我們是應用在測量液體的容積跟高度方面,起先指導教

授給我們很多方向去尋找,讓我們有蠻多資料可以應用,但在做的過程中,卻遇到

蠻多的挫折跟失敗,在發射電路裡面,首先要調出 40Khz,雖然關於 555 振盪方面的

資料非常的多,但我們發現,在調配電組跟電容時,我們套用其公式,所得到的數據

卻有所偏差,雖說算接近了,但對超音波 40Khz 感測元件而言,精準的頻率可以使

振幅到最大,讓接受感測元件方面更容易接受到訊號,因為超音波發射後經反射,

訊號衰減很多。克服了震盪電路之後,我們遇到了顯示電路的問題,我們一開始

使用 IC4518 和 IC4011 來產生顯示電路,利用頻率上計數器來計算之前發射的頻

率和後來接收到的頻率做計頻的計數,但是發現效果相當不好,我們於是加上一

個中斷設施,但效果仍然不彰。後來我們採取 89C51 來進行程式的轉換,利用

軟體幫助我們來進行顯示電路的部分,後來發現效果比使用之前的顯示電路還要

好,於是利用 89C51 來完成顯示的部分。整個電路相當的複雜,裡面有許多的

電路,再做這次的專題之中遇到許多的小電路問題,讓我們必須一個電路一個電

路去慢慢檢驗,才能夠從中找尋到一些問題所在。從這次的專題中,我們學習到

許多有關電路設計的觀念,和超音波元件的使用原理,讓我們在這次的畢業專題

之中,確實的學習到一些感測器的使用和機械元件的原理。我們這次專題遇到許

多的問題,造成最後的結果無法到達預期。我們認為我們日後必須要在檢討以下

的問題,才有辦法把這套液位感測器設計到完美的地步。

需要改進的缺失:

1、超音波在各個介質中傳遞時,因為介質的不同造成阻抗匹配的差距,我們必

須把阻抗匹配算的更精準,才能讓我們的超音波元件計算距離上能夠更精準。

2、在震盪電路方面,要讓 IC555 產生 40khz 的震盪頻率,我們必須去找到真正

能夠產生 40khz的電阻,讓頻率能夠確實的在 40khz,盡量不用 40khz左右的 頻

53

Page 63: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

率。

3、在超音波元件的發射跟接收方面,希望能夠讓接收方面的訊號能夠更加清楚

的接收,在放大電路上能夠補強這方面的缺失。

4、在顯示電路方面,我們利用文字型的 LCM 去顯示,但是顯示出來的效果並

不理想,我們希望可以從程式方面去改善這方面的缺失。

5、這套液位感測器,目前能偵測的位移單位是公分,但我們希望還能加強感測

器的精準度,把偵測範圍調整的厘米。

6、我們對於 89C51 程式方面微弱,日後我們必須加強對 89C51 程式方面的能力,

這樣才能夠把感測器修改到我們所希望的要求。

7、對於電路設計上的了解,我們目前懂得還是略嫌不夠,我們必須更加去了解

各個元件的特性,才能夠讓電路設計上更順手。

54

Page 64: 逢 甲 自動控制工程學系專題製作 專 題圖3-2 振盪電路.....28 圖3-3 開機重置電路.....29 圖3-4 特殊功能暫存器重置後之 圖3-5 P0.0〜P0.7 任一腳接上外部提升電阻器的方法.....31

參考文獻

[1] 許溢恬,感測器的電路設計,全華,民 78 年。

[2] 張希誠,感測器的基礎與應用,全華,民 80 年。

[3] 曹永偉,感測器技術入門,全華,民 90 年。

[4] 林肇杉,感測器應用 141 則,建興,民 91 年。

[5] 賴茂富,感測器原理與實用,中儀,民 76 年。

55