目 錄 1. 摘要 第一章 前言研究目的

Similar documents
DPJJX1.DOC

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63>

Microsoft Word - 專題封面.doc

W77E58中文手册

2-2 第二章系統分析 XTAL1/ (19/18): 時脈接腳 1. 使用內部振盪器 C1 XTAL1 C2 VSS 2. 使用外部時脈 圖 2-2 使用內部振盪器接線圖 時脈輸入 空接.. 時脈輸入 XTAL1 XTAL1 時脈輸入 XTAL1 VSS VSS VSS (a) (b) (c) 圖

目 录

Microsoft PowerPoint - chap12.ppt

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

專題最終版.doc

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

1 TPIS TPIS 2 2

untitled

51 C 51 isp 10 C PCB C C C C KEIL

逢 甲 大 學

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

<4D F736F F D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

微處理機期末專題

Microsoft PowerPoint - chap3.ppt

CA24064B LED LED LED EL EL CCFL EL CCF /


» n ¹ú KS0108 x ÍÍÙ q n KS0108 KS KS0107 KS0108 KS *32 128*64 192*64 KS0108 KS0108 KS0107 KS =4096 RAM RAM LCD 2 KS

untitled

Microsoft PowerPoint - chap2.ppt

12232A LED LED LED EL EL CCFL EL CCF

PowerPoint 簡報

Microsoft Word - ISSFA-0109_B_SM59264_WDT_ APN_TC_.doc

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32--

单片机原理及应用实验指导书.doc

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

Microsoft PowerPoint - chap9.ppt

Microsoft PowerPoint - chap5.ppt

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

1

物品重量分級器.doc

SPMC75F2413A_EVM_使用说明_V1.2.doc

Microsoft Word - PA.doc

PowerPoint 簡報

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

微處理機

dfgdafhdafhdafhdafh

Microsoft PowerPoint - chap4.ppt

投影片 1

DATASHEET SEARCH SITE ==

高雄縣高英高級工商職業學校

OKI Semiconductor

, STC11F01-35C-SOP16 RMB 1.99 STC10F04-35C-LQFP44 R MB 2. 99

µPSD3000 系列

1


MICROMASTER 410/420/430/440 DA kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg

Microsoft PowerPoint - chap11.ppt

Microsoft PowerPoint - MicroProcessor05_MSC51 HW

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1

投影片 1

Microsoft Word 定址法實驗.doc

untitled

Ps22Pdf

例 如, 一 个 含 有 2000 个 记 录 的 文 件, 每 个 磁 盘 块 可 容 纳 250 个 记 录, 则 该 文 件 包 含 8 个 磁 盘 块 然 后 对 该 文 件 作 二 路 归 并 的 外 排 序, 每 次 往 内 存 读 入 两 个 磁 盘 块, 排 序 后 再 写 回 磁

() () () () () () () () DDRAM () II

untitled

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

MICROMSTER 410/420/430/440 MICROMSTER kw 0.75 kw 0.12kW 250kW MICROMSTER kw 11 kw D C01 MICROMSTER kw 250kW E86060-

2 PIC PIC 1 / CPU PIC MCU PIC RC

untitled

現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度, 進而獲得地底物質密度與深度的關係 地下世界知多少 km/s g/cm 3 P Gpa km S P S 3,000 3,000 ak K 透視地底 Percy Bridgma


展 望 与 述 评 2 广 电 设 备 与 技 术

MICROMASTER DA51-2 MICROMASTER 410/420/430/ KW250KW E20001-K4260-C100-V5-5D J CA01 SD CA01 SD CD M17 E20001-K5690- C100-V2-5

一、研究動機

四位微控制器ML64168_ _.doc

中華民國 第49屆中小學科學展覽會

2 14 PORTC.1 PORTB.3 PORTA.2/T0 GND PORTB.2 PORTA.0 PORTC.3 PORB.0/OSCO PORTB.1/OSCI PORTC.0 PORTC.2 SH69P21 /SOP PORTA

ORG 00BH JMP TIMER0 ORG 100H MOV TMOD,# B MOV IE,# B MOV TH0,#( )/32 MOV TL0,#( ).MOD.32 SETB P2.0 SETB TR0 JMP $ MOV R0,#

2005.book

MICROMASTER 410/420/440 DA kW 200kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low-Vol

untitled

untitled


SW cdr

摘要 利用超音波測量距離, 使自走車能感測前方障礙物的距離, 自動轉彎達到閃避效果 前言 經過這學期的微處理機課程後, 我們學習了如何使用微處理晶片來控制和數學運算的機制, 在這次的計畫裡, 我們準備運用 89C51 這個功能強大的晶片來執行測距 控制轉彎的功能 整個計畫中用到感測原理和微處理器原理

Microsoft PowerPoint - C15_LECTURE_NOTE_15

Visual Basic AD/DA Visual Basic 2

Tel: , Fax: STR-15 STR bps 2400bps 4800bps 9600bps STR : 500mW 2.ISM 433

Microsoft Word - 目錄new.doc

中文手册

! *!"#$%&'()*+,-./#01 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( / )! ( ) 3SB3!" Ø22mm!"# ( / ) 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( ) 7, 10 7, 9 7, 8

Microsoft Word - ISSFA-0134_A_AP_User-definedDownload_SC_.doc

2

Microsoft Word - ACI chapter00-1ed.docx

1

2 12

Keysight B2900A / Keysight B2961A 6 Keysight B2962A 6 Keysight B2961A B2962A nano-voltmeter / nv/10 fa 10 µvrms 210 V/ 3 A 10.5 A GUI nv 2

Microsoft Word - CDT3913-NSP1.0.doc

Table of Content 1. RFC 的寫法 ( 使用 PH_IRQ 當作 Timer base) Comparator Power ( V_LVR, V_PAD, VDD2 ) connect... 7 Examples : 1/3 bias... 7 E

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

Transcription:

朝陽科技大學 資訊工程系 專題成果報告 超音波避障智慧車 指導教授 : 洪士程教授專題組員 : 陳志瑋 (9727074) 嚴御航 (9727029) 王凱立 (9727092) 陳唐修 (9727098) 劉嘉糧 (9727041) 中華民國 1 0 0 年十二月

目 錄 1. 摘要 --------------------------------------------------------------1 2. 第一章 ------------------------------------------------------------1 前言研究目的 3. 第二章 ------------------------------------------------------------2 準備工作研究方法 4. 第三章 ------------------------------------------------------------2 電路實做 3-1 L293 馬達控制 IC 3-2 無線電收發模組電路簡介 3-3 超音波避障 3-3-1 何謂超音波 3-3-2 超音波的特長與應用 3-3-3 超音波接收電路 5. 第四章 -------------------------------------------------------------15 結論與改進 6. 第五章 ------------------------------------------------------------16 89S51 程式規劃系統方塊圖主程式流程圖 7. 附錄一參考文獻 ----------------------------------------------------19 8. 附錄二零件表 ------------------------------------------------------19 9. 附錄三 8051 程式碼 ( 發射板 )-----------------------------------------21 10. 8051 程式碼 ( 車子 )------------------------------------------------ 24 11. VB 程式碼 -------------------------------------------------------- 29 12. 附錄四電路圖 ----------------------------------------------------32 13. 附錄五 MCS-51 簡介 --------------------------------------------------36 14. MCS-51 簡介 1-2 MCS-51 的接腳 -----------------------------------------------37 1-3 8051 的記憶體結構 -------------------------------------------39 1-3-1 程式記憶體 ------------------------------------------------39 1-3-2 外部資料記憶體 ---------------------------------------------40 1-3-3 內部資料記憶體 ---------------------------------------------41 1-4 MCS-51 的中斷結構 ---------------------------------------------56 1-4-1 中斷致能與優先權結構 ---------------------------------------56 0

摘要 遙控車是一項整合電子 電機 機械等方面知識的機電整合車, 一台完整的 遙控車包含電源電路 感測電路 馬達電路 CPU 電路 等四大電路部分, 配合 電池 機身 車輪等硬體以及作為邏輯判斷的程式流程軟體, 因此遙控車的製作可說 是涉及了多方面的知識領域 其中自走的核心部分 CPU, 我們選擇了較為熟悉且常見的 8051 單晶片, 不僅 僅是因為在本系上大一下學期的課堂中曾學習其理論及實驗應用, 更因為它的硬體架 構及周邊設備完整 指令集功能強大 程式可複寫功能等種種優勢, 正符合我們的需 求, 而利用程式的模組化, 副程式的應用, 使程式如堆積木般的組合起來, 更容易閱 讀及進行修改 本專題研究將遙控車的組成分為軟體應用及硬體電路 相關電子元件及裝配部分 與程式流程部分進行研究討論, 每一個部分對於遙控車的運作都是相當重要的, 缺 一不可 第一章 前言 在這次的專題計畫裡, 我們準備運用 89S51 這個功能強大的 IC 來執行控制直流 馬達 並使用超音波偵測功能已達到閃避障礙物的功能 整個計畫中用到無線遙控原 理以及微處理器原理, 讓我們用這次的專題來實做這次的實驗 研究目地 利用單晶片 89S51 馬達等元件, 自行製作並組裝一台具有自走功能之遙控車結合超音波偵測障礙物的功能 ; 了解感測元件與馬達電路如何整合, 進一步研究其改進方向, 以及未來應用於生活中的可能性 1

