• 沒有找到結果。

IC卡感應與讀卡機系統

N/A
N/A
Protected

Academic year: 2021

Share "IC卡感應與讀卡機系統"

Copied!
65
0
0

加載中.... (立即查看全文)

全文

(1)

逢 甲 大 學

資 訊 工 程 學 系 專 題 報 告

IC卡感應與讀卡機系統

高 啟 修 (四丁)

生: 黃 文 彬 (四丁)

陳 亭 岳 (四丁)

蔡 育 和 (四丁)

授 : 周 俊 文

中華民國九十一年十二月

(2)

目錄

Chapter 0 前言………1 動機………1 目的………1 Chapter 1 微處理機基本架構………2 單晶片微電腦的定義………2 單晶片微電腦與多晶片微電腦的比較………3 單晶片微電腦的特點………3 Chapter 2 MCS-51家族簡介………4 8051/8951接腳圖及說明………5 8951的內部構造………8 8951記憶體簡介………9 Chapter 3 LCD簡介………11 硬體說明………11 暫存器及指令碼說明………14 軟體規劃………19 LCD重置及初始化………19 Chapter 4 電路板製作………21 Chapter 5 程式解說………23 程式流程圖………29 問題&討論………33 心得………35 附錄:

(3)

(A)BLOCK DIAGRAM ………37 (B)程式碼………38 (C)參考書目………51 (D)會議記錄………52

表 目 錄

表2-1 常用的MCS-51晶片………4 圖2-18051/8951接腳圖及說明 ………5 表2-28951之P3接腳說明 ………6 表2-38951之SFR重置表 ………7 圖2-2MCS-51之記憶體空間分布圖 ………9 表2-48951之SFR說明 ………10 表3-1 文字型LCD接腳說明 ………11 表3-2 雙列顯示器位置與位址對應表 ………13 表3-3LCD指令控制碼一覽表 ………14 圖3-1LCD軟體流程 ………19 圖5-1 整個程式的 FLOW-CHART………29 圖5-2 接收資料副程式的 FLOW-CHART………30 圖5-3 CHECK 副程式的 FLOW-CHART………31 圖5-4 轉換副程式的 FLOW-CHART………32

(4)

前 言

在現今的社會下,一切講求自動化,而 8051 微電腦就是一個很 方便的工具。隨著控制的不同 8051 可以跟著改變程式,去達到所要 要求的功能。而微處理機不僅僅用在控制,進一步其實也可以用在一 些家電,如 3C 家電,會很廣汎的用到微處理來處理通訊,控制等功 能。 我們在這個專題中使用了 MCS-51 來控制 LCD,來接收資料,來處 理收到的資料,去完成一項又一項該有的功能。門禁系統應該有的控 制先做出來,但還不是最完美,因為還有很多沒做的地方,我們充其 量只能算是完成了一台機器,不過我們認為一個門禁統不該只是這麼 簡單,應該還要有和大樓電腦通訊的功能。 只是時間不夠我們也沒做到這個等級,其實還有很多可以做的, 只是真的時間不大夠才沒做的。不過我們把遇到的問題,可以再做的 東西附錄在後面,如果以後有學弟妹喜歡我們這個專題的話可以參考 看看,要幫我們繼續完成也可以,我們的不完美相信以後經由學弟妹 的加強會更加的完美的。

動 機

在現今這個人際關係日益複雜的時代,人與人之間的互動日益趨 於頻繁。有鑑於現在治安的不穩定,以及科技的發達迅速,因此本組 想利用微處理機及感應IC卡的原理,發展IC卡門禁感應器。進而 去學習這些資料的處理及接收。

目 的

現今市面上感應器眾多,但是能真正保證人們生活安全的又有多 少?有別於市面上各種感應器的功能大同小異。本次的專題我們預計 是要做成一整個系統,不過時間可能不夠,只能做到感應機的部分。 我們最終的目的是希望做成一台機器,可以和大樓的電腦來通訊,去 過濾訪客,來得知這間大樓的人來來往往。 我們實際上完成的部分是硬體的部分,我們可以去判斷卡片的主 人是不是住在本大樓的住戶,我們可以把卡片裡頭的資料讀出來,我 們可以借由判斷資料去決定該不該開門。

(5)

Chapter 1

微 電 腦

微電腦基本結構

● 電腦硬體結構,可分為五大單元:

(1) 輸入單元 ( Input Unit , I/PO ) :負責將各種形式的輸入資 料或 程式,傳送到電腦內部的 CPU 或記憶體。

(2) 記憶單元 ( Memory Unit , MEM ) :負責儲存程式資料或運算 的結果,依用途可分成 ROM ( 唯讀記憶體 ) 與 RAM ( 隨機存取記 憶體 ) 。

(3) 算術/邏輯單元 ( Arithmetic/Logic Unit , ALU ) :負責計 算,比較和判斷等運算。

(4) 控制單元 ( Control Unit ) :由記憶體中提取指令,加以解碼, 並產生控制信號指揮電腦工作。

(5) 輸出單元 ( Output Unit , O/P ) :負責輸出電腦運算的結果。

(一) 中央處理器 ( CPU )

記憶單元,算術/邏輯單元,控制單元合併成一單元,稱為中央 處理機或中央處理單元 ( Central Process Unit , CPU ) ,是整 個電腦系統的核心。 (二) 微處理機 微處理機 ( Microprocessor ) 是將許多邏輯裝置,做在同一晶 片 ( Chip ) 上的超大型積體電路 ( VLSI ) ,內含有中央處理機及 各類暫存器,匯流排等。可完成指令解碼、運算、儲存及控制等功能。 (三) 微電腦 微電腦 ( MicroComputer ) ,就是以微處理機,接上記憶體與 輸入輸出裝置所做成的電腦。目前就 IC 包裝程式及用途加以分類, 可分成單晶片微電腦與多晶片微電腦 ( 即指一般微電腦 ) 。 單晶片微電腦的定義 單晶片微電腦 ( Single-chip microcomputer ) 就是把電腦的 五大基本單元,輸入單元、記憶單元、算術邏輯單元、控制單元及輸 出單元,濃縮做在單一 IC 晶片上,因此單晶片微電腦可以用單一個 晶片獨立執行微電腦的功能。單晶片微電腦在 RAM , ROM 的容量, I/O 埠的數目均比多晶片微電腦少很多,因此其主要功能是應用在控 制電路上。

(6)

單晶片微電腦與多晶片微電腦的比較

(1) 單晶片微電腦將電腦五大單元均做在同一晶片內。而多晶片微電 腦必須由多個 IC 晶片組合而成,如 8085 是做 8 Bit CPU 以 8255 當 I/O ,以 2732 或 2764 當 ROM ,以 6116 當 RAM ,以 8253 當控制單元等。

(2) 單晶片微電腦記憶容量非常小,如 8051 單晶片微電腦 RAM 有 28 ㄅ Byte , ROM 有 4k Byte 。而一般多晶片微電腦均必須能處 理大量資料及功能,此記憶容量大,一般 RAM 有 1M Byte , ROM 有 64K Byte 。

(3) 單晶片微電腦的 RAM , ROM 均製造於晶片內部 ( 特殊用途者 例外 ) ,不須位址線 ( Address Bus ) ,主要是以輸入/輸出埠 ( I./O Port ) 或資料匯流排 ( Data Bus ) 與外界溝通,使用簡 單、方便。而多晶片微電腦因 CPU 、 RAM 、 ROM 都是獨立的 IC , 因此必須以位址線、資料線、控制線來連接,構造複雜。 (4) 單晶片微電腦的程式資料都儲存在 ROM ( 程式記憶體 ) ,RAM ( 資料記憶體 ) 只作為資料暫存器或緩衝區之用。而多晶片微電 腦是把使用者的程式資料儲存在 RAM ,而 ROM 只儲存系統程式。 (5) 單晶片微電腦主要應用在控制方面的單一功能。如微電腦冷氣、 溫度控制、自助販賣機、微電腦微波爐、個人電腦的鍵盤控指等。 而多晶片微電腦主要應用在大量資料處理的多種功能,如文書處 理、數學運算、繪圖、通訊等。 單晶片微電腦的特點 (1) 體積小、成本低、可信賴度高。 (2) 連接線路簡單,配合週邊元件少,使用簡單方便。 (3) 可利用線路實體模擬器 ( ICE ) 或 ROM 模擬器,測試程式,並 可持程式燒錄於 EPROM ,研究發展容易。 (4) 有充足的輸出/輸入埠及資料線,故發展擴充性高。 (5) 指令精簡,定址方式簡單,程式撰寫容易。

(7)

Chapter 2

MCS-51

MCS-51家族簡介

(一)

8051 的主要功能如下: 1. 最適合控制應用的 8 位元 CPU。 2. 具布林代數處理(單位元邏輯)能力。 3. 64K Bytes 的程式記憶體位址空間(ROM)。 4. 64K Bytes 的資料記憶體位址空間(RAM)。 5. 晶片內部有 4K Bytes 的程式記憶體。 6. 晶片內部有 128K Bytes 的資料記憶體。 7. 32 個可雙向和獨立定址的 I/O 線。 8. 兩組 16 位元計時器/計數器。 9. 一組全雙工 UART(通用非同步接收和傳送器)。 10. 兩層優先權,5 個中斷向量結構。 11. 晶片內部有時脈振盪器(最高為 12MHz)。

(二)

8052 增加的功能如下(與 8051 比較): 1. 晶片內部有 8K Bytes 的程式記憶體。 2. 晶片內部有 256K Bytes 的資料記憶體。 3. 三組 16 位元計時器/計數器。 4. 兩層優先權,6 個中斷向量結構。

