45
自動控制工程學系專題製作 8051-萬 用 時 鐘 8051 Multi-purpose Clock 指導教授:蘇文彬 生:尤致翔 林青駿 中華民國九十四年十二月二十七日

逢 甲 自動控制工程學系專題製作 專 題 論 文 · 第 2 章 8051 單晶片的基本理論 2-1 8051 單晶片的主要特性 [1]所謂的單晶片微電腦,即把微電腦的結構製造結合在一個IC

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 逢 甲 大 學 自動控制工程學系專題製作

    專 題 論 文

    8051-萬 用 時 鐘 8051 Multi-purpose Clock

    指導教授:蘇文彬

    學 生:尤致翔

    林青駿

    中華民國九十四年十二月二十七日

  • i

    誌 謝

    在大學學了三年多來的知識,包括基本理論、實驗精神、設計原理,給了

    我們研究專題做了最有力的支持,讓我們三年來的學習有發揮的地方,終至在

    專題表現上有了成果,也驗証了這三年並非虛度而過。

    做的過程中,承蒙 蘇文彬老師悉心的指導,在我們遇到程式或電路等相關

    問題時,不斷導正我們正確的觀念,點通了我們邏輯上的思考,才不致走錯方

    向,順利完成這題目。

    最後還要謝謝在這段學習過程中,周邊的同學朋友們互相切搓,交換學習

    心得;親人的適時給我們鼓勵;還有網路上各討論區裡的許多高手指點,對我

    們在程式撰寫方面有很大的幫助,也提升我們在邏輯思考上的能力;另外圖書

    館豐富的藏書也解除了我們許多疑惑,甚至 Datasheet 都一應俱全,這些都讓我

    們在遇到瓶頸灰心之餘,能重拾信心,為我們的專題而努力。

    真的,非常的感謝他們。

  • ii

    摘要 在此題目中,我們將利用 8051內部中的計時/計數器功能來計時或是計數

    用,我們可以利用特殊暫存器 TMOD中的 C/T控制位元來選擇”計時”或”計數”

    功能並由 TMOD中的M1及M0控制位元來選擇四種不同的工作模式;用

    TCON 來控制我們現在要使用計時或計數;中斷方面則是由 IE 來控制。

    本題目主要的功能就是:

    1.時鐘/鬧鈴功能

    2.計數功能

    3.碼表功能

    4.鍵盤輸入功能

    根據以上功能,用程式碼及電路來做出一個萬用時鐘來,電路中需用到

    16 2的 LCD 來當顯示器,4個自由按鍵來當計數器和時鐘的功能鍵,外加一個

    4 4的鍵盤來做為鍵盤輸入。

    本題目之目的在於訓練對於程式的設計,和對於電路的安排與組織能力,

    因電路元件和程式碼的搭配是密不可分的,兩者需彼此搭配才可使之動作。

  • iii

    Abstract

    In this title, we’ll use timer/counter function inside 8051 to count the number of

    times. We can make use of C/T-bit in special register, TMOD, to choose which

    function, and M0/M1-bit to select which working mode. Using TCON to select

    timer/counter now. In order to control interrupt, we use IE register.

    The main function is:

    1. Time/Alarm function

    2. Counter function

    3. Stopwatch function

    4. Key-in function

    By above functions, we use programs and electronic devices to design a all-

    purpose clock. In this circuit, we need a LCD(16 2) to display; four keys to set up

    some functions; one 4 4 keyboard to key in some data.

    We have a goal that we can practice ourself how to design a suitable programs,

    and organize electronic devices to form a circuit. As devices should pair programs,

    they can work well.

  • iv

    目 錄

    誌謝.................................................................................................................................i

    摘要................................................................................................................................ii

    Abstract ........................................................................................................................ iii

    目錄...............................................................................................................................iv

    圖目錄............................................................................................................................v

    表目錄...........................................................................................................................vi

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

    第二章 8051單晶片的基本理論...............................................................................3

    2-1 8051單晶片的主要特性 .................................................................................3

    2-1.1 8051接腳功能說明 ..................................................................................4

    2-1.2 8051的記憶體結構 ..................................................................................7

    2-1.3 8051的特殊暫存器 ..................................................................................8

    2-1.4 8051的中斷結構 ......................................................................................9

    2-2 計時/計數器之動作原理 ...............................................................................12

    2-3 輸入/輸出埠之動作原理 ...............................................................................15

    2-3.1 LCD模組(LCM)原理 .............................................................................16

    2-3.2 鍵盤輸入原理 .........................................................................................23

    第三章 程式邏輯分析..............................................................................................26

    3-1 時鐘/鬧鈴之程式分析 ...................................................................................26

    3-2 計時/計數之程式分析 ...................................................................................28

    3-3 LCD與鍵盤輸入之程式分析 .......................................................................29

    3-4 整合程式分析 ................................................................................................31

    第四章 結論..............................................................................................................32

    參考文獻......................................................................................................................34

    附錄..............................................................................................................................35

  • v

    圖 目 錄

    圖 2.1 8051構造圖....................................................................................................3

    圖 2.2 8051構造圖....................................................................................................4

    圖 2.3 8051之程式記憶體........................................................................................7

    圖 2.4 計時/計數器之Mode0 .................................................................................12

    圖 2.5 計時/計數器之Mode1 .................................................................................12

    圖 2.6 埠腳結構圖...................................................................................................15

    圖 2.7 LCD模組之結構..........................................................................................16

    圖 2.8 鍵盤掃描結構圖...........................................................................................25

    圖 3.1 時鐘&鬧鈴之流程圖 ...................................................................................27

    圖 3.2 計時/計數器之流程圖 .................................................................................28

    圖 3.3 LCM之流程圖 .............................................................................................29

    圖 3.4 按鍵中斷之流程圖.......................................................................................30

    圖 4.1 成品正面圖...................................................................................................33

    圖 4.2 成品背面圖...................................................................................................33

    圖 附錄 1 免變壓器之穩壓電路圖.........................................................................35

    圖 附錄 2 鍵盤之電路圖.........................................................................................35

    圖 附錄 3 LCM之電路圖 .......................................................................................36

    圖 附錄 4 萬用時鐘最終電路圖.............................................................................36

  • vi

    表 目 錄

    表 2.1 PSW ................................................................................................................8

    表 2.2 PSW中 RS1/0 說明........................................................................................9

    表 2.3 IP ...................................................................................................................10

    表 2.4 中斷優先順序...............................................................................................10

    表 2.5 IE................................................................................................................... 11

    表 2.6 TMOD...........................................................................................................13

    表 2.7 計時/計數器模式控制 .................................................................................13

    表 2.8 TCON............................................................................................................14

    表 2.9 LCD介面接腳功能......................................................................................17

    表 2.10 LCM 讀寫操作狀態 ....................................................................................17

    表 2.11 字型碼與字型對照表..................................................................................18

    表 2.12 自建字元表..................................................................................................20

    表 2.13 清除顯示資料(01H) ....................................................................................20

    表 2.14 游標歸位(02或 03H) ..................................................................................21

    表 2.15 進入設定模式(04~07H) ............................................................................21

    表 2.16 LCD顯示功能設定(08~0FH) ...................................................................21

    表 2.17 顯示幕開關設定..........................................................................................21

    表 2.18 游標與顯示幕移動(10~1FH)....................................................................22

    表 2.19 LCD移動功能設定.....................................................................................22

    表 2.20 其他功能設定(20~3FH)............................................................................22

    表 2.21 CG RAM位址設定(40~7FH) .................................................................22

    表 2.22 DD RAM位址設定(80~FFH).................................................................23

    表 3.1 時鐘/鬧鈴的時間緩衝區 .............................................................................26

    表 3.2 時鐘/鬧鈴的按鍵功能 .................................................................................26

  • 1

    第 1 章 前言

    研究動機:觀看市面上電子錶或手機對於時間或計數的相關功能非常強

    大,有鑑於此,構想設計一個萬能時鐘,盡量的包含各種關於時間之功能。查

    閱過前幾屆學長們的專題題目,也沒有這方面的題目;加上曾學過微電腦 8051

    控制,在該科目的實驗課時也學過許多關於時間、計數、功能切換的程式設

    計,所以更想試試看自己動手透過 8051完成設計出擁有多功能的萬用時鐘。

    研究目標:用 8051做一個具有時鐘、鬧鈴、碼錶、計數器、鍵盤輸入等功

    能,並期望透過這次的專題,在軟體上達到程式的設計、邏輯思考的訓練;硬

    體上達成線路配製、焊接線路、元件採購等技術訓練。

    功能設計:

    ※必要之基本功能:

    (1) 時間,具有可調整和顯示之功能,格式設定為:hh/mm/ss(時/分/秒)。

    (2) 鬧鈴,具有可設定/取消和顯示之功能。

    (3) 馬錶,利用按鍵達成:Run -> Stop -> Reset,最小計時單位:毫秒(ms)。

    (4) 鍵盤,透過一個 4 4鍵盤做輸入的動作。

    (5) 計數,在 LCD上顯示 4個計數器,規劃為每行 2個計數器。

    ※可能之延伸功能:

    (1) 萬年曆,結合時鐘功能,可設定於任意時間點上做輸出顯示。

    (2) 簡易運算,視鍵盤設定來追加。

    設計內容:

    ※硬體:

    (1) 微處理器使用 8051(或 89C51)晶片。

    (2) 鍵盤 16(4 4)鍵,含 0~9之數字、調整、確定、取消、開始、停止等六個自

    由設定鍵。

    (3) 顯示器選用 LCD,為 16 2 行,無背光。

    (4) 數個電阻做為提升電阻,或下拉電阻。

  • 2

    (5) 兩個 LED,一個做 RESET時成功判定用;一個用閃爍來充當鬧鐘的響鈴。

    (6) 用 6顆串聯成 9V的電池,配上 IC-7805做穩壓並降壓成 5V的輸入電壓。

    (7) 相關的搭配 IC,如:74245、7486(XOR閘)、 7408(AND閘)、7404(反向

    器)。

    ※軟體:

    (1) 需具有時鐘/鬧鈴的切換之功能。

    (2) 需使時鐘/鬧鈴有設定/取消之功能。

    (3) 需設計碼錶有計時之功能。

    (4) 需設計如合規劃出 4個計數器之功能。

    (5) 需具有鍵盤輸入之功能。

    (6) 需設計簡易運算並顯示的功能(此為延伸項目)。

    (7) 需計算日期並顯示,甚至可進化為萬年曆(此為延伸項目)。

    (8) 需具有 LCD模組功能來達成以上功能之顯示器。

  • 3

    第 2 章 8051單晶片的基本理論

    2-1 8051單晶片的主要特性

    [1]所謂的單晶片微電腦,即把微電腦的結構製造結合在一個 IC內而形

    成。其內部功能除了 CPU、I/O、記憶體等基本構造外,更包含了計時器、計數

    器、串列傳輸介面、A/D 或 D/A介面…等。

    本專題所使用的 89C51單晶片具有:

    (1) 8位元的 CPU

    (2) 128-Byte的記憶體

    (3) 32針腳的 I/O

    (4) 16位元的計時/計數器 2個

    (5) 串列傳輸功能

    (6) 具有布林代數邏輯運算之功能

    (7) 內部具有 EPROM或 Flash Memory,適合程式開發重複燒錄新程式

    圖 2.1 8051構造圖

  • 4

    2-1.1 8051接腳功能說明

    圖 2.2 8051接腳圖

    (1) Vcc(第 40腳):8051的電源輸入端,必須接+5V電源。

    (2) Vss(第 20腳):8051的接地腳,須接 0 V(GND)。

    (3) PO.O~PO.7(第 32腳~第 39腳):

    8位元之輸入/輸出埠。稱為 Port O,簡稱為 P0。

    接腳 PO.O~PO.7均為開汲極(Open Drain)結構,沒有內部提升電阻。若

    欲輸出 Hi或 Low之電壓,需自己在接腳處接上外部提升電阻(約

    10KΩ左右即可)。

    Port O作輸出埠用時,每隻接腳均可沉入(Sink)8個 LS TTL 負載。

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

  • 5

    當 CPU使用 16位元的位址對外部記憶體進行存取時,Port O被用來輸

    出位址的低位元組。

    (4) P1.O~P1.7(第 1腳~第 8腳):

    8位元之輸入/輸出埠。稱為 Port 1,簡稱為 P1。

    Port 1為具有內部提升電阻(約 30KΩ )的雙向輸入/輸出埠。可以驅動 4

    個 LS TTL負載。

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

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

    (5) P2.O~P2.7(第 21腳~第 28腳):

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

    Port 2為具有內部提升電阻(約 30KΩ )的雙向輸入/輸出埠。可以驅動 4

    個 LS TTL負載。

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

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

    當 CPU使用 16位元的位址對外部記憶體進行存取時,Port 2被用來輸

    出位址的高位元組。

    (6) P3.O~P3.7(第 10腳~第 17腳):

    8位元之輸入/輸出埠。稱為 Port 3,簡稱為 P3。

    Port 3為具有內部提升電阻(約 30KΩ )的雙向輸入/輸出埠。可以驅動 4

    個 LS TTL負載。

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

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

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

    P3.0:RXD(串列通訊的信號接收腳)

    P3.1:TXD(串列通訊的信號傳送腳)

    P3.2: INTO (外部中斷 0的輸入腳)

    P3.3: INTO (外部中斷 1的輸入腳)

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

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

  • 6

    P3.6:WR (當 CPU欲將資料送至外部 RAM或外部 I/O裝置時,此腳

    會產生負脈波。稱為寫入脈波輸出腳)

    P3.7:RD (當 CPU欲從外部 RAM或外部 I/O 讀取資料時,此腳會產

    生負脈波。稱為讀取脈波輸出腳)

    ※本次專題並沒有使用到 P3.6和 P3.7的特殊功能。

    (7) RESET(第 9腳-重置輸入腳):

    此腳內部已有一個 50KΩ ~300KΩ的電阻接地,所以只需接一個電容

    器至+Vcc即可在電源 ON時產生開機重置的功能。但是,我們常會在

    RESET腳用一個 8.2KΩ ~10KΩ電阻接地,以縮短開機重置的時間。

    若有需要,亦可再電容器量端並聯一個常開按鈕,以便壓此按鈕時可

    強迫系統重置。

    當重置訊號發聲會產生下列作用:

    (i) 內部相關的暫存器會被重置為特定的內容值。

    (ii) 在 Port 0~ Port 3的每一隻接腳都寫入 1(才可再做輸入用)。

    (iii) 令 CPU從位址 0000H開始執行程式。

    (8) XTAL1和 XTAL2(第 18和 19腳):

    兩腳之間需接一個 3.5M Hz~12M Hz之石英晶體。

    ※本專題選用 12M Hz

    (9) EA /Vpp(第 31腳):

    為一隻輸入腳,供選擇使用內部或外部 ROM。

    EA =0:一律執行外部 ROM的程式。

    EA =1:此時 8051先執行內部 ROM程式,若欲執行超過 4K的程式,

    則由外物 ROM 讀取。

  • 7

    2-1.2 8051的記憶體結構

    8051的記憶體可以分成 3塊獨立的記憶體:

    圖 2.3 8051程式記憶體

    (1) 內部及外部程式記憶體的總容量有共 64K byte,合稱”程式記憶體”,其下有

    七個特殊用途的記憶位址:

    0000H (重置)

    0003H (外部中斷 0)

    000BH (計時/計數器 0中斷)

    0013H (外部中斷 1)

    001BH (計時/計數器 1中斷)

    0023H (串列埠中斷)

    002BH (計時/計數器 2中斷)

    (2) 可在外部擴充 64K byte的資料記憶體。

    (3) 內部資料記憶體空間 256 byte,亦稱為”資料記憶體”,其可劃分四個區域:

    一般用途暫存器:

    (i) 位址在 00~1FH,共 32byte。

    (ii) 可分為 0~3共 4個暫存庫,每個暫存庫裡又各有 R0~R7的

    暫存器。

    (iii) 若 RESET後,會指定在暫存庫 0,需再透過 PSW 來選擇其他

    的暫存庫。注意同時 SP也將指定在 07H,需透過程式改變位

    址。

  • 8

    可位元定址區:

    (i) 位址在 20~2FH,共 16byte。

    (ii) 撰寫程式時可以針對位元組為單位或指定某位原組裡的一個位

    元。

    資料儲存區:

    (i) 位址在 30~7FH,共 80byte。

    (ii) 常將堆疊指標(SP)指向此區域,把資料儲存區的一部分當作堆

    疊器使用。

    間接存取區(只有 8052才有):

    (i) 位址在 80H~FFH,共有 128個 byte。

    (ii) 資料的存取必須採用間接定址指法,亦即須以暫存器 RO或

    R1當位址而存取之。

    2-1.3 8051的特殊暫存器:

    特殊暫存器(SFR)位址在 80~FFH,雖與記憶體屬同一區塊,但對 8051而

    言可用指令來判定要存取的位置,如欲存取 SFR則可使用直接定址法,以下針

    對本專題所使用到 SFR之功能做介紹:

    (1) Acc:為一暫存器,但常做為運算結果、資料傳輸、跳越判定等累積器使

    用。

    (2) PSW(程式狀態字元):

    表 2.1 PSW

    CY AC F0 RS1 RS0 OV X P

    CY:進位旗標

    F0 :一般用途旗標

  • 9

    RS1/0:

    表 2.2 PSW中 RS1/0 說明

    RS1 RS0 暫存器庫 位址

    0 0 0 00~07H

    0 1 1 08~0FH

    1 0 2 10~17H

    1 1 3 18~1FH

    (3) SP:堆疊指標,位址在 81H,針對指令中的 PUSH和 POP會有不同作用:

    PUSH:SP指標加 1,並將資料存入堆疊器中。

    POP:先將資料取出,再將 SP指標減 1。

    (4) DPTR:資料指標暫存器,位在 82、83H,可分為 DPH和 DPL,主要功能在

    於儲存 16位元。

    (5) P0~P4:分別在 80、90、0A0、0B0H,將在後面章節做詳細的介紹。

    (6) IP:可控制中斷的優先權,位在 0B8H,將在後面章節做詳細介紹。

    (7) IE:中斷致能控制,位在 0A8H,將在後面章節做詳細介紹。

    (8) TMOD:計時/計數器模式控制,位在 89H,將在後面章節做詳細介紹。

    (9) TCON:計時/計數器控制,位在 88H,將在後面章節做詳細介紹。

    (10) TH0/1:計時/計數器 0/1的高位元組,位在 8C、8DH,後面章節將做介

    紹。

    (11) TL0/1:計時/計數器 0/1的低位元組,位在 8A、8BH,後面章節將做介

    紹。

    2-1.4 8051的中斷結構:

    中斷的目的是透過從外界的按鍵、串列埠、計時/計數器的輸入,使 8051

    產生中斷,讓程式跳越到相關的副程式去執行迴圈等等用途,而中斷的相關控

    制便是非常重要的,當然中斷必須先致能 EA才可確保所有的中斷可被執行。

  • 10

    8051提供了 5 種中斷來源:

    1. 計時器 0(TF0)、計時器 1(TF1),當產生溢位時,溢位旗標 TFO(TF1)會自動

    被設定為 1,直至 CPU跳去執行相對應的中斷副程式時才會自動清除為 0。

    2. 串列埠中斷(RI或 TI)屬內部中斷,必需自己用指令來清除 RI或 TI。

    3. INT0 和 INT1 屬外部中斷,可藉由特殊功能暫存器中的計時/計數控制暫存

    器(TCON)內的 ITO(或 IT1)位元規劃為負緣觸發或低準位動作,如果是負緣

    觸發型中斷,會令 IE0(或 IE1)自動保持為 1直到 CPU跳去執行相對應的中

    斷副程式時才會自動清除為 0。若為低準位動作,接腳 INT0(或 INT1)的低

    電位必須維持至 CPU跳去執行相對應的中斷副程式為止。

    以下便介紹前面章節未詳細說明的相關設定:

    (1)IP:可控制中斷的優先權。

    表 2.3 IP

    X X PT2 PS PT1 PX1 PT0 PX0

    PTx:計時/計數器 0~2的優先權。

    PXx:外部中斷 0~1的優先權。

    PS: 串列埠中斷的優先權。

    但 8051對以上中斷是有預設先後優先權的,所以若皆優先則照順序排列:

    表 2.4 中斷優先順序

    中斷來源 優先順序

    IE0(PX0) 1

    TF0(PT0) 2

    IE1(PX1) 3

    TF1(PT1) 4

    RI/TI(PS) 5

    TF2(PT2) 6

  • 11

    (2)IE:中斷致能控制。

    表 2.5 IE

    EA X ET2 ES ET1 EX1 ET0 EX0

    EA: 當 EA=1則致能所有的中斷;若為 0則除能所有中斷。

    ES: 致能串列埠。

    ET0~2:致能計時/計數器 0~2。

    EX0~1:致能外部中斷 0~1。

  • 12

    2-2 計時/計數器之動作原理

    8051內部有兩個16位元計時器稱為Timer0和Timer1,時間計算方面因為本

    專題是選用12M Hz的石英震盪器,因此週期為:12M Hz ÷ 12 = 1M Hz,時間上

    的計時單位就是1微秒(μs)。Timer0和Timer1的使用方法幾乎一樣,可以利用

    特殊功能器TMOD中的C/T控制位元來選擇計時或計數功能,並由TMOD中的

    位元M1及M0來選擇四種不同工作模式:

    (1) Mode0:13位元計時器模式。

    圖2.4 Mode0

    (2) Mode1:16位元計時器模式。

    圖2.5 Mode1

    (3) Mode2:附有自動重新載入功能的8位元計時器。

    (4) Mode3:Timer0與Timer1使用上不同。Timer0 被拆成兩個獨立的8位元計時

    器TL0和TH0。Timer1在Mode3時就停止計時/計數功能。可再細分:

    自動再載入模式(Auto Reload Mode):附有自動重新載入功能的16 位元計時

  • 13

    器。

    捕取模式(Capture Mode):可由外部觸發鎖住計時值的16位元計時器。

    鮑率產生器模式(Baud Rate Generator):當作 UART的位元率(或稱鮑率)

    產生器,以控制 UART的傳送速率。

    ※本專題並未使用到Mode3。

    以下介紹 TMOD和 TCON這兩個主要的控制暫存器:

    (1) TMOD:計時/計數器模式控制。

    表 2.6 TMOD

    GATE C/T M1 M0 GATE C/T M1 M0

    將 TMOD中劃分為高位元組(計時/計數器 1)和低位元組(計時/計數器 0)

    GATE:若為 1,TCON 裡的 TR0/1被設為 1且 INT0/1為高腳位時,才有動作。

    若為 0,TCON 裡的 TR0/1被設為 1則即可有動作

    C/T: 若為 1,工作於計數器模式。計數脈波由 T0或 T1輸入。

    若為 0,工作於計時器模式。計時脈波為石英震盪器的 1/12。

    M1/0: 可選擇四種工作模式,操作方法如下:

    表 2.7 計時/計數器模式控制

    M1 M0 模式

    0 0 0

    0 1 1

    1 0 2

    1 1 3

  • 14

    (2) TCON:計時/計數器控制。

    表 2.8 TCON

    TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

    TF0/1:計時/計數器的溢位旗標。

    TR0/1:計時/計數器的起動控制。

    IE0/1:外部中斷 0/1的負緣旗標,當為 1時程式會跳至副程式執行並清除為

    0。

    IT0/1:外部中斷 0/1的觸發型控制,完全由指令來控制。

  • 15

    2-3 輸入/輸出埠之動作原理

    所有MCS-51的埠腳都是雙向性的,可當輸入也可當輸出使用。在 SFR中

    分別稱為 P0、P1、P2、P3,每隻埠腳皆由閂鎖(D型正反器;Latch)、輸出電路

    及輸入緩衝器所組成,結構上如下:

    圖 2.6 埠腳結構圖

    關於埠腳的特性,這裡再重整一次:

    (1) 除了 P0沒有內部提升電阻,是為開汲極輸出外,其餘之埠腳皆俱有內

    部提升電阻。

    (2) 所有埠腳在 RESET後都將自動被寫入 1。

    (3) 在輸入功能時,輸入的信號是經由三態緩衝器到達內部匯流排。

    (4) 存取外部記憶體時,由 P0處理低位址資料;若為 16位元則高位址由

    P2 來輸出。且在存取外部資料時,P0及 P2將不能當作輸入與輸出埠

    用。

    (5) P3的所有接腳和 P1.0~P1.1是多功能的,可做普通輸入/輸出,也可工作

    於特殊功能之下:

    P1.0:T2(計時/計數器 2的外部輸入腳)

    P1.1:T2EX(計時/計數器 2的捕捉/再載入觸發輸入腳)

  • 16

    P3.1:TXD(串列通訊的信號傳送腳)

    P3.2: INTO (外部中斷 0的輸入腳)

    P3.3: INTO (外部中斷 1的輸入腳)

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

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

    P3.6:WR (外部 RAM之寫入致能信號;Write)

    P3.7:RD (外部 RAM之讀取致能信號;Read)

    2-3.1 LCD模組(LCM)原理

    當需要顯示英文字、數字、特殊符號時,採用 LCD模組是簡便又省電的方

    法。目前 LCD已廣泛被應用在各種儀器上當作顯示器,常見的文字型 LCD

    有:8 1、16 1、16 2、20 1、20 2⋯等多種規格。

    LCD模組的結構如圖 2.7 所示,由 LCD顯示器、LCD控制器(U1)、LCD驅

    動器(U2)所組成,大部份 LCD 都是 14接腳(如表 2.9所示),且與日本 HITACHI

    公司的 HD44780相容。其主要特性有:

    (1) 可應用在 8位元或 4位元的微電腦,若為 4位元則 LCD的匯流排只有

    DB0~7有效。

    (2) 具有 80Bytes的顯示資料記憶體(DD RAM),最多可顯示 80個字元。

    (3) 內建字型產生 ROM(CG ROM),可提供 192種 5 7的點矩陣字型。

    (4) 具有 64Bytes的字型產生記憶體(CG RAM),每設計一個字型要 8Bytes。

    圖 2.7 LCD模組之結構

  • 17

    表 2.9 LCD介面接腳功能

    編號 信號名稱 功 能 1 VSS 電源接地(0V) 2 VDD 電源(5V) 3 VC 亮度調整

    4 RS 暫存器選擇線 0:選擇指令暫存器 1:選擇資料暫存器

    5 R/W 讀寫信號 0:寫入 1:讀取

    6 E 致能信號,高電位時方能寫入或讀取 7~14 DB0~DB7 雙向資料匯流排

    此處要再詳述 LCD的內部結構,可分為六個部門:

    (1) 暫存器:

    有兩個重要暫存器,稱為指令暫存器(IR)和資料暫存器(DR)。IR負責接受微

    處理器寫入的指令碼,DR負責寫入或讀取資料時的緩衝器,作動方式為:

    DR => DD或 CG RAM => 微處理器。

    表 2.10 LCM 讀寫操作狀態

    E RS WR/ 功 能 0 X X 禁止讀/寫 1 0 0 寫入指令暫存器 1 0 1 讀取忙碌旗標與位址計數器 1 1 0 寫入資料暫存器 1 1 1 讀取資料暫存器

    (2) 忙錄旗標(BF):

    BF=1,表示 LCM內部正在工作,無法接受微處理器寫入的資料。

    BF=0,表示 LCM可接受微處理器寫入的資料。

    (3) DD RAM:

    共有 80 8bit的容量,最多可記憶 80個 8bit的字型碼,本專題所使用的

    16 2之 LCD,其上列位址為 00~27H;下列為 40~67H。

    (4) CG ROM:

  • 18

    如表 2.11 所示,字形由 ASCII碼建立,表中 00~0FH為使用者自建,欲顯示

    字元只要將 ASCII碼寫入 DD RAM,則 LCM將自行轉換並顯示。

    表 2.11 字形碼與字形對照表

  • 19

    (5) CG RAM:

    因為一個 5 7的字形需要 8Byte,所以只能建 8個字,如表 2.12 所示,造字

    時需先設定 CG RAM的位址(A0~A5H),其中 A0~A2是用來指明寫入哪列,

    每寫 8 列完成一個字形,此字型的字元碼則是由 A3~A5指定。

    如欲顯示自建字型,只要將字元碼寫入 DD RAM即可,且此字元碼必須為

    CG RAM的位址值除以 8的商數。

  • 20

    表 2.12 自建字元表

    (6) 位址計數器(AC):

    在讀取或寫入 DD RAM或 CG RAM資料之前,都必須先透過 AC 來指定位

    址。定址的程序就是將位址值載入 IR,然後再轉換至 AC。

    LCM總共有八種指令,欲下達指令只要將微處理器的指令寫入 IR,LCM

    便會根據指令動作,條件是:RS = R/W = 0,這些指令在 LCM初始化都要重新

    再次設定。

    (1) 清除顯示資料(01H):

    表 2.13 清除顯示資料(01H)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1

  • 21

    DD RAM全部被寫入空白碼(20H)。

    AC清除為 0,游標回到第一列第一行。

    (2) 游標歸位(02或 03H):

    表 2.14 游標歸位(02或 03H)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 X

    DD RAM內容不變。

    AC清除為 0,游標回到第一列第一行。

    (3) 進入設定模式(04~07H)

    表 2.15 進入設定模式(04~07H)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 DI/ S

    此命令用來設定顯示方式,而 DB0和 DB1需搭配使用如下:

    表 2.16 LCD顯示功能設定

    DI/ S 功 能 命令碼 0 0 讀/寫 DD RAM或 CG RAM之後,AC減 1,游標左移

    一行,顯示幕不動 04H

    0 1 寫入 DD RAM之後,游標不動,顯示幕將右移一行 05H 1 0 讀/寫 DD RAM或 CG RAM之後,AC加 1,游標將

    右移一行,顯示幕不動 06H

    1 1 寫入 DD RAM之後,游標不動,顯示幕左移一行 07H

    (4) 開關顯示幕(08~0FH):

    表 2.17 顯示幕開關設定

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 D C B

    B=0:游標所在位置不閃爍。

    B=1:游標所在位置閃爍。

    C=0:不顯示游標。

    C=1:顯示游標。

    D=0:顯示功能關閉,但 DD RAM的資料保留。

  • 22

    D=1:顯示功能開啟。

    (5) 游標與顯示幕移動(10~1FH):

    表 2.18 游標與顯示幕移動(10~1FH)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 S/C R/L X X

    此命令用來移動游標或顯示幕,而 DB2和 DB3需搭配使用如下:

    表 2.19 LCD移動功能設定

    S/C R/L 功 能 命令碼 0 0 顯示幕不動,AC減 1,游標左移一行。 10H 0 1 顯示幕不動,AC加 1,游標右移一行。 14H 1 0 顯示幕與游標一起左移一行,AC 不變。 18H 1 1 顯示幕與游標一起右移一行,AC 不變。 1CH

    (6) 功能設定(20~3FH):

    表 2.20 其他功能設定(20~3FH)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 DL N F X X

    此設定應最優先執行,說明如下:

    DL=0:設定資料為 4位元,資料匯流排將只剩 DB0~4有效。

    DL=1:設定資料為 8位元,適用 8位元微處理器介面。

    N=0:設定為一列顯示。

    N=1:設定為兩列顯示。

    F=0:設定為 5 7點矩陣字型。

    F=1:設定為 5 10點矩陣字型。但 N=1時,F將沒有作用。

    (7) CG RAM位址設定(40~7FH):

    表 2.21 CG RAM位址設定(40~7FH)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 AC5 AC4 AC3 AC2 AC1 AC0

    讀取或寫入 CG RAM之前必須先對 AC定址,CG RAM共 64Byte由

    AC0~AC5共六個位元指定。

  • 23

    (8) DD RAM位址設定(80~FFH):

    表 2.22 DD RAM位址設定(80~FFH)

    DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0

    讀取或寫入 DD RAM同樣得先定址 AC,而 DD RAM共 80Byte由 AC0~AC6

    共七個位元指定。

    LCD作為顯示裝置之前,仍必須針對上述的指令作適當的規劃程序,以方便顯示工作的進行。規劃步驟如下: (1) 打開電源,約等待 15毫秒,使電源達到穩定電壓(VDD=4.5V以上),再執行

    LCD的初始規劃程序。 (2) 重置(Reset) LCM。就是將『功能設定』命令碼寫入 LCM,並至少等待 4.1毫秒以上。

    (3) 寫入『功能設定』命令碼。規劃下列事項: 資料滙流排介面寛度,8 bit或 4 bit。 顯示列數,一列或兩列。 顯示字元的字型,5 7或 5 10。

    (4) 開始顯示幕,也就是進入『開關顯示幕』命令碼(08H ~0FH)。同時規劃游標的狀態,指定項目有二: 是否顯示游標。 游標所在位置的字元是否閃爍。

    (5) 清除顯示資料,也就是寫入命令碼 01H。 (6) 寫入『進入模式設定』命令碼規劃下列事項:

    AC自動遞增或遞減。 顯示幕是否移動。 游標是否移動。

    (7) 寫入『位址設定』命令碼。指定 DD RAM或 CG RAM的起始位址。

    2-3.2 鍵盤輸入原理

    鍵盤的種類很多,有指撥型、常開型、矩陣型,本專題使用到常開型和矩

    陣型,將針對這兩種類型的鍵盤做介紹。

    (1) 按鍵型:

    按鍵型開關輸入根據接法不同,會產生正脈波或負脈波,但此種開關會有

    機械彈跳的問題存在,一般彈跳時間約在 10~20ms,而彈跳造成的錯誤動作是

    可以用軟體或硬體解決,軟體上藉由 DELAY副程式迴圈抵消;硬體上利用電

  • 24

    容器的充放電時間去抵消,亦可使用 RS正反器的正負脈波去消除彈跳。

    (2) 矩陣型:

    矩陣型開關是由數個按鍵型開關組成。開關的其一接腳互相連接形成列,

    另一接腳則相互連成行。在使用上可以使用行掃描或是列掃描的方式來偵測按

    鍵值,如果使用行掃描且為低態掃描,則所有的列必須接提升電阻,反之若為

    高態則須接下拉電阻;若改為使用列掃描則跟行掃描相反。

    矩陣鍵盤最大的好處便是簡單經濟,例:4 4=16鍵的鍵盤只需用到 4+4=8

    隻接腳,分別代表 4 行 4 列,依此類推,12 12=144鍵的鍵盤只需要 12+12=24

    隻接腳,也就是越多的按鍵數量越能看出矩陣型鍵盤的優點。

    以 4 4鍵盤當例子,掃描時先要確定要用列掃描或行掃描,將確定好的列

    或行的 4隻接腳連接至 8051的埠腳做為輸出,另 4隻則與埠腳連接為輸入,如

    圖 2.8 所示。掃描的原理是當有按鍵被按下時,該按鍵所在的行和列的電壓值

    會下拉至 0,因此先固定某一行或列為 0,再去讀取是否有哪一列或行為 0,若

    沒有則表示沒有鍵被按下,便換下一行或列為 0,依此類推,很快就能找出哪

    一列、哪一行的按鍵被按下了。因為矩陣型鍵盤是由數個按鍵型所組成的,所

    以也有正、負脈波產生的情形,所以在做程式判定時要注意按鍵是接 Vcc或是

    GND。假設為接 Vcc,偵測時的指令依偵測位置決定,如欲偵測第一列,則對

    列輸出 1110,行的部份設為 1111;偵測行的方法和列相同,亦是對欲測之行設

    0其餘設為 1。

    但有一件需要注意的事,鍵盤偵測到有按鍵時,卻不一定是使用者所按下

    的,因為其組成的按鍵型開關有彈跳效應,因此有可能使用者只按了一次,卻

    偵測到了數次,因為人按下的時間遠比機械反應時間還來的長,所以記得一定

    要使用 DELAY副程式來消除彈跳時間。

  • 25

    圖 2.8 鍵盤掃描結構圖

  • 26

    第 3 章 程式邏輯分析

    3-1 時鐘/鬧鈴之程式分析

    除了使用 LCD 來顯示時間,並且可調整時間,亦可當作鬧鈴或定時器,在

    定時器的定時開關則用一顆 LED 來替代。現在時間的”時”資料存在 HOUR,”

    分”資料存在MIN,”秒”資料存在 SEC,而鬧鈴時間的”時”資料存 AHOUR,”

    分”資料存在 AMIN,”秒”資料存在 ASEC。無論是現在時間或鬧鈴時間,顯示

    前都須先將其轉換成 ASCII碼再存於顯示緩衝區中,緩衝區位址在 40~47H,如

    下:

    表 3.1 時鐘/鬧鈴的時間緩衝區

    40H 41H 42H 43H 44H 45H 46H 47H

    十位時 個位十 : 十位分 個位分 : 十位秒 個位秒

    另外再加用 4個按鍵開關 SW0~SW3控制,用來控制切換模式或是調整時

    間等等的功能,如 2.24 所示,SW0是切換現在/鬧鈴時間的開關,當定時開關

    啟動後,再按下 SW0可取消定時開關。SW1可調整兩種模式的時間,每按一

    次則目前游標所停留之數字上數加 1。SW2可在調整時間時選擇欲調整的時、

    分、秒,每按一次游標往右退一位。SW3按一次開始調整時間,再按一次則執

    行。

    表 3.2 時鐘/鬧鈴的按鍵功能

    按鍵 功能 說明

    SW0 OFF/TIME/ALARM 關閉定時開關/顯示現在時間/顯示鬧鈴時間

    SW1 UP 調整時間時上數加 1

    SW2 SELECT 調整時間時選擇時、分、秒

    SW3 ADJUST/EXCUTE 調整或執行

  • 27

    流程圖:

    圖 3.1時鐘&鬧鈴流程圖

    程式流程說明:

    電源接上後 89C51 使重置 89C51 的設定,其中有每個暫存的位址,堆疊指

    標SP的位址,還有將時問重新設定為00:00,時間設定完成再來便是起動89C51

    內部的計時器 Timer0,計時器啟動後主程式則循環掃描計時器計時是否完成計

    時,若計時完成則跳至計時計數器執行,至此先檢查時間或鬧鈴調整起始鍵是

    否有被按下,若時間或鬧鈴按鍵有被按下,程式則先跳至程式調整副程式,直

    到時問調整結束或是未按調整鍵掃描次數為 0 時則跳出時間調整副程式,回到

    TimerInt 繼續執行。

    若時間調整或鬧鈴調整起始鍵未被按下則不會跳至時間調整副程式。(在調

    整鬧鈴時,時鐘則是繼續計時,不受影響)在檢查完按鍵後則重置計時器並啟

    動,再來則是判斷是否到一秒,若到一秒則重置計數器並呼叫將時鐘內容加1秒

    的副程式(未達1秒則跳過此步驟),之後便呼叫掃描顯示器之副程式以便顯示時

    悶,在完成這些動作後,程式的動作會回到主程式,等待計時器的再次中斷。

    3-2 計時/計數之程式分析

    STAR

    初值設

    B

    F0=1

    REFRESH=0?

    REFRESH=1

    有按

    鍵?

    A 是

    A

    SW0?

    SW1?

    SW2?

    SW3?

    KEYSCAN

    時間切換

    (KEY0)

    時間加

    1(KEY1)

    移動游標位置

    (KEY2)

    模式選擇

    (KEY3)

    B

    B TIMEOUT=

    0?

  • 28

    顯示器選用 16 2的 LCD,並將其分成上、下兩行與左、右兩半,形成四

    個區間來同時進行四個計時/計數器功能,並可進一步結合同行的兩個計時/計數

    器來達到高位元的計算。

    流程圖:

    圖 3.2 計時/計數器之流程圖

    3-3 LCD與鍵盤輸入程式分析

  • 29

    將 16 2的 LCD顯示器分成上、下兩行,上行用以顯示狀態或是準備動

    作,而下行則用以顯示目前動態。設計上將上行顯示出"Please key-in the

    word",接著透過 4 4的 16鍵之鍵盤做輸入,按下 0~9則顯示於下行;按下

    A則空一格,B則刪除一個字元,C則整行刪除。

    流程圖:

    圖 3.3 LCM之流程圖

  • 30

    圖 3.4 按鍵中斷之流程圖

  • 31

    3-4 整合程式分析

    我們設計一個大迴圈來包含所有功能,並先將 LCD先預定顯示成"Choose

    function",再透過按鍵的外部中斷功能,當按下鍵盤的 1~4時可選擇所需的

    功能,功能選定時則跳至該程式迴圈,所以每個程式的迴圈都需先將 LCM歸零

    清除之前殘留的資料,另外亦需再設計每個迴圈裡皆有一個小功能,即長壓鍵

    盤的 F鍵五秒時則將該功能停止並跳回主迴圈,可便於再選擇其他功能。

  • 32

    第 4 章 結論

    研究此次專題,雖然說並不是艱難的題目,但其中還是有很多的問題有待

    解決。首先最大的問題就在於電路的部份,雖坊間有許多參考的書籍裡都有相

    關電路,但我們為了練習硬體方面,許多地方都不直接使用現成的IC,因此阻

    抗的批配和線路連結成了一大挑戰,不論是接至電源或接地都將直接影響程式

    撰寫時是要採用正緣或負緣觸發。另外一大問題便是程式的部份,當各個迴圈

    獨立撰寫時都是小事情一件,但當這些迴圈最後要組在一起,並要用一個更大

    的迴圈去包含時便出現了很多問題,最常遇到的就是因堆疊沒控制好而造成程

    式誤判,嚴重點更是整個當掉沒有反應,這兩大問題是我們覺得最為困難的地

    方。

    另外,所幸有修習過微處理機的課程,且在實習時還滿有心得的,這對此

    次專題在完成上有很大的幫助,至少可以省去很多找資料或是研究8051這顆IC

    內部相關的時間。

    根據學長提到:"加強顯示部分,電阻可用小一些,顯示就比較亮一

    些",這部份因我們認為要顯示的部份太多,若使用七節燈管則會造成線路太

    過於凌亂,而改用LCD以節省許多線路上不必要的麻煩。時間方面的控制如果

    允許可採用兩組4 4 鍵盤,可以新增按鍵的功能。甚至可加紅外線搖控,這樣

    或許可以在控制上更加有趣。

    這個完成品雖然不起眼,但畢竟是我們自己設計撰寫出來的成果,因此非

    常很有價值。我們覺得"專題"的目的不只是在於知識,更重要的是恆心、耐

    力及學會如何找資料來解決問題,在努力去做的意念前提之下,經過挫折與失

    敗後又能夠繼續站起來往前走才是最可貴的。

  • 33

    圖 4.1 成品正面圖

    圖 4.2 成品背面圖

  • 34

    參考文獻

    [1]楊明豐,8051單晶片設計實務(組合語言版) 2版,碁峯資訊股份有限公司,

    2003 年 4月。

    [2]蔡朝陽,單晶片微電腦 8051/8951原理與應用,全華科技圖書股份有限公

    司,民國 92 年 8月。

    [3]鄧錦城,8051單晶片實作寶典,益眾資訊有限公司,民國 89 年 7月 10版 3

    刷。

    [4]林容益,微電腦工業控制-單晶片 8051應用與專題制作,全欣資訊圖書股份

    有限公司,民國 81 年 11月。

    [5]吳信義,MCS-51單晶片微電腦原理與實作,松崗出版社,民國 81 年。

    [6]逢甲大學資電學院,微處理機系統實習教材(初校本),民國 93 年 2月。

  • 35

    附 錄 以下附上一些我們在此次專題之中所使用到的一些電路圖和程式:

    圖附錄 1 免變壓器之穩壓電路圖

    圖附錄 2 鍵盤之電路圖

    EA/VP31

    X119

    X218

    RESET9

    RD17

    WR16

    INT012INT113

    T014T115

    P101

    P112

    P123

    P134

    P145

    P156

    P167

    P178

    P00 39

    P01 38

    P02 37

    P03 36

    P04 35

    P05 34

    P06 33

    P07 32

    P20 21

    P21 22

    P22 23

    P23 24

    P24 25

    P25 26

    P26 27

    P27 28

    PSEN 29ALE/P 30

    TXD 11RXD 10

    MPU-51

    8951

    OSC112 MHz

    C1 20 pFC210 uF

    R3

    10 K

    SW1

    5 V

    F

    SW-PB

    E

    SW-PB

    D

    SW-PB

    C

    SW-PB

    B

    SW-PB

    3

    SW-PB

    6

    SW-PB

    9

    SW-PB

    A

    SW-PB

    2

    SW-PB

    5

    SW-PB

    8

    SW-PB

    0

    SW-PB

    1

    SW-PB

    4

    SW-PB

    7

    SW-PB

    R11k

    SW2 INT

    VCCR821 K

    R831 K

    R841 K

    R851 K

    +5V

    D1

    D2

    D3

    D4

    1

    23 Q28A

    74LS088

    9

    10Q28C

    74LS08

    4

    56 Q28B

    74LS08

    P2.4

    P2.5

    P2.6

    P2.7

    P2.3

    P2.2

    P2.1

    P2.0

  • 36

    圖附錄 3 LCM之電路圖

    圖附錄 4 萬用時鐘最終電路圖

    11

    22

    33

    44

    55

    66

    77

    88

    99

    1010

    1111

    1212

    1313

    1414

    LCMLCD DISPLAY

    1112

    13

    Q7D

    74LS08

    89

    10

    Q7C

    74LS08

    4

    56

    Q7B

    74LS08

    A0

    2A

    13

    A2

    4A

    35

    A4

    6A

    57

    A6

    8A

    79

    B0

    18B

    117

    B2

    16B

    315

    B4

    14B

    513

    B6

    12B

    711

    E19

    DIR

    1

    Q974LS245

    89

    Q4D

    74LS04

    89

    10

    Q2C

    74LS86RD/P3.7

    WR/P3.6

    P3.4

    P3.1

    P3.0

    P0(Data Bus)

    + 5V

  • 37