第二章準備工作 1. 閱讀 89S51 相關書籍, 了解 89S51 的基礎知識及使用方法 2. 了解如何運用組合語言模擬程式執行 3. 了解無線遙控原理及應用 4. 直流馬達驅動控制 5. 了解超音波感測原理並實作 研究方法 1. 先利用麵包板 電源供應器 電表, 測試馬達電路是否能運作 2. 熟悉 89S51 的使用方法 組合語言使用方法, 熟悉燒錄方法, 3. 撰寫程式 4. 將程式燒入 89S51, 測試是否能依據我們的設計正常運作 5. 將電路移植到一般的電路板上, 並測試是否正確 6. 連接馬達與電路板, 並修改原本遙控車的電池裝置 7. 做最後的校正及外部包裝結果 第三章電路實作 3-1 L293 馬達控制 IC: 由於 8051 腳位的電流不夠大讓馬達驅動, 因為我們不能將馬達直接接到 8051 的腳, 雖然 8051 的腳位有 5V 的電壓差, 但是電流太小了, 因此我們將 8051 的腳位當作控制腳, 控制一顆馬達驅動 IC, 提供馬達所需的電壓跟電流, 控制腳為 P1.0~P1.3 C11 104 C12 + C13 + 10uF MG1 10uF +5V P1.0 2 P1.1 7 P1.2 10 P1.3 15 BT2 1 9 16 8 U7 1A 2A 3A 4A 1/2EN 3/4EN VCC1 VCC2 L293 1Y 2Y 3Y 4Y GND GND GND GND 3 6 11 14 4 5 12 13 C16 10uF + 1 2 3V MG2 1 2 3V C19 104 C17 10uF + 4.5V 2

控制車子前進 右轉 左轉 後退 停止的方法如下表所示 執行 < 前進 > 對策, 即左前進, 右前進 左輪前進 CLR P1.0 CLR P1.2 右輪前進 SETB P1.1 SETB P1.3 執行 < 右轉 > 對策, 即左前進, 右停止 左輪前進 CLR P1.0 CLR P1.2 右輪停止 SETB P1.1 CLR P1.3 執行 < 左轉 > 對策, 即左停止, 右前進 左輪停止 CLR P1.0 CLR P1.2 右輪前進 CLR P1.1 SETB P1.3 執行 < 後退 > 對策, 即左後退, 右後退 左輪後退 SETB P1.0 SETB P1.2 右輪後退 CLR P1.1 CLR P1.3 執行 < 停止 > 對策, 即左停止, 右停止 左輪停止 CLR P1.0 CLR P1.2 右輪停止 CLR P1.1 CLR P1.3 3

3-2 無線電收發模組電路簡介 無線收發模組 2 由發射器和接收器所組成, 系統特性如下 : (1) 具備 UHF 發射接收電路, 可做無線電傳輸及控制等相關應用 (2) 搭配編 解碼 IC, 不易受外界雜訊干擾 (3) 可搭配 DIP 開關裝置來調整密碼設定 (4) 頻率範圍從 300MHz 到 434MHz 圖 1 與圖 2 是無線電收發模組的外觀與相關接腳說明 此產品是市面上常見的無線傳輸模組, 製造廠商眾多, 型號與規格不盡相同, 詳細說明請參閱製造廠商所提供的產品資料手冊 發射模組型號 : CDT01 發射距離 :200-300 米工作電壓 :3-12V 的外型尺寸 : 22 * 21 毫米工作電流 :10 - 一十五毫安工作方式 : 調幅傳輸速率 : 4KB / S 模式發射功率 : 10mW 外接天線 : 二五厘米普通多芯或單芯線引腳排列從左 右 : (DATA;VCC;GND) 圖 1. 發射模組外觀 接收模組型號 : CDR03A 接收靈敏度 : - 95dbm 工作電壓 : 5V 外型尺寸 : 32 14 毫米接收頻率 : 315433 兆赫外接天線 :18-25 厘米傳輸速率 : 4KB / S 模式工作溫度 : -20 -+ 70 工作電流 :0.5-0 0.8 毫安引腳排列 : 從左至右 vcc; 輸出 ;GND; 圖 2. 接收模組外觀 4

無線收發模組必須搭配編 解碼 IC, 將所設定的密碼與資料一同傳送與接收, 以避免外部雜訊干擾, 常用 IC 為 HT-12 3, 有一系列編 解碼 IC, 其中 HT-12D(Decoder) 與 HT-12E(Encoder) 的主要特性如下 : (1) 應用 CMOS 技術, 具有省電 防雜訊等優點 (2) 工作電壓在 2V~12V (3) 內含振盪電路, 只需外加一只電阻即可提供工作頻率 (OSC1 與 OSC2), 一般而言, 根據產品資料手冊建議, 解碼 IC 的工作頻率約為編碼 IC 的 50 倍, 則編碼 IC 連接 1MΩ, 解碼 IC 連接 33KΩ 即可 (4) HT-12E 編碼 IC 有 28=256 組密碼設定, 可傳送 4 個位元資料 (5) HT-12D 解碼 IC 具有 4 位元資料輸出,8 位元密碼設定, 輸出資料具有拴鎖功能 HT-12E 編碼 IC 的接腳說明如圖 3,Pin1~Pin8(A0~A7) 作為 8 位元 =256 組密碼設定, Pin10~Pin13(D0~D3) 作為 4 位元資料輸入, 也就是說設定一組密碼後, 編碼 IC 會將此密碼與資料一同傳送出去, 當接收端所設定的密碼相同時, 讀取 4 位元資料 編碼 IC 的 Pin17(DATA OUT) 是資料發送端, 連接圖 1 發射模組的 Pin6(CODE INPUT);Pin15(OSC2) 與 Pin16(OSC1) 連接電阻產生工作頻率 ;Pin14(TE) 為編碼致能接腳, 當 TE 接腳為低電位 0 時, 將 A0~A7 所設定的密碼與 D0~D3 的 4 位元資料進行編碼組合, 由 DATA OUT 端以串列資料傳送出去, 假如 TE 接腳為高電位 1 時則停止編碼與傳送, 此 TE 接腳狀態可由單晶片予以控制, 在 無線電收發模組電路製作介紹 一文中, 將 TE 接腳直接接地, 使其低電位, 讓編碼 IC 一直進行編碼 傳送動作 U7 1 2 3 4 5 6 7 8 9 A0 A1 A2 A3 A4 A5 A6 A7 GND VCC DATA OUT OSC1 OSC2 TE D3 D2 D1 D0 18 17 16 15 14 13 12 11 10 HT12E 圖 3. HT-12E 編碼 IC 接腳圖 HT-12D 解碼 IC 的接腳說明如圖 4, 同樣原理,Pin1~Pin8(A0~A7) 作為 8 位元 =256 組密碼設定,Pin10~Pin13(D0~D3) 作為 4 位元資料輸出, 當發射端與接收端密碼相同時, 編碼電路所傳送的 4 位元資料會顯示在解碼電路 4 位元資料輸出接腳, 解碼 IC 的 Pin14(DATA IN) 為資料接收端, 連接圖 2 接收模組的 Pin2(DIGITAL OUTPUT); Pin15(OSC2) 與 Pin16(OSC1) 連接電阻產生工作頻率 ;Pin17(VT) 為解碼致能接腳, 當接收電路接收到串列資料時, 解碼 IC 會連續核對密碼四次, 當密碼相同時, 使得 VT 解碼致能接腳呈現高電位 1, 並將 4 位元資料送至 Pin10~Pin13(D0~D3), 密碼錯誤時,VT 解碼致能接腳呈現低電位 0, 保留原始資料, 也就是拴鎖功能, 此 VT 接腳狀態變化可由單晶片讀取, 由程式判斷何時讀取 4 位元資料 5

1 2 3 VCC DATA OUT GND U2 1 2 3 4 5 6 7 8 9 A0 A1 A2 A3 A4 A5 A6 A7 GND VCC VT OSC1 OSC2 DATA IN D3 D2 D1 D0 18 17 16 15 14 13 12 11 10 HT12D 圖 4. HT-12D 解碼 IC 接腳圖單晶片搭配無線電收發模組電路以單晶片搭配無線電收發模組電路之基本作動原理, 在發射端, 以四顆按鍵將 8 位元密碼與 4 位元資料進行編碼組合後一起以串列方式傳送出去, 在接收端, 單晶片判斷解碼讀取後 4 位元資料, 低電位時表示密碼錯誤, 並將前一次 4 位元資料拴鎖住, 等待下一次動作 在 無線電收發模組電路製作介紹 一文中, 無線電收發模組電路並無搭配單晶片, 所以只能四組 ON/OFF 訊號, 所能控制的開關有限, 但搭配單晶片與程式判斷便能有 24=16 組訊號, 使得可應用的範圍增加 接收電路 加 24 公分單蕊線當天線 接收 J1 +5V 1 2 3 4 5 6 7 8 9 U6 A0 A1 A2 A3 A4 A5 A6 A7 GND HT12D VCC VT OSC1 OSC2 DATA IN D3 D2 D1 D0 18 17 16 15 14 13 12 11 10 33K R15 P3.0 P3.1 左 前 +5V D8 1N4148 D7 P3.2 右 LED R16 1K P3.4 Q2 R17 P3.3 後 C1815 1K C18 1uF/25V + 6