(三)

AT89C51/52 增加的功能如下(與 8051/52 比較): 1. 具有 4K/8K Bytes 可重複規劃的快閃記憶體(Reprogrammable Flash Memory),可寫入/抹除 1000 次以上。 2. 操作頻率:0Hz ~ 24MHz。 3. AT89C51 具兩層優先權 5 個中斷向量結構,AT89C52 具兩層優 先權 6 個中斷向量結構。 4. 三個可規劃的記憶體上鎖位元。

5. ALE 腳可規劃為,只在執行 MOVC 和 MOVX 時才動作。(可減少 EMI) 表 2-1 為常用的 MCS-51 晶片: ROM 版本 EPROM 版本 ROMLESS 版本 ROM 容量 RAM 容量 計時器 電路型態 8051 8751 8031 4K Bytes 128 Bytes 2 HMOS

(8)

8052 8752 8032 8K Bytes 256 Bytes 3 HMOS 80C51 87C51 80C31 4K Bytes 128 Bytes 2 CHMOS 83C52 -- 80C32 8K Bytes 256 Bytes 3 CHMOS

本專題所使用的單晶片控制器是 AT89C51: AT89C51 是屬於電子式抹除的元件,可使略掉照紫外線的麻煩, 燒錄次數多且時間短,價錢又低 AT89C51 已降至百元以內,對於研究 8051 的人真是一大便利。另外它的操作頻率更是 8051 的兩倍,達到 24MHz。 圖 2-18051/8951接腳圖及說明: Vcc(40): MCS-51 +5V 電源接腳。 Vss(20): MCS-51 電源接地端。

(9)

P0.0 ~ P0.7(39-32): 此 8 支腳為 MCS-51 第 0 個輸入/輸出阜,簡稱 P0,除作為輸入/ 輸出阜外,又可當作外接程式記憶體的較低 8 位元位址,及資料匯流 排,因此有三重多工用途,其主要功能為: 1. 當存取外部記憶體時,作為較低 8 位元位址匯流排(A0~A7) 和資料匯流排(D0~D7)。一般是在每個指令週期中,先送出位 址信號,再送出資料信號。 2. P0 阜本身是一個開洩極的電路,作為輸出時,必須加上提昇 電阻。 3. P0 阜作為輸入阜時,必須先將 1 狀態寫到 P0,使其成為高阻 抗狀態,才能成為正常的輸入阜。 4. 當作輸出時,每個接腳可以驅動 8 個 LS TLL 負載。 P1.0 ~ P1.7 (1-8): 此為 MCS-51 第一個輸入/輸出阜,簡稱為 P1。內部本身已有提升 電阻。 1. 要做為輸入阜時,必須先將 1 狀態寫到 P1,使其經由內部提 升電阻,提升成為高電位狀態,才能成為正常的輸入阜。 2. 作為輸出阜,將 1 輸出,則接腳為高電位,輸出 0 到 P1,則 接腳為低電位。每個接腳可以驅動 4 個 LS TTL 負載。 P2.0 ~ P2.7 (21-28): 為 MCS-51 第二個輸入/輸出阜,簡稱為 P2。內部本身已有一提升 電阻。除可作為 I/O 阜外,又作為資料匯流排的較高 8 位元位址。 1. 要做為輸入阜時,必須先將 1 狀態寫到 P2,使其經由內部提 升電阻,提升成為高電位狀態,才能成為正常的輸入阜。 2. 作為輸出阜,將 1 輸出,則接腳為高電位,輸出 0 到 P2,則 接腳為低電位。每個接腳可以驅動 4 個 LS TTL 負載。 3. 當存取外部記憶體時,作為較高 8 位元位址匯流排(A8~A15)。 P3.0 ~ P3.7 (10-17): P3.0 ~ P3.7 簡稱 P3。內部以有一提升電阻。 1. 要做為輸入阜時,必須先將 1 狀態寫到 P3,使其經由內部提 升電阻,提升成為高電位狀態,才能成為正常的輸入阜。 2. 作為輸出阜,將 1 輸出,則接腳為高電位,輸出 0 到 P3,則 接腳為低電位。每個接腳可以驅動 4 個 LS TTL 負載。 除做一般的 I/O 阜,每支腳另有其他功能,列舉如下: P3.0/RXD(10) 串列通訊的信號接收腳 P3.1/TXD(11) 串列通訊的信號傳送腳 P3.2/INT0(12) 第 0 個外部中斷信號輸入腳,INT0

(10)

P3.3/INT1(13) 第 1 個外部中斷信號輸入腳,INT1 P3.4/T0(14) 第 0 個計時/計數器,外部計數信號輸入腳,T0 P3.5/T1(15) 第 1 個計時/計數器,外部計數信號輸入腳,T1 P3.6/WR(16) 對外部資料記憶體的寫入控制信號,WR P3.7/RD(17) 對外部資料記憶體的讀取控制信號,RD RST(9): 為重置(RESET)信號輸入接腳。在此接腳,加上高電位並維持 兩個機械週期以上,晶片內部就會產生重置動作。重置時,內部香閨 的暫存器會被重置為特定的內容值,其中程式計數器(PC)被設定為 0000H,其餘相關暫存器,請參考下圖。 暫存器 重置預設值 暫存器 重置預設值 P0 FFH SCON 00H SP 07H P2 FFH DPL 00H IE 0XX0000B DPH 00H IP 0X0000B PCON 0XXX0000B P3 XXX00000B TCON 00H T2CON XX000000B TMOD 00H RCAP2L FFH TL0 00H RCAP2H 00H TL1 00H TL2 00H TH0 00H TH2 00H TH1 00H PSW 00H P1 FFH ACC 00H SBUF ---- B 00H PC 00H XTAL1(18)XTAL2(19): 為 MCS-51 內部時脈振盪器的輸入腳。一般再這二接腳,加上一 12MHz 的石英振盪器晶體(Crystal),來產生所需工作頻率。 PSEN(29):

PSEN 是 Program Store Enable,程式儲存致能信號 PSEN 是 89C51 晶片讀取外部程式記憶體的激發信號,當晶片在讀取外部記憶時,會 送出這個信號刀記憶體上的輸出致能腳,促使記憶體送出程式碼。 ALE/PROG(30):

ALE 代表 Address Latch Enable,位址閂鎖致能信號。因 MCS-51 的 P0 具有位址和資料匯流排的雙工作用,在讀取外部記憶體的資料

(11)

或程式碼,為分辨 P0 上為位址信號線或資料信號,由 ALE 接腳輸出 一負緣信號作為辨別 P0 上的位址信號,此信號一般都接到一閂鎖電 路如 74LS373 的致能腳。ALE 的輸出信號頻率為系統振盪頻率的 1/6,有時可作為其它電路的參考時脈。

EA/Vpp(31):

這支接腳英文手冊註解為 External Access Enable,是存取外部 程式記憶體的致能腳。當 89C51 的 EA/Vpp 加入 0 電壓,表示使用外 部程式記憶體。加入 5V 電壓,則是自內部 ROM 或 EPROM 讀取程式執 行。 8051的內部構造: MCS-51 家族的單晶片,如 8051 的硬體架構可以簡單區分為七 個部分: ◎ 震盪與時序方塊 ( Oscillator ) MCS-51 內部有時脈震盪電路,只要外部加上晶體,即可產生頻 率非常穩定的脈波信號,所以 MCS-51 單晶片的時序都是以此為 基準的。 ◎ CPU 這是整個單晶片的控制處理中心, CPU 讀取位於程式記憶體 ( ROM 或 EPROM ) 的程式碼,經過計算與處理之後,將結果送 到各個暫存器的輸出入埠上,並且接受內部和外部的中斷信號, 然後執行中斷服務程式。只要電源加入且震盪開始動作之後, CPU 就會開始一直不停的動作 ◎ 程式記憶體 MCS-51 系列單晶片中, 8051 提供內部 4096Byte ( 4KB ) 的 程式計區,專供儲存程式指令碼的地方。 CPU 所執行的程式指 令,即到這裡來提取的。若有內部程式記憶區時, CPU 可以選 擇執行的程式指令,是由內部的程式區提取,或由外部的程式區 提取。程式區的內容只能讀出,但不能寫入。 ◎ 資料記憶體 MCS-51 系列中的 8051 單晶片提供 128Bytes 可讀/寫的資料記 憶區,而 8052 系列則有 256Bytes 資料記憶區,這資料區中有 16 個 Bytes ,共 128bit 的區域是可直接做單一位元定址的 ( Bit addressable ) ,同時 MCS-51 也提供相當好用的位元指 令。 ◎ 四組可規劃輸入/輸出埠 ( P0,P1,P2,P3 ) 這四組埠共提供 4*8=32 條 I/O 線,所有的埠都可以做位元輸

(12)

出入埠 ( Byte I/O ) ,或者做單一位元輸出/入埠 ( bit I/O ) ,當 MCS-51 做外部記憶體擴充時,必須用 Port-0 , Port-2 當作資料/位址線,配合 ALE , PSEN , WR , WD 等 控制線產生必要的控制信號,做讀出 ( Read ) 及寫入 ( Write ) 的信號。 ◎ 計時/計數 ( Time0 ) MCS-51 系列的單晶片均有兩個 16 位元的計時/計數器,而 8052 則有三個。每個計時/計數器有多種模式可供選擇。 ◎ 可規劃串列 I/O 方塊 ( UART ) MCS-51 單晶片可透過此串列輸出入埠介面,與外界的電腦或儀 器設備做資訊的交換,也可透過此介面做 I/O 的擴充。 MCS-51家族8051記憶體簡介: ○ 程式記憶體 程式記憶體是存放指令的地方 ( 由燒錄器寫在 EPROM 或 Flash ROM 中 ) ,只能被 CPU 讀取,不能被寫入。