發射電路 +5V U10 J2 1 2 3 4 5 6 7 8 9 A0 A1 A2 A3 A4 A5 A6 A7 GND VCC DATA OUT OSC1 OSC2 TE D3 D2 D1 D0 18 17 16 15 14 13 12 11 10 1M P2.0 P2.1 P2.2 P2.3 P2.4 1 2 3 DATA VCC GND 發射 HT12E 將無線發射 接收訊號整理成下表 : 名稱車往前車往左車往右車往後 VB 程式 透過 RS232 傳 U 字到 發射板上 透過 RS232 傳 L 字到 發射板上 透過 RS232 傳 R 字到 發射板上 透過 RS232 傳 D 字到 發射板上 無線發射板無線發射板 1110=>P2.3~P2.0 1011=>P2.3~P2.0 0111=>P2.3~P2.0 1101=>P2.3~P2.0 P3.3~P3.0=>1110 P3.3~P3.0=>1011 P3.3~P3.0=>0111 P3.3~P3.0=>1101 名稱車切換成自動車切換成手動車停子 VB 程式 透過 RS232 傳 A 字到 發射板上 透過 RS232 傳 H 字到 發射板上 透過 RS232 傳 S 字到 發射板上 無線發 射板 1100=>P2.3~P2.0 1001=>P2.3~P2.0 0000=>P2.3~P2.0 無線發 射板 P3.3~P3.0=>1100 P3.3~P3.0=>1001 P3.3~P3.0=>0000 7

3-3 超音波避障 3-3-1 何謂超音波所謂音波, 乃指透過具有彈性與慣性的介質, 例如空氣, 當空氣本身一旦產生膨脹或壓縮時, 則透過其分子的運動而有波動的傳播產生 因此, 音波無法在真空中進行傳播 人類聽覺能察覺的波動, 稱之為聲音 此時的音波, 即稱之為可聽波 雖然對超音波所下的定義是 " 非人類以耳聞為目的之聲音 ", 但是一般把它視作 " 頻率較耳朵聽得見的成音為高之音波 " 通常, 吾人所稱之聲音乃是空氣的疏密波 ( 即由空氣的分子密集而呈壓力高的部分, 和相反地呈疏鬆而壓力低的部分交替出現所振動的音波 ), 因個人而有所差別, 然人類的耳朵所能聽見的最大限度不出 20~20,000Hz 左右之範圍 疏密波本身, 不論在空氣中乃至液體中和固體中都可以發生和傳播 3-3-2 超音波的特長與應用大家都知道波的傳播速度是頻率與波長之乘積 電磁波的速度是 3x10E8m/s, 但空中的音波傳播速度邦非常緩慢, 約為 340m/s, 所以波長短 此項事實, 就成為超音波應用之中的一大特徵 而且, 介質並不限於氣體還有液體和固體, 同時也會表現出隨此介質而產生之特徵 表 1 中表示有各種物質的音波傳播速度 各該物質的密度和音速之積叫做固有音響阻抗 而此數值相形之下, 顯然液體和固體方面要比氣體大得多 超音波, 如果在行進中碰到不同性質的物質就會引起反射 假設超音波所通過最初物質的固有音響阻抗為 ρlc1, 所碰到的物質其固有音響阻抗以 ρlc2 表示, 則原來的振幅與反射波的振幅之比 Ar 為 : Amplitude-out ρlcl-ρ2c2 Ar = = Amplitude-in ρlcl+ρ2c2 碰到前的原有能量 E1 和反射的能量 E2 之比, 也就是反射率 K, 則為 : E2 ρ1c1-ρ2c2 2 K = = [ ] E2 ρ1c1+ρ2c2 再者, 氣體 液體裏邊只是縱波, 固體則為橫波, 而且也有表面波存在, 相同的物質音速也有所不同 不過, 除非預先聲明, 否則一般所說之音速皆指縱波之音速而言 8

根據以上所述, 超音波的特長可歸納如下 : (a) 由於波長短所以指向性強, 能量集中 也就是說, 能夠增強方向之分解能 (b) 振動數高, 可得巨大的加速度 (c) 大部分的音響功率碰到音響阻抗不同的物質境界面將被反射 利用此特性可藉以做物質的探知和距離的測試 (d) 如果在媒體中或其界面有密度差存在, 其境界將會發生界面擾亂作用, 並引起乳化, 攪拌混合等之作用 (e) 若適當選擇頻率, 則可使其引起和乳化 ( 分散 ) 相反的凝縮作用 (f) 把超音波放射於液體中引起孔蝕現象 (Cavitation), 並藉其局部的巨大壓力變化可發生強烈的破壞作用 (f) 利用孔蝕現象形成的排氣氣體之活性化, 可以引起氧化作用及其他化學作用 (h) 利用媒體中的音波吸收, 可在音場內產生熱 9

超音波元件介紹超音波微音器之原理 構造與諸特性超音波在空中方面的應用, 視為不同於電波的應用領域, 並有廣闊的利用範圍 此空中超音波利用之樞要所在, 就是空中超音波送受波器 (MIC) 空中超音波送受波器所使用之頻率, 一般皆為 20~40KHz 頻率低的話超音波的到達距離遠, 但空中的雜音容易增多, 未必可喜 反之, 頻率升高則衰減增大, 超音波的到達距雖縮短 上面所說的 20~45KHz, 不妨把它當作是找到其妥協點的妥當頻率 再者, 可使用之距離為 lom 左右以內, 一般則以 2-5m 居多 能夠當作空中超音波送受波器利用者, 有高音用揚聲器, 圓筒形瓷質振動子 雙形態瓷質振動子等各式各樣的元件, 不過此處擬就使用高感度價格又低廉的雙形態瓷質振動子和單一形態振動子的, 超音波送受波器之原理與構造加以說明 原理壓電陶瓷體供加以電壓的話, 將會有順應電壓和頻率的機械性的歪變產生並起振動 反之, 另以歪變壓力施加於壓電陶瓷體則有電荷產生 應用此原理, 如果把壓電陶瓷體兩片, 分極方向倒反相貼之雙形態振動子供加於電壓, 則一方將伸展而另一方則收縮 而且, 極性反過來的話伸展收縮也同樣反轉 還有, 關於壓電陶瓷體貼在金屬板而構成之單一形態振動子, 同樣藉電壓之供加使陶瓷體伸縮而產生屈曲振動, 亦可利用作共振頻率為 20~45KHz 之超音波送受波器用振動子 構造 (a) 標準型 ( 寬頻帶型 ): 這是彈性接著劑把先前所說明的雙形態振動子之節部固定在基部 而且, 為改善感度起見, 另於雙形態振動子之上接合以樹脂的共振喇叭體 要求寬頻帶的場合, 構造在基本上雖無二致, 但是另外在基部與共振喇叭體上設法以期擴展頻帶 構造表示於圖 3-1(a) (b) 防滴型 : 為供屋外或易沾積灰塵之處使用起見, 特以陶瓷振動子接合在金屬盒內之構造來發生屈曲振動 另外, 又以充填樹脂的密閉構造加工完成 構造表示於圖 3-1(b) 圖 3-1 構造 10

特性之測試 : 圖 3-2 感度特性之測試 (a) 受波感度 : 受波感度, 是以 db 表示 lμbar 之音壓送進時的受話器出口端輸出電壓 但是, 若以 0dB=lV/μbar, 待測試料之輸出電壓為 V2[V], 標準微音器在其待測試料位置所測得之音壓以 P1(μbar) 表示, 則試料的受波感度 Mv(dB/V/μbar) 如下式 測試是按照圖 3-2 的形態實施 Mv = 20 log (b) 送波感度 : 用以表示在送波器的前方 lm 之位置, 對一定驅動電壓 (lv) 可獲得幾 μbar 的音壓, 係以 1μbar/V=0dB 表示 按圖 3-2(b), 設送受波器間之距離為 t, 則待測試料的送波感度 Sv(dB/μbar/V), 可依下式求得 但是,Mvs 為標準微音器的受波感度 (db/v/μubar) Sv = 20 log + 20 log - Mvs (c) 頻帶寬 (Bw): 圖 3-3 上, 從峰值降低 3dB 的兩點間之頻率差, 就叫做頻帶寬 Bw Bw = f2-f1 再者, 感度在頻率特性上的尖銳度 Q 可用下式表之 Q = 此值隨負荷電阻而變 圖 3-3 頻帶寬 11

(d) 指向角 : 送波器前面的音場分布或者受波器前面的感度分布, 一般皆以送受波器的中心軸 ( 正面 ) 上的感度衰降 6dB 位置的角度 ( 圖 3-4 的 Q ) 叫做指向角 指向角乃以送受波器的超音波放射面之面積和超音波的波長 λ 相形之下愈大則愈尖銳 圖 3-4 是指向角特性的一個例子, 這是由圖 3-2 的方塊圖所示之測試方法, 利用轉盤 (Turntable) 使試料旋轉, 記錄其輸出變化所得之結果 送受波器之特長茲將感度, 頻帶寬, 指向性等之言習特性和溫度特性 耐濕 耐振特性等, 分別表示於表 2 及圖 3-5 至圖 3-8 內 根據這些試撿結果, 可將超音波送受波器的特長歸納如下 圖 3-4 指向角 (a) 高感度, 形體小重量輕 (b) 耐濕, 溫度特性優異 ( c )耐振動, 耐衝擊性優異 表 2 超音波送收波器之諸特性 12

圖 3-5 溫度特性圖 3-6 負荷特性圖 3-7 指向性 圖 3-8 頻率特性 13

1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 超音波接收電路 CX2010 超音波接收電路我們採用集成電路 CX20106 CX20106 原本為紅外線接收專用集成電路, 在此利用 CX20106 作為超音波感測器接收信號的放大檢波裝置, 亦取得良好的效果 CX20106 中前置放大器接收到超音波的反射信號後, 對信號進行放大, 電壓增益約 80 db 然後將信號送到限幅放大器, 使其變為矩形脈衝, 再由濾波器進行頻率選擇, 濾除干擾信號, 由濾波器濾掉載頻檢出指令信號, 再經過整形後, 由 7 腳輸出低電位 我們將 7 腳接到 8051 P3.7 腳上 U20 超音波接收 LS2 CX20106 +5V R12 1K R13 10K C22 1uF/25V + C20 3.3uF + C21 330PF R14 200K D3 LED P3.7 CX20106 內部結構圖 超音波發射電路 +5V LS1 U18A 2 74LS04 U18B 4 1 3 6 U18C 5 U19 16 15 VCC 14 /TXOUT 13 TEST 12 CODE D2 11 K3 10 K2 1N4148 9 K1 K6 PT2248 VSS XT /XT K1 K2 K3 K4 K5 1 2 3 4 5 6 7 8 C18 Y3 C19 120PF 455K 120PF 超音波發射 74LS04 74LS04 14

PT2248 為 40KHZ 的編碼 IC, 會持續發出 40KHZ 的超音波方波編碼訊號 74HC04 是一個高速 CMOS 六反相器, 具有放大作用, 具有對稱的傳輸延遲和轉換時間, 而相對於 LSTTL 邏輯 IC, 它的功耗減少很多 對於 HC 類型, 其工作電壓為 2~6 V, 它具有高抗擾度, 可以兼容直接輸入 LSTTL 邏輯信號和 CMOS 邏輯輸入等特點 本專題我們將 40 khz 方波信號分成兩路, 分別由 74HC04 經兩次和一次反向放大 總結以上當接收端電路收到發射端的頻率並用示波器量測到 40KHz 的時後, 表示電路已正常工作在我們要的理想狀況下, 但是, 我們要讓 89S51 知道, 當有偵測到物體時, 必須在 89S51 上有電位的變化 (P2.0~P2.2), 如此一來,89S51 才有能力判別我們想要判別的工作, 因此, 我們在接收端電路的輸出端再接上一個頻率偵測的電路, 當頻率偵測電路偵測到某一固定的頻率時, 我們在此是 40KHz, 便可以把此頻率轉成一高低電位的變化, 也就是說, 感測到物體接近時,CX20106 第 7 腳就會由高電位變成低電位, LED 燈由暗變亮, 如此的電壓變化也可以活用在 89S51 上, 連接到 89S51 的 P3.7 上如上圖, 再利用 89C51 的 JNB 指令, 此指令是跳躍指令, 例如程式片段為 JB P3.7,LOOP1 就是當 P3.7 為 0 低電位時, 程式往下, 若不為 0 高電位時, 則往 LOOP1 程式 第四章結論與改進 本專題運用無線傳輸的發射器, 硬體作業車上的接收器用 PC 指令控制自走車, 並利用超音波的偵測功能, 使得車輛順利閃避障礙物, 經過多次的討論以及測試, 進而得到以下結論 : (1) 透過本專題的結果來說, 遠端操控自走車動作在現實生活中的可行性相當高, 基 本的動作已可以實行, 加上無線傳輸的功能, 使得作業車不需拖著長長的線路, 也不 受到距離上的限制, 未來只要將功能加以延伸, 對人們的生活而言, 將是一大便利 (2) 本專題硬體方面由於透過 8051 單晶片, 將訊號由無線方式傳輸, 使用者可以運用極佳的操作性, 進而提高此操控系統之便利性 本專題現在, 雖然可以使用遠端操控車輛, 與其本身也有自走的功能, 但遠端遙控部分仍有接收困難 ; 在未來希望能透過無線網路來搖控自走車, 另外也可以改進車身設計, 如輕量化以及外接網路攝影機, 方便使用者透過畫面了解自走車所在的環境 15

第五章 89S51 程式規劃 系統方塊圖 使用者 編碼 8051 RS232 電腦 無線發射模組 電池供電 無線接收模組 解碼 8051 超音波障礙感測 直流馬達控制行走 轉向 16

主程式流程圖 開始 B 主程式迴圈 手 / 自動? 手動 自動 A 車前進 是 P3.3~P3.0 =1110? 否 車右轉 是 P3.3~P3.0 =0111? 否 車左轉 是 P3.3~P3.0 =1011? 否 車後退 是 P3.3~P3.0 =1101? 否 車停止 是 P3.3~P3.0 =0000? 否 切換成自動 是 P3.3~P3.0 =1100? 17

A 左 右感測 否 左感測 否 左 前感測 否 右感測 否 右 前感測 否 前感測 否 左 右 前感測 否 是是是是是是是 後退 右轉 右轉 左轉 左轉 右後退 後退 P3.3~P3.0 =1001? 感測否 是 切換成手動 B A 18

附錄一參考文獻 [1] 黃宏彥 余文俊 楊國輝編著, 感測器原理與應用電路實習, 高立圖書有限公司, 1999 [2] 蔡朝陽, 電工實習 ( 四 ), 全華科技圖書股份有限公司, 中華民國八十三年五月 [3] 鄧錦城編著,8051 單晶片實作寶典, 益眾資訊有限公司,2000 附錄二零件表 項目數量編號 規格 1 1 BT1 9V 電池 2 1 BT2 4.5V 電池 3 6 C1,C11,C15,C19,C20,C25 104 陶瓷電容 4 4 C2,C3,C21,C22 30PF 陶瓷電容 5 2 C6,C4 103 陶瓷電容 6 1 C5 102 陶瓷電容 7 2 C23,C7 10uF/25V 電解電容 8 3 C8,C9,C10 100UF 電解電容 9 4 C12,C13,C16,C17 10uF 電解電容 10 2 C24,C14 220uF/16V 電解電容 11 1 C18 1uF/25V 電解電容 12 4 C26,C27,C28,C29 22uF 電解電容 13 5 D3,D5,D6,D7,D9 LED 14 1 D8 1N4148 二極體 15 1 J1 接收 無線模組 16 1 J2 發射 無線模組 17 2 MG1,MG2 3V 小馬達 18 1 P1 CONNECTOR DB9 RS232 插座 19 1 Q1 A1015 電晶體 PNP 20 1 Q2 C1815 電晶體 NPN 21 3 R1,R6,R7 100 電阻 22 1 R2 50K 電阻 23 1 R3 4.7K 電阻 24 3 R4,R9,R20 10K 電阻 25 7 R5,R8,R10,R11,R12,R17, 1K 電阻 26 R18 27 3 R13,R14,R15 47 電阻 28 1 R16 33K 電阻 19

29 1 R19 1M 電阻 30 1 SW1 電源開關 31 1 SW2 9V 變壓器插座 32 1 U1 89S51 33 1 U2 555 34 3 U3,U4,U5 40T/R 超音波感測器 35 1 U6 HT12D 36 1 U7 L293 37 2 U11,U8 78M05 38 1 U9 89C51 39 1 U10 HT12E 40 1 U12 MAX232 41 1 Y1 12MHZ 振盪器 42 1 Y2 11.0592MHZ 振盪器 20

附錄三 8051 程式碼 ( 發射板 ) ORG 00H AJMP START ORG 0023H ;RS232 中斷副程式 PUSH A JNB RI,NON CLR RI RECEV: MOV A,SBUF ; 將接收到的資料存到 30H 裡 MOV 30H,A NON: CLR TI OKBACK: POP A RETI START: SETB P2.4 ; 發射控制腳關 MOV TMOD,#00100000B ;RS232 初值設定 MOV TH1,#253 ; 鮑率規格為 9600 MOV TL1,#253 SETB TR1 ;RS232 初值設定 MOV SCON,#01110000B ;RS232 初值設定 CLR RI ;RS232 初值設定 CLR TI ;RS232 初值設定 SETB ES ;RS232 初值設定 SETB EA ;RS232 初值設定 MOV 30H,#0 ;30H 初值設為 0 LOOP: MOV A,30H CJNE A,#'U',LP2 ; 電腦傳來的資料為 U 則往下, 否則跳 LP2 CLR P2.0 ; 發射無線前進訊號 SETB P2.1 SETB P2.2 SETB P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 21

CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP LP2: CJNE A,#'D',LP3 ; 電腦傳來的資料為 D 則往下, 否則跳 LP3 SETB P2.0 ; 發射無線後退訊號 CLR P2.1 SETB P2.2 SETB P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP LP3: CJNE A,#'L',LP4 ; 電腦傳來的資料為 L 則往下, 否則跳 LP4 SETB P2.0 ; 發射無線左轉訊號 SETB P2.1 CLR P2.2 SETB P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP LP4: CJNE A,#'R',LP5 ; 電腦傳來的資料為 R 則往下, 否則跳 LP5 SETB P2.0 ; 發射無線右轉訊號 SETB P2.1 SETB P2.2 CLR P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 22