因為 MCS-51 單晶片的計數器有 16 位元,因此它可定址的範圍 是 64K ,又因為 MCS-51 的記憶體寬度均為 1 個 Byte ,所以 MCS-51 的最大程式記憶體空間為 64K Byte 。 MCS-51 由 EA 腳位 來決定存取內部或外部程式記憶體。 ○ 資料記憶體 MCS-51 的資料記憶體,可分為內部資料記憶體以及外部資料記 憶體。空間的分布情行如下圖所示: ○ MCS-51 對內部和外部的資料記憶體的存取,用不同的指令,一個

(13)

是用 MOV ( 內部 ) ,另一個是用 MOVX ( 外部 ) 。當 CPU 在執 行 MOVX 時,會令 RD 或 WR 腳發出對外部資料記憶體存取的信 號,執行 MOV 時則不會。 MCS-51 內部有 256KByte 的資料記憶 空間,前 128 ( 00H~7FH ) 是做存放資料的地方,後面 128KByte 則是 ( SFR ) 。單晶片內部的 RAM ,和一般的 PC 的 RAM 是不 同的,無法被用來存放程式,因為程式計數器 PC 不對內部 RAM 定 址。基本上單晶片內部的 RAM 只是以暫存器的型態來存放資料, 所以才定義 RAM 為 Data Memory

前面 128KByte 的資料暫存區,位址從 00H~1FH ,設有四工作暫 存器,每組有 8Byte ,因此共是 32Byte 。從 20H~2FH ,共有 16 個 Byte ,提供每一位元可單獨被定址或控制的位元定址區,因此 這 16 個位元組便提供了 16*8=128 個位元控制點。另外從位址 30H~7FH 的這個區域是提供 user 任意使用的通用目的記憶區 ( General purpose RAM ) 。

○ 特殊目的的暫存器 ( SFR ) 說明 名稱 用途 位址 位元定址 ACC 累積器 0E0H Y B 暫存器 B 0F0H Y PSW 程式狀態字元 0D0H Y SP 堆疊指標 81H N DPTR 資料指位器 ( DPH,DPL ) 83H,82H N P0 I/O 埠 0 80H Y P1 I/O 埠 1 90H Y P2 I/O 埠 2 0A0H Y P3 I/O 埠 3 0B0H Y IP 中斷優先順序控制 0B8H Y IE 中斷致能控制 0A8H Y TMOD 計時器模式控制 89H N TCON 計時器控制 88H Y TH0 計時器 0 高位元組控制 8CH N TL0 計時器 0 低位元組控制 8AH N TH1 計時器 1 高位元組控制 8DH N TL1 計時器 1 低位元組控制 8BH N SCON 串列埠控制 98H Y SBUF 串列埠資料緩衝器 99H N PCON 電源控制 87H N

(14)

Chapter 3

L C D

LCD 簡介

LCD 為 Liquid Crystal Display 縮寫,也分為繪圖模式 LCD 及 文字模式 LCD,市面上很容易買到不同廠牌之顯示文字的 LCD,但似 乎 LCD 的控制器皆為同樣一顆,編號為 HD44780A。所以不論 16 字*1 列,20 字*2 列之文字模式:LCD,其控制方法皆同。HD44780A 之特性 為:

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

● 字元產生器 ROM ( Character Generator ROM,簡稱 CG ROM ) 有 160 個 5*7 點矩陣字型 ( pattern ) 。

● 字元產生器 RAM ( Character Generator RAM,簡稱 CG RAM ) 可寫入 8 個字型,使用者可自行設計 8 個 5*7 點矩陣字型。 ● ● 多種控制指令如清除顯示器,游標歸位 ( Cursor Home ) , 顯示器關閉/開啟,游標關閉/開啟、字元閃爍,游標移位、顯 示移位等等。 硬體說明 下表為文字型 LCD 接腳說明 欄位 接腳符號 方向 名稱及功能 1 VSS 電源地 ( Ground ) 2 VDD 電源正極:接+5 伏特 3 V0 亮度調整電壓輸入 ( Contrast adjustment voltoge ) 。通常輸入零伏特時字元最清 晰,或以半可變電阻來調整。 4 RS I 暫存器選擇 ( Register Select ) 線:一般 接 CPU 之位址線 A0 ,此腳輸入”0”,並 做寫入動作,即可寫入指令暫存器 ( Instruction Register ) ;若輸入”0”, 做讀取動作則可讀取忙碌旗標 ( Busy flag ) 及位址計數器。此腳輸入”1”,為 讀寫資料暫存器 ( Data Register ) 。 5 R/W I 讀寫線:”0”表示寫入 LCD 控制器,”1” 表示讀取 LCD 控制器。

(15)

6 E I 致能線 ( Enable ) :此腳為”1”時,讀寫 才有效。注意,其下緣時,有效資料需在匯 流排上。 7-14 DB0~DB7 I/O 資料匯流排:以 8 位元資料讀寫方式則 DB0~DB7 皆有效。若以 4 位元做資料讀寫則 僅 DB4~DB7 有用到,DB0~DB3 不必連接。 (1) 暫存器 ( Registers ) ,: LCD 共有兩個八位元暫存器,即指