CALL DEL ; 延時 JMP LOOP LP5: CJNE A,#'S',LP6 ; 電腦傳來的資料為 S 則往下, 否則跳 LP6 CLR P2.0 ; 發射無線停止訊號 CLR P2.1 CLR P2.2 CLR P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP LP6: CJNE A,#'H',LP7 ; 電腦傳來的資料為 H 則往下, 否則跳 LP7 SETB P2.0 ; 發射無線手動訊號 CLR P2.1 CLR P2.2 SETB P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP LP7: CJNE A,#'A',LP8 ; 電腦傳來的資料為 A 則往下, 否則跳 LP8 CLR P2.0 ; 發射無線自動訊號 CLR P2.1 SETB P2.2 SETB P2.3 CALL DEL ; 延時 CLR P2.4 ; 發射控制腳開 CALL DEL ; 延時 SETB P2.4 ; 發射控制腳關 CALL DEL ; 延時 JMP LOOP 23

LP8: JMP LOOP DEL: MOV R5,#1 DL46: MOV R6,#250 DL47: MOV R7,#200 DL48: DJNZ R7,DL48 DJNZ R6,DL47 DJNZ R5,DL46 RET END 8051 程式碼 ( 車子 ) ORG 0H ; 宣告以下程式由位址 0000H 儲存 JMP MAIN MAIN: MOV P1,#11111111B ; 初始化, 令左右馬達正轉, 停止 MOV P2,#11111111B ; 初始化, 超音波訊號腳 MOV P3,#11111111B CLR P3.7 ; 手 / 自動 LED 燈暗 ;---------------------------------------- START: JNB P3.7,AUTO ;LED 燈若為亮則跳到 AUTO, 若為暗程式往下 JMP HAND ; 跳到 HAND AUTO: MOV A,P2 ; 取出光感測器信號 ANL A,#7 ; 取出 P2 的最低三位元左 前 右 CJNE A,#2,MOTO1 ; 與 010( 左 右感測 ) 比較, 若不相同則往下一控制模式比較 SETB P1.0 CLR P1.1 SETB P1.2 CLR P1.3 ; 執行 < 後退 > 對策, 即左後退, 右後退 CALL DELAY JMP AUTOB MOTO1: CJNE A,#3,MOTO2 ; 與 011( 左感測 ) 比較, 檢查是否左方有障礙物 CLR P1.0 24

SETB P1.1 SETB P1.2 CLR P1.3 ; 執行右轉對策, 即左前進, 右後退 CALL DELAY JMP AUTOB MOTO2: CJNE A,#1,MOTO3 ; 與 001( 左 前感測 ) 比較, 檢查是否左 前方有障礙物 CLR P1.0 SETB P1.1 SETB P1.2 CLR P1.3 ; 執行右轉對策, 即左前進, 右後退 CALL DELAY JMP AUTOB MOTO3: CJNE A,#6,MOTO4 ; 與 110( 右感測 ) 比較, 檢查是否右方有障礙物 SETB P1.0 CLR P1.1 CLR P1.2 SETB P1.3 ; 執行左轉對策, 即左後退, 右前進 CALL DELAY JMP AUTOB MOTO4: CJNE A,#4,MOTO5 ; 與 100( 右 前感測 ) 比較, 檢查是否右 前方有障礙物 SETB P1.0 CLR P1.1 CLR P1.2 SETB P1.3 ; 執行左轉對策, 即左後退, 右前進 CALL DELAY JMP AUTOB MOTO5: CJNE A,#7,MOTO6 ; 與 111 比較, 皆無障礙物 CLR P1.0 SETB P1.1 CLR P1.2 SETB P1.3 ; 執行 < 前進 > 對策, 即左前進, 右前進 JMP AUTOB MOTO6: CJNE A,#5,MOTO7 ; 與 101 比較, 檢查前方 SETB P1.0 CLR P1.1 CLR P1.2 CLR P1.3 ; 執行 < 右後退 > 對策, 即左後退, 右停止 CALL DELAY 25

CALL DELAY JMP AUTOB MOTO7: CJNE A,#0,AUTOB ; 與 000 比較, 檢查左 前 右方 SETB P1.0 CLR P1.1 SETB P1.2 CLR P1.3 ; 執行 < 後退 > 對策, 即左後退, 右後退 CALL DELAY CALL DELAY CALL DELAY JMP AUTOB AUTOB: MOV A,P3 ; 取出 P3 無線訊號 ANL A,#00001111B ; 低四位元有用 CJNE A,#00001001B,AUT2 ; 判斷訊號為何? 1001 為切換至手動模式訊號 SETB P3.7 SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 ; 執行 < 停止 > 對策, 即左停止, 右停止 JMP START AUT2: JMP START HAND: MOV A,P3 ; 取出 P3 無線訊號 ANL A,#00001111B ; 低四位元有用 CJNE A,#00001110B,MOTOR1 ; 判斷訊號為何? 1110 為前進訊號 CLR P1.0 SETB P1.1 CLR P1.2 SETB P1.3 ; 執行 < 前進 > 對策, 即左前進, 右前進 MOTOR1: JMP START 26

CJNE A,#00001101B,MOTOR2 ; 判斷訊號為何? 1101 為後退訊號 SETB P1.0 CLR P1.1 SETB P1.2 CLR P1.3 ; 執行 < 後退 > 對策, 即左後退, 右後退 JMP START MOTOR2: CJNE A,#00001011B,MOTOR3 ; 判斷訊號為何? 1011 為左轉訊號 SETB P1.0 CLR P1.1 CLR P1.2 SETB P1.3 ; 執行 < 左轉 > 對策, 即左停止, 右前進 JMP START MOTOR3: CJNE A,#00000111B,MOTOR4 ; 判斷訊號為何? 0111 為右轉訊號 CLR P1.0 SETB P1.1 SETB P1.2 CLR P1.3 ; 執行 < 右轉 > 對策, 即左前進, 右停止 JMP START MOTOR4: CJNE A,#00000000B,MOTOR5 ; 判斷訊號為何? 0000 為停止訊號 SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 ; 執行 < 停止 > 對策, 即左停止, 右停止 JMP START MOTOR5: CJNE A,#00001100B,BACK ; 判斷訊號為何? 1100 為切換至自動模式訊號 CLR P3.7 ; 手 / 自動 LED 燈亮 JMP START BACK: SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 ; 執行 < 停止 > 對策, 即左停止, 右停止 27

JMP START DELAY: MOV R5,#5 DL0: MOV R6,#250 DL1: MOV R7,#200 DL2: DJNZ R7,DL2 DJNZ R6,DL1 DJNZ R5,DL0 RET END 28

VB 程式碼 Option Explicit Dim NUM Private Sub Command2_Click() Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End Sub Private Sub Command4_Click() Comm1.Output = "A" ' 按下自動鍵, 傳 A 到 8051 End Sub Private Sub Command6_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "U" ' 按下車子上鍵, 傳 U 到 8051 End Sub Private Sub Command6_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "S" ' 放開按鍵後, 傳 S 到 8051 End Sub Private Sub Command3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "D" ' 按下車子下鍵, 傳 D 到 8051 End Sub 29

Private Sub Command3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "S" ' 放開按鍵後, 傳 S 到 8051 End Sub Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "L" ' 按下車子左鍵, 傳 L 到 8051 End Sub Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "S" ' 放開按鍵後, 傳 S 到 8051 End Sub Private Sub Command5_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "R" ' 按下車子右鍵, 傳 R 到 8051 End Sub Private Sub Command5_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Comm1.Output = "S" ' 放開按鍵後, 傳 S 到 8051 End Sub '''''''''''''''''''''''''''''''''''''' ' 表單的載入事件 ' 開啟串列通訊埠, 參數亦可在開啟之前先行指定, ' 指定完後, 再開啟該通訊埠 '''''''''''''''''''''''''''''''''''''' Private Sub Form_Load() Comm1.CommPort = 1 Comm1.PortOpen = True End Sub 'RS232 COM 埠編號設定 'RS232 COM 埠開啟 Private Sub Form_Unload(Cancel As Integer) Unload Form1 Unload Me ' 釋放 Form1 自記憶體 ' 釋放 Form2 自記憶體 End Sub Private Sub Form_KeyDown(Keycode As Integer, Shift As Integer) If Keycode = 87 Then 'W 上 Comm1.Output = "U" ' 按下車子上鍵, 傳 U 到 8051 End If If Keycode = 83 Then 'S 下 Comm1.Output = "D" ' 按下車子下鍵, 傳 D 到 8051 End If If Keycode = 68 Then 'D 右 Comm1.Output = "L" ' 按下車子右鍵, 傳 R 到 8051 End If If Keycode = 65 Then 'A 左 Comm1.Output = "R" ' 按下車子左鍵, 傳 L 到 8051 End If 30

If Keycode = 79 Then 'O 手動 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If If Keycode = 80 Then 'P 自動 Comm1.Output = "A" ' 按下自動鍵, 傳 A 到 8051 End If End Sub Private Sub Form_KeyUp(Keycode As Integer, Shift As Integer) If Keycode = 87 Then 'W 上 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If If Keycode = 83 Then 'S 下 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If If Keycode = 68 Then 'D 右 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If If Keycode = 65 Then 'A 左 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If If Keycode = 79 Then 'O 手動 Comm1.Output = "H" ' 按下手動鍵, 傳 H 到 8051 End If End Sub 31

32 附錄四電路圖 ( 發射板 ) 有電路皆以標號相連接 8051 電路 P1.1 C22 30PF P0.5 P0.4 P2.3 P3.3 P2.6 P0.1 +5V P1.4 P3.6 +5V P0.7 P1.5 P2.4 P0.0 P0.6 P3.1 P3.4 Y2 11.0592MHZ P1.2 P3.5 C21 30PF P0.2 P2.1 P2.7 P2.2 P3.7 P2.5 P3.0 P3.2 C20 104 P1.3 P0.3 R20 10K U9 89C51 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 20 40 EA/VPP XTAL1 XTAL2 RESET P3.2_INT0 P3.3_INT1 P3.4_T0 P3.5_T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P3.7_RD P3.6_WR PSEN ALE/PROG P3.1_TXD P3.0_RXD GND VCC P1.7 P1.6 P1.0 P2.0 + C23 10uF/25V 電源電路 + C24 220uF/16V U11 78M05 1 2 3 VOUT GND VIN +9V C25 104 SW2 9V 變壓器插座 +5V 遙控發射電路 P2.4 P2.2 J2 發射 3 2 1 GND VCC DATA P2.0 1M P2.3 U10 HT12E 1 2 3 10 11 12 13 15 16 17 18 8 5 9 6 4 7 14 A0 A1 A2 D0 D1 D2 D3 OSC2 OSC1 DATA OUT VCC A7 A4 GND A5 A3 A6 TE P2.1 +5V

33 RS232 電路 P1 CONNECTOR DB9 5 9 4 8 3 7 2 6 1 +5V C29 22uF C27 22uF P3.0 P3.1 C26 22uF C28 22uF U12 MAX232 1 3 4 5 2 6 12 9 11 10 13 8 14 7 C1+ C1- C2+ C2- V+ V- R1OUT R2OUT T1IN T2IN R1IN R2IN T1OUT T2OUT 電路圖 ( 車子 ) 8051 電路 P3.3 R9 10K C1 104 P2.4 P1.3 Y1 12MHZ P1.4 P1.5 P0.5 P2.3 P0.1 +5V P2.1 U1 89S51 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 20 40 EA/VPP XTAL1 XTAL2 RESET P3.2_INT0 P3.3_INT1 P3.4_T0 P3.5_T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P3.7_RD P3.6_WR PSEN ALE/PROG P3.1_TXD P3.0_RXD GND VCC P0.3 P2.0 P1.0 P3.0 +5V D3 LED + C7 10uF/25V P2.2 P0.7 P2.7 P0.6 P1.7 P3.7 P1.2 C2 30PF C3 30PF P3.2 P0.2 P1.1 P3.6 P2.6 +5V P1.6 P2.5 P3.5 P3.1 P0.0 P0.4 R8 1K P3.4

34 馬達電路 P1.3 P1.2 P1.1 MG1 3V 1 2 BT2 4.5V C19 104 MG2 3V 1 2 C11 104 U7 L293 2 7 10 15 1 9 3 6 11 14 16 8 4 5 12 13 1A 2A 3A 4A 1/2EN 3/4EN 1Y 2Y 3Y 4Y VCC1 VCC2 GND GND GND GND +5V P1.0 + C13 10uF + C17 10uF + C12 10uF + C16 10uF 電源電路 BT1 9V SW1 電源開關 1 2 +5V + C14 220uF/16V C15 104 U8 78M05 1 2 3 VOUT GND VIN

35 無線接收電路前 Q2 C1815 + C18 1uF/25V 右 P3.3 R17 1K +5V D8 1N4148 P3.2 P3.1 後 R18 1K +5V R16 33K D9 LED U6 HT12D 1 2 3 10 11 12 13 15 16 17 18 8 5 9 6 4 7 14 A0 A1 A2 D0 D1 D2 D3 OSC2 OSC1 VT VCC A7 A4 GND A5 A3 A6 DATA IN 加 24 公分單蕊線當天線左 P3.4 J1 接收 3 1 2 GND VCC DATA OUT P3.0 超音波電路 LS1 超音波發射 Y3 455K U18B 74LS04 3 4 +5V U19 PT2248 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VSS XT /XT K1 K2 K3 K4 K5 K6 K1 K2 K3 CODE TEST /TXOUT VCC D2 1N4148 C19 120PF U18C 74LS04 5 6 U18A 74LS04 1 2 C18 120PF U20 CX20106 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 C21 330PF P3.7 D3 LED R13 10K + C20 3.3uF LS2 超音波接收 + C22 1uF/25V R12 1K +5V R14 200K

附錄五 MCS-51 簡介 1-1 MCS-51 簡介 MCS-51 是 Intel 公司所設計的 8051 系列單晶片的總稱, 較具知名度的編號有 8051 8751 和 8031, 這些不同的單晶片都使用相同的核心 CPU 與指令集, 只是能在靠製造 IC 時給予不同的周邊設計, 分別賦予這些 IC 一個特別編號 圖 1-1 MCS-51 的成員 以下將 MCS-51 系列單晶片的主要功能列舉如下 : 1. 專為控制應用所設計的 8 位元 CPU 2. 有完整的單位元邏輯運算指令 3. 有 32 條 (4 個 Port) 雙向且每條都可以被單獨定址的 I/O 4. 內部有 128byte 可供讀 / 寫的 RAM 5. 內部有兩個 16 位元 Timer/Counter 6. 有一個通信用的全雙工 UART( 串列 I/O) 7. 可接受 5 個中斷源, 且有 2 層優先權的中斷結構 8. 內部有時脈振盪器 ( 最高頻率可到 12MHz) 9. 內部有 4K 的程式記憶體 10. 可在外部擴充到 64K 程式記憶體 (EPROM) 11. 可在外部擴充 64K 資料記憶體 (RAM) 2-2 MCS-51 的接腳 36

圖 1-2 MCS-51 的 40Pin DIP 包裝的接腳圖 1~8 腳 (P1.0~P1.7): 這 8 支角是 8051 的 I/O port, 稱為 PI 第一腳(P1.0) 是 LSB, 第 8 支腳 (P1.7) 是 MSB 如果是 8052(8032 或 8752) 時,P1.0 又可當作 Timer2 的外部脈波輸入腳,P1.1 又當作 T2EX, 可當作另外一個外部中斷觸發輸入腳 P1 上的每支腳都可推動 4 個 LS TTL 9 腳 (RESET): 8051 的重置 (RESET) 輸入腳, 當這支腳由外部輸入 High(+5V) 的信號時,8051 就被重置,8051 被重置後就從位址 0000H 開始執行程式 且特殊功能暫存器 (SFR) 裡的所有暫存器都會被設成已知狀態 10~17 腳 (P3.0~P3.7): 這 8 支腳是 8051 的 I/O port, 稱為 P3 第 10 支腳 (P3.0) 為 LSB, 第 17 支腳 (P3.7) 為 MSB P3 裡的每支 I/O 腳除了可以當作單純的輸入 / 輸出使用外, 也當作 8051 內部的某些週邊與外界溝通個 I/O 腳 例如 P3.0 和 P3.1 接腳的另外一個名稱為 RxD 和 TxD, 當 8051 內部的 UART 被軟體啟動後,UART 會將串列資料從 TxD 腳輸出, 而 UART 也接收由外部送進來的串列信號 INT0 和 INT1 是 8051 的兩個外部中斷輸入部 T0 是 Timer0 的外部脈波輸入腳 T1 是 Timer1 的外部脈波輸入腳 WR,RD, 當您再 8051 的外部擴充資料記憶體 (RAM) 時, 這兩條線是控制寫與讀的信號 P3 上的每一隻 I/O 腳都可以做兩種用途 那 37

8051 怎麼知道 P3 上的某支腳是當 I/O 或當另一種用途, 例如您要使用 UART 時您將第 10 腳看成 RxD, 第 11 腳看成 TxD 加以使用就可以了 但是有一點必須特別注意, 那就是當作其他功能 ( 不當 I/O 使用 ) 使用的那支腳的內部栓鎖器的內容必須設為 1, 其他的功能 ( 如 TxD,RxD,RD,ER, 等 ) 才會有作用 P3 上的每支 I/O 腳都可推動 4 個 LS TTL 18~19 腳 (XTAL2,XTAL1): 這兩支腳是 8051 內部時脈振盪器的輸入端, 您可以在這兩支腳上跨街一個 12MHz 的工作頻率, 供內部使用 8051 會根據這個速度工作 若未特別註明, 這個振盪器的工作頻率是在 1MHz~12MHz 之間的任何一個 如果線路板上已有振盪器, 那這個振盪器所產生的脈波 (Clock) 也可以直接輸入給 8051 使用 這個外部送給 8051 使用的脈波是從第 18 腳 (XTAL2) 輸入, 而 19 腳 (XTAL1) 必須接地, 以上的接法是 CMOS 的 8051( 如 8051AH) 如果您是使用 CMOS 的 8051(80C51,80C31 等 ), 外部的脈波必須從 19 腳 (XTAL1) 輸入而 18 腳空接, 這個差別必須特別注意 40,20 腳 (Vcc,Vss): 這是 8051 的電源輸入端,40 腳接電源的正端的 20 腳接地 電源規格是 5V +/- 10 % 21~28 腳 (P2.0~P2.7): 這 8 支腳是 8052 的 I/O port, 稱為 P2,P2.0 為 LSB,P2.7 為 MSB P2 除了當作 I/O 使用之外 如果您在 8051 的外面擴充程式記憶體或資料記憶體時,P2 就變成 8051 的位址匯流排的高位元組 ( 即 A8~A15), 此時 P2 就不能當作 I/O 使用 P2 上的每支 I/O 腳可推動 4 個 LS TTL 39~32 腳 (P0.0~P0.7): 這 8 支腳也是 8051 的 I/O port, 稱為 P0 其中 P0.0 為 LSB,P0.7 為 MSB 如果將 P0 當作 I/O 使用時必須特別注意 P0 的輸出型態是 Open Drain, 其他三個 I/O port(p1,p2, P3) 內部有 pull high 電路 P0 除了當作 I/O 使用外, 如果您在 8051 的外面擴充程式記憶體或資料記憶體時,P0 就當作位址匯流排 (A0~A7) 和資料匯流排 (D0~D7) 多工使用 您必須再外部加一個 8 位元栓鎖器將位址匯流排從 PC 上分離出來, 這個 A0~A7 與 P2 所提供的 A8~A15 合成一個 16 位元的位址匯流排, 因此 8051 可以在外部定址到 64K 的記憶體 29 腳 (PSEN): 這支腳是 8051 用來讀取放在外部程式記憶體的指令時所用的讀去信號, 通常這支腳是接到 EPROM 的 OE 腳 8051 分別致能放在外部的 EPROM( 程式記憶體 ) 與 RAM 資料記憶體是兩塊獨立的記憶體, 且這兩塊記憶體都可以接到 64K, 因此我們說 8051 的定址能力可達 128K 30 腳 (ALE): 這支腳的名稱為 位址拴住致能 (Address Latch Enable, 簡稱 ALE),8051 可以使用這支腳觸發外部的 8 位元栓鎖器, 將 P0 上的位址匯流排信號 (A0~A7) 鎖入栓鎖器中 38