令暫存器 ( Instruction Register , IR ) 和資料暫存器 ( Data 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 , BF ) ,當 BF=”1”,表示 LCD 正 在執行內部運作,並且不接受新的指令。 BF 可由 RS=”0”時讀 取位元 7 得到旗標狀態;直到 BF=”0”,才可輸入下一個指令。 (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 可由使用者儲存資 料或自行運用。 RAM 位址與顯示位置對應關係有三種形式,而本 組所採用的形式是雙列顯示器 ( Dual-line display ) ,茲介紹 如下:

(16)

顯示位置 第一列位址 第二列位址 設顯示左移 ( Left shift ) 設顯示右移 ( Right shift ) 雙列顯示器位置與位址對應須注意,第二列之位址與第一列位址不 連續,但總數仍為 80 個位址,第一列由 00H~27H,第二列由 40H~67H,下位址指令時要注意。若顯示器一列僅有 16 或 20 字, 則由第 1 位置到地 16 或 20 個位置對應之。

(5) 字元產生器 ROM ( Character Generator ROM , CG ROM ) , CG ROM 中存放著 160 個 5*7 點矩陣字型 ( dot-martrix character pattern ) 及 32 個 5*10 點矩陣字型。每個字型對應著不同的 8 位 元字元碼 ( character code ) ,部份與 ASCII 相同,其餘為日 文字型。字元碼由 00~07H 可由使用者自行設計 5*7 字型共 8 個字 型,20H~7FH 與 ASCII 相同,A0H~DFH 為日文字型,E0H~FFH 為 32 個 5*10 字型。所以,可看出字元碼並不連續,有些碼沒用到。 (6) 字元產生器 RAM ( Character Generator RAM , CG RAM ) ,

使用者可自行設計任意的 5*7 點矩陣字型,字型輸入資料先寫入 CG RAM ,再將對應的字元碼寫入 DD RAM ,就可以顯示字型了。 CG RAM 共有 64 個 bytes ,每個字型佔用 8 個 bytes ,對應 00H~07H 八個字元碼,即 CG RAM 的 0~7 bytes 對應字元碼 00H,8~15 bytes 對應字元碼 01H ,依此類推。若未設計字型,則 CG RAM 可由使 用者自由運用。

(7) 時序產生器 ( Timing Generator ) ,供應 DD RAM , CG RAM , 及 CG ROM 內部運作之時序信號。

(8) 游標/閃爍控制器 ( Cursor / Blink Controller ) ,用來產生 一個游標和一個閃爍的字元,顯示在 DD RAM 目前位址所指的顯示 位置,游標為字元下的一條橫線。 1 2 3 4 5 39 40 00H 01H 02H 03H 04H ………… 26H 27H 40H 41H 42H 43H 44H ………… 66H 67H 01H 02H 03H 04H 05H ………… 27H 00H 41H 42H 43H 44H 45H ………… 67H 40H 27H 00H 01H 02H 03H ………… 25H 26H 67H 40H 41H 42H 43H ………… 65H 66H

(17)

(9) 並列對串列轉換器 ( Parallel-to-Serial Converter ) ,將 CG ROM 或 CG RAM 中讀出的並列資料轉成串列資料送到顯示驅動器 ( display driver ) 。

(10) 偏壓產生器 ( Blias Voltage Generator ) ,用來產生液晶顯 示器 ( LCD ) 顯示時所需的偏壓準位。 (11) LCD 驅動器 ( LCD Driver ) ,此電路接收顯示資料,時序信 號和偏壓來產生共用背景顯示及各段顯示信號。 (12) LCD 面板 ( LCD Panel ) ,點矩陣液晶顯示面板,有一列 16 字,兩列 16 字,兩列 20 字及兩列 40 字等種類。字元與字元間有 一個點距離的間隙。 暫存器及指令碼說明 下表為 LCD 指令控制碼一覽表 位元值 項 目 R/W RS 操作 名稱 D7 D6 D5 D4 D3 D2 D1 D0 功能說明 執行時 間 1 寫 入 0 清除 顯示 器 0 0 0 0 0 0 0 1 清除顯示 器,並將游標 移回左上角 位置 1.64ms 2 寫 入 0 游標 歸位 0 0 0 0 0 0 1 X 游標移回左 上角位置,但 顯示 RAM 中 資料未變 1.64ms 3 寫 入 0 設定 進入 模式 0 0 0 0 0 1 I/D S I/D=1:位置 遞增, I/D=0:位置 遞減;S=1: 移位功能致 能 40us 4 寫 入 0 顯示 器開/ 閉 0 0 0 0 1 D C B 1 表 ON,0 表 OFF,D 為顯 示器,C 為游 標,B 為游標 所在位置的 40us

(18)

字元閃爍 5 寫 入 0 顯示 器/游 標移 位 0 0 0 1 S/C R/L X X S/C=1:顯示 移位, S/C=0:移動 游標; R/L=1:向右 移,R/L=0: 向左移 40us 6 寫 入 0 功能 設定 0 0 1 DL N F X X DL=1:資料長 8 位元, DL=0:資料長 度 4 位元; N=1:雙列 字,N=0:單 列字;F=0: 5*7 點 40us 7 寫 入 0 設 CG RAM 位 址 0 1 CG RAM 位址 將 CG RAM 位 址寫入位址 計數器,接著 讀寫 CG RAM 資料 40us 8 寫 入 0 設 DD RAM 位 址 1 DD RAM 位址 將 DD RAM 位 址寫入位址 計數器,接著 讀寫 DD RAM 資料 40us 9 讀 出 0 讀忙 碌/位 址 BF 位址計數器 讀 BF 及位址 計數器內容 40us 10 寫 入 1 寫入 資料 暫存 器 寫入之資料 將資料寫入 CG RAM 或 DD RAM 40us 11 讀 出 1 讀取 資料 暫存 器 讀取之資料 從 CG RAM 或 DD RAM 讀出 資料 40us

(19)

其中 1~8 項為 RS=0,寫入指令暫存器,寫入不同的控制碼即產 生不同的控制功能。第 9 項為令 RS=0 時,讀取 LCD ,此時讀入資 料的位元 7 為忙碌旗標,其他位元為位址計數器內容。第 10、11 項 為令 RS=1,即可讀寫 CG RAM 或 DD RAM 中的資料,至於是前者或 後者,要由使用者所設定位址是 CG RAM 位址或 DD RAM 位址決定 ( 第 7 或第 8 項 ) 。 右邊一行為每個指令的執行時間 ( Execution time ) ,此為使 用者每一次讀寫 LCD 暫存器後要等待的時間,因為 LCD 控制器本身 接收一個指令後,在內部做處理及運算,需要花費時間,此時間過後 CPU 才可再下另一 LCD 控制指令,否則會被忽略。各指令說明如下: (1)清除顯示器 ( Display clear ) ,將 DD RAM 內資料皆填入空白

碼 ( space code ) 20H 。位址計數器清為零。若顯示移位過,也 會恢復原始位置。執行此指令,使所有顯示消失,游標及字元閃爍 位置移到左上角。指令碼為: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 (2)顯示/游標歸位 ( 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=1 ) 或向左 ( I/D=0 ) 移一個位置。讀寫 CG RAM 時 亦相同效果。

S:當 S=1 ,寫入一個字元碼到 DD RAM 時,整個顯示幕向左 ( I/D=1 ) 或向右 ( I/D=0 ) 移一格位置,而游標仍停留在相對 的顯示位置。當 S=0 ,顯示幕不移動。寫入 CG RAM 時,顯示幕

(20)

不移動。

(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 ( Display ) :當 D=1,顯示幕開啟 ( turn on ) 。當 D=0, 顯示幕關閉 ( turn off ) ,顯示資料仍保存在 DD RAM 中。 C ( Cursor ) :當 C=1,游標被顯示在位址計數器所指的位置上。 當 C=0,游標不會出現。游標是在 5*8 矩陣的第 8 列五個點構成, 餘 5*7 點為字型。對 5*10 之字型則在第 11 列的五個點構成。 B ( Blink ) :當 B=1,在游標位置的字元會閃爍,閃爍方式為所 有 5*8 的點 ( 含游標 ) 變黑 409.6ms ,然後字元出現 409.6ms , 如此交替顯示所有點及字元而成閃爍現象。 (5)顯示/游標歸位 ( Display/Cursor Shift ) ,顯示幕和/或游標 被向右或向左移動。對於雙列顯示器游標會從第一列的第 40 個位 置移到第二列的第一個位置,但移到第二列第 40 個位置後不會歸 回原點,而是移到第二列第一個位置。指令碼為: RS R/W DB7 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 ) ,此指令一定要在所有其他指令碼 之前。指令碼為: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 DL N F X X

DL ( Data Length ) :選擇介面資料長度, DL=1 為 2-bit 資料 轉移 ( Transfer ) , DL=0 為 4-bit 資料轉移。使用 4-bit 資料

(21)

轉移時,一個完整字元資料要讀或寫兩次。

F ( Font ) : F=1,5*10 點矩陣。 F=0,5*7 點矩陣。

N ( Number of display line ) :選擇顯示之列數為雙列或單列, N=0 表單列 ( Single line ) 。 N=1 表示雙列 ( dual line ) , 若單列顯示器以雙列定址方式仍要選 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 ) ,指令碼為: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 BF A A A A A A A A:Address bit BF=1,表示 LCD 正在執行內部運作,並且不接受新的指令。 BF 可由 RS=0 時讀取位元 7 得到旗標狀態,BF=0 才可輸入下一指令。 AC ( Address Counter ) 可產生 DD RAM 及 CG RAM 之位址。位 址值及選擇哪一個 RAM 可一次寫入指令暫存器決定之。