31 腳 (EA): 這是一支輸入腳, 當 EA=0 時,8051 一律執行外部程式記憶體裡的程式, 因此 8051 內部的 4K 程式記憶體就沒有用了 因此如果您要使用內部的程式記憶體時, 一定要將 EA 接 +5V 因為 8031( 或 8032) 內部沒有程式記憶體, 它的 EA 必須接地 1-3 8051 的記憶體結構 8051 的記憶體可以分成 3 塊獨立的記憶體, 如圖所示 : 1. 內部加上外部的程式記憶體 (ROM) 共 64K byte 2. 可在外部擴充 64K byte 資料記憶體 (RAM) 3. 內部資料記憶體空間 256 byte 圖 1-3 8051 記憶體映像圖 1-3-1 程式記憶體程式記憶體是存放 8051 所執行的程式碼的地方,CPU 會主動到這塊記憶體讀取要執行的指令碼, 因此這塊記憶體的資料只能被 CPU 讀取, 而無法寫入資料 程式記憶體的空間最多可達 64K byte, 在 8051,8751 裡已有最低的 4K byte(0000h ~ 0FFFH), 因此在外部可再擴充 60K byte EPROM; 而 8031H,8032H 內部沒有 ROM, 因此 39

外部可擴充 64K byte EPROM;8052AH,8752AH 內部已有 8K byte 的程式記憶體, 因此可以在外部擴充 56K byte EPROM 8051 讀取程式記憶體的激發信號是 PSEN 8051 是如何決定程式記憶體的前面 4K byte(8052 是 8K) 要到內部或到外接程式記憶體去讀取指令呢? 這就是 8051 的 EA 腳 ( 第 31 腳 ) 的功能, 如果我們將 EA 腳接地 ( 邏輯 0), 則 8051 會將前面 4K 移到外部, 也就是說原來在 8051 內部的 4K byte 的程式記憶體無效, 就算將程式燒到內部的 4K byte 程式記憶體裡,8051 也看不到 如果將 EA 接到 +5V( 邏輯 1), 則 8051 就會到內部去讀去前面 4K 的程式記憶體, 超過 4K 的部分 (1000H~FFFFH),8051 會自動切換到外部來讀取 因此 EA 接腳是決定內部程式記憶體是否有效的控制腳, 當 EA=0, 內部程式記憶體無效 ; 當 EA=1 內部程式記憶體有效 例如 8031AH,8032AH 內部沒有 ROM, 因此使用 8031AH 或 8032AH 時, 必須將它的 EA 腳接地 在寫 8051 的程式時, 必須知道幾個程式記憶體的特殊位址, 這些位址是各種中斷服務程式的進入點, 表 2 列出了各種中斷的進入點位址, 其中位址 0000H 是重置 (RESET) 的進入點, 這意思是說,8051 被重置時, 從位址 0000H 開始執行程式 圖 1-4 中斷服務程式的進入點 1-3-2 外部資料記憶體 8051 允許您在外部擴充 64K byte 資料記憶體 (RAM) 這 64K 位址空間裡, 除了可以放 RAM 以外, 也可以採用 Memory Map I/O 的方式將一些標準 I/O( 例如 8255,8253 等 ) 的位址解在這一塊記憶體裡 定址 64K 資料記憶體空間需要 16 條位址線和 8 條資料線, 這 16 條位址匯流排和 8 條 40

資料匯流排與程式記憶體使用相同的匯流排, 然後 8051 是以控制匯流排來區分這兩塊不同的記憶體 8051 讀取外部程式記憶體時使用 PSEN, 而讀 / 寫外部資料記憶體使用 RD 和 WR 信號 如此一來程式記憶體和資料記憶體就是兩個完全獨立的 64K 空間 8051 是執行到 MOVX A,@DPTR 和 MOVX A,@Ri 指令時, 就會到外部資料記憶體讀入一個 byte 資料, 當執行 MOVX @DPTR,A 或 MOVX @Ri,A 就會將資料寫到外部資料記憶體 有時候在外部擴充程式記憶體和資料記憶體, 其總和不超過 64K 時, 我們可以採用兩塊記憶體合併成一個 64K 的設計方式, 合併的好處是可以讓程式設計更具彈性 合併的方法很容易, 因為 8051 將程式記憶體和資料記憶體分開的方法是將這兩塊記憶體的讀取激發信號分別使用不同的信號, 即 PSEN 讀取程式記憶體,RD 讀取資料記憶體, 因此要將這兩塊記憶體合併, 只要將 PSEN 及 RD 信號合併成一個信號即可, 方法是將 PSEN 與 RD 使用 AND 閘做邏輯 AND 即可, 如圖所示, 可將 AND 閘的輸出看成一個記憶體讀取激發信號 (MRD) 激發 (MRD=0), 然後我們就將 MRD 接到程式記憶體 (EPROM) 的輸出致能, 或資料記憶體 (RAM) 的輸出致能就可以讀到這兩塊記憶體的內容 圖 1-5 將 PSEN 與 RD 合併成 MRD 程式記憶體與資料記憶體合併之後,8051 的整個記憶體空間就縮減成 64K, 也可以使用合併外接 32K EPROM (27256) 和 32K SRAM (62256) 的方法 在這種合併的記憶體結構裡就沒有所謂程式記憶體或資料記憶體之分別, 不管是 MOVC 或 MOVX 指令都可以定址到這 64K 的內容 換句話說, 也可以將程式放入 RAM(62256) 裡執行 1-3-3 內部資料記憶體 8051 內部有一塊 256 個 byte 的位址空間, 這塊空間是存放資料記憶體 (RAM) 和特殊功能暫存器 (SFR) 的地方 這塊記憶體空間雖然只有 256byte, 但是 8051 將其中位指教高的 128byte(80H~FFH) 採用不同的定址方式而容納了兩組 128byte 的記憶空間, 因此總共的空間為 128+128+128=384 byte 以下三個部分開加以解說: 1. 位址 00H~7FH 的 RAM 2. 位址 80H~FFH 的 RAM 3. 位址 80H~FFH 的 SFR 不論 8051 或 8052 都有這塊記憶體, 並且可以使用直接定址或間接定址法讀 / 寫其內部資料 8051 將這塊記憶體分成數種不同的用途 下圖是 8051 對這 128byte 定義的用途說明 41

圖 1-6 內部 RAM 的較低 128 位元組 (A) 暫存器庫由上圖我們看到, 位址 00~1FH 這 32 個 byte 被分成 4 組工作暫存器 (Register Bank), 分別稱為 RB0,RB1,RB2 和 RB3, 每一組暫存器庫有 8 個 byte 程式指令將每組裡的 8 個 byte 稱為 R0~R7 但是 8051 共有四組 R0~R7, 到底目前所指的 R0~R7 是屬於哪一組的 R0~R7 呢? 它是由 PSW 暫存器裡的 RS1 和 RS0 這兩個 bit 加以選擇, 如上圖所示, 當 RS1=0 和 RS0=0 時, 就指到 RB0, 當 RS1=0 和 RS0=1, 就指到 RB1 (B) 可位元定址區位址 20H~2FH 這 16 個 byte 是 8051 內部 256 個位元位址中的 128 個位元的所在位址 每個位元組佔了 8 個位元位址, 下圖是這 16 個位元組裡每一個 bit 的位元位址, 例如 20H 這個 byte 的第 0 位元, 其位元位址為 00H, 然後依序編到 2FH 這個位元組的第 7 位元為 7FH,8051 有一組單位元運算指令可以直接對這些位元作運算 位元位址區的另外 128 個 bit(80h~ffh), 是在 SFR 暫存器裡, 如下圖所示 (C) 一般用途內部 RAM 的 30H~7FH 這些位元組,8051 並未定義這些位元作任何用途,8051 稱這塊區域為使用者的 RAM(User RAM) 因此可以規劃這塊區域當作其他用途, 例如計時器的緩衝區或印表機資料的緩衝區等 但是有一點必須注意的是,8051 的堆疊區也是使用內部 RAM, 因此必須保留一塊足夠大的 RAM 給堆疊區使用, 堆疊區的大小是依所寫的程式所需而定 42

圖 1-7 8051 的前面 128 個位元位址 43

(a) 圖 2-8 RAM 裡的位元位址 44

1. 位址 80H~FFH 的 RAM 只有 8052,8752 和 8032 的內部 RAM 有這 128byte,8031,8051 和 8751 則沒有 這塊 RAM 的內容必須使用間接定址法 2. 位址 80H~FFH 的 SFR 特殊功能暫存器是一塊 128byte 的記憶空間, 它是存放 8051 內部的週邊所使用的暫存器的地方, 例如 I/O port 的輸出栓鎖器 (P0,P1,P2,P3), 計時器的 counter, 致能中斷系統的 IE 暫存器等 因為 8051 的週邊設備並不多, 因此 SFR 裡 128 個位址空間並未用完, 這些目前沒有用到的位址, 裡面是空的 SFR 所使用個位址是 80H~FFH, 這塊區域與 8051 的較高 128 位元組的 RAM 使用了同一塊記憶空間,8051 採用了不同的指令的定址法來區分這兩塊記憶體, 如前面所述,RAM 是使用間接定址法,SFR 是使用直接定址法 在 SFR 裡的各種位元組都有其個別的名稱, 在寫程式時, 要用到這些位元組, 可直接呼叫其名稱, 而不需要使用位址 在 8051 被重置後 (RESET=1), 在 SFR 裡面的各個暫存器都會被設定一個固定值, 這些僅在每次 RESET 後都是一樣, 表 3, 列出了 SFR 重置後的初始值 SFR 裡面的各個暫存器 : 1. PSW( 程式狀態字語 ) 暫存器 2. SP 暫存器 ( 堆疊指標 ) 3. DPTR( 資料指標 ) 4. P0,P1,P2,P3 暫存器 5. SBUF( 串列阜緩衝區 ) 6. 計時器暫存器 7. 捕捉式暫存器 (Capture Register) 8. 控制暫存器 (Control Register) 45

圖 1-9 SFR 各個暫存器重置後的初始值 46

1. 累加器 (ACC) ACC 就是累加器暫存器, 累加器指令所使用的助憶符號是 A 2.B 暫存器 (B) B 暫存器是使用在乘法 (MUL AB) 和除法 (DIV AB) 指令時 在其它的指令, 它可以被當成一般暫存器處理 3.PSW( 程式狀態字語 ) 暫存器 PSW 實際上就是一般 CPU 理所稱的旗號 (Flags) 暫存器, 內部包含有 CPU 的系統狀態資料 4.SP 暫存器 ( 堆疊指標 ) SP 暫存器只有 8 位元寬, 因此 MCS-51 的堆疊區最多只有 256byte, 並且一定在內部 RAM 裡 當執行 PUSH 或 CALL 指令存入資料到堆疊區之前,SP 的內容會先被加 1 因為 SP 的內容可由指令任意改變, 因此堆疊區可以由使用者設定在內部 RAM 裡的任一個位址 但是, 在 RESET 之後,SP 的內容會被設成 07H, 因此 RESET 後堆疊區是從位址 08H 開始 5.DPTR( 資料指標 ) DPTR 是一個 16 位元暫存器, 它是由兩個 8 位元暫存器所組成, 高位元組為 DPH, 低位元組為 DPL 因 DPTR 可看成一個 16 位元暫存器或看成兩個 8 位元暫存器加以處理 DPRT 的用途是用來定址外部資料記憶體 (MOVX A,@DPTR), 或程式記憶體使用 (MOVC A,@A+DPTR), 因此 MCS-51 可以定址程式記憶體或資料記憶體各 64K 6.P0,P1,P2,P3 暫存器 P0,P1,P2,P3, 是 MCD-51 四個 I/O port 的輸出栓鎖器 (Latch) 7.SBUF( 串列阜緩衝區 ) SBUF 暫存器, 實際上是由兩個暫存器構成, 一個是當作 UAR 傳送資料的緩衝區, 另一個是當作 UART 接收資料的緩衝區 若將資料寫到 SBUF 時, 就會將資料放入傳送緩衝區,UART 就會將這個資料轉成串列資料透過 TXD 這條線傳出去 若去讀 SBUF, 就會讀到接收緩衝區的資料 8. 計時器暫存器 (TH0,TL0),(TH1,TL1) 和 (TH2,TL2) 這三對暫存器, 是三個 16 位元計時器的名稱分別為 Timer0,Timer1 和 Timer2 9. 捕捉式暫存器 (Capture Register) (RCAP2H,RCAP2L) 這一對暫存器稱為捕捉式暫存器, 當 8052 的 Timer2 工作在 捕捉模式 ( Capture mode ) 時, 當 T2EX(P1.1) 這支接腳上的輸入信號 1 0 轉態時,TH2,TL2 的內容會被移入 RCAP2H,RCAP2L 就是保存 TH2,TL2 的重新載入值的地方 10. 控制暫存器 (Control Registers) 47

IP,IE 暫存器控制 MCS-51 的中斷系統 ;TMOD,TCON 暫存器是控制 Timer0 和 Timer1 的工作模式 ;T2CON 控制 Timer2 的工作模式 ;SCON 控制 UART 的工作模式等 以下就將這些暫存器裡的各個位元的名稱及功能以圖形表示 : 圖 1-10 PWS 暫存器 48

圖 1-11 PCON 電源控制暫存器 49

圖 1-12 IE 中斷致能暫存器 50

圖 1-13 IP 中斷優先權暫存器 51

圖 1-14 TCON 計時器 / 計數器控制暫存器 52

圖 1-15 TMOD 計時器 / 計數器模式控制暫存器 53

圖 1-16 T2CON:TIMER2 控制暫存器 54

圖 1-17 SCON 串列埠控制暫存器 55

1-4 MCS-51 的中斷結構 8051 提供了 5 個中斷源,8052 則提供了 6 個中斷源, 外部中斷 INT0 和 INT1 可以規劃成半位元觸發或邊緣觸發的方式動作, 它是由 TCON 暫存器裡的 IT0 和 IT1 位元所選擇 ; 而 TE0 和 TE1 是真正產生中斷的旗號 ( 當 IT0 和 IT1 等於 1 時 ); 如果中斷是設成邊緣觸發的話, 當中斷產生時, 在執行中斷服務程式的同時, 硬體會將這個旗號 (IE0 或 IE1) 清除 ; 而準位觸發方式則不會清除 Timer0 和 Timer1 的中斷是由 TF0 和 TF1 旗號所產生, 這些旗號是在它們各自的計時 / 計數暫存器溢位時所設定 (Timer0 在模式 3 時例外 ) 當計時器產生中斷時, 硬體會在執行到其服務程式時自動將這些旗號 (TF0 或 TF1) 清除成 0 串列埠的中斷是由 RI 和 TI 的邏輯 OR 之後所產生, 在執行 RI 和 TI 的中斷服務程式時, 硬體不會自動將 RI 或 TI 清除, 因為串列埠的中斷服務程式必須判斷中斷是由 RI 或 TI 產生, 因此產生中斷的旗號必須由軟體加以清除 在 8052 時 Timer2 的中斷是由 TF2 和 EXF2 的邏輯 OR 的結果所產生, 當執行到其中斷服務程式時, 這些旗號不會被硬體清除, 因為, 中斷服務程式必須判斷中斷是由 TF2 或 EXF2 所產生, 然後以軟體將其清除 以上所討論的每個產生中斷的旗號 (IE0,IE1,TF0,TF1,TI,RI,TF2,EXF2), 都可以透過軟體加以設定或清除, 其結果與硬體所產生設定或清除的效果完全一樣 如此一來就可以透過軟體產生中斷, 或將正在等待的中斷清除 1-4-1 中斷致能與優先權結構透過設定或清除 SFR 裡的 TE 暫存器的位元, 這些中斷裡的每個中斷源可以個別的加以致能 (Enable) 或禁能 (Disable) 產生中斷 IE 暫存器裡也包含了一個禁止所有中斷產生的位元 EA, 它可以立即禁止所有中斷產生 MCS-51 的優先權層次共有兩層, 即高優先權和低優先權, 每一個中斷源都可以透過軟體規劃 SFR 裡的 IP 暫存器裡的位元, 以設定各中斷優先權順序, 當設為 1 時列在高優先權層次, 0 時列在較低優先權層次 較高優先層的中斷源可以中斷較低優先層的中斷服務程式, 同優先權層次的中斷副程式不能相互中斷 如果兩個不相同優先權層次的中斷同時發生, 則優先權層較高的中斷會先被接受 ; 如果相同優先權層次的中斷同時到達, 就由內部硬體的輪詢 (polling) 順序決定要先接受哪一個 因此在每個優先權層次裡又有一個由輪詢順序所決定的第二個優先權結構, 這個輪詢順序如下表 4 所示 : 56

圖 1-18 優先權輪詢順序 57