(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

(22)

(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 D:Data bit 軟體規劃 要令 LCD 顯示文字,首先要寫入指令暫存器 ( IR ) 規劃 LCD 各項功能、模式,接著將字元碼 ( ASCII )寫入資料暫存器 ( DR ) 移 入 DD RAM 中,即可顯示字元。適當地在每個指令後加些延遲,大於 LCD 指令控制表內所列之執行時間,這樣可省卻測試忙碌旗標 ( BF ) 之動作。下圖為軟體流程:

POWER ON RESET 或 Instruction RESET

顯示 DD RAM 字元 LCD 重置及初始化

LCD 有一個內部重置電路 ( Internal Reset Circuit ) ,只要 電源電壓 ( VDD 腳 ) 在 10ms 內上升到 4.5V 以上,即可產生 Power ON Reset ,並做 LCD 初始化工作如下: ( 初始化時 BF=1, VDD 達

(23)

4.5V 後約延續 10msec , BF 才降為 0 ) 。 ● 清除顯示 ( Clear Display ) ● 功能設定, DL=1, N=0, F=0•8 位元介面,單列顯示,5*7 點矩陣字形。 ● 顯示關閉, D=0, C=0, B=0。顯示幕、游標,閃爍功能關閉。 ● 進入模式, I/D=1, S=0。遞增模式,顯示幕不移動。

(24)

Chapter 4

電路板製作

Step 1 繪圖:將電路圖用油性簽字筆或遮光性良好的筆描繪至透明 膠片上。注意顏色要夠深,讓光透不過去,且電路不可有交叉, 電路轉彎處盡量不要成直角,以免電壓流不過去,盡量減少跳 線,通常在線路當中,跳線是無可避免的,但是能夠減少就盡量 減手。每個電子元件接腳部分都預留接孔,日後鑽孔較方便。 Step 2 曝光:將繪製好的透明膠片置於感光板上,再壓以透明玻璃, 然後在其上 5cm 處置 10w~20w 日光檯燈曝光,時間為 8~10 分鐘。 此時要注意原稿正反面,且原稿必須與感光板密接,玻璃須洗乾 淨,尺寸要大於感光板。感光板與日光燈應等距為平行狀。特別 注意的是曝光的距離若增加 1 倍,則所耗時間則增加 3 倍。 Step 3 顯影:將顯影劑與二十倍的水量混合均勻,再將已曝光完成 之感光板 ( 感光膜面朝上 ) 完全浸入溶液中,約 5 秒鐘可見綠 色微粒冒起,此時每隔數秒輕搖一下,直搖至線路非常清晰且不 再有微粒冒起為止。時間大約是 30 秒至 2 分鐘,再以清水沖洗 後吹乾即可。注意製作溶液須攪拌均勻,不可將顯影劑直接到在 感光板上,溶液濃度不可太濃或太淡。太濃則綠色微粒冒起迅 速,容易溶解線路上的感光膜,造成線路細小或消失的現象;太 淡則綠色微粒冒起緩慢,容易殘留感光膜,可能會造成無法完全 蝕刻的現象。 Step 4 檢修:此時可用油性簽字筆在感光膜面上加以修補或是用小 刀刮除,注意保持電路完整。 Step 5 蝕刻:將蝕刻劑 ( 氯化鐵 ) 倒入塑膠容器 ( 注意容器不可 用金屬容器 ) ,將已顯影之感光板完全浸入溶液中 ( 感光膜面 朝上 ) ,輕搖容器,蝕刻至非線路部分的銅箔完全清淨為止。 注意,溶液溫度高,速度較快,可用隔水加熱的方法加熱溶液, 加快蝕刻速度。蝕刻後一樣以清水沖洗後吹乾即可。 Step 6 鑽孔:利用鑽孔機或是手鑽針,以 0.7mm 的鑽針鑽孔。注意 安裝鑽針時,不可以歪斜,且電路板底下最好有東西可以墊著。 遇到較大的孔時須更換鑽針,盡量避免以小針鑽大孔的情形發

(25)

生,將電路板上所需要的孔全部鑽完,即大功告成。 Step 7 焊接電路:將已鑽孔完成的電路板翻面,將各電子元件插上, 注意電子元件與電路要在不同的方向。使用焊鎗及焊錫,將電子 元件各個接腳焊在電路板上,注意 IC 盡量使用腳座來連接電 路。而若焊接腳相近的電子元件,須小心不能讓各接腳上的焊錫 互相接觸。將所有電子元件全都固定在電路板後,即完成焊接的 工作。 Step 7 通電:接上交流或直流電源,電路完成。

(26)

Chapter 5

程 式 解 說

因為程式十分的冗長,無法一一敘述,所以只挑幾個比較重要的 部分加以說明: 以上的程式碼,1~12 行為設定記憶體位置,我們將記憶體位置改成 DATA0~DATA11,以便存放串列接受埠進來的資料。而 13~16 行是設定 給轉換程式用的 BUFFER,用來傳送資料,17 行是副程式之間用來傳 參數的暫時記憶體。18 行是檢查資料的副程式用的 BUFFER,19 行是 1. DATA0 EQU 08H 2. DATA1 EQU 09H 3. DATA2 EQU 0AH 4. DATA3 EQU 0BH 5. DATA4 EQU 0CH 6. DATA5 EQU 0DH 7. DATA6 EQU 0EH 8. DATA7 EQU 0FH 9. DATA8 EQU 10H 10. DATA9 EQU 11H 11. DATA10 EQU 12H 12. DATA11 EQU 1CH 13. HIGH1 EQU 13H 14. HIGH2 EQU 14H 15. LOW1 EQU 15H 16. LOW2 EQU 16H 17. BUF1 EQU 17H 18. CHKBUF EQU 18H 19. CHKREF EQU 19H 20. CHKCTR EQU 1AH 21. FLG EQU 1BH 22. LCD_E REG P2.0 23. LCD_RS REG P2.1 24. LCD_R/W REG P2.2 25. INI_BIT REG 20H.0

(27)

檢查資料的副程式中傳參數用的位址,20 行是檢查資料副程式中的 計數器,21 行是判斷資料是否正確的旗標,22 行用來控制 LCD 致能 信號,LCD_RS 是用來控制 LCD 指令/資料暫存器選擇信號。LCD_R/W 用來控制 LCD 讀/寫信號,INI_BIT 表示 LCD 重置時期執行寫入指令 時不用查核 LCD 忙錄旗號。 INPUT_INIT: 1. MOV SP,#60H 2. MOV TMOD,#20H 3. MOV SCON,#50H 4. MOV TH1,#253 5. MOV TL1,#253 6. SETB TR1 7. RET 上列的副程式中,主要是用在於接收資料前的初始設定。第一行是設 定堆疊區由 60H 開始。第二行是設定計時器 1 為模式 2,計時器 0 為 模式 0。將串列埠控制暫存器設定成模式 1。第 4,5 是設定鮑率為 9600BPS。第 6 行是啟動計時器 1。 1.A1: JB RI , UART1 2. JMP A1

3.UART1: MOV A , SBUF 4. CPL A 5. MOV DATA0 , A 6. CLR RI 上列的副程式中主要是用在於接收資料第一二行為檢查資料是否接 收完畢如果還沒有接收到 STOP BIT 就會繼續跳回 A1 若接收到就跳到 下面的 UART 第 3~5 行為將所抓到的資料由 SBUF 中經過取補數後再存 入 DATA0 裡第 6 行將 RI 清為 0

(28)

上面的程式是用在偵查接收到的資料是否為合法的卡片資料,我們是 建 TABLE 放合法卡片資料,然後下去比對,我們先把資料放在

CHKREF,然後將 TABLE 的資料放在 CHECKBUF,然後下去比對,若兩 個資料不同的話,則將旗標設為 1,表示此張卡片不是正確的,跳出 比對程式。若正確的話繼續比對下一筆資料。 INIT_LCD: MOV A,#00111110B CALL WRITE_IR MOV A,#00000001B CALL WRITE_IR MOV A,#00000110B CALL WRITE_IR MOV A,#00001100B CALL WRITE_IR RET LCD 規畫副程式。首先命令 6、DL=1 8 位元介面長度、N=1 雙列顯示 5X7 點矩陣型式。然後是命令 1、清除顯示資料。然後命令 3、I/D=1 CHK_BEGIN: MOV DPTR,#DATA_TABLE MOV A,CHKCTR MOVC A,@A+DPTR MOV CHKBUF,A INC CHKCTR MOV A,#08H CJNE A,CHKCTR,OK RESET_CTR: MOV CHKCTR,#00H OK: MOV A,CHKREF CJNE A,CHKBUF,CHK_FAIL MOV A,#00H MOV FLG,A RET CHK_FAIL: MOV A,#FFH MOV FLG,A

(29)

S=0 AC 值遞增、顯示幕不移動。最後兩行是命令 4、D=1 顯示功能 ON、 C=0 B=0 游標不顯示不閃爍。 RESET_LCD: SETB INI_BIT MOV A,#00110000B MOV TH0,#>(2**16-15000) MOV TL0,#<(2**16-15000) CALL DELAY CALL WRITE_IR MOV TH0,#>(2**16-4100) MOV Tl0,#<(2**16-4100) CALL DELAY CALL WRITE_IR MOV TH0,#>(2**16-100) MOV TL0,#>(2**16-100) CALL DELAY CALL WRITE_IR CLR INI_BIT RET 重置 LCD: INI_BIT=1 表示 LCD 為重置時期執行寫入指令時不用查核 LCD 忙錄 (BUSY)狀態、而 INI_BIT=0 表示 LCD 執行寫入招令/資料時要求查核 LCD 忙碌(BUSY)狀態。 WRITE_DR: CALL CHECK_BUSY SETB LCD_RS CLR LCD_R/W SETB LCD_E MOV P0,A CLR LCD_E RET 寫指令到 LCD 暫存器(WRITE_IR): 判斷 INI_BIT 位元值。INI_BIT=1 表示 LCD 為重置時期執行寫入指令 時期執行寫入指令時不用查核 LCD 忙碌(BUSY)。INI_BIT=0 時呼叫查 核 LCD 忙碌副程式(CHECK_BUSY),假如 LCD 忙碌則等待。若 LCD 之 RS 信號清除為 0,號擇 LCD 指令暫存器。LCD 之 R/W 信號清除為 0,

(30)

表示執行 LCD 寫入動作。LCD 之 EN 信號設定為 1,致能 LCD 工作。將 累積器(ACC)之值經由 P0 到 LCD,LCD 之 EN 信號清除為 0,禁能 LCD 工作。 WRITE_IR: JB INI_BIT,$1 CALL CHECK_BUSY $1: CLR LCD_RS CLR LCD_R/W SETB LCD_E MOV P0,A CLR LCD_E RET WIRITE_DR:寫資料到 LCD 資料暫存器 先呼叫查核 LCD 忙碌副程式,若 LCD 忙碌的話則等待,然後將 LCD 之 RS 信號設定為1,選擇LCD資料暫存器。LCD之R/W清除為 0,表示執行LCD寫入動作。LCD之 EN 信號設定為1,致能 LCD 工作。將累積器(ACC)之值經由 P0 送到 LCD。將 LCD 之 EN 信號清 除為0、禁能 LCD 工作。 CHECK_BUSY: MOV P0,#11111111B $1: CLR LCD_RS SETB LCD_R/W SETB LCD_E MOV C,P0.7 CLR LCD_E JC $1 RET 先將 P0 設定為輸入埠,然後是將 LCD 的 RS 信該清除為0,選擇 LCD 指令暫存器。下一首指令是將 LCD 之 R/W 信號設定為 1,表示執行 LCD 讀取工作。下一行是把 LCD 之 EN 信號設定為 1,致能 LCD 工作。再 來的指令是將 LCD 忙碌狀態送到進位旗號,下面一行把 LCD 之 EN 信 號清除不 0、禁能 LCD 工作。最後再查核 LCD 之忙碌情形,若忙碌的 話則等待

(31)

TRANS_A: MOV A,#11110000B ANL A,BUF1 SWAP A MOV HIGH1,A ADD A,#06H MOV HIGH2,A MOV A,#00010000B ANL A,HIGH2 JZ AADD_30 MOV A,HIGH1 ADD A,#37H MOV HIGH1,A JMP TRANS_B AADD_30: MOV A,HIGH1 ADD A,#30H MOV HIGH1,A 這個是轉換程式,我們首先把 A 存入 11110000B,目的是把高四位元 過濾出來,我們用的是 AND 來做這件事。濾出了高四位元後就去判斷 多大,我們將該數加上 6,若進位則代表這個數大於 9,於是在根據 此數的大小把它換成 ASCII 碼,而若原本就是 0~9 的資料直接加上 30 變成該數字的 ASCII 碼。以上的是轉成十位數字的,個位數字的 亦同,只是轉換的部分變成低四位元。

(32)

程式流程圖

(33)
(34)

圖 5-3CHECK 副程式的 FLOW-CHART

(35)
(36)

問題與討論

Q1:程式如何燒錄進IC?( 7/3 ) Ans:這是我們準備將程式燒進8051時所遇到的問題,向器材 室詢問得知,器材室有一台8051之IC燒錄器可供借用,而 由於89C51較易於重覆燒錄,因此我們決定用89C51來 燒錄程式,軟體的取得是從網站上下載。一開始以為燒錄失敗, 後來才知道是燒錄時間極短,且線路接觸不良(麵包板),與程 式有小Bug導致失敗,經過重覆測試,終於燒錄成功,並且完 成測試。 Q2:穩壓器如何使用,有何功用?(7/3) Ans:穩壓器主要的功用是穩定電壓,之前利用麵包板測試時幾乎 都沒有用到穩壓器的功用,因為電流是由電池(6V)提供之直 流穩定電源,而實驗成品將利用變壓器與穩壓器,供給+5V/ 1A之電源。 Q3:為何使用89C51要用石英振盪器?(9/5) Ans:石英振盪器主要的目的是要產生脈波,產生所需工作頻率讓 89C51產生動作。而實驗成品則是使用12MHz的石英振 盪器晶體。 Q4:為何LCD無法正常顯示?(9/19) Ans:經果反覆的測試,發現接觸不良是最大的問題,由於LCD 上面的接腳孔過大,且各個接腳孔距離極近,所以常常造成接觸 不良或是各接腳互相接觸。解決的方法是利用焊鎗及焊錫,將電 線直接焊在接腳孔上,固定住。 Q5:使用RFID232接收資料後,為何無法送到89C51? (9/26) Ans:測試發現,沒有使用MAX232把RS232規格的+1 2V與-12V改為TTL的GND和5V,所以無法接收。 Q6:LCD為何無法做動態顯示?(9/26) Ans:測試數個動態顯示的程式仍舊無法做動態顯示,因此推斷因 為非繪圖型LCD,因此無法做動態顯示。

(37)

Q7:為何每次RFID232接收的資料皆不相同?(10/3) Ans:經過詢問製造廠商及與老師討論過後,發現資料格式並非是 我們所認為的一筆資料,而是由十筆八位元的資料所組成(加上 一筆START,一筆END,共十二筆)。因此程式由只接收 一筆資料改為接收十二次資料,每次接收一筆,重覆測試,做出 十二筆資料後,再用一次接收十二筆資料的做法,對於日後比對 資料有相當大的幫助。 Q8:為何無法連續兩次接收資料?(10/9) Ans:電路不穩,是因為電壓不夠,因此只要換過新的電池,問題 即解決。 Q9:為何RFID232接收資料後,LCD秀出的資料為亂碼? (10/17) Ans:因為LCD秀出的資料為ASCII碼,而RFID232 接收的資料不是,因此我們接收資料後,做資料轉換,轉為AS CII碼的型式即可。 Q10:為何LCD顯示跳動的很厲害?(10/30) Ans:程式出錯,經Debug過後再做顯示,問題就消失了。 Q11:為何第一次讀的資料與第二次的不相同?(10/30) Ans:經由討論,發現是少接收了一筆資料,在程式裡面多做一次 接收的工作就解決了。

(38)

心 得 1

做這個專題的感想,我想就是將大學四年來學過的東西拿來再做 一次的復習吧。雖然專題不是很大…不過也是蠻麻煩的,我們做的東 西有通訊、有控制,有些上課雖然有聽到、有教過,但是實際上來實 作就不像上課聽講時來的輕鬆了。 做專題的時候遇到蠻多麻煩的,像最初遇到的麻煩反而不是專題本 身,而是組員之間的注意力及決心似乎不大夠,一開始大家好像很有 熱誠,不過漸漸的有人就冷掉了,不過最後還是終於作出來了,我想 這邊最重要的是先學習到了一個 team 如何去 work 吧。以後是個 team work 的時代,單兵作戰是沒什麼效果的,而專題第一個學到的就是 如何去讓一個 team 來 work。 爾後一直出現麻煩,我本身是作輸入通訊部分的,在接收資料時 遇到麻煩還真是蠻多的,到圖書館找書啊、跟同學討論啊,我想專題 於給我的第個就是如何去找出我們要的資料,這是我第個學習到的地 方。 爾後就是作專題本身的學習了,我想我的 8051 組合語言進步很 多,在做專題前的我還是那種程式不大會寫,只會看別人的程式修改 的人。不過在做這個專題,很多程式不可能有人幫你寫了,一切都得 自已來了,很感謝有組員的支持,一路陪我忍受我寫的冗長沒效率的 程式,程式的部分是我最進步最大的吧。從完全寫不出來到可以寫到 500 多行的程式,到可以整合輸出組和輸入組的程式,到可以寫一些 必要的副程式,這是我自已感覺到得自已的進步,很高興組員們讓我 可以選擇寫程式這一途。 很感謝老師能在我們遇到迷惑的時候總是可以給我們一個思考 的方向,而沒有直接給我們答案,讓我們養成一種自已的問題要自已 去解決。另外很感謝班上另一組專題的同學,由於他以前對於洗電路 板,像洗電路板的部分都麻煩他來教我們,不然洗電路也沒有那麼快 的完成以及順利。

心 得 2

這次的專題我們從 3 月就開始動手做,一開始最重要的是背景知 識的了解。當我們開始動手寫程式的時候發現藉由一次又一次的實驗 及嘗試,慢慢的我們對 8051 的組合語言越來越熟了,想起很多徐老 師以前教過的東西對我們幫助不少,我們先做最基本的輸出實驗及測 試,後來再一步一步的把串列通訊和 LCD 顯示做好,這其中我們借了

(39)

相當多的書,不只是 8051 的書,還包跨了 RS-232 串列通訊的書以及 LCD 的相關應用。所以做完這次的專題讓我們學到了 8051 的應用還 有 RS-232 串列通訊的知識,更重要的是我們學會了分工合作的方 法,還有事前規劃的能力。

心 得 3

我是負責LCD組的,由於LCD接腳的問題,常常接觸不良, 且接腳多又雜,常常弄了再弄都還是無法得到我們要的輸出,有時候 明明就已經搞定了,結果到整合時LCD又接觸不良,最後乾脆將電 線焊死在上面。原先打算要秀出用戶資料及做動態顯示,動態顯示經 過無數次測試,一樣失敗,而用戶資料本打算造字,結果每次造出來 都出現亂碼,不得已,只好直接秀出磁卡的資料。不過本來以為兩張 卡是一樣的,結果發現還是有小小不同的地方,倒數幾碼的資料不同 ,不過由於在比對資料時沒有比對到,因此不影響結果。 原先對組語並不是很熟悉,只有大二上修過徐弘洋老師的組合語 言,而後來修習的課程大多都是以較高階程式語言為主,因此要撰寫 及修改LCD程式時遇到了不少困難,借了好幾本書回來翻閱,幾個 指令不清楚也都想辦法弄懂,到現在雖不是很專精,不過至少對組語 的程式多少都可以了解大概的功用及目的。這對我而言是很大的收獲 而在洗電路板,發覺其實並不是那麼的難,最麻煩只有在描繪電 路圖,其餘像曝光,顯影,蝕刻等步驟都還挺好玩的。第一次看到自 己洗的板子,覺得很有成就感,畢竟資訊系接觸軟體較多,很少有機 會可以接觸到硬體,有了這個經驗,我相信以後有類似的作業或問題 ,應該也是可以解決。

心 得 4

由於是第一次嘗試做硬體方面的專題研究,很多的問題也是第一次碰 到,因為做的是關於單晶片的應用,所以必須對 MCS-51 也要有更深 入的了解,在洗版子的部分從曝光、顯影、蝕刻、到焊接電路也都是 首次嘗試,必然也遇到了一些問題像是斷線、或是電路不穩….等, 而在 LCD 的部分也是從不會顯示資料到最後的克服,這次的專題總算 是大概的做出了,不過也有很多地方可以有更進一步的功能,如加入 音控、警民連線…等,希望以後能有更完整的功能來呈現。

(40)

附 錄

(41)

(B) 程式碼

DATA0 EQU 08H DATA1 EQU 09H DATA2 EQU 0AH DATA3 EQU 0BH DATA4 EQU 0CH DATA5 EQU 0DH DATA6 EQU 0EH DATA7 EQU 0FH DATA8 EQU 10H DATA9 EQU 11H DATA10 EQU 12H DATA11 EQU 1CH HIGH1 EQU 13H HIGH2 EQU 14H LOW1 EQU 15H LOW2 EQU 16H BUF1 EQU 17H CHKBUF EQU 18H CHKREF EQU 19H CHKCTR EQU 1AH FLG EQU 1BH LCD_E REG P2.0 LCD_RS REG P2.1 LCD_R/W REG P2.2 INI_BIT REG 20H.0 ORG 00H START: MOV A,#00H MOV CHKCTR,A MOV FLG,A CALL INPUT_INIT ;***************接收序列資料**************** A1: JB RI,UART1 JMP A1 UART1:

(42)

MOV A,SBUF CPL A MOV DATA0,A CLR RI A2: JB RI,UART2 JMP A2 UART2: MOV A,SBUF CPL A MOV DATA1,A CLR RI A3: JB RI,UART3 JMP A3 UART3: MOV A,SBUF CPL A MOV DATA2,A CLR RI A4: JB RI,UART4 JMP A4 UART4: MOV A,SBUF CPL A MOV DATA3,A CLR RI A5: JB RI,UART5 JMP A5 UART5: MOV A,SBUF CPL A MOV DATA4,A CLR RI A6: JB RI,UART6

(43)

JMP A6 UART6: MOV A,SBUF CPL A MOV DATA5,A CLR RI A7: JB RI,UART7 JMP A7 UART7: MOV A,SBUF CPL A MOV DATA6,A CLR RI A8: JB RI,UART8 JMP A8 UART8: MOV A,SBUF CPL A MOV DATA7,A CLR RI A9: JB RI,UART9 JMP A9 UART9: MOV A,SBUF CPL A MOV DATA8,A CLR RI A10: JB RI,UART10 JMP A10

UART10: MOV A,SBUF CPL A

MOV DATA9,A CLR RI

A11:

(44)

JMP A11 UART11: MOV A,SBUF CPL A MOV DATA10,A CLR RI A12: JB RI,UART12 JMP A12 UART12: MOV A,SBUF CPL A MOV DATA11,A CLR RI ;*******↑序列資料接收完畢↑**** ;*******↓檢查資料是否正確↓**** CHECK: MOV A,DATA1 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA2 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA3 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA4 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA5

(45)

MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA6 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA7 MOV CHKREF,A CALL CHK_BEGIN MOV A,#00H CJNE A,FLG,OVER MOV A,DATA8 MOV CHKREF,A CALL CHK_BEGIN OVER: CALL SHOW AGAIN: JMP START ;**************↓初始化↓******** INPUT_INIT: MOV SP,#60H MOV TMOD,#20H MOV SCON,#50H MOV TH1,#253 MOV TL1,#253 SETB TR1 RET ;*********RESET_LCD********* RESET_LCD: SETB INI_BIT MOV A,#00110000B MOV TH0,#>(2**16-15000) MOV TL0,#<(2**16-15000) CALL DELAY

(46)

CALL WRITE_IR MOV TH0,#>(2**16-4100) MOV Tl0,#<(2**16-4100) CALL DELAY CALL WRITE_IR MOV TH0,#>(2**16-100) MOV TL0,#>(2**16-100) CALL DELAY CALL WRITE_IR CLR INI_BIT RET ;********INIT_LCD******* INIT_LCD: MOV A,#00111110B CALL WRITE_IR MOV A,#00000001B CALL WRITE_IR MOV A,#00000110B CALL WRITE_IR MOV A,#00001100B CALL WRITE_IR RET ;**********WRITE_IR*************** WRITE_IR: JB INI_BIT,$1 CALL CHECK_BUSY $1: CLR LCD_RS CLR LCD_R/W SETB LCD_E MOV P0,A CLR LCD_E RET ;*********WRITE_DR***** WRITE_DR: CALL CHECK_BUSY SETB LCD_RS CLR LCD_R/W

(47)

SETB LCD_E MOV P0,A CLR LCD_E RET ;******CHECK_BUSY***** CHECK_BUSY: MOV P0,#11111111B $1: CLR LCD_RS SETB LCD_R/W SETB LCD_E MOV C,P0.7 CLR LCD_E JC $1 RET ;**********DELAY********** DELAY: MOV TCON,#00010000B $1: JNB TF0,$1 RET ;*****************轉換程式************************** TRANS_A: MOV A,#11110000B;轉十位數 ANL A,BUF1 SWAP A MOV HIGH1,A ADD A,#06H MOV HIGH2,A MOV A,#00010000B ANL A,HIGH2 JZ AADD_30 MOV A,HIGH1 ADD A,#37H MOV HIGH1,A JMP TRANS_B AADD_30: MOV A,HIGH1

(48)

ADD A,#30H MOV HIGH1,A TRANS_B: MOV A,#00001111B;轉個位數 ANL A,BUF1 MOV LOW1,A ADD A,#06H MOV LOW2,A MOV A,#00010000B ANL A,LOW2 JZ BADD_30 MOV A,LOW1 ADD A,#37H MOV LOW1,A JMP TRANS_OVER BADD_30: MOV A,LOW1 ADD A,#30H MOV LOW1,A TRANS_OVER: RET ;*********合法性****** CHK_BEGIN: MOV DPTR,#DATA_TABLE MOV A,CHKCTR MOVC A,@A+DPTR MOV CHKBUF,A INC CHKCTR MOV A,#08H CJNE A,CHKCTR,OK RESET_CTR: MOV CHKCTR,#00H OK: MOV A,CHKREF CJNE A,CHKBUF,CHK_FAIL MOV A,#00H MOV FLG,A RET

(49)

CHK_FAIL: MOV A,#FFH MOV FLG,A ;*********************↓SHOW 資料↓******************** SHOW: MOV SP,#60H MOV TMOD,#00000001B CALL RESET_LCD CALL INIT_LCD MOV A,#80H CALL WRITE_IR MOV A,DATA0 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#81H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#82H CALL WRITE_IR MOV A,DATA1 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#83H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#84H CALL WRITE_IR MOV A,DATA2 MOV BUF1,A CALL TRANS_A

(50)

MOV A,HIGH1 CALL WRITE_DR MOV A,#85H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#86H CALL WRITE_IR MOV A,DATA3 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#87H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#88H CALL WRITE_IR MOV A,DATA4 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#89H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#8AH CALL WRITE_IR MOV A,DATA5 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR

(51)

MOV A,#8BH CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#8CH CALL WRITE_IR MOV A,DATA6 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#8DH CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#8EH CALL WRITE_IR MOV A,DATA7 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#8FH CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#C0H CALL WRITE_IR MOV A,DATA8 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#C1H CALL WRITE_IR

(52)

CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#C2H CALL WRITE_IR MOV A,DATA9 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#C3H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#C4H CALL WRITE_IR MOV A,DATA10 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#C5H CALL WRITE_IR CALL TRANS_A MOV A,LOW1 CALL WRITE_DR MOV A,#C6H CALL WRITE_IR MOV A,DATA8 MOV BUF1,A CALL TRANS_A MOV A,HIGH1 CALL WRITE_DR MOV A,#C7H CALL WRITE_IR CALL TRANS_A MOV A,LOW1

(53)

CALL WRITE_DR MOV A,#00H CJNE A,FLG,NO MOV P1,#FFH MOV A,#C9H CALL WRITE_IR MOV A,#59H CALL WRITE_DR MOV A,#CAH CALL WRITE_IR MOV A,#45H CALL WRITE_DR MOV A,#CBH CALL WRITE_IR MOV A,#53H CALL WRITE_DR JMP BACK NO: MOV A,#C9H CALL WRITE_IR MOV A,#4EH CALL WRITE_DR MOV A,#CAH CALL WRITE_IR MOV A,#4FH CALL WRITE_DR BACK: RET DATA_TABLE: DB 09H,60H,60H,6AH DB 84H,84H,68H,8AH END

(54)

(B) 參考書目

[1]鄧錦城,8051單晶片入門與實作,宏友圖書。 [2]楊明豐,8051單晶片設計實務,基峰資訊。 [3]鐘自立 張正賢,8051實作與燒錄器製作,宏友圖書。 [4]李齊雄 黃鴻斌,LCD液晶顯示模組原理與實作,格致圖 書。 [5]謝澄漢 馬嘉宏,8051單晶片原理與實作,宏友圖書。 [6]高弘毅,RS-232C入門與應用,波前電腦管理。 [7]白中和,RS-232C介面技術應用,全華圖書。

專題討論 會議記錄

進 度 表

三月下旬 四月: 1.感應 2.組語(8051)

3.Fire Data In Card 以上:理論為主 五月: 4.IC 配置 5.電路 6.組織;結構 六月: 7.功能 以上:了解原理期 七月: 八月: 九月: 以上:實作期(以實作為主) 十月: 十一月: 十二月: 以上:緩衝期(以是否加入新功能為主)

(55)

專題發表所需要加入的項目:動機、目標、時程、分析、設計、實作、 測試、評估、後續、使用的系統(硬體、軟體)、困難,相關技術資 料。 時間:91.3.19 與會人員:全到 主題:題目定義(完整規格);進度表 門禁分硬體、軟體 硬體部: ◎ 感應的工作原理(電磁感應) ◎ I/O 電路 ┌8051→output └感應→input (8051)→LED 時間:91.3.25 與會人員:全到 主題:資料整合。 進度:讀MCS-51。目前我們所修的微處理機,跟我們所要製作 的專題有關,因此決定先讀過一遍微處理機的課本。預計費時 三個星期。 時間:91.4.8 與會人員:全到 主題:資料彙集(一)。

(56)

進度:將各人讀MCS-51的心得加以彙集。 蔡育和:這兩個禮拜看著東西是8051的組合語言,還有學習如何 使用那本書上附送的軟體,來撰寫51的軟體。不過在正式操 作該軟體以前,我發現該軟體有個應用程式是用C語言來撰寫 的,說實話,我還是覺得c語言比較好寫吧,至少寫起來比較 有結構。這個禮拜開始考試了,然後也有作業,感覺上時間都 沒用在專題上,不過修習的微處機課程跟專題的東西多有類似 ,想說借著這次微處理機交作業的機會多多學習8051的組 語。8051的組合語言感覺上比80X86來的簡單,語法 的限制不多,不過可用的記憶體或指令少多了,程式寫起來比 較會沒效率,大概是自己還沒習慣吧,不過我們會再加油的。 黃文彬:MCS-51的指令算是蠻多的,定址法也差不多十來種, 所以真正要寫個有規模的程式,除了要非常的了解其架構外, 對於指令和定址模式也要有相當程度的了解。 高啟修:目前從第一章看起,而老師則是教到了第四章,算是雙管齊 下,第一章講的很粗淺,大約就是些微處理機的介紹,而第四 章則是教到了擴充記憶體的部分,以及一些Delay等等, 目前我的進度落後其它三位同學,因為我修的課程是晚上班, 而其餘三位的課程是日間班的緣故,所以必須再加把勁兒。 陳亭岳:經過一星期的時間,因為春假完要考計算機結構學,所以我 並沒有辦法照進度來完成所應該唸完的部分,只看過一到二章 節,而我發覺到對我們的專題最有用的部分為 2.11 MCS-51 Development tools. MCS-51 發展工具,其可分為硬體和軟體 兩大類,軟體部分包含文字編輯器、組合語言、編譯器、模擬 器、除錯器、和整合軟體。而硬體部分包含評估板、邏輯分析 器、邏輯探針等、書中還提到 MCB520 evaluation board 所 需搭配的重要軟體 u-vision software 地使用方法等等,相 信把這套軟體搞懂後要撰寫 8051 的程式會比較容易。 時間:91.4.16 與會人員:全到 主題:資料彙集(二)。 進度:將各人讀MCS-51的心得加以彙集。 陳亭岳:這星期我所唸的主要為 MCS-51 的組合語言指令,配合大二

(57)

上所修的組合語言,還有大二下所修的數位邏輯設計,在看過 這本微處理機後發現唸起來蠻輕鬆的,事實上組語和機械語言 的一個很重要的觀念就是二進制和十六進制的轉換和觀念,相 信日後我們時作專題的時候一定要有很好的二進制觀念和良 好的機械語言觀念。 黃文彬;在初步了解 MCS-51 的組合語言之後,看了一些書上所例幾 個簡單的程式,起初只有幾行而已的小程式,到後來的稍微 較大的程式時,就得開始注意所使用到的種種指令,包括記 憶體使用的範圍、資料存取的範圍,及暫存器、定指法... 等等。到了本書第三章,為了讓程式有更好的效率,介紹了 資料的結構、型態,及撰寫 MCS-51 組合語言的一些方針, 至於程式的模擬過程與結果,可以利用書後所附的光碟,及 在第二章後半部的教學說明來完成。最後所要做的就是,將 此語言及 MCS-51 的硬體結構摸的更熟了。 高啟修:目前進行到第五章,有關中斷的部分,其中有提及中斷的優 先權及致能中斷位元等幾個觀念,中斷對CPU而言頗為重 要,也算是一個重要的概念,中斷成立必須要有幾個要件, 而我相信中斷對我們感應的部分有所幫助。或許我們可以利 用中斷的特性來作資料的感應。或許可以在接收端接收資料 之際,中斷晶片正在進行之工作(將”感應”付予高優先權) ,直接進行”讀取感應資料”這項工作。當然,這只是初步 構想,得等到真正實作後才知道可不可行。 時間:91.5.7 與會人員:全到 主題:資料彙集(三)。 進度:將各人讀MCS-51的心得加以彙集。 黃文彬:在前幾週初步了解 MCS-51 的指令格式後,接下來就是要了 解完成程式後所要做的工作-燒錄,所以附上兩個有關程式 的指令集及燒錄的教學檔,在依此檔的內容學習燒錄的原理 。(8051_instruction.pdf,prog_P89C51RDp.pdf) 高啟修:而關於微處理機課程的部分,目前進度進行到 I/O 的部分,

(58)

目前在 Input 的部分,應該是打算用一般 12 格的數字鍵盤 做為輸入,於課文中有詳細的接腳示意圖。至於輸出部分, 仍在評估當中,等到對於 I/O 部分有更深入的了解時再作決 定。 蔡育和:之前和朋友閒聊時有講到專題的事情,他們給我的建議是用 磁感來進行感應門禁的主要技術。不過還沒找資料,只能大 略的知道是在卡片上布置磁性吧,經由電磁感應,接近到所 製造出來的感應器後會使感應器產生電流,進而趨動整個專 題所做的系統。這個禮拜還是以讀書為主,不過讀的是結構 學和演算法。感覺上一個好的系統來講結構一定要好,演算 法一定要適合。但這並不是指什麼都要用最好的,而是用最 合適的。最近讀這兩科的感想是沒有什麼最好的結構或演算 法,各有長處及短處,我想如何去選擇最好最合適的才是重 點所在。上個禮拜考演算法的期中考,所以沒讀到什麼專 題,我想我還是太懶了點,平常時間配置的不好,所以才會 老是時間不夠用。我想以後專題進行的同時我也要學會如何 去調配自已的時間才是 ☺。 時間:91.5.20 與會人員:全到 主題:討論關於MCS-51。 進度:將各人讀MCS-51的心得加以彙集。 目前準備往程式設計的方向進行,先實際練習幾個程式,熟悉51的 控制。 而關於硬體方面,根據陳亭岳同學詢問的結果,找不到供給卡片的商 家,之前在網站上有看到在賣空白的卡片,可是還是找不到方法可以 燒錄。 關於搜尋的資料,如附件(卡片的比較.htm,u3-1pc.doc) 本次討論,黃文彬同學試寫了一個 MCS-51 的程式,如附件(a.doc) 時間:91.6.25 與會人員:全到

(59)

主題:討論硬體結構。 進度:討論感應器之硬體結構,以及器材購買。 討論結果: 以上為結構示意圖。經由本小組討論,由圖可知,我們會先從感應電 路開始做起,先利用麵包板及IC做出感應的部分,完成感應部份後 ,再進一步把資料寫進8051中。 結論:明天將要去電子街去問實地了解及購買材料。計有8051, 還有一些必需的電子材料等。 時間:91.6.27 與會人員:高啟修、陳亭岳、黃文彬 蔡育和因故未到。 主題:討論非接觸感應卡之原理。 進度:研究已購買之器材。 討論結果:本組於上次會後,到電子街購買一組非接觸感應卡之套 件。計有一組感應線圈、兩張磁卡、一顆已燒好之 IC(RFID232),詳細說明請見附錄(a) 時間:91.7.2 與會人員:高啟修、蔡育和、黃文彬 陳亭岳因故未到。 主題:實作非接觸感應電路。 進度:在麵包板上實作感應電路,試作 RFID232 部分。 討論結果:本次討論將實作此電路,先將 RFID232 感應部分完成。根 據實驗的結果,感應時 LED 會閃一下,表示已經接受到感 IC 感應 卡 IC感應 電路 讀入資料 將讀進來的資料送 到8051 以8051I C為基礎的控 制電路

(60)

應的信號。目前討論的結果為:當電路接收到感應的資 料,會將資料傳送給 51,經由 51 讀取資料,目前的工作 應該就剩下如何將資料送至 51,以及如何寫 51 的程式來 讀取資料。 時間:91.7.3 與會人員:高啟修、陳亭岳、黃文彬、蔡育和。 主題:實作非接觸感應電路(二)。 進度:在麵包板上實作感應電路,試作穩壓器部分。 討論結果:本次討論實作穩壓電路部分,以及購買8051來作程式 設計。目前遇到的小問題是,仍不大清楚程式該如何燒錄 ,書上有稍微說明該如何做,而似乎需要燒錄器的樣子。 而根據詢問的結果,燒錄程式時,8051需要紫外線清 洗,而8951只需將程式寫入即可,所以明日決定去圖 書館尋找相關書籍。而目前已完成穩壓器,但是仍有一個 問題,就是不曉得該怎麼實驗得知穩壓器的功用。在此附 錄 8051 的接腳圖(如附錄(b))。 時間:91.7.9 與會人員:蔡育和、陳亭岳、高啟修、黃文彬。 主題:I/O 部分的討論 討論結果:現在知道資料傳送的型態,所以我們只要送一條 I/O port 進去,寫一個程式,看輸出結果顯示在液晶或是七段顯示 器上,程式可以根據資料輸出的型態,轉換顯示在液晶或 是七段顯示器上面。RFID232 輸出的資料型態 9600.N.8.1 的 RS-232 通訊格式,資料長度為 12 碼。其第一個送出的 帶頭碼為 02 加上 10 個卡片資料碼,最後再加上一個結 尾碼 03 一共 12 碼.。而由於 RFID232 的輸出就是 RS232 的格式,所以很容易跟8951結合。若需與其它不具 RS232 介面的單晶片連結,則須注意 RS232 傳送格式每一 個 BIT 長度為 104uS,且每個 BYTE 是以 BIT0’BIT1’

(61)

BIT2….的順序送出。 時間:91.7.11 與會人員:陳亭岳、黃文彬、高啟修、蔡育和。 主題:UART的探討。 討論結果:我們有查到UART的相關資料,如附錄©。我們決定拆 滑鼠及主機板,看看是否有 UART 的 IC。根據附錄©我們 要找 IC8250 或是 16450,結果發現,拆下來還是找不到 這兩種 IC。 時間:91.7.18 與會人員:陳亭岳、黃文彬、高啟修、蔡育和(今天生日)。 主題:測輸出訊號。 討論結果:我們決定向器材室借用示波器與三用電表來測量 RFID232 的輸出信號。經由測試的結果還是無法得知完整的波型, 所以我們想請教老師如何測量出輸出的波型及信號類別。 時間:91.8.22 與會人員:黃文彬、蔡育和、高啟修。 主題:IC 燒錄及 LCD 的應用。 討論結果:我們已經向器材室借到 IC 燒錄器,準備要開始做 IC 燒錄 及程式的測試。

數據

圖 5-1 整個程式的 FLOW-CHART
圖 5-2 接收資料副程式的 FLOW-CHART
圖 5-3CHECK 副程式的                          FLOW-CHART
圖 5-4 轉換副程式的 FLOW-CHART

參考文獻

相關文件

螺紋、偏心、輥花等。CNC 車床設計 CNC 加工程 式,模擬加工路徑;或經由電腦輔助設計製造系

軟體至 NI ELVIS 環境。現在,您在紙上或黑板上的設計可在 Multisim 內進 行模擬,並模擬為 NI ELVIS 或 NI ELVIS II 電路板配置上的傳統電路圖。設 計趨於成熟後,使用者即可在 NI

在介紹方向場時,我們曾提過 RL 電流迴路的模型:一個迴 路接上電源(E)電感(L)以及電阻(R) 如下圖. 同時推得這個

在 2004 年和 2005 年期間,喬根森利用手術植入的小無線電發射機跟蹤 28 條

考生只能攜帶或使用 5

直方圖 (histogram) 階梯圖 (stair plots) 羅盤圖 (compass plots).!. of Math., NTNU,

Department of Mathematics, National Taiwan Normal University, Taiwan..

Department of Mathematics, National Taiwan Normal University, Taiwan..