第一章 計算機基礎知識
本章簡要闡述計算機中最基本的數學知識。本章的內容是必要的入門知識,是以后各章的基礎。
第一節 數制與編碼
數制是人們利用符號來計數的科學方法。數制有很多種,但在計算機的使用上常使用的則為十進制、二進制和十六進制。
一、數制的基與權
數制所使用的數碼的個數稱為基,數制每一位所具有的值稱為權。
1、十進制
十進制的基為“十”,即它所使用的數碼為0到9共十個數字。
十進制中,每個(位)數字的值都是以該個(位)數字乘以基數的冪次來表示,通常將基數的冪次稱為權,即以10為底的0冪、1冪、2冪等。
2、二進制
二進制的基為“二”,即其使用的數碼為0、1,共二個。二進制各位的權是以2為底的
冪。
3、十六進制
十六進制的基為“十六”,即其數碼共有16個:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A~F相當于十進制數的10~15。十六進制的權是以16為底的冪。
4、二一十進制
二一十進制數稱為二進制編碼的十進制數(Binary Coded Decimal),簡稱BCD碼。在BCD碼中是用四位二進制數給0一9這十個數字編碼。
注意:為了區別以上四種數制,在數的后面加寫英文字母來區別,B、D、H、BCD分別表示為二進制數、十進制數、十六進制數、二一十進制數,通常對十進制可不加標志。同時若十六進制數如是字母打頭,則前面需加一個0。
二、數制的轉換
1、二、十六進制轉換成十進制數
只需將二、十六進制數按權展開后相加即可。
2、十進制數轉換成二、十六進制數
基本方法為:除基取余。
例:試求十進制數45678所對應的十六進制數。
3、二、十六進制數相互轉換
基本方法為:1位十六進制數轉換為4位二進制數。
4、BCD碼與十進制的相互轉換
按照BCD的十位編碼與十進制的關系,進行轉換。
三、計算機中常用的編碼
1、 BCD碼
BCD碼(十進制數的二進制編碼)是一種具有十進制權的二進制編碼,即它是一種既能為計算機所接受,又基本上符合人們的十進制數運算習慣的二進制編碼。
BCD碼的種類較多,常用的有8421碼、2421碼、余3碼和格雷碼等,其中最為常用的是8421 BCD編碼。因十進制數有10個不同的數碼0~9,必須要有4位二進制數來表示,而4位二進制數可以有16種狀態,因此取4位二進制數順序編碼的前10種,即0000B-1001B為8421碼的基本代碼,1010B~1111B未被使用,稱為非法碼或冗余碼。8421 BCD編碼表如表所示。
2、ASCII編碼
ASCII碼誕生于1963年,是一種比較完整的字符編碼,現已成為國際通用的標準編碼,已廣泛用于微型計算機與外設的通信。
ASCII碼是“美國信息交換標準代碼”的簡稱。它是用七位二進制數碼來表示的,七位二進制數碼共有128種組合狀態,包括圖形字符96個和控制字符32個。96個圖形字符包括十進制數字符10個、大小寫英文字母52個和其他字符34個,這類字符有特定形狀,可以顯示在CRT上和打印在打印紙上。32個控制字符包括回車符、換行符、退格符、設備控制符和信息分隔符等,這類字符沒有特定形狀,字符本身不能在CRT上顯示和打印機上打印。ASCII編碼如表所示。
第二節 存儲器
存儲器是計算機的主要組成部分。其功能是存放程序和數據。這些程序和數據在存儲器中是以二進制代碼表示的。
一、名詞介紹
1、存儲單元和存儲單元地址
存儲器是由大量寄存器組成的,其中每一個寄存器就稱為一個存儲單元。它可存放一個有獨立意義的二進制代碼,稱為一個字(Word),一個字由若干位(Bit)組成,代碼的位數稱為字長。在計算機中把一個8位的二進制代碼稱為一個字節(Byte)。對一個8位二進制代碼的最低位稱為第0位(位0),最高位稱為第7位(位7)。
在計算機的存儲器中有很多存儲單元。為了使存入和取出時不發生混淆,必須給每個存儲單元一個唯一的固定編號,這個編號就稱為存儲單元的地址。因為存儲單元數量很大,為了減少存儲器向外引出的地址線,在存儲器內部都帶有譯碼器。根據二進制編碼譯碼的原理,除地線公用之外,n根導線可譯成2"個地址號。
2、存儲器速度和存儲器容量
存儲器速度和存儲器容量是存儲器的兩個主要技術指標。存儲器速度是指讀或寫一條信息所需的時間,它是影響計算機速度的主要因素之一。存儲器的容量是指最多能夠存儲多少個單位信息,二進制信息單位多用字節表示。在計算機中,通常把1024字節稱為1K字節,1024K稱為1M(兆)。
二、存儲器的分類
存儲器的分類方法較多,例如從其組成材料和單元電路類型上可分為磁芯存儲器、半導體存儲器、電荷耦合存儲器等,從其與微處理器的關系來劃分,又可分為內存和外存。
直接同微處理器進行信息交換的存儲器稱內存。其特點是存取速度快,但容量有限。通過內存間接與CPU進行信息交換的存儲器稱為外存,其特點是容量大、速度較慢,外存的內容根據需要可隨時調入內存。
1、只讀存儲器ROM
只讀存儲器即在使用時只能讀出而不能寫入,斷電后ROM中的信息不會丟失。因此一般用來存放一些固定程序,如監控程序、子程序、字庫及數據表等。
2、隨機存儲器RAM
這種存儲器又叫讀寫存儲器,它不僅能讀取存放在存儲單元中的數據,還能隨時寫入新的數據。斷電后RAM中的信息全部丟失,因此RAM常用于存放經常要改變的程序或中間計算結果等。
三、只讀存儲器類型
ROM按存儲信息的方法又可分為四種。下面逐一進行介紹。
(1)掩膜ROM
掩膜ROM也稱固定ROM,它是由廠家編好程序寫入ROM(稱固化)供用戶使用,用戶不能更改它。掩膜ROM只能應用于有固定程序且批量很大的產品中。
(2)可編程序的只讀存儲器PROM
它在出廠時不寫入信息,它的內容由用戶根據自己所編程序一次性寫入,一旦寫入,只能讀出,而不能再進行更改。
(3)可改寫的只讀存儲器EPROM
用戶可將程序寫入EPROM。如果要改寫程序,可用紫外線進行擦除,然后重新寫人新程序。一片EPROM芯片,可反復多次被擦除和寫人。
(4)可電改寫只讀存儲器E2 PROM
E2 PROM可用電的方法完成寫入和清除其內容的功能,其編程電壓和清除電壓均與微機CPU的5V工作電壓相同,不需另加電壓,它既有RAM讀寫操作簡便,又有數據不會因掉電而丟失的優點,因而使用極為方便。加之E2 PROM保存的數據至少可達10年以上,每塊芯片可擦寫1萬次以上。
第二章 單片機概述
第一節 單片機的概念
一、單片機的概念
通常所說的微機是指由CPU、存儲器、I/O接口電路等各種大型集成電路芯片組裝在一塊或者由幾塊印制電路板組裝而成的機器。
其中,用幾塊印制電路板組裝成的微機則稱之為多板微機或多板機,如現在廣泛使用的臺式或筆記本式PC微機都是這種結構。
隨著大型集成電路技術的不斷進步,20世紀80年代開發出了能在一個芯片上集成CPU、存儲器、I/O接口等電子電路的超微型計算機,這種單個芯片式的微型計算機就被命名為單片微型計算機。
由于單片機在應用時通常是處于被控系統的核心地位并融入其中,即以嵌入的方式進行使用,為了強調其“嵌入”的特點,也常常將單片機稱為嵌入式微控制器EMCU。
二、通用單片機和專用單片機
根據控制應用的需要,可以將單片機分成為通用型和專用型兩種類型。
通用型單片機是一種基本芯片,它的內部資源比較豐富,性能全面且適用性強,能覆蓋多種應用需求。用戶可以根據需要設計成各種不同應用的控制系統,即通用單片機有一個再設計的過程。
專用單片機芯片是針對一種產品或一種控制應用而專門設計的,設計時已經對系統結構的最簡化、軟硬件資源利用的最優化、可靠性和成本的最佳化等方面都作了通盤的考慮和論證,所以專用單片機具有十分明顯的綜合優勢。例如電度表和IC卡讀寫器上的單片機等。
三、單片機與單片機系統
單片機通常是指芯片本身。
單片機系統則是在單片機芯片的基礎上擴展其它電路或芯片構成的具有一定應用功能的計算機系統。在單片機系統中,單片機處于核心地位,是構成單片機系統的硬件和軟件基礎。
四、單片機應用系統與單片機開發系統
單片機應用系統是為控制應用而設計的,該系統與控制對象結合在一起使用,是單片機開發應用的成果。
單片機開發系統是單片機應用系統開發調試的工具。主要有:
邏輯分析儀:只能用于簡單的單片機系統;
微型計算機:用于復雜的單片機系統;
在線仿真器:進行單片機應用系統的軟硬件開發和EPROM寫入。
五、單片機的程序設計語言和軟件
機器語言是用二進制代碼表示的單片機指令,用機器語言構成的程序稱之為目標程序。
匯編語言是用符號表示的指令,匯編語言是對機器語言的改進,是單片機最常用的程序設計語言。
注意:這兩種語言均與單片機硬件關系密切,這就要求程序設計人員必須精通單片機的硬件系統和指令系統。
高級語言:編譯型語言有PL/M51、C-51、C、MBASIC-51等;
解釋型的有MBASIC和MBASIC-52等。
第二節 單片機的發展
一、單片機的歷史及發展概況
根據單片機發展過程中各個階段的特點,其發展歷史大概可劃分為以下四個階段:
第一階段(1974~1976):單片機的初級階段。因工藝限制,單片機采用雙片的形式,而且功能簡單。
第二階段(1976一1978):低性能單片機階段。以Intel公司制造的MCS-48系列單片機為代表
第三階段(1978一現在):高性能單片機階段。這個階段推出的單片機普遍帶有串行I/O口,多級中斷處理系統,16位定時器/計數器,片內ROM、RAM容量加大,且尋址范圍可達64K字節,有的還內置有A/D轉換器。這類單片機的代表是Intel公司的MCS-51系列,Motorola公司的6810和Zilog公司的Z8等。
第四階段(1982一現在):8位單片機的鞏固發展以及16位單片機、32位單片機推出階段。此階段的主要特征是一方面發展16位單片機、32位單片機及專用型單片機;另一方面不斷完善高檔8位單片機,改善其結構,以滿足不同用戶的需要。16位單片機的典型產品如Intel公司生產的MCS-96系列單片機。而32位單片機除了具有更高的集成度外,其振蕩頻率已達20MHz或更高,這使32位單片機的數據處理速度比16位單片機快許多,性能同8位、16位單片機相比,具有更大的優越性。
計算機廠家已投放市場的產品就有70多個系列,500多個品種。單片機的產品已占整個微機(包括一般的微處理器)產品的80%以上,其中8位單片機的產量又占整個單片機的產量的60%以上,因此可以看出,8位單片機在最近若干年里,在工業檢測、控制應用的上將繼續占有一定的市場份額。
二、單片機的特點及應用領域
1、單片機的特點:
(1)小巧靈活、成本低、易于產品化。能組裝成各種智能式測控設備及智能儀器儀表。
(2)可靠性好,應用范圍廣。單片機芯片本身是按工業測控環境要求設計的,抗干擾性強,能適應各種惡劣的環境,這是其他機種無法比擬的。
(3)易擴展,很容易構成各種規模的應用系統,控制功能強。單片機的邏輯控制功能很強,指令系統有各種控制功能指令,可以對邏輯功能比較復雜的系統進行控制。
(4)具有通訊功能,可以很方便地實現多機和分布式控制,形成控制網絡和遠程控制。
2、 單片機的應用
(1)工業方面:各種測控系統。數據采集系統,工業機器人,智能化儀器,機、電一體化產品。
(2)智能儀器儀表方面。
(3)通訊方面:調制解調器、程控交換技術等。
(4)消費產品方面:電動玩具、錄像機、激光唱機。
(5)導彈與控制方面:導彈控制、魚雷制導控制、智能武器裝備、飛機導航系統。
(6)計算機外部設備及電器方面:打印機、硬盤驅動器、彩色與黑白復印機、磁帶機等。
(7)多機分布式系統:可用單片機構成分布式測控系統,它使單片機應用進入了一個全新的階段。
第三章 單片機芯片的硬件結構
第一節 MCS-51 單片機的邏輯結構及信號引腳
一、MCS-51 單片機的結構框圖
二、MCS-51單片機的邏輯結構
1、中央處理器(CPU)
中央處理器簡稱CPU,是單片機的核心,完成運算和控制操作。按其功能,中央處理器包括運算器和控制器兩部分電路。
1)、運算器電路
功能:單片機的運算部件,用于實現算術和邏輯運算。
2)、控制器電路
功能:單片機的指揮控制部件,保證單片機各部分能自動而協調地工作。
2、內部數據存儲器
組成:RAM(128×8)和RAM地址寄存器等。
功能:用于存放可讀寫的數據。
3、內部程序存儲器
組成:ROM(4K×8))和程序地址寄存器等。
功能:用于存放程序和原始數據。
4、定時器/計數器
80C51共有兩個16位的定時器/計數器。
功能:實現定時或計數功能,并以其定時或計數結果對單片機進行控制,以滿足控制應用的需要。
5、并行I/O口
MCS-51共有4個8位的I/O口(P0、P1、P2、P3)
功能:實現數據的并行輸入輸出。
6、串行口
MCS- 51單片機有一個全雙工的串行口。
功能;以實現單片機和其它數據設備之間的串行數據傳送。
7、中斷控制系統
80C51共有5個中斷源,即外中斷2個,定時/計數中斷2個,串行中斷1個。全部中斷分為高級和低級共兩個優先級別。
8、時鐘電路
MCS- 51芯片的內部有時鐘電路,但石英晶體和微調電容需外接。
功能:時鐘電路為單片機產生時鐘脈沖序列。
典型的晶振頻率:6MHz、11.0592MHz、12MHz。
9、位處理器
位處理器稱為布爾處理器。
功能:以狀態寄存器中的進位標志位C為累加位,可進行各種位操作。
10、總線
總線:連接計算機各部件的一組公共信號線。
分類:地址總線、數據總線和控制總線。
作用:減少了單片機的連線和引腳,提高了集成度和可靠性。
三、MCS-51的信號引腳
80C51是標準的40引腳雙列直插式集成電路芯片,引腳排列如圖所示。
1.信號引腳介紹
·輸入/輸出口線
P0.0~P0.7 P0口8位雙向口線
P1.0~P1.7 P1口8位雙向口線
P2.0~P2.7 P2口8位雙向口線
P3.0~P3.7 P3口8位雙向口線
·ALE 地址鎖存控制信號
功能:a)在系統擴展時,ALE用于控制把P0口輸出的低8位地址送入鎖存器鎖存起來,以實現低位地址和數據的分時傳送。如圖所示。
b)ALE是以六分之一晶振頻率的固定頻率輸出的正脈沖,可作為外部時鐘或外部定時脈沖使用。
·/PSEN 外部程序存儲器讀選通信號
在讀外部ROM時/PSEN有效(低電平),以實觀外部ROM單元的讀操作。
·/EA 訪問程序存儲器控制信號
當/EA信號為低電平時,對ROM的讀操作限定在外部程序存儲器;
當/EA信號為高電平時,對ROM的讀操作是從內部程序存儲器開始,并可延續至外部程序存儲器。
·RST 復位信號
當輸入的復位信號延續2個機器周期以上高電平時即為有效,用以完成單片機的復位操作。
·XTAL1和XTAL2外接晶體引線端
當使用芯片內部時鐘時,此二引線端用于外接石英晶體和微調電容;
當使用外部時鐘時,用于接外部時鐘脈沖信號。
·VSS 地線
·Vcc+5V電源
2、信號引腳的第二功能
“復用”即給一些信號引腳賦予雙重功能。第二功能信號定義主要集中在P3口線中,另外再加上幾個其它信號線。
1、常見的第二功能信號
·P3口線的第二功能
P3口8條口線都定義有第二功能,如表所示。
·EPROM存儲器程序固化所需要的信號
編程脈沖:30腳(ALE/PROG)
編程電壓(25V):31腳(/EA/Vpp)
·備用電源引入
備用電源是通過9腳(RST/VPD)引入的。當電源發生故障,電壓降低到下限值時,備用電源經此端向內部RAM提供電壓,以保護內部RAM中的信息不丟失。
說明:
a)第一功能信號與第二功能信號是單片機在不同工作方式下的信號,因此不會發生使用上的矛盾。
b)P3口線先按需要優先選用它的第二功能,剩下不用的才作為I/O口線使用。
第二節 MCS-51 內部存儲器
一、 內部數據存儲器低128 單元
劃分為三個區:
1、 寄存器區
地址范圍:4組通用寄存器占據內部RAM的00H~1FH單元地址。每組8個,依次為R0~R7。
使用方法:一種是以寄存器的形式使用,用寄存器符號表示;另一種是以存儲單元的形式使用,以單元地址表示。
說明:任一時刻,CPU使用其中的一組寄存器,并且把正在使用的那組寄存器稱之為當前寄存器。由程序狀態字寄存器PSW中RSl、RS0位的狀態組合來決定使用那一組。
2、位尋址區
地址范圍:內部RAM的20H~2FH單元,共有16個RAM單元,總計128位,位地址為00H~7FH。位尋址區的位地址表如表所示。
操作方法:字節操作和位操作。
使用方式:一種是以位地址的形式;另一種足以存儲單元地址加位的形式表示。
3、用戶RAM區
地址范圍:內部RAM區單元地址為30H-7FH,共80個單元。
使用方法:只能以存儲單元的形式來使用。但一般常把堆棧開辟在此區中。
二、內部數據存儲器高128 單元
又稱之為專用寄存器區,其單元地址為80H-FFH,用于存放相應功能部件的控制命令、狀態或數據。因這些寄存器的功能已作專門規定,故而稱為專用寄存器(SFR),有時也稱為特殊功能寄存器。MCS-51中80C51的專用寄存器共有22個,其中可尋址的為21個。
1、專用寄存器簡介
現把22個專用寄存器中的5個介紹如下,其余的將在以后章節中陸續說明。
1)、程序計數器PC
PC是一個16位的計數器。其內容為將要執行的指令地址,尋址范圍達64KB。PC有自動加1功能,以實現程序的順序執行。PC沒有地址,是不可尋址的,因此用戶無法對它進行讀寫。但在執行轉移、調用、返回等指令時能自動改變其內容,以改變程序的執行順序。
2)、累加器A(或ACC)
累加器為8位寄存器,是程序中最常用的專用寄存器,功能較多,地位重要。
3、B寄存器
B寄存器是一個8位寄存器,主要用于乘除運算,也可作為一般數據寄存器使用。
4、程序狀態字(PSW Program Status Word)
程序狀態字是一個8位寄存器,用于寄存指令執行的狀態信息。其中有些位狀態是根據指令執行結果,由硬件自動設置的,而有些位狀態則是使用軟件方法設定的。PSW的位狀態可以用專門指令進行測試,也可以用指令讀出。PSW的各位定義知下:
除PSW.1位保留未用外,對其余各位的定義及使用介紹如下:
·CY或C、PWS.7進位/借位標志位
功能:a)存放算術運算的進位/借位標志;
b)在位操作中,作累加位使用。
·AC(PSW. 6) 輔助進位標志位
功能:a)在加減運算中,當有低4位向高4位進位或借位時,AC由硬件置位,否則AC 位被清“0”。
b)在進行十進制數運算時需要十進制調整,此時要用到AC位狀態進行判斷。
·F0(PSW. 5) 用戶標志位
一個由用戶定義使用的標志位,用戶根據需要用軟件方法置位或復位。
·RS1和RS0(PSW.4和PSW.3) 寄存器組選擇位
用于設定當前通用寄存器的組號。通用寄存器共有4組,其對應關系如下表:
這兩個選擇位的狀態是由軟件設置的,被選中的寄存器組即為當前通用寄存器組。
·OV(PSW. 2) 溢出標志位
在帶符號數的加減運算中,OV=1表示加減運算結果超出了累加器A所能表示的符號數有效范圍(-128~+127),即產生了溢出,因此運算結果是錯誤的;反之,OV=0表示運算正確,即無溢出產生。
在乘法運算中,0V=1表示乘積超過255,即乘積分別在B與A中;反之,OV=0,表示乘積只在A中。
在除法運算中,0V=1表示除數為0,除法不能進行;反之,OV=0,除數不為0,除法可正常進行。
·P(PSW.0) 奇偶標志位
表明累加器A中1的個數的奇偶性,在每個指令周期由硬件根據A的內容對P位進行里位或復位。若1的個數為偶數,P=0;若1的個數為奇數,P=1。
5.數據指針(DPTR)
數據指針為16位寄存器,它是MCS- 51中唯一一個供用戶使用的16位寄存器。
DPTR可以分為兩個8位寄存器使用,即:
DPH DPTR高位字節
DPL DPTR低位字節
DPTR在訪問外部數據存儲器時作地址指針使用,在變址尋址方式中,用DPTR作基址寄存器,用于對程序存儲器的訪問。
說明:
a)在22個專用寄存器中,唯一一個不可尋址的專用寄存器就是程序計數器(PC)。
b)對專用寄存器只能使用直接尋址方式,在指令中既可使用寄存器符號表示,也可使用寄存器地址表示。
c)在21個可尋址的專用寄存器中,有11個寄存器是可以位尋址的。
專用寄存器如表所示。
三、MCS-51 的堆棧操作
堆棧是一種數據結構。數據寫入堆棧稱為入棧(PUSH)。數據從堆棧中讀出稱之出棧(POP)。
數據操作規則:“后進先出”LIFO。即先入棧的數據由于存放在棧的底部,因此后出棧;而后入棧的數據存放在棧的頂部,因此先出棧。
1、堆棧的功用
堆棧主要是為子程序調用和中斷操作而設立的。其具體功能有兩個:保護斷點和保護現場。
2、堆棧的開辟
堆棧只能開辟在芯片的內部數據存儲器中,即所謂的內堆棧形式。
3、堆棧指示器
堆棧指示器SP(Stack Pointer)的內容是堆棧棧頂的存儲單元地址。SP是一個8位寄存器。
說明:系統復位后,SP的內容為07H,但由于堆棧最好在內部RAM的30H~7FH單元中開辟,所以在程序設計時應注意把SP值初始化為30H以后。
4、堆棧使用方式
堆棧的使用有兩種方式。
自動方式:即在調用子程序或中斷時,返回地址(斷點)自動進棧。程序返回時,斷點再自動彈回PC。
指令方式:即使用專用的堆棧操作指令,進行進出棧操作。其進棧指令為PUSH,出棧指令為POP。例如保護現場就是指令方式進行操作
四、內部程序存儲器
80C51芯片內有4KROM存儲單元,其地址為0000H~0FFFH。
0000H~0002H 系統的啟動單元
0003H~000AH 外部中斷0中斷地址區
000BH~0012H 定時器/計數器0中斷地址區
0013H~001AH 外部中斷1中斷地址區
001BH~0022H 定時器/計數器1中斷地址區
0023H~002AH 串行中斷地址區
中斷響應后,系統能按中斷種類,自動轉到各中斷區的首地址去執行程序。
由于各地址區容量有限,因此一般在第一個單元放置一條無條件轉移指令以轉移到程序實際存放位置。
第三節 MCS - 51 并行 1/O 端口
MCS - 51單片機具有4個8位準雙向并行端口(P0~P3),共32根1/O口線。每一根1/O口線都能獨立地用作輸入或輸出。這4個端口是單片機與外部設備進行信息(數據、地址、控制信號)交換的輸人或輸出通道。
1、 P0口
功能:
a) 作為通用輸入/輸出口;
b) 地址線/數據線分時復用。
在擴展系統中,低8位地址線與數據線分時使用PO口。PO口先輸出片外存儲器的低8位地址并鎖存到地址鎖存器中,然后再輸出或輸入數據。
2、P1口
功能:作為通用輸人/輸出口使用。
3、P2口
功能:
a)通用輸人/輸出口使用;
b)作為高8位地址總線口使用。
在擴展系統中,其作為擴展系統的高8位地址總線,與P0口低8位地址線一起組成16位地址總線。
3、P3口
功能:
a) 作為通用輸人/輸出口使用;
b)涉及串行口、外部中斷、定時器的工作(第二功能)。
第四節 MCS-51 單片機時鐘電路與時序
時鐘電路用于產生單片機工作所需要的時鐘信號。
1、時鐘信號的產生
在MCS- 51芯片內部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2,在芯片的外部通過這兩個引腳跨接晶體振蕩器和微調電容,形成反饋電路,就構成了一個穩定的自激振蕩器。如圖所示。
電路中的電容一般取30pF左右,而晶體的振蕩頻率范圍通常是1.2MHz~12MHz。
2、引入外部脈沖信號
在由多片單片機組成的系統中,為了各單片機之間時鐘信號的同步,引入唯一的外部脈沖信號作為各單片機的振蕩脈沖。這時外部的脈沖信號是經XTAL2引腳注入,其連接如圖2.13所示。
二、時序定時單位
MCS- 51時序的定時單位共有4個,從小到大依次是:拍節、狀態、機器周期和指令周期。下面分別加以說明。
1、拍節與狀態
振蕩脈沖的周期定義為拍節(用“P”表示)。
兩個拍節定義為狀態(用“S”表示)。
2、機器周期
6個狀態為一個機器周期。
3、指令周期
執行一條指令所需要的時間稱之為指令周期。MCS- 51的指令周期根據指令的不同,可包含有1、2、3或4個機器周期。
第五節 單片機的復位工作方式
一、復位操作
復位是單片機的初始化操作,其主要功能是把PC初始化為0000H,使單片機從0000H單元開始執行程序。
除PC之外,復位操作還對其它一些專用寄存器有影響,它們的復位狀態如表所示:
PC 0000H TCON 00H
ACC 00H TL0 00H
PSW 00H TH0 00H
SP 07H TL1 00H
DPTR 0000H TH1 00H
P0~P3 0FFH SCON 00H
IP XX000000B SBUF 不定
IE 0X000000B PCON 0XXX0000B
TMOD 00H
二、復位信號
RST引腳是復位信號的輸入端,復位信號是高電平有效,其有效時間應持續2個機器周期以上。
三、復位方式
復位操作有上電自動復位和按健手動復位兩種方式。
上電自動復位是通過外部復位電路的電容充電來實現的。電路如圖2. 17 (a)
按健手動復位有電平方式和脈沖方式兩種。其中按健電平復位是通過使復位端經電阻與Vcc電源接通而實現的,其電路如圖2. 17 (b)所示。而按健脈沖復位則是利用RC微分電路產生的正脈沖來實現的,其電路如圖20.17(c)所示。
第四章 MCS 一 51 單片機的指令系統
第一節 指令系統概述
指令是CPU控制計算機進行某種操作的命令。
指令系統則是全部指令的集合。
一、指令的概念
1、匯編語言指令
定義:用助記符來表示的指令。
特點:不能被計算機硬件直接識別和執行,必須通過某種手段(匯編)把它變成機器碼指令才能被機器執行。由于其和機器語言指令一一對應,因此編寫的程序效率高,占用存儲空間小,運行速度快,能編寫出最優化的程序。
2、匯編語言的語句格式
MCS- 51匯編語言的語句格式表示知下:
〔<標號>〕:<操作碼>〔<操作數>〕;〔<注釋>〕
1)、標號
標號是語句地址的標志符號,有關標號的規定如下:
標號是由1-8個ASCII字符組成,但頭一個字符必須是字母,其余字符可以是字母、數字或其它特定字符。
不能使用本匯編語言已經定義了的符號作為標號,如指令助記符、偽指令記憶符以及寄存器的符號名稱等。
同一標號在一個程序中只能定義一次,不能重復定義。
標號的有無取決于本程序中的其它語句是否需要訪問這條語句。
2)、操作碼
操作碼用于規定語句執行的操作內容,操作碼是以指令助記符或偽指令助記符表示的,操作碼是匯編指令格式中唯一不能空缺的部分。
3)、操作數
操作數用于給指令的操作提供數據或地址。
4)、注釋
注釋不屬于語句的功能部分,它只是對語句的解釋說明。
5)、分界符(分隔符)
分界符用于把語句格式中的各部分隔開,以便于區分,包括空格、冒號、分號或逗號等多種符號。
冒號(:)用于標號之后
空格( )用于操作碼和操作數之間
逗號(,)用于操作數之間
分號(;)用于注釋之前
3、指令的長度
在MCS-51指令系統中,有一字節、二字節和三字節等不同長度的指令。
二、MCS-51單片機的尋址方式
尋址:如何指定操作數或其所在單元。
根據指定方法的不同,MCS- 51單片機共有7種尋址方式。
1、寄存器尋址方式
定義:操作數在寄存器中。
尋址范圍:
·通用寄存器,共有4組共32個通用寄存器。
·部分專用寄存器。例如累加器A、AB寄存器對以及數據指針DPTR等。
2、直接尋址方式
定義:指令中操作數直接以單元地址的形式給出。
尋址范圍:
·低128單元。在指令中直接以單元地址形式給出。
·專用寄存器。專用寄存器除以單元地址形式給出外,還可以以寄存器符號形式給出。
3、寄存器間接尋址方式
定義:寄存器中存放的是操作數的地址,即操作數是通過寄存器間接得到的。
注意:在寄存器間接尋址方式中,應在寄存器的名稱前面加前緩標志“@”。
尋址范圍:
·內部RAM低128單元
只能使用R0或R1作間址寄存器(地址指針),其通用形式為@Ri(i=0或1)。
·外部RAM 64 KB
只能使用DPTR作間址寄存器,其形式為@DPTR。
·外部RAM的低256單元
間址寄存器為DPTR、R0、R1,
·堆找操作指令(PUSH和POP)
即以堆找指針(SP)作間址寄存器的間接尋址方式。
4、立即尋址方式
定義:操作數在指令中直接給出。
5、變址尋址方式
定義:以DPTR或PC作基址寄存器,以累加器A作變址寄存器,并以兩者內容相加形成的16位地址作為操作數地址。
說明:
·變址尋址方式只能對程序存儲器進行尋址,尋址范圍可達64 KB.
·變址尋址的指令只有3條:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
6、位尋址方式
尋址范圍:
·內部RAM中的位尋址區,單元地址為20H~2FH,共16個單元128位,位地址是00H~7FH。兩種表示方法:一種是位地址;另一種是單元地址加位。
·專用寄存器的可尋址位
4種表示方法:
直接使用位地址。例如PSW寄存器位5地址為0D5H。
位名稱表示方法。例如PSW寄存器位5是F0標志位,則可使用F0表示該位。
單元地址加位數的表示方法。例如PSW寄存器位5,表示為0DOH.5。
專用寄存器符號加位數的表示方法。例如PSW寄存器的位5,表示為PSW.5。
7、相對尋址方式
為解決程序轉移而專門設置的,為轉移指令所采用。
目的地址=轉移指令地址+轉移指令字節數+ rel
第二節 MCS-51 單片機指令分類介紹
MCS- 51單片機指令系統共有指令111條,分為5大類:
數據傳送類指令(29條)
算術運算類指令(24條)
邏輯運算及移位類指令(24條)
控制轉移類指令(17條)
位操作類指令(17條)
一、指令格式中符號意義說明
Rn—當前寄存器組的8個通用寄存器R0~R7,所以n=0~7。
Ri—可用作間接尋址的寄存器,只能是R0、R1兩個寄存器,所以i=0、l。
direct—8位直接地址,在指令中表示直接尋址方式,尋址范圍256個單元。其值包括0~127(內部RAM低128單元地址)和128~255(專用寄存器的單元地址或符號)。
#data—8位立即數。
#datal6—16位立即數。
addr16—16位目的地址,只限于在LCALL、LJMP指令中使用。
addrl l—11位目的地址,只限于在ACALL和AJMP指令中使用。
rel—相對轉移指令中的偏移量,為8位帶符號補碼數。
DPTR數據指針。
bit—內部RAM(包括專用寄存器)中的直接尋址位。
A—累加器。ACC直接尋址方式的累加器。
B—寄存器B。
C—進位標志位,它是布爾處理機的累加器,也稱之為累加位。
@—間址寄存器的前級標志。
/—加在位地址的前面,表示對該位狀態取反。
(X)—某寄存器或某單元的內容。
((X))—由X間接尋址的單元中的內容。
—箭頭左邊的內容被箭頭右邊的內容所取代。
二、數據傳送類指令
傳送指令中有從右向左傳送數據的約定,即指令的右邊操作數為源操作數,表達的是數據的來源;而左邊操作數為目的操作數,表達的則是數據的去向。數據傳送指令的特點為:把源操作數傳送到目的操作數,指令執行后,源操作數不改變,目的操作數修改為源操作數。
1.內部RAM數據傳送指令組
通用格式為:
MOV<目的操作數>,<源操作數>
1)以累加器為目的操作數的指令
MOV A,Rn;A Rn,(n=0~7)
MOV A,direct;A direct)
MOV A,@Ri;A ((Ri)) (i=0、1)
MOV A,#data;A data
2)以寄存器Rn為目的操作的指令
MOV Rn,A;Rn (A),(n=0~7)
MOV Rn,direct;Rn (direct),(n=0~7)
MOV Rn,#data;Rn data,(n=0~7)
3)以直接地址為目的操作數的指令
MOV direct,A;direct (A)
MOV direct,Rn;direct Rn,(n=0~7)
MOV directl,direct2;direct 1 (direct2)
MOV direct,@Ri;direct (Ri),(i=0、1)
MOV direct,#data;direct data
4)以間接地址為目的操作數的指令
MOV @Ri,A;(Ri) (A)
MOV @Ri,direct;(Ri) (direct)
MOV @Ri,#data;(Ri) data
5)十六位數的傳遞指令
MOV DPTR,#data16
功能:將一個16位的立即數送人DPTR中去。其中高8位送人DPH,低8位送入DPL。
例 將片內RAM的15H單元的內容0A7H送55H單元。
解法1 MOV 55H,15H
解法2 MOV R6,15H
MOV 55H,R6
解法3 MOV R1,#15H
MOV 55H,@R1
解法4 MOV A,15H
MOV 55H,A
例 理解表2-8所列指令的執行結果。
2、外部RAM數據傳送指令
MOVX A,@Ri;A ((Ri))
MOVX @Ri,A;(R0) (A)
MOVX A,@DPTR;A ((DPTR))
MOVX @DPTR,A;(DPTR) (A)
要點分析:
1)在MCS-51中,與外部存儲器RAM打交道的只可以是累加器A,所有片外RAM數據傳送必須通過累加器A進行。
2)要訪問片外RAM,必須要知道RAM單元的16位地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)是一個8位的寄存器,所以只能訪問片外RAM低256個單元,即0000H~00FFH。
3)使用外部RAM數據傳送指令時,應當首先將要讀或寫的地址送人DPTR或Ri中,然后再用讀寫命令。
例 將外部RAM中0010H單元中的內容送人外部RAM中2000H單元中。程序如下:
MOV R0,#10H
MOVX A,@R0
MOV DPTR,#2000H
MOVX @DPTR,A
3、程序存儲器數據傳送指令
指令介紹:
MOVC A,@A+DPTR;A ((A)十(DPTR))(遠程查表指令)
MOVC A,@A+ PC;A ((A)+(PC))(近程查表指令)
要點分析:
1)這兩條指令尋址范圍為64KB,指令首先執行16位無符號數的加法操作,獲得基址與變址之和,“和”作為程序存儲器的地址,該地址中的內容送人A中。
2)第二條指令與第一條指令相比,由于PC的內容不能通過數據傳送指令來改變,而且隨該指令在程序中的位置變化而變化,因此在使用時需對變址寄存器A進行修正。
以上兩條MOVC是64KB存儲空間內的查表指令,實現程序存儲器到累加器的常數傳送,每次傳送一個字節。
例 在片內20H單元有一個BCD數,用查表法獲得相應的ASCII碼,并將其送入21H單元。其子程序為:(設當(20H)=07H時)
ORG 1000H;指明程序在ROM中存放始地址
1000H BCD_ASCl:MOV A,20H;A (20H),(A)=07H
1002H ADD A,#3;累加器(A)=(A)+3,修正偏移量
1004H MOVC A,@A+PC; PC當前值1005H
1005H MOV 21H,A (A)+(PC)=0AH+1005H=100FH
1007H RET (A)=37H,A ROM(100FH)
1008H TAB:DB 30H
1009H DB 31H
100AH DB 32H
100BH DB 33H
100CH DB 34H
100DH DB 35H
100EH DB 36H
100FH DB 37H
1010H DB 38H
1011H DB 39H
一般在采用PC作基址寄存器時,常數表與MOVC指令放在一起,稱為近程查表。當采用DPTR作基址寄存器時,程序如例6所示,TAB可以放在64KB程序存儲器空間的任何地址上,稱為遠程查表,不用考慮查表指令與表格之間的距離。
例6 同例5用遠程查表指令如下:
ORG 1000
BCD_ASC2:MOV A,20H
MOV DPTR,#TAB;TAB首址送DPTR
MOVC A,@A+DPTR;查表
MOV 21H,A
RET
TAB:同例5
4、堆棧操作指令
壓入 PUSH direct;(SP) (SP)+1,(SP) (direct)
彈出 POP direct;direct ((SP)),(SP) (SP)-1
要點分析:
堆棧操作的特點是“先進后出”,在使用時應注意指令順序。
例 分析以下程序的運行結果
MOV R2,#05H
MOV A,#01H
PUSH ACC
PUSH 02H
POP ACC
POP 02H
結果是(R2)=01H,而(A)=05H。也就是兩者進行了數據交換。因此:使用堆棧時,人棧的順序和出棧的順序必須相反,才能保證數據被送回原位,即恢復現場。
5、數據交換指令
(1)字節交換指令
XCH A,Rn;(A) (Rn)
XCH A,@Ri;(A) (Ri)
XCH A,direct;(A) (direct)
(2)半字節交換指令
XCHD A,@Ri;(A)0-3 (Ri)0-3
(3)累加器A高低半字節交換指令
SWAP A;(A)0-3 (A)4-7
數據交換主要是在內部RAM單元與累加器A之間進行。
例 將片內RAM 60H單元與61H單元的數據交換
不能用:XCH 60H,61H
應該寫成:MOV A,60H
XCH A,61H
MOV 60H,A
三、算術運算類指令
1、加法指令組
ADD A,Rn ;A (A)+(Rn )
ADD A,direct;A (A)+(direct)
ADD A,@Ri;A (A)+((Ri))
ADD A,#data;A (A)+data
2、帶進位加法指令
ADDC A,Rn;A (A)十(Rn)十(CY)
ADDC A,direct;A (A)十(direct)+(CY)
ADDC A,@R;A (A)十((Ri))十(CY)
ADDC A,#data;A (A)十data+(CY)
3、帶借位減法指令組
SUBB A,Rn;A (A)-(Rn)-(CY)
SUBB A,direct;A (A)-(direct)-(CY)
SUBB A,@Ri;A (A)-((Ri))-(CY)
SUBB A,#data;A (A)-data-(CY)
4、加1指令組
INC A;A (A)十1
INC R.;Rn (Rn)+1
INC direct;direct (direct)+1
INC @Ri;(Ri) ((Ri)))+1
INC DPTR;DPTR (DPTR)+1
5、減1指令
DEC A;A (A)-1
DEC direct;direct (direct)-1
DEC @Ri;(Ri) ((Ri))-1
DEC Rn;Rn (Rn)-1
6、乘法、除法指令
MUL AB;A×B=BA
DIV AB;A=B= A. . . B
要點分析:
MUL指令實現8位無符號數的乘法操作,兩個乘數分別放在累加器A和寄存器B中,乘積為16位,低8位放在A中,高8位放在B中;DIV指令實現8位無符號數除法,被除數放在A中,除數放在B中,指令執行后,商放在A中而余數放在B中。
7、十進制加法調整指令
DA A
要點分析:
1)這條指令必須緊跟在ADD或ADDC指令之后,且這里的ADD或ADDC的操作是對壓縮的BCD數進行運算。
2)DA指令不影響溢出標志。
例 設(A)=56H,(R7)=78H,執行指令:
ADD A,R7
DA A
結果:(A)=34H,(CY)=1
例設計將兩個4位壓縮BCD碼數相加程序。其中一個數存放在30H(存放十位,個位)、31H(存放千位,百位)存儲器單元,另一個加數存放在32H(存放低位)、33H(存放高位)存儲單元,和數存到30H, 31H單元。
程序如下:
MOV R0,#30H;地址指針指向一個加數的個位、十位
MOV R1,#32H;另一個地址指針指向第二個加數的個位、十位
MOV A,@R0;一個加數送累加器
ADD A,@R1;兩個加數的個位、十位相加
DA A;調整為BCD碼數
MOV@R0,A;和數的個位、十位送30H單元
INC R0;兩個地址指針分別指向兩個加數的百位、千位
INC R1
MOV A,@R0;一個加數的百位、千位送累加器
ADDC A,@R1;兩個加數的百位、千位和進位相加
DA A;調整為BCD碼數
MOV @R0,A;和數的百位、千位送31H單元
四、邏輯與運算指令組
1、邏輯與運算指令組
運算規則為:0·0=0 0·1=0 1·0=0 1·1=1
ANL A,Rn;A (A)∧(Rn)
ANL A,direct;A (A)∧(direct)
ANL A,@Ri;A (A)∧((Ri))
ANL A,#data;A (A)∧data
ANL direct,A;direct (direct)∧(A)
ANL direct,#data;direct (direct)∧data
2、邏輯或運算指令組
運算規則為:0+0=0 0+1=0 1+0=1 1+1=1
ORL A,Rn;A (A)∨(Rn)
ORL A,direct;A (A)∨(direct)
ORL A,@Ri;A (A)∨((Ri))
ORL A,#data;A (A)∨data
ORL direct,A;direct (direct)∨(A)
ORL direct,#data;direct (direct)∨data
3、邏輯異或運算指令組
運算規則為:0⊕0=0,1⊕1=0,0⊕1=1,1⊕0=1
XRL A,Rn;A (A)⊕(Rn)
XRL A,direct;A (A)⊕(direct)
XL A,@Ri;A (A)⊕((Ri))
XRL A,#data;A (A)⊕data
XRL direct,A;direct (direct)⊕(A)
XRL direct,#data;direct (direct)⊕data
例 試分析下列程序執行結果
MOV A,#0FFH;(A)=0FFH
ANL P1,#00H;SFR中P1口清零
ORL P1,#55H;P1口內容為55H
XRL P1,A;P1口內容為0AAH
4、累加器清"0”和取反指令組
累加器清“0”指令一條:
CLR A;A 0
累加器按位取反指令一條:
CPL A,A (A)
要點分析:
1)邏輯運算是按位進行的,累加器的按位取反實際上是邏擇非運算。
2)當需要只改變字節數據的某幾位,而其余位不變時,不能使用直接傳送方法,只能通過邏樣運算完成。
例 將累加器A的低4位傳送到P1口的低4位,但P1口的高4位需保持不變。對此可由以下程序段實現:
MOV R0,A;A內容暫存R0
ANL A,#0FH;屏蔽A的高4位(低4位不變)
ANL P1,#0F0H;屏蔽P1口的低4位(高4位不變)
ORL P1,A;實現低4位傳送
MOV A,R0;恢復A的內容
5、移位指令
(1)累加器內容循環左移
RL A;An+1 An n=0~6,A0 A7
(2)累加器帶進位標志循環左移
RLC A;An+1 An n=0~6,A0 C C A7
(3)累加器內容循環右移
RR A;An An+1 n=0~6,A7 A0
(4)累加器帶進位標志循環右移
RRC A;An An+1 n=0~6,A7 C C A0
例 試用三種方法將累加器A中無符號數乘2。
答:方法1:
CLR C
RLC A
方法2:
CLR C
MOV R0,A
ADD A,R0
方法3:
MOV B,#2
MUL AB
五、控制轉移指令組
1、無條件轉移指令組
不規定條件的程序轉移稱之為無條件轉移。MCS- 51共有4條無條件轉移指令:
1)、長轉移指令
LJMP addr16;PC addrl6
轉移范圍64KB,因此稱之為“長轉移”。
2)、絕對轉移指令
AJMP addrll;PC (PC)+2;PC0 ~10 addr1l
轉移范圍2KB
3)、短轉移指令
SJ MP rel
rel為相對偏移量。
計算目的地址,并按計算得到的目的地址實現程序的相對轉移。計算公式為:
目的地址= (PC) + 2+rel
4)、變址尋址轉移指令
JMP @A+DPTR;PC (A)+(DPTR)
指令以DPTR內容為基址,而以A的內容作變址,轉移的目的地址由A的內容和DPTR內容之和來確定,即目的地址=(A)+(DPTR)
例 ORG 1000H
MOV DPTR,#TAB;將TAB所代表的地址送人數據指針DPTR
MOV A,R1;從R1中取數
MOV B,#2
MUL AB;A乘以2,AJMP語句占2個字節,且是連續存放的
JMP@A+DPTR;跳轉
TAB: AJMP S0;跳轉表格
AJMP S1
AJMP S2
S0:S0子程序段
S1:S1子程序段
S2:S2子程序段
END
2、條件轉移指令組
所謂條件轉移就是程序轉移是有條件的。執行條件轉移指令時,如指令中規定的條件滿足,則進行程序轉移,否則程序順序執行。條件轉移有如下指令:
1)、累加器判零轉移指令
JZ rel;若(A)=0,則 PC (PC)+2+rel 轉移
若(A)≠0,則PC (PC)+2 順序執行
JNZ rel;若(A)≠0,則PC (PC)+2+rel 轉移
若(A)=0,則PC (PC)+2 順序執行
例 將外部RAM的一個數據塊(首址為DATAl)傳送到內部RAM(首址為DATA2),遇到傳送的數據為零時停止。
START:MOV R0,#DATA2;置內部RAM數據指針
MOV DPTR,#DATAl;置外部RAM數據指針
LOOPl:MOVX A,@DPTR;外部RAM單元內容送A
JZ LOOP2;判傳送數據是否為零,A為零則轉移
MOV @R0,A;傳送數據不為零,送內部RAM
INC R0;修改地址指針
INC DPTR
SJMP LOOP1;繼續傳送
LOOP2:RET;結束傳送,返回主程序
2)、數值比較轉移指令
數值比較轉移指令把兩個操作數進行比較,比較結果作為條件來控制程序轉移。
共有四條指令:
CJNE A, # data, rel
CJNE A, direct, rel
CJNE Rn, # data, rel
CJNE @R, # data, rel
指令的轉移可按以下3種情況說明:
若左操作數=右操作數,則:程序順序執行PC (PC)十3
進位標志位清“0”(CY)=0
若左操作數>右操作數,則:程序轉移 PC (PC)+3+rel
進位標志位清“0”(CY)=0
若左操作數<右操作數,則:程序轉移PC (PC)+3+rel
進位標志位里“1”(CY)=1
3)、減1條件轉移指令
把減1與條件轉移兩種功能結合在一起的指令。共兩條:
·寄存器減1條件轉移指令
DJNZ Rn,rel
其功能為:寄存器內容減1,如所得結果為0,則程序順序執行,如沒有減到0,則程序轉移。具體表示如下:
Rn (Rn)-1若(Rn)≠0,則PC (PC)+2+rel
若(Rn)=0,則PC (PC)十2
·直接尋址單元減1條件轉移指令
DJNZ direct,rel
其功能為:直接尋址單元內容減1,如所得結果為0,則程序順序執行;如沒有減到0,則程序轉移。具體表示如下:
direct (direct)-1若(direct)≠0,則PC (PC)+3+rel
若(direct)=0,則PC (PC)+3
要點分析:這兩條指令主要用于控制程序循環。如預先把寄存器或內部RAM單元賦值循環次數,則利用減1條件轉移指令,以減1后是否為0作為轉移條件,即可實現按次數控制循環。
例如 把2000H開始的外部RAM單元中的數據送到3000H開始的外部RAM單元中,數據個數已在內部RAM35H單元中。
MOV DPTR,#2000H;源數據區首址
PUSH DPL;源首址暫存堆棧
PUSH DPH
MOV DPTR,#3000H;目的數據區首址
MOV R2 ,DPL;目的首址暫存寄存器
MOV R3 ,DPH
LOOP: POP DPH;取回源地址
POP DPL
MOVX A,@DPTR;取出數據
INC DPTR;源地址增量
PUSH DPL;源地址暫存堆找
PUSH DPH
MOV DPL,R2 ;取回目的地址
MOV DPH,R3
MOVX @DPTR,A;數據送目的區
INC DPTR;目的地址增量
MOV R2 ,DPL;目的地址暫存寄存器
MOV R3 ,DPH
DJNZ 35H,LOOP;沒完,繼續循環
RET;返回主程序
3、子程序調用與返回指令組
子程序結構,即把重復的程序段編寫為一個子程序,通過主程序調用而使用它。減少了編程工作量,縮短了程序的長度。
調用指令在主程序中使用,而返回指令則應該是子程序的最后一條指令。執行完這條指令之后,程序返回主程序斷點處繼續執行。如圖所示。
1)、絕對調用指令
ACALL addr11
子程序調用范圍是2KB,其構造目的地址是在PC+2的基礎上,以指令提供的11位地址取代PC的低11位,而PC的高5位不變。即:
PC (PC)+2
SP (SP)+1,(SP) (PC)7 ~0
SP (SP)+1,(SP) (PC)15 ~8
PC10 ~0 addr11
2)、長調用指令
LCALL addr16
調用地址在指令中直接給出,子程序調用范圍是64KB。
3)、返回指令
RET;子程序返回指令
RETI;中斷服務子程序返回指令
功能:子程序返回指令執行子程序返回功能,從堆找中自動取出斷點地址送給程序計數器PC,使程序在主程序斷點處繼續向下執行。
4、空操作指令
NOP;PC (PC)+1
空操作指令也算一條控制指令,即控制CPU不作任何操作,只消耗一個機器周期的時間。空操作指令是單字節指令,因此執行后PC加1,時間延續一個機器周期。NOP指令常用于程序的等待或時間的延遲。
六、位操作類指令
1、位傳送指令組
MOV C,bit;CY (bit)
MOV bit,C;bit (CY)
2、位置位復位指令組
SETB C;CY 1
SETB bit;bit 1
CLR C;CY 0
CLR bit;bit 0
3.位運算指令組
與: ANL C,bit;CY (CY)∧(bit)
ANL C,/bit;CY (CY)∧(bit)
或: ORL C,bit;CY (CY)∨(bit)
ORL C,/bit;CY (CY)∨(bit)
非 CPL C;CY (/CY)
CPL bit;bit (/bit)
例 試編程將內部數據存儲器40H單元的第0位和第7位置“1”,其余位變反。
答:根據題意編制程序如下:
MOV A,40H
CPL A
SETB ACC. 0
SETB ACC. 7
MOV 40H,A
例 請用位操作指今,求下面邏輯方程:
P1.7=ACC.0×(B.0十P2.1)+P3.2
MOV C,B.0
ORL C,P2.1
ANL C,ACC.0
ORL C,/P3.2
MOV P1.7,C
4、位控制轉移指令組
位控制轉移指令就是以位的狀態作為實現程序轉移的判斷條件。
1)、以C狀態為條件的轉移指令
JC rel;(CY)=1轉移,否則順序執行
JNC rel;(CY)=0轉移,否則順序執行
2)、以位狀態為條件的轉移指令
JB bit,rel;位狀態為“1”轉移
JNB bit,rel;位狀態為“0”轉移
JBC bit,rel;位狀態為“1”轉移,并使該位清“0”。
第五章 匯編語言程序設計
計算機程序設計語言通常分為三類:
機器語言:能被計算機直接識別和執行,但它不易為人們編寫和閱讀,因此,人們一般不再用它來進行程序設計。
高級語言:一種面向過程和問題并能獨立于機器的通用程序設計語言,是一種接近人們自然語言和常用數字表達式的計算機語言。編程的速度快而且編程者不必熟悉機器內部的硬件結構而可以把主要精力集中于掌握語言的語法規則和程序的結構設計方面。但程序執行的速度慢且占據的存儲空間較大。
匯編語言:一種面向機器的語言,它的助記符指令和機器語言保持著一一對應的關系。也就是說,匯編語言實際上就是機器語言的符號表示。用匯編語言編程時,編程者可以直接操作到機器內部的寄存器和存儲單元,能把處理過程描述得非常具體。因此通過優化能編制出高效率的程序,即可節省存儲空間又可提高程序執行的速度,在空間和時間上都充分發揮了計算機的潛力。在實時控制的場合下,計算機的監控程序大多采用匯編語言編寫。
第一節 偽指令及匯編語言源程序匯編
一、偽指令
偽指令:不屬于指令集中的指令,在匯編時不產生目標代碼,不影響程序的執行,僅指明在匯編時執行一些特殊的操作。
1、定義起始地址偽指令ORG
格式:ORG 操作數
說明:操作數為一個16位的地址,它指出了下面的那條指令的目標代碼的第一個字節的程序存儲器地址。在一個源程序中,可以多次定義ORG偽指令,但要求規定的地址由小到大安排,各段之間地址不允許重復。
2、定義賦值偽指令EQU
格式:字符名稱 EQU 操作數
說明:該指令是用來給字符名稱賦值。在同一個源程序中,任何一個字符名稱只能賦值一次。賦值以后,其值在整個源程序中的值是固定的,不可改變。對所賦值的字符名稱必須先定義賦值后才能使用。其操作數可以是8位或16位的二進制數,也可以是事先定義的表達式。
3、定義數據地址賦值偽指令DATA
格式:字符名稱 DATA 操作數
說明:DATA偽指令的功能和EQU偽指令相似,不同之處是DATA偽指令所定義的字符名稱可先使用后定義,也可先定義后使用。在程序中它常用來定義數據地址。
4、定義字節數據偽指令DB
格式:[標號:]DB數據表
說明:該偽指令是用來定義若干字節數據從指定的地址單元開始存放在程序存儲器中。數據表是由8位二進制數或由加單引號的字符組成,中間用逗號間隔,每行的最后一個數據不用逗號。
DB偽指令確定數據表中第一個數據的單元地址有兩種方法,一是由ORG偽指令規定首地址,二是由DB前一條指令的首地址加上該指令的長度。
5、定義雙字節數據偽指令DW
格式:[標號:]DW數據表
說明:該偽指令與DB偽指令的不同之處是,DW定義的是雙字節數據,而DB定義的是單字節數據,其他用法都相同。在匯編時,每個雙字節的高8位數據要排在低地址單元,低8位數據排在高地址單元。
6、定義預留空間偽指令DS
格式:〔標號:〕DS操作數
說明:該偽指令是用于告訴匯編程序,從指定的地址單元開始(如由標號指定首址),保留由操作數設定的字節數空間作為備用空間。要注意的是DB、DW、DS偽指令只能用于程序存儲器,而不能用于數據存儲器。
7、定義位地址賦值偽指令BIT
格式:字符名稱BIT位地址
說明:該偽指令只能用于有位地址的位(片內RAM和SFR塊中),把位地址賦予規定的字符名稱,常用于位操作的程序中。
8、定義匯編結束偽指令END
格式:〔標號:〕END
說明:匯編結束偽指令END是用來告訴匯編程序,此源程序到此結束。在一個程序中,只允許出現一條END偽指令,而且必須安排在源程序的末尾。
二、匯編語言源程序匯編
用匯編語言編寫的源程序稱為匯編語言源程序。但是單片機不能直接識別,需要通過匯編將其轉換成用二進制代碼表示的機器語言程序,才能夠識別和執行。匯編通常由專門的匯編程序來進行,通過編譯后自動得到對應于匯編源程序的機器語言目標程序,這個過程叫機器匯編。另外還可用人工匯編。
一、匯編程序的匯編過程
匯編過程是將匯編語言源程序翻譯成目標程序的過程。機器匯編通常是在計算機上(與MCS一51單片機仿真器聯機)通過編譯程序實現匯編。
二、人工匯編
由程序員根據MCS - 51的指令集將匯編語言源程序的指令逐條人工翻譯成機器碼的過程叫人工匯編。
第三節 匯編語言程序設計舉例
匯編語言程序設計通常的步驟是:
(1)建立數學模型:根據課題要求,用適當的數學方法來描述和建立數學模型。
(2)確定算法:繪制程序流程圖算法是程序設計的基本依據。程序流程圖是編程時的思路體現。
(3)編寫源程序合理選擇和分配內存單元、工作寄存器。按模塊結構具體編寫源程序。
(4)匯編及調試程序通過匯編生成目標程序,經過多次調試,對程序運行結果進行分析,不斷修正源程序中的錯誤,最后得到正確結果,達到預期目的。
編寫一個應用系統的匯編語言源程序,其程序結構一般有順序結構、分支結構、循環結構、子程序結構等,如圖所示。
一、順序程序設計
順序程序:各類結構化程序塊中最簡單的一種。它按程序執行的順序依次編寫,在執行程序過程中不使用轉移指令,只是順序執行。
例 把A中的壓縮BCD碼轉換成二進制數。
解:此程序采用將A中的高半節(十位)乘以10,再加上A的低半字節(個位)的方法。編程如下:
MOV R2,A;暫存
ANL A,#F0H;屏蔽低4位
SWAP A
MOV B,#10
MUL AB;A中高半字節乘10
MOV R3,A
MOV A,R2;取原BCD數
ANL A,#0FH;取BCD數個位
ADD A,R3;個位與十位數相加
RET
二、分支程序的設計
分支程序主要是根據判斷條件的成立與否來確定程序的走向。因此在分支程序中需要使用控制轉移類指令。可組成簡單分支結構和多分支結構。
1 、單分支選擇結構
當程序的判斷僅有兩個出口,兩者選一,稱為單分支結構。通常用條件判斷指令來選擇并確定程序的分支出口。這類單分支選擇結構有三種典型的形式,見圖。
(1)圖a,當條件滿足時執行分支程序2,否則執行分支程序1。
(2)圖b,當條件滿足時跳過程序段1,從程序段2執行,否則順序執行程序段1,再執行程序段2。
(3)圖c,這是分支結構的一種特殊形式。當條件滿足時,停止執行程序段1。
例 設內部RAM 40H和41H單元中存放2個8位無符號二進制數,試編程找出其中的大數存人30H單元中。
解: MOV A,40H
CJNE A,41H,LOOP;取2個數進行比較
LOOP: JNC LOOP1;根據CY值,判斷單分支出口
MOV A,41H;41H單元中是大數
LOOPl:MOV 30H,A;40H單元中是大數
2 、多分支選擇結構
當程序的判別部分有兩個以上的出口流向時,稱為多分支選擇結構。一般有兩種形式,見圖。
例 設變量X的值存放在內部RAM的30H單元中,編程求解下列函數式,將求得的函數值Y存人40H單元。
X+1 (X≥100)
Y= 0 (10≤X<100)
X一1 (X<10)
解:自變量X的值在三個不同的區間所得到的函數值Y不同,編程時要注意區間的劃分。程序流程圖如圖4一4所示。程序如下:
MOV A,30H;取自變量X值
CJNE A,#10,LOOP;與10比較,A中值不改變
LOOP:JC LOOP2;若X< 10,轉LOOP2
CJNE A,#100,LOOP1;與100比較
LOOP1:JNC LOOP3;若X>100,轉LOOP3
MOV 40H,#00H;因10≤X<100,故Y=0
SJMP EXIT
LOOP2:DEC A;因X<10,故Y=X一1
MOV 40H,A
SJMP EXIT,
LOOP3:INC A;若X>100,故Y=X+1
MOV 40H, A
EXET:RET
例 某溫度控制系統,采集的溫度值Ta放在累加器A中。此外,在內部RAM54H單元存放控制溫度下限值(T54),在55H單元存放控制溫度上限值(T55)。若Ta>T55,程序轉向JW(降溫處理程序);若Ta<T54,則程序轉向SW(升溫處理程序);若T55≥Ta≥T54,則程序轉向FH(返回主程序)。有關程序段如下:
CJNE A,55H,I.OOP1;Ta≠55,轉向LOOP1
AJMP FH;Ta=T55,返回
I.OOPl:JNC JW;(CY)=0,表明Ta>T55,轉降溫處理程序
CJNE A,54H,LOOP2;Ta≠T54,轉向LOOP2
AJMP FH;Ta=T54,返回
LOOP2:JC SW;(CY)=1,表明Ta<T54,轉升溫處理程序
FH:RET;T55≥Ta≥T54,返回主程序
三、循環程序設計
1 、循環結構的組成
循環結構由4部分組成:初始化部分、循環處理部分、循環控制部分和循環結束部分。循環結構組成圖見圖。
(1)初始化部分用來設置循環處理之前的初始狀態,如循環次數的設置、變量初值的設置、地址指針的設置等。
(2)循環處理部分又稱為循環體,是重復執行的數據處理程序段,它是循環程序的核心部分。
(3)循環控制部分這部分用來控制循環繼續與否。
(4)結束部分這部分是對循環程序全部執行結束后的結果進行分析、處理和保存。
典型循環結構見圖所示。圖a為先處理后判斷的結構,圖b為先判斷后處理的結構。
根據循環程序的結構不同也可分為單重循環和多重循環。
對循環次數的控制有多種:循環次數是已知的,可用循環次數計數器控制循環;若循環次數是未知的,可以按條件控制循環。
2.循環程序設計
在一個循環程序的循環體中不包含另外的循環結構稱為單重循環。
例 設有一字符串以回車符為結束標志,并存放在內部RAM40H單元開始的連續存儲單元中,編寫測試字符串長度的程序。
分析:為測試字符串的長度,應使用逐個字符依次與回車符(ODH)比較的方法。為此需要設里一個字符串指針和一個長度計數器,字符串指針用于指定字符,長度計數器用于累加字符串的長度。如比較不相等,則長度計數器和字符串指針都加1,以繼續往下比較;如果比較相等,則表示該字符為回車符,字符串結束,長度計數器的值就是字符串的長度。
MOV R7,#0FFH;設里長度計數器初值
MOV R0,#3FH;Al字符串指針初值
LOOP:INC R7
INC R0
CJNE @R0,#ODH,LOOP
RET
例 設內部RAM存有一無符號數數據塊,長度為128字節,在以30H單元為首址的連續單元中。試編程找出其中最小的數,并放在20H單元。
解: MOV R7,#7FH;設置比較次數
MOV R0,#30H;設置數據塊首址
MOV A,@R0;取第一個數
MOV 20H,A;第一個數暫存于20H單元,作為最小數
LOOPl:INC R0
MOV A,@R0;依次取下一個數
CJNE A,20H,LOOP
LOOP:JNC LOOP2;兩數比較后,其中小的數放在20H單元
MOV 20H,A
LOOP2:DJNZ R7,LOOP1;R7中內容為零則比較完
SJMP$
例 80C51單片機的P1端口作檢出,經驅動電路接8只發光二極管,如圖4-2所示。當輸出為“1”時,發光二極管點亮;輸出位是“0”時為暗。試分析下述程序執行過程及發光二極管點亮的工作規律。
LP:MOV P1,#81H
LCALL DELAY
MOV P1,#42H
LCALL DELAY
MOV P1,# 24H
LCALL DELAY
MOV P1,#18H
LCALL DELAY
MOV P1,#24H
LCALL DELAY
MOV P1,#42H
LCALL DELAY
SJMP LP
子程序:
DELAY:MOV R2,#0FAH
L1:MOV R3,# 0FAH
L2:DJNZ R3,L2
DJNZ R2,L1
RET
答:上述程序執行過程及發光二極管點亮的工作規律為:首先是第1和第8個燈亮;延時一段時間后,第2和第7個燈亮;延時一段時間后,第3和第6個燈亮;延時一段時間后,第4和第5個燈亮;延時一段時間后,重復上述過程。
若系統的晶振頻率為6MHz,延時子程序DELAY的延時時間計算如下:
DELAY:MOV R2,#0FAH
L1:MOV R3,#0FAH
L2:DJNZ R3,L2
DJNZ R2,L1
RET
因為FAH=250,所以總時間T計算如下:
T=4+(250×4+4)×250十4=251008 us
若想加長延時時間,可以增加循環次數。若想縮短延時時間,可以減少循環次數。
例 根據圖4-2所示的線路,試編寫燈移位程序,即8個發光二極管依次亮一個,循環左移,一個一個地亮,循環不止。
答:根據題圖4一2所示的線路,編制燈亮移位程序如下:
MOV A,#1
L1:MOV P1,A
RL A
LCALL DELAY;DELAY同上題中的延時程序
SJMP Ll
例 編制一個循環閃爍燈的程序。有8個發光二極管,每次其中某個燈閃爍點亮10次后,轉移到下一個閃爍10次,循環不止。
解:本程序的硬件連接如圖5-16所示,8031的P1口輸出經74LS240 8路反相驅動后,點燃發光二極管。由圖可見,低電平時發光二極管可被點亮。編程如下:
MOV A,#01;初值
SHIM:LCALL FLASH;閃亮10次
RRA;右移
SJMP SHIM;循環
FLASH:MOV R2,#0AH;閃爍10次
FLASH1:MOV P1,A;點亮
LCALL DELAY;延時
MOV P1,#00H;熄滅
LCALL DELAY;延時
DJNZ R2,FLASH1;循環
RET
本程序中DELAY為延時子程序,初值可以自己按延時要求編制。
第六章 MCS-51 單片機中斷系統
第一節 概述
一、中斷的概念
中斷是指計算機暫時停止原程序的執行轉而為外部設備服務,并在服務完以后自動返回原程序執行的過程。
一個資源(CPU)面對多項任務,但由于資源有限,因此就可能出現資源競爭的局面,即幾項任務來爭奪一個CPU。而中斷技術就是解決資源競爭的有效方法,采用中斷技術可以使多項任務共享一個資源,所以中斷技術實質上就是一種資源共享技術。
二、引入中斷技術的優點:
1)提高了CPU的工作效率,實現了CPU和外部設備的并行工作。
2)實現實時控制。所謂實時控制,就是要求計算機能及時地響應被控對象提出的分析、計算和控制等請求,使被控對象保持在最佳工作狀態,以達到預定的控制效果。由于這些控制參數的請求都是隨機發出的,而且要求單片機必須作出快速響應并及時處理,對此,只有靠中斷技術才能實現。
3)便于突發故障(如硬件故障、運算錯誤、電源掉電、程序故障等)的及時發現,提高系統可靠性。
4)能使用戶通過鍵盤發出請求,隨時可以對運行中的計算機進行干預。
三、中斷源
向CPU發出中斷請求的來源稱之為中斷源。MCS- 51是一個多中斷源的單片機,以80C51為例,共5個中斷源,分別是外部中斷2個,定時中斷2個和串行中斷1個。
1、外中斷
外中斷是由外部信號引起的,共有2個中斷源,即外部中斷0和外部中斷1。中斷請求信號分別由引腳INT0(P3.2)INT1(P3.3)引入。
外部中斷請求有兩種信號方式,即電平方式和脈沖方式。可通過設置有關控制位進行定義。
電平方式的中斷請求是低電平有效。只要單片機在中斷請求引入端上采樣到有效的低電平時,就激活外部中斷。
脈沖方式的中斷請求則是脈沖的后沿負跳有效。CPU在兩個相隨機器周期對中斷請求引入端進行的采樣中,如前一次為高電平,后一次為低電平,即為有效中斷請求。
2、定時中斷
定時中斷足為滿足定時或計數的需要而設置的。當計數結構發生計數溢出時,即表明定時時間到或計數值已滿,請求是在單片機芯片內部發生的,無需在芯片上設里引入端。
3、串行中斷
串行中斷是為串行數據傳送的需要而設置的。每當串行口接收或發送完一組串行數據時,就產生一個中斷請求。請求是在單片機芯片內部自動發生的,不需在芯片上設里引入端。
第二節 中斷控制
一、定時器控制寄存器(TCON )
該寄存器用于保存外部中斷請求以及定時器的計數溢出。寄存器的內容及位地址表示如下:
1、IE0和IE1 外中斷請求標志位
當CPU采樣到INT0(INT1)端出現有效中斷請求時,IE0(IE1)位由硬件置“1”。在中斷響應完成后轉向中斷服務時,再由硬件自動清“0”。
2、IT0和IT1 外中斷請求觸發方式控制位
IT0(IT1)=1 脈沖觸發方式,后沿負跳有效。
IT0(IT1)=0 電平觸發方式,低電平有效。
由軟件置“1”或清“0"。
3、TF0和TF1 計數溢出標志位
當計數器產生計數溢出時,相應的溢出標志位由硬件置“1”。當轉向中斷服務時,再由硬件自動清“0"。計數溢出標志位的使用有兩種情況:
采用中斷方式時,作中斷請求標志位來使用;
采用查詢方式時,作查詢狀態位來使用。
二、串行口控制寄存器(SCON )
寄存器的內容及位地址表示如下:
1、TI 串行口發送中斷請求標志位
當發送完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,用軟件清“0”。
2、RI 串行口接收中斷請求標志位
當接收完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,用軟件清“0”。
串行中斷請求由TI和RI的邏輯或得到。就是說,無論是發送標志還是接收標志,都會產生串行中斷請求。
三、中斷允許控制寄存器(IE )
寄存器地址0A8H,位地址0AFH~0A8H。寄存器的內容及位地址表示如下:
1、EA中斷允許總控制位
EA=0 中斷總禁止,禁止所有中斷。
EA=1 中斷總允許,總允許后中斷的禁止或允許由各中斷源的中斷允許控制位進行設里。
2、EX0(EX1)外部中斷允許拉制位
EX0(EX1)=0 禁止外中斷
EX0(EX1)=l 允許外中斷
3、ET1和ET2 定時/計數中斷允許控制位
ET0(ET1)=0 禁止定時(或計數)中斷
ET0(ET1)=1 允許定時(或計數)中斷
4、ES串行中斷允許控制位
ES=0禁止串行中斷
ES=1允許串行中斷
四、中斷優先級控制寄存器IP
IP寄存器地址0B8H,位地址為0BFH~0B8H。寄存器的內容及位地址表示如下:
PX0外部中斷0優先級設定位;
PT0定時中斷0優先級設定位,
PX1外部中斷1優先級設定位;
PT1定時中斷1優先級設定位;
PS串行中斷優先級設定位。
為“0”的位優先級為低;為"1"的位優先級為高。
五、中斷優先級控制原則和控制邏輯
MCS- 51具有兩級優先級,具備兩級中斷服務嵌套的功能。其中斷優先級的控制原則是:
·低優先級中斷請求不能打斷高優先級的中斷服務;但高優先級中斷請求可以打斷低優先級的中斷服務,從而實現中斷嵌套。
·如果一個中斷請求已被響應,則同級的其它中斷服務將被禁止。即同級不能嵌套。
·如果同級的多個中斷請求同時出現,則按CPU查詢次序確定那個中斷請求被響應。其查詢次序為:外部中斷0 定時中斷0 外部中斷1 定時中斷1 串行中斷。
六、中斷初始化與中斷控制寄存器狀態設置
外中斷初始化共有三項內容:中斷總允許、外中斷允許和中斷方式設定。定時中斷則只有兩項內容,沒有中斷方式控制。
第三節 中斷系統的結構
一、 MCS-51中斷系統的響應過程
中斷過程:
中斷過程的三步曲:中斷響應、執行中斷服務程序及中斷返回。圖中的中斷源,就是指能提出中斷請求的計算機內部電路與外部設備。
下面分析一下中斷過程中的技術細節。
1、 中斷響應
中斷響應的條件:
基本條件有:
·有中斷源提出中斷請求;
·中斷總允許位EA=1,即CPU開放中斷;
·申請中斷的中斷源的中斷允許位為1,即沒有被屏蔽。
MCS- 51的CPU在每個機器周期采樣各中斷請求標志位,如有置位,只要以上條件滿足,且下列三種情況都不存在,那么,在下一周期CPU響應中斷。否則,采樣的結果被取消。這3種情況是:
·CPU正在處理同級或高級優先級的中斷。
·現行的機器周期不是所執行指令的最后一個機器周期。
·正在執行的指令是RETI或訪問IE、IP指令。CPU在執行RETI或訪問IE、IP的指令后,至少需要再執行一條其他指令后才會響應中斷請求。
MCS-51中斷系統在中斷響應時的技術措施為:
1)當前PC值送堆棧,也就是將CPU本來要取用的指令地址暫存到堆棧中保護起來,以便中斷結束時,CPU能找到原來程序的斷點處,繼續執行下去。這一措施是中斷系統自動保存完成。
2)保護現場時關閉中斷,以防其他中斷信號干擾。此時,中斷系統關閉該中斷源接收電路,其他中斷請求均被禁止。這一措施需用指令完成
3)按中斷源入口地址進人中斷服務程序。
2、中斷服務程序
在中斷響應后,計算機調用的子程序稱為中斷服務程序。這是專門為外部設備或其他內部部件中斷源服務的程序段,其結尾必須是中斷返回指令RETI。
3、中斷返回
計算機在中斷響應時執行到RETI指令時,立即結束中斷并從堆棧中自動取出在中斷響應時壓入的PC當前值,從而使CPU返回原程序中斷點繼續進行下去。
二、中斷采樣、中斷查詢
1、中斷采樣
采樣就是CPU在每個機器周期對引腳INT0(P3.2)和INT1(P3.3)進行信號檢測,根據采樣結果設置TCON寄存器中相應的標志位,以便CPU在下一個機器周期檢測這些中斷標志位的狀態,了解是否有外部中斷申請,然后根據中斷初始化情況決定是否響應。
對于T0、T1、串行口中斷的中斷請求,都發生在芯片內部,可以直接設置TCON寄存器和SCON寄存器中相應的標志位,無須采樣。
2、 中斷查詢
CPU檢測TCON寄存器和SCON寄存器中各標志位的狀態,來決定有沒有中斷請求發生及是哪一個中斷請求。
三、中斷響應時間
定義:從檢測到中斷申請到轉去執行中斷服務程序所需的時間。
一般情況下中斷響應時間在3-8個機器周期之間。
四、中斷標志的清除方式
中斷標志清除方式有三種情況:
1)定時器T0、T1及邊沿觸發方式的外部中斷標志,TF0、TF1、IE0、IE1在中斷響應后由硬件自動清除,無需采取其他措施。
2)電平觸發方式的外部中斷標志IE1、IE0不能自動清除,必須撤除/INT0或/INT1的電平信號。
3)串行口中斷標志TI、RI不能由硬件清除,需用指令清除,
第四節 應用舉例
例 在下圖中有開關K,每扳動一次開關,就產生一個外部中斷請求。經P1.3~P1.0讀入開關K0~K3的狀態,取反后再由P1.7~P1.4輸出,驅動相應的發光二極管。主程序流程如圖
程序清單為:
ORG 1000H
STAR:AJMP MAIN
ORG 1003H
AJMP EXTR
ORG 1030H
MAIN:SETB IT0;脈沖邊沿觸發
SETB EX0;外部中斷0允許
SETB EA;總中斷允許
HERE:AJMP HERE;等待中斷
ORG 1200H
P1 EQU 90H
EXTR:MOV A,#0FH;中斷服務程序
MOV P1,A;熄發光二極管
MOV A,P1;輸入開關狀態
CPL A;狀態取反
ANL A,#0FH;屏蔽A的高半字節
SWAP A;A高低半字節交換
MOV P1,A;開關狀態愉出
RETI;中斷返回
第七章 MCS-51 單片機定時器 / 計數器
第一節 概 述
一、 定時方法
在單片機的控制應用中,可供選擇的定時方法有:
1、軟件定時
軟件定時:靠執行一個循環程序以進行時間延遲。
特點:時間精確,且不需外加硬件電路。但占用CPU,定時的時間不宜太長。
2、硬件定時
硬件定時:使用硬件電路完成時間較長的定時。
特點:定時功能全部由硬件電路完成,不占CPU時間。但需通過改變電路中的元件參數來調節定時時間,在使用上不夠靈活方便。
3、可編程定時器定時
可編程定時器定時:通過對系統時鐘脈沖的計數來實現的。
特點:計數值通過程序設定,改變計數值,也就改變了定時時間,靈活、方便。
MCS-51單片機采用的是可編程定時器定時方法。
二、MCS-51 定時器/計數器功能
1、計數功能
所謂計數是指時外部脈沖進行計數。外部脈沖通過T0(P3.4)、T1(P3.5)兩個信號引腳輸入。
輸入的脈沖在負跳變時有效,進行計數器加1(加法計數)。
計數脈沖的頻率不能高于晶振頻率的1/24。
2、定時功能
定時功能也是通過計數器的計數來實現的,不過此時的計數脈沖來自單片機的內部,即每個機器周期產生一個計數脈沖。也就是每個機器周期計數器加1。
第二節 定時器/計數器的控制寄存器
一、定時器控制寄存器(TCON )
1、TF0(TF1)計數溢出標志位
當計數器計數溢出(計滿)時,該位置“1”
查詢方式時,此位作狀態位供查詢,軟件清“0”;
中斷方式時,此位作中斷標志位,硬件自動清“0”。
2、TR0(TR1) 定時器運行控制位
TR0(TR1)=0 停止定時器/計數器工作
TR0(TR1)=1 啟動定時器/計數器工作
軟件方法使其置“1”或清“0”。
二、工作方式控制寄存器(TMOD )
各位定義如下:
1、GATE 門控位
GATE=0以運行控制位TR啟動定時器
GATE=1以外中斷請求信號(/IMT0或/INT1)啟動定時器
2、C/T 定時方式或計數方式選擇位
C/T=0定時工作方式
C/T=l計數工作方式
3、M1、M0 工作方式選擇位
M1、M0=00 方式0
M1、M0=01 方式1
M1、M0=10 方式2
M1、M0=11 方式3
三、中斷允許控制寄存器(IE )
1、EA中斷允許總控制位
2、ET0和ET1定時/計數中斷允許控制位
ET0(ET1)=0禁止定時/計數中斷
ET0(ET1)=1允許定時/計數中斷
第三節 定時器 / 計數器的工作方式
一、方式0
1、電路邏輯結構
方式0是13位計數結構的工作方式,其計數器由TH0全部8位和TL0的低5位構成。TH0的高3位棄之不用。
下圖是定時器/計數器0在工作方式0的邏樣結構(定時器/計數器1與此完全相同)。
在方式0下
當為計數工作方式時,計數值的范圍是:
1~8192(213 )
當為定時工作方式時,定時時間的計算公式為:
(213 一計數初值)×晶振周期×12 或 (213 -計數初值)×機器周期
二、 方式1
16位計數結構的工作方式,計數器由TH0全部8位和TL0全部8位構成。
其邏樣電路和工作情況與方式0完全相同。
在方式1下
當為計數工作方式時,計數值的范圍是:
1~65536(216 )
當為定時工作方式時,定時時間的計算公式為:
(216 一計數初值)×晶振周期×12 或 (216 -計數初值)×機器周期
三、 方式2
1、電路邏輯結構
初始化時,8位計數初值同時裝入TL0和TH0中。當TL0計數溢出時,置位TF0,同時把保存在預置寄存器TH0中的計數初值自動加載TL0,然后TL0重新計數。
四、方式3
1.工作方式3下的定時器/計數器0
在工作方式3下,定時器/計數器0被拆成兩個獨立的8位計數器TL0和TH0。其中TL0既可以計數使用,又可以定時使用,定時器/計數器0的各控制位和引腳信號全歸它使用。TH0則只能作為簡單的定時器使用。
2.工作方式3下的定時器/計數器1
如果定時器/計數器0已工作在工作方式3,則定時器/計數器1只能工作在方式0、方式1或方式2下,因為它的運行控制位TR1及計數溢出標志位TF1已被定時器/計數器0借用,如圖所示。在這種情況下,定時器/計數器1通常是作為串行口的波特率發生器使用,以確定串行通信的速率。
第四節 定時器 / 計數器的編程應用舉例
定時器/計數器初始化的步驟:
(1)確定工作方式、操作模式、啟動控制方式一寫入TMOD寄存器。
(2)設置定時器或計數器的初值一可直接將初值送人TH0、TL0或TH1、TL1
(3)根據要求是否采用中斷方式一直接對IE寄存器賦值。
(4)啟動定時器工作—可使用SETB TR0、SETB TR1。
例1 設單片機晶振頻率為6MHz,使用定時器1以方式。產生周期為500Hz的等寬正方波連續脈沖,并由P1.0輸出。以查詢方式完成。
1.計算計數初值
欲產生500Hz的等寬正方波脈沖,只需在P1.0端以250Hz為周期交替輸出高低電平即可實現,為此定時時間應為250Hz。使用6MHz晶振,則一個機器周期為2us。方式0為13位計數結構。設待求的計數初值為X,則:
(213 -X)×2×106 =250×106
求解得:X=8067。二進制數表示為1111110000011B。十六進制表示為0FC03H。
2.TMOD
M1M0=00 C/T=0 GATE=0 TMOD=00H.
3.由定時器控制寄存器TCON中的TR1位控制定時的啟動和停止
TR1=1啟動,TR1=0停止。
4.程序設計
MOV TMOD,#00H
MOV TH1,#0FCH
MOV TL1,#03H
MOV IE,#00H;禁止中斷
LOOP:SETB TR1;啟動定時
JBC TF1,LOOP1;查詢計數溢出
AJMP LOOP
LOOP1:MOV TH1,#0FCH;重新設豆計數初值
MOV TL1,#03H
CLR TF1;計數溢出標志位清“0"
CPL P1.0;
AJMP LOOP;重復循環
例2 題目同上,但以中斷方式完成。即單片機晶振頻率為6MHz,使用定時器1以工作方式1產生周期為500的等寬連續正方波脈沖,P1.0端輸出。
1.計算計數初值
TH1=0FFH TL1=83H
2. TMOD寄存器初始化
TMOD=10H
3.程序設計
主程序: MOV TMOD,#10H;定時器1工作方式1
MOV TH1,#0FFH;設里計數初值
MOV TL1,#83H
SETB EA;開中斷
SETB ET1;定時器1允許中斷
SETB TR1;定時開始
HERE:SJMP$;等待中斷
中斷服務程序:
MOV TH1,#0FFH;重新設里計數初值
MOV TL1,#83H
CPL P1.0;輸出取反
RETI;中斷返回
例4 使用定時器T0定時,每隔l0s便與P1.0口連接的發光二極管閃爍10次。設P1.0高電平燈亮,反之燈滅。
程序如下:
ORG 0000H;程序起始地址
LJMP MAIN;
ORG 000BH;T0中斷入口地址
LJMP INT;中斷入口地址
ORG 0100H
MAIN: MOV R0,#200;l0s循環次數
MOV TMOD,#01H;T0定時方式1
MOV TH0,#3CH;50ms初值高位
MOV TL0,#0B0H;50ms初值低位
MOV Rl,#10;閃爍次數
SETB EA;開總中斷
SETB ET0;開T0中斷
SETB TR0;啟動
LP:SJMP LP;循環等待中斷
INT:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,DE;R0≠0,不到l0s,燈不閃,直接返回
DE0:SETB Pl.0;R0=0,l0s到,燈閃爍
LCALL DELAY、
CLR Pl.0
LCALL DELAY
DJNZ R1,DE0
DE:RETI
DELAY:MOV R6,#0FFH
DL0:MOV R7,#0FFH
DL1:NOP
DJNZ R7,DL1
DJNZ R6,DL0
RET
例5 利用T0門控位測試/INT0引腳上出現的正脈沖寬度,已知晶振頻率為12MHz,將所測得值高位存入片內71H,低位存入片內70H。
解:程序如下:
MOV TMOD,#09H;設T0為方式1,GATE =1
MOV TL0,#00H
MOV TH0,#00H
MOV R0,#70H
JB P3.2,$;等P3.2變低
SETB TR0;啟動T0準備工作
JNB P3. 2,$;等待P3. 2變高
JB P3. 2,$;等待 P3. 2再次變低
CLR TR0;停止計數
MOV @R0,TL0;存放計數的低字節
INC R0
MOV @R0,TH0;存放計數的高字節
SJMP$
例:設計一個節日彩燈循環閃爍的應用系統。
解:
分析:該題可以有多種循環方式,延時時間及左右移不同會有不同的循環效果。以下只是其中的一種形式編程。電路見圖,由P1口的8位控制8路電燈電路,在每一路中都通過一個可控硅SCR控制N路并聯電燈的開關。單片機工作頻率12MHz,該程序延時選為200 ms,用定時器T0作為定時器,初值為50 ms。編程如下:
START:MOV P1,#0FEH;初始化為第0位的一組燈亮
L1:ACALL DELAY;調延時子程序
MOV A,P1
RL A;順序左移一位
MOV P1,A
AJMP L1
DELAY:MOV TMOD,#01H
MOV R1,#04H
DELAY-1:MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
JNB TF0,$
CLR TF0
DJNZ R1,DELAY_1
RET
第八章 單片機串行數據通信
第一節 概 述
一、串行通信基本原理
計算機與外界的信息交換稱為通信。基本的通信方法有并行通信和串行通信兩種。
并行通信的特點是:各數據位同時傳送,傳送速度快、效率高。但并行數據傳送有多少數據位就需多少根數據線,因此傳送成本高。并行數據傳送的距離小于30米。并行通信依靠并行1/O接口實現。
例:CPU在執行如MOV P1,A的指令時,將A中的8位數據寫人P1口鎖存器中,并經P1口的8個引腳將8位數據并行輸出到外部設備。同樣,CPU也可執行如MOV A,P1的指令,將外部設備送到P1上腳上的8位數據并行地讀入累加器A。
串行通信的特點是:數據傳送按位順序進行,最少只需一根傳輸線即可完成,成本低但速度慢。計算機與外界的數據傳送大多數是串行的,其傳送的距離可以從幾米到幾千公里。
二、兩種串行通信方式
串行通信根據數據傳送時的編碼格式不同又分為異步通信和同步通信兩種方式。
1、異步通信方式
異步通信用起始位"0”表示字符的開始,然后從低位到高位逐位傳送數據,最后用停止位“1”表示字符結束,見圖。一個字符又稱一幀。圖中a,一幀信息包括1位起始位、8位數據位和1位停止位。圖b中,數據位增加到9位。在MCS-51計算機系統中,第九位數據D8可以用作奇偶校驗位,也可以用作地址/數據幀標志,D8=1表示該幀信息傳送的是地址,D8=0表示傳送的是數據。兩幀信息之間可以無間隔,也可以有間隔,且間隔時間可任意改變,間隔用空閑位1來填充。
1)、波特率(Baud rate):每秒傳送的位數。每秒傳送一個格式位就是1波特。即:
1波特=lbps(位/秒)
例如電傳打字機的傳送速率每秒10個字符,若每個字符為11位,則波特率為
11位/字符×10字符/s=110位/s.
2)、幀(frame):從起始位開始到停止位結束的全部內容稱之為一幀,幀是一個字符的完整通信格式,因此也就把串行通信的字符格式稱之為幀格式。
起始位:發送器是通過發送起始位而開始一個字符的傳送。起始位使數據線處于“space”狀態。
數據位:起始位之后就傳送數據位。在數據位中,低位在前(左),高位在后(右)。數據位可以是5、6、7或8位。
奇偶校驗位:用于對字符傳送作正確性檢查。共有3種可能,即奇校驗、偶校驗和無校驗。
停止位:停止位在最后,用以標志一個字符傳送的結束,它對應于mark狀態。停止位可能是1、1. 5或2位,在實際應用中根據需要確定。
2、同步通信方式
在同步通信中,每一數據塊開頭時發送一個或兩個同步字符,使發送與接收雙方取得同步。數據塊的各個字符間取消了起始位和停止位,所以通信速度得以提高,見圖7一3。同步通信時,如果發送的數據塊之間有間隔時間,則發送同步字符填充。
三、串行通信的數據通路形式
串行數據通信共有以下幾種數據通路形式。
1、單工(Simplex)形式
單工形式的數據傳送是單向的。通信雙方中一方固定為發送端,另一方則固定為接收端。單工形式的串行通信,只需要一條數據線。如圖8.4所示。例如計算機與打印機之間的串行通信就是單工形式,因為只能有計算機向打印機傳送數據,而不可能有相反方向的數據傳送。
2、全雙工(Full-duplex)形式
全雙工形式的數據傳送是雙向的,且可以同時發送和接收數據,因此全雙工形式的串行通信需要兩條數據線。如圖8. 5所示。
3.半雙工(Half-duplex)形式
半雙工形式的數據傳送也是雙向的。但任何時刻只能由其中的一方發送數據,另一方接收數據。因此半雙工形式既可以使用一條數據線,也可以使用兩條數據線。如圖8.6所示。
四、異步串行通信的信號形式
1、近程通信
近程通信又稱本地通信。近程通信采用數字信號直接傳送形式,在傳送過程中不改變原數據代碼的波形和頻率。這種數據傳送方式稱之為基帶傳送方式。圖8. 2就是兩臺計算機近程串行通信的連接和代碼波形圖。
2、遠程通信
在遠程串行通信中,應使用專用的通信電纜,但出于經濟考慮也可以使用電話線作為傳輸線。如圖8.3所示。遠距離直接傳送數字信號,信號會發生崎變,因此要把數字信號轉變為模擬信號再進行傳送。信號形式的轉變通常使用頻率調制法,即以不同頻率的載波信號代表數字信號的兩種不同電平狀態。這種數據傳送方式就稱之為頻帶傳送方式。
調制器:把電平信號調制為頻率信號
解調器:把頻率信號解調為電平信號
在遠程串行通信線路的兩端都應設置調制器和解調器,并且把二者合在一起稱之為調制解調器(Modem)。
1270Hz 或2225Hz mark
1070Hz或2025Hz space
第二節 MCS-51 串行結構與工作原理
一、 串行口結構
如上所述,MCS - 51串行1/O接口的基本工作是:發送時,將CPU送來的并行數據轉換成一定格式的串行數據,從引腳TXD(P3.1)上按規定的波特率逐位輸出;接收時,要監視引腳RXD(P3.0),一旦出現起始位“0”,就將外圍設備送來的一定格式的串行數據轉換成并行數據,等待CPU讀人。
接收緩沖器是雙緩沖的,是為了避免在接收下一幀數據之前,CPU未能及時響應接收器的中斷,把上幀數據讀走,而產生兩幀數據重疊的問題而設置的雙緩沖結構。對于發送緩沖器,為了保持最大傳輸率,一般不需要雙緩沖,這是因為發送時CPU是主動的,不會產生寫重疊的問題。
二、串行接口控制與狀態寄存器
1、串行口控制寄存器SCON
功能說明如下:
·SM0、SM1—串行口工作方式選擇位
其狀態組合所對應的工作方式為:
·SM2—多機通信控制位
SM2位主要用于方式2和方式3。當串行口方式2或方式3接收時,如SM2=1,則只有當接收到的第九位數據(RB8)為1,才將接收到的前8位數據送入SBUF,并置位RI產生中斷請求;否則,將接收到的前8位數據丟棄。而當SM2=0時,則不論第九位數據為0還是為1,都將前8位數據裝入SBUF中,并產生中斷請求。
·REN—允許接收位
REN=0 禁止接收
REN=1 允許接收
該位由軟件置位或復位。
·TB8 —發送數據位8
在方式2和方式3時,TB8 的內容是要發送的第9位數據,其值由用戶通過軟件設置。在雙機通信時,TB8 一般作為奇偶校驗位使用;在多機通信中,常以TB8 位的狀態表示主機發送的是地址幀還是數據幀,且一般約定:TB8 =0為數據幀 TB8 =1為地址幀。
·RB8 —接收數據位8
在方式2或方式3時,RB8 存放接收到的第9位數據,代表著接收數據的某種特征(與TB8 的功能類似),故應根據其狀態對接收數據進行操作。
·TI—發送中斷標志
當方式0時,發送完第8位數據后,該位由硬件置位。在其它方式下,于發送停止位之前,由硬件置位。因此TI=1,表示幀發送結束,其狀態既可供軟件查詢使用,也可請求中斷。TI位由軟件清“0”。
·RI—接收中斷標志
當方式0時,接收完第8位數據后,該位由硬件置位。在其它方式下,當接收到停止位時,該位由硬件置位。因此RI=1,表示幀接收結束。其狀態既可供軟件查詢使用,也可以請求中斷。RI位由軟件清“0”。
2、電源控制寄存器PCON
SMOD—串行口波特率的倍增位
當SMOD=1時,串行口波特率加倍。系統復位時,SMOD=0。
3、中斷允許寄存器IE
ES=0 禁止串行中斷
ES=1 允許串行中斷
第三節 波特率設計
一、串行接口的功能
MCS - 51單片機中的異步通信串行接口能方便地與其他計算機或傳送信息的外圍設備(如串行打印機、CPU終端等)實現雙機、多機通信。
串行口有4種工作方式,見表7一1。
方式0并不用于通信,而是通過外接移位寄存器芯片實現擴展并行1/O接口的功能。該方式又稱為移位寄存器方式。
方式1、方式2、方式3都是異步通信方式。
方式1是8位異步通信接口。一幀信息由10位組成,其格式見圖7一2a。方式1用于雙機串行通信。
方式2、方式3都是9位異步通信接口、一幀信息中包括9位數據,1位起始位,1位停止位,其格式見圖7一2b。方式2、方式3的區別在于波特率不同,方式2、方式3主要用于多機通信,也可用于雙機通信。
二、波特率的設定
方式1的波特率是可變的,以定時器T1作波特率發生器使用,其值由定時器1的計數溢出率來決定,其公式為:
2smod
波特率= ×(定時器1溢出率)
32
當定時器1作波特率發生器使用時,選用工作方式2(即8位自動加載方式)。假定計數初值為X,則計數溢出周期為:
12
×(256一X)
fosc
溢出率為溢出周期的倒數。
則波特率計算公式為:
2smod fosc
波特率= ×
32 12×(256一X)
實際使用時,總是先確定波特率,再計算定時器1的計數初值,然后進行定時器的初始化。根據上述波特率計算公式,得出計數初值的計算公式為:
fosc×2smod
X=256-
384×波特率
第四節 串行口應用舉例
例1 使用CD4094的并行輸出端接8支發光二極管,利用它的串入并出功能,把發光二極管從左向右依次點亮,并反復循環之。假定發光二極管為共陰極型,則電路連接如圖所示。
分析:使用方式0實現數據的移位輸入輸出時,實際上是把串行口變成為并行口使用。串行口作為并行輸出口使用時,要有“串入并出”的移位寄存器(例如CD4094或74LS164,74HC164等)配合。
在方式0下,是把串行口作為同步移位寄存器使用,這時以RXD(P3.0)端作為數據移位的入口和出口,而由TXD(P3.1)端提供移位時鐘脈沖。移位數據的發送和接收以8位為一幀,低位在前高位在后。
使用查詢方法完成的參考程序如下:
MOV SCON , #00H;串行口方式0工作
CLR ES;禁止串行中斷
MOV A,#80H;發光管從左邊亮起
DELR: CLR P1.0;關閉并行輸出
MOV SBUF,A;串行輸出
JNB TI,$;狀態查詢
SETB P1.0;開啟并行輸出
ACALL DELAY;狀態維持
CLR TI;清發送中斷標志
RR A;發光組合右移
AJMP DELR;繼續
例2 設計一個發送程序,將片內RAM50H~5FH中的數據串行發送,串行口設定為方式2狀態,TB8作奇偶校驗位。在數據寫人發送緩沖器之前,先將數據的奇偶位P寫入TB8,這時第9位數據作奇偶校驗用。
程序清單如下
TRT:MOV SCON,#80H;方式2設定
MOV PCON,#80H;取波特率為fosc/32
MOV R0,#50H
MOV R7,#10H;數據長度10H
LOOP:MOV A,@R0;取數據送A
MOV C,PSW.0;
MOV TB8,C
MOV SBUF,A;數據送SBUF,啟動發送
WAIT:JBC TI,CONT;判斷發送中斷標志
SJMP WAIT
CONT:INC R0
DJNZ R7,LOOP
RET
例3 設計一個接收程序,將接收的16個字節數據送人片內RAM50H~5FH單元中。設串行口方式3狀態工作,波特率為2400。定時/計數器1作波特率發生器時,SMOD=0,計數常數為F4H。
程序清單如下:
RVE:MOV TMOD,#20H;T1編程為方式2定時狀態
MOV TH1,#0F4H;計數常數送T1
MOV T11,#0F4H
SETB TR1;啟動T1
MOV R0,#50H
MOV R7,#10H;數據長度l OH-R7
MOV SCON,#0D0H;串行口編程方式3接收
MOV PCON,#00H;置SMOD=0
WAIT:JBC RI,PRI;等待接收到數據
SJMP WAIT
PRI:MOV A,SBUF;奇偶校驗判P=RB8?
JNB PSW.0,PNP
JNB RB8,PER
SJMP RIGHT
PNP:JB RB8,PER
RIGHT:MOV @R0,A;數據送緩沖器
INC R0
DJNZ R7,WAIT;判斷數據塊接收完否?
CLR PSW.5;正確接收完16個字節置標志位
RET
第九章 存儲器與存儲器擴展
第一節 MCS-51 單片機擴展及系統結構
一、單片機系統的擴展結構
擴展系統是以單片機為核心進行的;擴展內容包括ROM、RAM和 I/O接口電路等;擴展是通過系統總線進行的,通過總線把各擴展部件連接起來,并進行數據、地址和信號的傳送,要實現擴展首先要構造系統總線。
1 、系統總線
總線:連接計算機各部件的一組公共信號線。MCS- 51使用的是并行總線結構,按其功能通常把系統總線分為三組,即地址總線、數據總線和控制總線。
1)地址總線AB
在地址總線上傳送的是地址信號,用于存儲單元和I/O端口的選擇。地址總線是單向的,地址信號只能由單片機向外送出。 地址總線的數目決定著可直接訪問的存儲單元的數目,例如n位地址,可以產生2n 個連續地址編碼,因此可訪問2n個存儲單元,即通常所說的尋址范圍為2n地址單元。
2)數據總線(Data Bus,簡寫DB)
數據總線用于在單片機與存儲器之間或單片機與I/O端口之間傳送數據。單片機系統數據總線的位數與單片機處理數據的字長一致。
例如MCS- 51單片機是8位字長,所以數據總線的位數也是8位。
數據總線是雙向的,可以進行兩個方向的數據傳送。
3)控制總線(Control Bus,簡寫CB)
控制總線實際上就是一組控制信號線,包括單片機發出的,以及從其它部件傳送給單片機的。
二、三總線的擴展方法
1、以P0口的8位口線作地址/數據線
P0口線既作地址線使用又作為數據線使用,具有雙重功能,因此需采用復用技術,對地址和數據進行分離,為此在構造地址總線時要增加一個8位鎖存器。首先由鎖存器暫存并為系統提供低8位地址,其后P0口線就作為數據線使用。通常使用的鎖存器有74LS273或74LS373。
2、以P2口的口線作高位地址線
如果使用P2口的全部8位口線,再加上P0口提供的低8位地址,則形成了完整的16位地址總線。使單片機系統的擴展尋址范圍達到64 K單元。
三、控制信號
除了地址線和數據線之外,在擴展系統中還需要單片機提供一些控制信號線,以構成擴
展系統的控制總線。其中包括:
*使用ALE作地址鎖存的選通信號,以實現低8位地址的鎖存;
*以/PSEN信號作擴展程序存儲器的讀選通信號;
*以EA信號作為內外程序存儲器的選擇信號;
*以/RD和/WR作為擴展數據存儲器和1/O端口的讀寫選通信號。
第二節 擴展存儲器編址及映像
一、存儲器編址技術
編址:使用系統提供的地址線,通過適當的連接,使得一個編址唯一對應存儲器中一個存儲單元。
1、線選法
直接以系統的高地址位作為存儲芯片的片選信號。適用小規模系統的存儲器擴展。
2、譯碼法
使用譯碼器對系統的高位地址進行譯碼,以其譯碼輸出作為存儲芯片的片選信號。適用于大容量多芯片存儲器擴展。
常用的譯碼器:
&# 8226;74LS139譯碼器
/G為使能端,低電平有效。
A、B為選擇端,即譯碼輸入。
Y0、Y1、Y2、Y3為譯碼輸出信號,低電平有效。
&# 8226;74LS138譯碼器
/E1、/E2、E3為使能端, /E1、/E2低電平有效,E3高電平有效。
A、B、C為選擇端,即譯碼輸入。
Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7為譯碼輸出信號,低電平有效。
第三節 程序存儲器擴展
一、只讀存儲器概述
單片機的程序存儲器擴展使用只讀存儲器芯片。只讀存儲器簡稱為ROM (Read Only Memory)。 ROM中的信息一旦寫入之后就不能隨意更改,特別是不能在程序運行過程中寫入新的內容,而只能讀存儲單元內容,故稱之為只讀存儲器。
1.芯片2716結構
2716的邏輯結構如圖5.6所示,其信號引腳排列如圖5.7所示。
·A0—A11------位地址。
O7—O0 ------數據讀出。
CE /PGM-----雙重功能控制線。當使用時,它為片選信號(/CE),低電平有效。當編程時,它為編程控制信號(PGM),用于引入編程脈沖。
/OE-----輸出允許信號。當/OE=0時,輸出緩沖器打開,被尋址單元的內容才能被讀出。
VPP-----編程電源。當芯片編程時,該端加+25V編程電壓;當芯片使用時,該端加+5V電源。
2.2716的工作方式
2716共有5種工作方式,由各信號的狀態組合來確定。各種工作方式的基本情況如表5
一3所示
·讀方式
當/CE及/OE均為低電平, VPP=+5 V 2716芯片被選中并處于讀出工作方式。這時被尋址單元的內容經數據線O7—O0 讀出。
·未選中方式
當/CE為高電平時,芯片不被選中,其數據線輸出為高阻抗狀態。
·編程方式
當VPP端加25 V高電壓,/OE加TTL高電平時,2716處于編程工作方式,進行信息的重新寫入。這時編程地址和寫入數據分別由A0—A11及O7—O0 引入。
二、應用舉例
2716芯片的地址范圍是:
最低地址8000 H
(A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0=1000000000000000)
最高地址87FFH
(A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0=1000011111111111)
第四節 數據存儲器擴展舉例
一、靜態RAM6116
下面以6116為例進行說明,其引腳如圖所示。6116芯片為24引腳雙列直播封裝。其中:
·A0—A10 地址線 ·/WE 寫選通信號
·D7—D0 數據線 ·Vcc 電源(十5 V)
·/CS 片選信號 ·GND 地
·/OE 數據輸出允許信號
6116共有4種工作方式,如表5一4所示。
二、單片數據存儲器擴展
使用一片6116實現的2KB RAM擴展,其電路連接如圖所示。
三、多片數據存儲器擴展
第十章 MCS 一 51 單片機并行 I/O 接口的擴展
第一節 概 述
一、為什么要擴展I/O接口
在單片機系統中主要有兩類數據傳送操作,一類是單片機和存儲器之間的數據讀寫操作;另一類則是單片機和其它設備之間的數據輸入/輸出(I/O)操作。
存儲器是半導體電路,與單片機具有相同的電路形式和信號形式,能相互兼容直接使用。存儲器與單片機之間的連接十分簡單,主要包括地址線、數據線、讀寫選通信號。
單片機與控制對象或外部設備之間的數據傳送卻十分復雜。其復雜性主要表現在以下幾個方面:
1、速度差異大
慢速設備如開關、繼電器、機械傳感器等,每秒鐘傳送不了一個數據;而高速采樣設備,每秒鐘要傳送成千上萬個數據位。面對速度差異如此之大的各類設備,單片機無法以一個固定的時序同它們按同步方式協調工作。
2、設備種類繁多
單片機應用系統中的控制對象或外部設備種類繁多,它們既可能是機械式的,又可能是機電式的,還可能是電子式的。由于不同設備之間性能各異、對數據的要求互不相同,因此無法按統一格式進行數據傳送。
3、數據信號形式多種多樣
單片機應用系統所面對的數據形式也是多種多樣的,例如既有電壓信號,也有電流信號;既有數字形式,還有模擬形式。
二、擴展I/O接口電路的功能
在單片機應用系統中,擴展1/O接口電路主要是針對如下幾項功能:
1.速度協調
由于速度上的差異,使得單片機的I/O數據傳送只能以異步方式進行。設備是否準備好,需要通過接口電路產生或傳送設備的狀態信息,以此實現單片機與設備之間的速度協調。
2.輸出數據鎖存
在單片機應用系統中,數據輸出都是通過系統的公用數據通道(數據總線)進行的,單片機的工作速度快,數據在數據總線上保留的時間十分短暫,無法滿足慢速輸出設備的需要。在擴展I/O接口電路中應具有數據鎖存器,以保存輸出數據直至能為輸出設備所接收。
3.輸入數據三態緩沖
數據輸入時,輸入設備向單片機傳送的數據要通過數據總線,但數據總線是系統的公用數據通道,上面可能“掛”著多個數據源,工作比較繁忙。為了維護數據總線上數據傳送的“次序”,因此只允許當前時刻正在進行數據傳送的數據源使用數據總線,其余數據源都必須與數據總線處于隔離狀態。為此要求接口電路能為數據輸入提供三態緩沖功能。
4.數據轉換
單片機只能輸入和輸出數字信號,但是有些設備所提供或所需要的并不是數字信號形式。為此,需要使用接口電路進行數據信號的轉換,其中包括:模/數轉換和數/模轉換。
三、MCS一51單片機常用的擴展器件
MCS一51單片機常用的擴展器件有如下三類:
常規邏輯電路、鎖存器,如74LS377,74LS245。
MCS—80/85并行接口電路,如8255。
RAM/IO綜合擴展器件,如8155。
第二節 簡單 I/O 接口的擴展
當所需擴展的外部1/O口數量不多時,可以使用常規的邏輯電路、鎖存器進行擴展。這一類的外圍芯片一般價格較低而且種類較多,常用的如:74LS377、74LS245、74LS373、74LS244、74LS273、74LS577、74LS573。
一、74LS377芯片及擴展舉例
下圖是74LS377的引腳圖和功能表。74LS377是一種8D觸發器,它的/E端是控制端、CLK端是時鐘端,當它的/E端為低電平時只要在CLK端產生一個正跳變,D1—D7將被鎖存到QO—Q7端輸出,在其他情況下Q0—Q7端的輸出保持不變。
如圖使用了一片74LS377擴展輸出口,如果將未使用到的地址線都置為1則可以得到該片74LS377的地址為7FFFH。如果要從該片74LS377輸出數據到單片機中可以執行如下指令:
MOV DPTR,#7FFFH
MOVX @DPTR,A
二、74LS245芯片及擴展舉例
圖是74LS245的引腳圖和功能表。74LS245是一種三態輸出的8總線收發驅動器,無鎖存功能。它的G端和DIR端是控制端,當它的G端為低電平時,如果DIR為高電平,則74LS245將A端數據傳送至B端;如果DIR為低電平,則74LS245將B端數據傳送至A端。在其他情況下不傳送數據,并輸出高阻態。
如圖使用了一片74LS245擴展輸人口,如果將未使用到的地址線都置為1,則可以得到該片74LS245的地址為7FFFH。如果單片機要從該片74LS245輸人數據,可以執行如下指令:
三、74LS244芯片及擴展舉例
74LS244芯片的引腳排列:
該芯片內部有2個4位的三態緩沖器,一片74LS244可以擴展一個8位輸入口,其電路連接如圖7.10所示。使用時以/CE作為數據選通信號。
應用舉例:
1、使用多片74LS244實現多個輸入口擴展的電路連接如圖所示,使用或門74LS32的輸出作為輸入口的選通信號。或門的兩個輸入端一個是讀選通信號/RD,另一個則為P2口的一條口線(線選法)。當它們都為低電平時,才能得到一個有效的輸入選通,使一片74LS244的8位數據進行輸入。
2、一個撥盤可產生一個BCD碼形式的十進制數(4位)。現有A、B、C、D4個撥盤,要求把它們產生的BCD碼數依次輸入到通用寄存器R4(B、A)、R5(D、C)中去。每個BCD碼需4條輸入線,4個BCD碼則共需16條愉入線,即2個8位口(1#口和2#口),因此用兩片74LS244就可構成其輸入接口,電路連接如圖7.12所示。
P2.7、P2.6分別作為1# 口和2# 口的地址選通線(線選法)。假定其它地址線為1,則1# 輸入口地址為7FFFH,2# 輸入口地址為0BFFFH。
數據輸入程序:
MOV DPTR,#7FFFH;1#口地址
MOVX A,@DPTR;從撥盤取數
MOV R4,A
MOV DPTR,#0BFFFH;2#口地址
MOVX A,@DPTR;從拔盤取數
MOV R5,A
第三節 8155 可編程接口及擴展技術
8155具有3個可編程I/O口,其中2個口(A和B)為8位口,1個口(C)為6位口,256單元的RAM和1個14位計數結構的定時器/計數器。
一、8155芯片結構
在與單片機接口的方向,8155提供如下信號:
n AD7 —AD0 地址數據復用線。
n ALE—地址鎖存信號。除進行AD7 —AD0 的地址鎖存控制外,還用于把片選信號/CE和IO/M等信號進行鎖存。
n /RD—讀選通信號。
n /WR—寫選通信號。
n /CE—片選信號。
n IO/M— I/O與RAM選擇信號。IO/M=0對RAM進行讀寫;IO/M=l時I/O口進行讀寫。
n RESET—復位信號。8155以600 ns的正脈沖進行復位,復位后A、B、C口均置為輸入方式。
二、I/O口及其工作方式
PA和PB是8位通用輸入/輸出口,主要用于數據的I/O傳送,是數據口,只有輸入/輸出兩種工作方式。
PC口為6位口,它既可作數據口用于數據的I/O傳送,也可作控制口,用于傳送控制信號和狀態信號。PC口共具有4種工作方式,即:輸入方式、輸出方式、PA口控制端口方以及PA和PB口控制端口方式。
當PA或PB以中斷方式進行數據傳送時,所需的聯絡信號由PC提供,各聯絡信號如表:
聯絡信號共有3個,其中:、
·INTR—中斷請求信號(輸出),高電平有效。送給MCS- 51單片機的外中斷請求信號。
·BF—緩沖器滿狀態信號(輸出),高電平有效。
·STB—選通信號(輸入),低電平有效。數據輸入操作時STB是外設送來的選通信號;數據輸出時STB是外設送來的應答信號。
三、RAM單元及I/O口編址
8155共有256個RAM單元,加上6個可編址的端口,這6個端口是:命令/狀態寄存器、PA口、PB口、PC口、定時器/計數器低8位以及定時器/計數器高8位。8155引入8位地址AD7-AD0,無論是RAM還是可編址口都使用這8位地址進行編址。如表所示。
四、8155與MCS-51單片機的連接
信號的對應關系如下:
舉例:
五、8155的命令字及狀態字的格式及用法
8155的命令字和狀態字寄存器共用一個地址,命令字寄存器只能寫不能讀,狀態字寄存器只能讀不能寫。
六、8155的定時器/計數器
1.定時器/計數器的計數結構
8155的定時器/計數器是一個14位的減法計數器,由兩個8位寄存器構成,以其中的低14位組成計數器,兩個高位(M2、M1)用于定義計數器輸出的信號形式。
8155定時器/計數器的計數結構如下:
2.定時器/計數器的使用
8155的定時器/計數器與MCS-51單片機芯片內部的定時器/計數器在功能上是完全相同的,即同樣具有定時和計數兩種功能。但是在使用上卻與MCS- 51的定時器/計數器有許多不同之處。具體表現在:
·8155的定時器/計數器是減法計數,MCS-51的定時器/計數器是加法計數。確定計數初值的方法是不同的。
·MCS - 51的定時器/計數器有多種工作方式。8155的定時器/計數器則只有一種固定的工作方式,即14位計數,通過軟件方法進行計數值加載。
·MCS- 51的定時器/計數器有兩種計數脈沖。當定時工作時,由芯片內部按機器周期提供固定頻率的計數脈沖;當計數工作時,從芯片外部引入計數脈沖。8155的定時器/計數器,不論是定時工作還是計數工作,都由外部提供計數脈沖, 其信號引腳就是TIMER IN。
·MCS- 51的定時器/計數器,計數溢出自動置位TCON寄存器的計數溢出標志位(TF),供用戶以查詢或中斷方式使用;但8155的定時器/計數器,計數溢出時向芯片外邊輸出一個信號(TIMER OUT)。這一信號還有脈沖和方波兩種形式,供用戶進行選擇。具體由M2M1,兩位定義:
M2M1=00單個方波
M2M1=01連續方波
M2M1=10單個脈沖
M2M1=11連續脈沖<, /DIV>
這4種輸出形式如圖7.26所示。
3.定時器/計數器的控制
8155定時器/計數器的工作方式由命令字中的高兩位D7D6進行控制。具體說明知下:
D7D6=00不影響計數器工作。
D7D6=01停止計數。如計數器未啟動則無操作,知計數器正運行則停止計數。
D7D6=10達到計數值(計數器減為0)后停止。
D7D6=11啟動。如計數器沒運行,則在裝入計數值后開始計數;如計數器已運行,則在當前計數值計滿后,再以新的計數值進行計數。
七、應用舉例
例 要求使用8155定時器/計數器對計數脈沖進行千分頻,即計數1000后,TIMER OUT端電平狀態變化,并重新送數以產生連續方波。此外假定PA口為輸入方式,PB口為輸出方式,PC口為輸入方式,禁止中斷。請編寫初始化程序。
解 此題共兩項任務:計數初值的確定和命令字的確定。
計數器的最高兩位M2M1=01,計數器的其它14位裝入計數初值。由于8155計數器是減法計數,所以計數初值應為十進制數1000,十六進制數為03E8H。則:計數器高位字
節為43H,計數器低位字節為0E8H,按上述要求,8155的命令字為0C2H。各位狀態為:
由于命令字的高兩位D7D6=11,因此在裝入計數值后,計數器即開始計數。假定命令/狀態寄存器地址為0FD00H。則初始化程序為:
MOV DPTR,#0FD00H;命令/狀態寄存器地址
MOV A,#0C2H;命令字
MOVX @DPTR,A;裝入命令字
MOV DPTR,#0FD04H;計數器低8位地址
MOV A,#0E8H;低8位計數位
MOVX @DPTR,A;寫入計數值低8位
INC DPTR;計數器高8位地址
MOV A,#43H;高8位計數值
MOVX @DPTR,A;寫入計數值高8位
例:若A口定義為基本的輸人方式,B口定義為基本的輸出方式,對輸入脈沖進行200分頻,寫出8155的1/O初始化程序。
RAM字節地址:7E00H-7EFFH(P2.0=0)
I/O接口地址:
命令狀態口:7F00H
PA口:7F01H
PB口:7F02H
PC口:7F03H
定時器低8位:7F04H
定時器高8位:7F05H
ORG 1000H
START:MOV SP,#60H
MOV R6,#0FFH
DJNZ R6,START
MAIN:MOV DPTR,#7F04H;指向定時器低8位
MOV A,#0C8H;計數常數OC8H
MOVX @DPTR,A;計數常數低8位裝人
INC DPL;指向定時器高8位
MOV A,#40H;設定時器連續方波輸出
MOVX @DPTR,A;指向命令狀態口
MOV A,# 0C2H;命令控制字設定
MOVX @DPTR,A;A口為基本的輸人方式,B口為基本的輸出方式,開定時器
例 如果要實現L0—L3滅,L4—L7亮,編制程序。
LED:MOV DPTR,#7FFOH;寫方式控制字,PA口為基本1/O口輸出
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#7FFIH;往PA口寫數,控制燈
MOV A,#0FH
MOVX @DPTR,A
RET
例 如圖9-18,要求使用8155的定時器/計數器使得TO口輸出的脈沖周期是TI輸人脈沖周期的10倍。試編程實現。
圖中,命令/狀態字地址:7FF0H,定時器/計數器低、高字節地址:7FF4H、7FF5H。可以編制如下子程序:
PUS:MOV DPTR,#7FF4H;寫定時器/計數器工作方式和初值,方式1初值10
MOV A,#10
MOVX @DPTR,A
MOV DPTR,#7FF5H
MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#7FF0H;啟動定時器/計數器
MOV A,#C0H
MOVX @DPTR,A
RET
第十一章 輸入與輸出設備及其接口技木
在單片機應用系統中,通常都有操作面板。操作人員通過操作面板實現與應用系統的信息交流,包括下達命令、修改程序和參數、干預應用系統的狀態與顯示運行狀態和運行結果。
第一節 概 述
單片機應用系統的類型多種多樣,如智能儀表、控制單元、數據采集系統、分布式檢測系統。但是,對于各種類型的單片機應用系統,其人機通道配置的集合如圖7-1所示。
第二節 顯示及顯示接口
在單片機系統中,常用的顯示器有:發光二極管顯示器,簡稱LED (Light Emitting Diode);液晶顯示器,簡稱LCD (Liquid Crystal Display);熒光管顯示器。三種顯示器中,以熒光管顯示器亮度最高,發光二極管次之,而液晶顯示器最弱,為被動顯示器,必須有外光源。
一、發光二極管及LED 顯示器
發光二極管是由半導體發光材料做成的PN結,只要在發光二極管兩端通過正向電流5-20mA就能達到正常發光。LED的發光顏色通常有紅、綠、黃、白,其外形和電氣圖形符號如圖7-2所示。單個LED通常是通過亮、滅來指示系統運行狀態和用快速閃爍來報警。
通常所說的LED顯示器由7個發光二極管組成,因此也稱之為七段LED顯示器,其
排列形狀如圖所示。顯示器中還有一個圈點型發光二極管(在圖中以dp表示),用于顯示小數點。通過七個發光二極管亮暗的不同組合,可以顯示多種數字、字母以及其它符號。
LED顯示器中的發光二極管共有兩種連接方法:
·共陽極接法
把發光二極管的陽極連在一起構成公共陽極。使用時公共陽極接+5V。陰極端輸入低電平的段發光二極管導通點亮,輸入高電平的則不點亮。
·共陰極接法
把發光二極管的陰極連在一起構成公共陰極。使用時會共陰極接地,陽極端輸入高電平的段發光二極管導通點亮,輸入低電平的則不點亮。
用LED顯示器顯示十六進制數的字型代碼如下表所示:
二、七段LED 顯示器的工作原理
七段LED顯示器需要由驅動電路驅動。在七段LED顯示器中,共陽極顯示器,用低電平驅動;共陰極顯示器,用高電平驅動。點亮顯示器有靜態和動態兩種方式。
1.靜態顯示器
所謂靜態顯示,就是當顯示器顯示某一字符時,相應段的發光二極管恒定地導通或截止。這種顯示方法的每一位都需要有一個8位輸出口控制。
靜態顯示器的優點是顯示穩定,在發光二極管導通電流一定的情況下顯示器的亮度高,控制系統在運行過程中,僅僅在需要更新顯示內容時,CPU才執行一次顯示更新子程序,這樣大大節省了CPU的時間,提高了CPU的工作效率;缺點是位數較多時,所需的I/O口太多,硬件開銷太大。
舉例:作為MCS-51串行口方式0輸出的應用,可以在串行口上擴展多片串行輸人并行輸出的移位寄存器74LS164作為靜態顯示器接口,圖10-2給出了8位共陽極靜態顯示器的邏輯接口。設所顯示的字符查表編程量參數放在相應的顯示緩沖區單元中。
下面列出更新顯示器子程序清單:
DISPLAY:MOV R7,#8;8位顯示計數器
MOV R0,#78H;78H-7FH為顯示器緩沖區
MOV DPTR,#TABLE;顯示字形碼表首地址
LOOP1:MOV A,@R0;取出要顯示的編程量參數
INC R0;指向緩沖區下一地址
MOVC A,@A+DPTR;取出顯示字形碼
MOV SBUF,A;送出該LED上的字形碼
LOOP2:JNB TI,LOOP2;輸出完否?
CLR TI;完,清發送中斷標志
DJNZ R7,LOOP1;8位顯示未完,繼續
RET
TABLE:DB 0C0H,0F9H,0A4H,0BH,99H;0,1,2,3,4
DB 92H,82H,0FBH,80H,90H;5,6,7,8,9
DB 88H,83H,0C6H,0A1H,86H;A, b,C, d,E
DB 8EH,0BFH,8CH,0F7H,0FFH;F,一,P,一,暗
2.動態顯示器
所謂動態顯示就是一位一位地輪流點亮各位顯示器(掃描),對于顯示器的每一位而言,每隔一段時間點亮一次。在同一時刻只有一位顯示器在工作(點亮),利用人眼的視覺暫留效應和發光二極管熄滅時的余輝效應,看到的卻是多個字符“同時”顯示。
顯示器亮度既與點亮時的導通電流有關,也與點亮時間和間隔時間的比例有關。調整電流和時間參數,可實現亮度較高較穩定的顯示。
動態顯示器的優點是節省硬件資源,成本較低。但在控制系統運行過程中,要保證顯示器正常顯示,CPU必需每隔一段時間執行一次顯示子程序,占用CPU大量時間,降低了CPU的工作效率,同時顯示亮度較靜態顯示器低。
若顯示器的位數不大于8位,則控制顯示器公共極電位只需一個8位I/O口(稱為掃描口或字位口),控制各位LED顯示器所顯示的字形也需要一個8位口(稱為數據口或字形口)。
舉例:
對于圖10一3所示的6位LED顯示器,在單片機內部RAM中設置6個顯示緩沖單元78H-7DH,存放6位欲顯示的字符數據,8155的端口A掃描輸出總是只有一位為高電平,即6位顯示器中僅有一位公共陰極為低電平(只選中一位),其他位為高電平,8155B口輸出相應位的顯示字符的段數據使該位顯示出相應字符,其他位為暗。依次改變端口A輸出為高電平的位及端口B輸出對應的段數據,6位LED顯示器就顯示出緩沖器中字符數據所確定的字符。顯示子程序流程圖如圖10一4所示。
程序清單如下:
KDIZHI DATA 7F00H:8155命令口地址(假定)
ADIZHI DATA 7F01H;8155A口地址(假定)
BDIZHI DATA 7F02H;8155B口地址(假定)
DSP:MOV R0,#78H;顯示數據緩沖區首地址送RO
MOV A,#03H
MOV DPTR,#KDIZHI
MOVX@DPTR,A;8155初始化,A口為輸出口,B口為輸出口
MOV R3,#00100000B;使顯示器最左邊位亮
LPl:MOV DPTR,#ADIZHI;數據指針指向A口
MOV A,R3
MOVX @DPTR,A;送掃描值
INC DPTR;數據指針指向B口
MOV A,@R0;取欲顯示數據的字形碼表位序
ADD A,#0DH;加上查表指令地址偏移量
MOVC A,@A+PC;取出字形碼
MOVX @DPTR,A;送出顯示
ACALL DELAY;調用延時子程序
INC R0;指向下一個顯示緩沖區地址
MOV A,R3
JB ACC.0,LP2;掃描到第六個顯示器否?
RR A;未到,掃描碼右移1位
MOV R3,A
AJMP LPl
LP2:RET
TAB:DB 3FH,06H,5BH,4FH,66H, 6DH;0,1,2,3,4,5
DB 7DH,07H,7FH,67H,77H,7CH;6,7,8,9,A, b
DB 39H, 5EH, 79H, 71H:C, d,E,F
DELAY:MOV R7,#02H;延時子程序
DL1:MOV R6,#0FFH
DL2:DJNZ R6,DL2
DJNZ R7,DLl
RET
說明:若某些字符的顯示需要小數點(dp)及需要數據的某些位閃爍時(亮一段時間,熄一段時間),則可建立小數點位置及數據閃爍位置標志單元,指出小數點顯示位置或閃爍位置。當顯示掃描到相應位時(字位選擇字與小數點位置字或閃爍位置字重合),在該位字形碼中加人小數點(點亮dp段)或控制該位閃爍(定時給該位送字形碼或熄滅碼),完成帶小數點或閃爍字符顯示。
第三節 鍵盤接口技術
鍵盤是由若干個按鍵組成的開關矩陣,它是最簡單的單片機輸人設備,操作員可以通過鍵盤輸人數據或命令,實現簡單的人機通信。若鍵盤閉合鍵的識別是由專用硬件實現的,則稱為編碼鍵盤;若用軟件實現閉合鍵識別的,則稱為非編碼鍵盤。非編碼鍵盤又分為行列式和獨立式兩種。本節主要討論非編碼鍵盤的工作原理、接口技術和程序設計。
鍵盤接口應有以下功能:
·鍵掃描功能,即檢測是否有鍵閉合;
·鍵識別功能,確定被閉合鍵所在的行列位置;
·產生相應的鍵的代碼(鍵值)功能;
·消除按鍵抖動及對付多鍵串按(復鍵)功能。
一、鍵盤工作原理
1、獨立式鍵盤
獨立式是一組相互獨立的按健,這些按健可直接與單片機的1/O口連接,即每個按健獨占一條口線,接口簡單。獨立式鍵盤因占用單片機的硬件資源較多,只適合按鍵較少的場合。
舉例:一個具有4個按鍵的獨立式鍵盤如圖10一5a所示,每一個按鍵的一端都接地,另一端接8032的I/O口。從圖中可以看出,獨立式鍵盤每一按鍵都需要一根I/O線,占用8032的硬件資源較多。
2、矩陣式健盤
也稱行列式健盤,因為健的數目較多,所以健按行列組成矩陣。
鍵盤接口處理的內容:
1).鍵掃描
鍵盤上的鍵按行列組成矩陣,在行列的交點上都對應有一個鍵。為判定有無鍵健被按下(閉合健)以及被按健的位里,可使用兩種方法:掃描法和翻轉法。以掃描法為例,說明查找閉合健的方法。
首先是判定有沒有健被按下。如圖7. 31所示,健盤的行線一端經電阻接+5V 電源,另一端接單片機的輸入口線。各列線的一端接單片機的輸出口線,另一端懸空。為判定有沒有鍵被按下,可先經輸出口向所有列線輸出低電平,然后再輸入各行線狀態。若行線狀態皆為高電平,則表明無健按下;若行線狀態中有低電平,則表明有健被按下。
然后再判定被按鍵的位置。判定健位置的掃描是這樣進行的:先使輸出口輸出0FEH,然后輸入行線狀態,測試行線狀態中是否有低電平的。如果沒有低電平,再使輸出口輸出0FDH,再測試行線狀態到輸出。輸出0FBH時,行線中有狀態為低電平者,則閉合健找到),通過此次掃描的列線值和行線值就可以知道閉合健的位置。
2)去抖動
常用鍵盤的鍵是一個機械開關結構,被按下時,由于機械觸點的彈性及電壓突跳等原因,在觸點閉合或斷開的瞬間會出現電壓抖動,如圖7.32所示。抖動時間長短與健的機械特性有關,一般為5~10 ms。而健的閉合時間和操作者的按健動作有關,大約為十分之幾秒到幾秒不等。
去抖動有硬件和軟件兩種方法。硬件方法就是在健盤中附加去抖動電路,從根上消除抖動產生的可能性;而軟件方法則是采用時間延遲以躲過抖動(大約延時20-30ms即可),待行線上狀態確定之后,再進行狀態輸入。一般為簡單起見多采用軟件方法。
3)鍵碼計算
以鍵的排列順序安排健號,則鍵碼的計算公式為:
鍵碼=行首號+列號
4)等待健釋放
計算健碼之后,再以延時后進行掃描的方法等待健釋放。等待健釋放是為了保證健的一次閉合僅進行一次處理。
二、鍵盤接口的控制方式
在單片機的運行過程中,何時執行健盤掃描和處理,可有以下3種情況:
·隨機方式,每當CPU空閑時執行健盤掃描程序。
·中斷方式,每當有健閉合時才向CPU發出中斷請求,中斷響應后執行健盤掃描程序。
·定時方式,每隔一定時間執行一次健盤掃描程序,定時可由單片機的定時器完成。
三、應用舉例
1.接口電路邏輯圖
以8155作8×4健盤的接口為例。如圖7.35所示。
假定A口地址為0101H,C口地址為0103H.
2.判定有無閉合鍵的子程序
判定有無健閉合的子程序為KSl,供在健盤掃描程序中調用。程序如下:
KSl:MOV DPTR,#0101H
MOV A,#00H;A口送00H
MOVX @DPTR,A
INC DPTR
INC DPTR;建立C口地址
MOVX A,@DPTR;讀C口
CPL A;A取反,無健按下則全“0”
ANL A,#0FH;屏蔽A高半字節
RET
執行KSl子程序的結果是:有閉合健則(A)≠0,無閉合健則(A)=00
3.鍵盤掃描程序
假定本系統中顯示程序為DIR,執行時間約為6 ms.
健盤掃描程序如下:
KEYl:ACALL KSl;檢查有健閉合否
JNZ LK1;A非0則轉移
ACALL DIR,顯示一次(延時6 ms)
AJMP KEYl
LK1:ACALL DIR;有健閉合二次延時
ACALL DIR;共12 ms去抖動
ACALL KS1;再檢查有健閉合否
JNZ LK2,有健閉合,轉LK2
ACALL DIR
AJMP KEYl;無健閉合,延時6 ms后轉KEYl
LK2:MOV R2,#0FEH;掃描初值送R2
MOVR4,#00H;掃描列號送R4
LK4:MOV DPTR,#0101H;建立A口地址
MOV A,R2
MOVX @DPTR, A;掃描初值送A口
INC DPTR
INC DPTR;指向C口
MOVX A,@DPTR;讀C口
JB ACC.0,LONE;ACC.0=1,第0行無鍵閉合,轉LONE
MOV A,#00H;裝第0行行值
AJMP LKP
LONE:JB ACC.1,LTWO;ACC.1=1,第1行無鍵閉合,轉LTWO
MOV A,#08H;裝第1行行值
AJMP LKP
LTWO:JB ACC.2,LTHR;ACC.2=1,第2行無鍵閉合,轉LTHR
MOV A,#10H;裝第2行行值
AJMP LKP
LTHR:JB ACC.3,NEXT;ACC.3=1,第3行無鍵閉合則轉NEXT
MOV A,#18H;裝第3行行值
LKP:ADD A,R4;計算鍵碼
PUSH ACC;保護鍵碼
LK3:ACALL DIR;延時6 ms
ACALL KS1;查鍵是否繼續閉合,若閉合再延時
JNZ LK3
POP ACC;若鍵起,則鍵碼送A
RET
NEXT:INC R4;掃描列號加1
MOV A,R2
JNB ACC.7,KND;第7位為0,已掃完最高列則轉KND
RL A;循環左移一位
MOV R2,A
AJMP LK4;進行下一列掃描
KND:AJMP KEYl;掃描完畢,開始祈的山輪
說明:健盤掃描程序的運行結果是把閉合健的健碼放在累加器A中。接下來的程序是根
據健碼進行程序轉移,轉去執行該健對應的操作。
第十二章 輸入輸出通道接口技術
當以單片機為核心組成實時測控系統時,通常需要對被控對象的狀態進行測試和對控制條件進行監測,因此需要通過前向輸人通道將被測信號輸人單片機系統中。
在科學研究和生產過程中,測控系統的被測參數可以是溫度、壓力、速度等非電量,也可以是電流、電壓、功率和開關量等電量。這些參數信號需通過各類傳感器和變送器變換成相應的模擬電量,然后經多路開關匯集送給A/D轉換器,轉換成相應的數字量送給單片機。經過單片機處理過的數字量,送給D/A轉換器,變換成相應的模擬量對被控系統實施控
制和調整,使之處于最佳工作狀態,如圖8-1所示。
知識要點:
輸人輸出通道的基本知識,
數字量輸入輸出通道和模擬量輸人輸出通道的結構
A/D轉換器工作原理和MCS-51系列單片機的連接以及程序設計方法。
D/A轉換器工作原理和MCS-51系列單片機的連接以及程序設計方法。
第一節 前向輸入通道接口技術
一、概述
被測信號分為數字量和模擬量兩種。
1 .數字量輸人
數字量包括N位并行數字量、開關量和頻率信號。
·N位并行數字量
可以直接送人單片機的1/O接口。若N位數字量并行輸人,當N=8時,正好利用一個8位1/O接口輸人單片機內;當N<8時,可利用一個8位1/O接口輸人CPU,然后將其他位屏蔽即可得到N位數據;當N>8時,輸人方式有兩種:一種是利用多個8位I/O接口,另一種是利用一個I/O接口多次選通輸人。
·開關量
開關量是輸入信號為具有TTL電平的狀態信號,如繼電器的吸合與斷開、光電門的導通與截止、限位開關、按鈕、轉換開關、接觸器等電器的觸點通斷,其信號電平只有高、低兩種電平。
圖8-2所示是一種開關量檢測電路。開關量信號經過了光電隔離,適當選擇電阻值,使A點電平符合TTL電平的要求,可以將A點接到單片機I/O接口或經三態門接到單片機數據總線,實現開關量信號輸人。
·頻率信號
經放大、整形和隔離等處理,即可得到較為理想的矩形波,這種矩形波可直接送人單片機系統,如圖8-3所示。
2.模擬量輸人
所謂模擬量,就是一些連續變化的物理量,如溫度、速度、電壓、電流和壓力等。這些被測參數,單片機無法直接處理,需要把這些模擬量通過各類傳感器和變送器變換成相應的模擬電量,然后經多路開關匯集送給A/D轉換器,轉換成相應的數字量送給單片機。
模擬量輸人通道一般由傳感器、放大器、多路模擬開關、采樣保持器和A/D轉換器組成,其結構形式取決于被測對象的環境、輸出信號的類型、數量和大小等,見表8-1。
說明:根據傳感器輸出信號的大小和類型,選擇前向輸人通道結構。
大信號模擬電壓,能直接滿足A/D轉換輸入要求,則可直接送人A/D轉換器,經過A/D轉換后再送人單片機。也可通過V/F轉換成頻率信號送人單片機。但由于頻率測量響應速度慢,多用于一些非快速過程參量的測量,這種通道結構的優點是抗干擾能力強,便于遠距離傳輸。
小信號模擬電壓,則首先應將該信號電壓放大,放大到能滿足A/D轉換、V/F轉換要求的輸人電壓。
以電流為輸出信號的傳感器或傳感儀表則首先應通過I/V轉換,將電流信號轉換成電壓信號。最簡單的I/V轉換器就是一個精密電阻,當信號電流流過精密電阻時,其電壓降與流過的電流大小成正比,從精密電阻兩端取出的電壓就是I/V變換后的電壓信號。
二、A/D 轉換接口技術
A/D轉換接口技術的主要內容是合理選擇A/D轉換器和其他外圍器件,實現與單片機的正確連接以及編制轉換程序。
A/D轉換器(Analog-Digital Converter)是一種能把輸人模擬電壓或電流變成與其成正比的數字量的電路芯片,即能把被控對象的各種模擬信息變成計算機可以識別的數字信息。
分類:計數器式A/D轉換器、雙積分式A/D轉換器、逐次逼近式A/D轉換器和并行A/D轉換器。
計數器式A/D轉換器結構很簡單,但轉換速度也很慢,所以很少采用。
雙積分式A/D轉換器抗干擾能力強,轉換精度很高,但速度不夠理想,常用于數字式測量儀表中。
逐次逼近式A/D轉換器結構不太復雜,轉換速度也高。計算機中廣泛采用其作為接口電路。
并行A/D轉換器的轉換速度最快,但因結構復雜而造價較高,故只用于那些轉換速度極高的場合。
1 、概述
1)A/D轉換器的技術指標:
·量化誤差(Quantizing Error)與分辨率(Resolution)。
A/D轉換器的分辨率表示輸出數字量變化一個相鄰數碼所需輸人模擬電壓的變化量,習慣上以輸出二進制位數或滿量程與2n 之比(其中n為ADC的位數)表示。
例如A/D轉換器AD574A的分辨率為12位,即該轉換器的輸出數據可以用212 個二進制數進行量化,其分辨率為1LSB (1LSB=VFS/212 )。如果用百分數來表示分辨率時,其分辨率為
1/2n ×100%=1/212 ×100%=0.0244%
一個滿量程VFS=10V的12位ADC能夠分辨輸人電壓變化的最小值為2.4mV。
量化誤差是由于有限數字對模擬數值進行離散取值(量化)而引起的誤差。因此,量化誤差理論上為一個單位分辨率,即士(1/2)LSB。提高分辯率可減少量化誤差。
·轉換精度(Conversion Accuracy)。
A/D轉換器轉換精度反映了一個實際A/D轉換器在量化值上與一個理想A/D轉換器進行模/數轉換的差值,由模擬誤差和數字誤差組成。
模擬誤差是比較器、解碼網絡中電阻值以及基準電壓波動等引起的誤差;
數字誤差主要包括丟失碼誤差和量化誤差,丟失碼誤差屬于非固定誤差,由器件質量決定。
·轉換時間與轉換速率。
A/D轉換器完成一次轉換所需要的時間為A/D轉換時間,是指從啟動A/D轉換器開始到獲得相應數據所需時間(包括穩定時間)。通常,轉換速率是轉換時間的倒數,即每秒轉換的次數。
2) A/D轉換器選擇要點
·確定A/D轉換器精度及分辨率。
用戶提出的測控精度要求是綜合精度要求,它包括了傳感器精度、信號調節電路精度和A/D轉換精度及輸出電路、伺服機構精度,而且還包括測控軟件的精度。應將綜合精度在各個環節上進行分配,以確定對A/D轉換器的精度要求,據此確定A/D轉換器的位數。通常A /D轉換器的位數至少要比綜合精度要求的最低分辨率高一位,而且應與其他環節所能達到的精度相適應。
·確定A/D轉換器的轉換速率。
通常根據被測信號的變化率及轉換精度要求,確定A/D轉換器的轉換速率,以保證系統的實時性要求。用不同原理實現的轉換器,其轉換速率是不一樣的,如積分型的、跟蹤比較型的A/D轉換器轉換速率較慢,轉換時間一般為幾毫秒到幾十毫秒,一般用于溫度、壓力、流量等緩變參量的檢測。計算機中廣泛采用逐次逼近式A/D轉換器為中速轉換器,常用于工業多通道單片機測控系統等。并行A/D轉換器的轉換速度最快,故常用于如實時瞬態記錄等轉換速度極高的場合。
·確定環境參數。
根據使用環境條件,確定A/D轉換芯片要求的一些環境:工作溫度、功耗和可靠性等級等。
2、A/D轉換典型芯片ADC0809
8位8通道逐次逼近式A/D轉換器,CMOS工藝,可實現8路模擬信號的分時采集,片內有8路模擬選通開關,以及相應的通道地址鎖存用譯碼電路,其轉換時間為100us左右。
1)ADC0809的內部邏輯結構
ADC 0809內部邏輯結構如圖所示。
圖中多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用一個A/D轉換器進行轉換。地址鎖存與譯碼電路完成對A、B、C3個地址位進行鎖存和譯碼,其譯碼輸出用于通道選擇。
2)信號引腳
ADC0809芯片為28引腳雙列直插式封裝,其引腳排列見圖9.14.
對ADC0809主要信號引腳的功能說明如下:
·IN0~IN7—模擬量輸入通道信號單極性,電壓范圍0-5V,若信號過小還需進行放大。模擬量輸入在A/D轉換過程中其值不應變化,對變化速度快的模擬量,在輸入前應增加采樣保持電路。
·A、B、C地址線
A為低位地址,C為高位地址,模擬通道的選擇信號,引腳圖中為ADDA,ADDB和ADDC。其地址狀態與通道對應關系見表9-1
·ALE 地址鎖存允許信號
對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。
·START 轉換啟動信號
START上跳沿時,所有內部寄存器清“0”;START下跳沿時,開始進行A/D轉換;在A/D轉換期間,START應保持低電平。本信號有時簡寫為ST。
·D7~D0 數據愉出線
為三態緩沖輸出形式,可以和單片機的數據線直接相連。D0為最低位,D7為最高位。
·OE 輸出允許信號
用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。
OE=0,輸出數據線呈高電阻;
OE=1,輸出轉換得到的數據。
·CLK 時鐘信號
ADC 0809的內部沒有時鐘電路,所需時鐘信號由外界提供。通常使用頻率為500kHz的時鐘信號。
·EOC 轉換結束信號
EOC=0,正在進行轉換;
EOC=1,轉換結束。
使用中該狀態信號既可作為查詢的狀態標志,又可以作為中斷請求信號使用。
·Vcc +5V電源
·Vref 參考電源
參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref(+)=+5V,Vref(一)=0V)。
3) 單片機與ADC0809接口
三個問題:
①要給START線送一個100ns寬的起動正脈沖;
②獲取EOC線上的狀態信息,因為它是A/D轉換的結束標志;
③要給“三態輸出鎖存器”分配一個端口地址,也就是給OE線上送一個地址譯碼器輸出信號。
MCS-51和ADC接口通常可以采用定時、查詢和中斷三種方式。
·定時傳送方式
對于每種A/D轉換器,轉換時間作為一項技術指標,是已知的和固定的。如ADC0809的轉換時間為128us。可以設計一延時子程序,當啟動轉換后,CPU調用該延時子程序或用定時器定時,延時時間或定時時間稍大于A/D轉換所需時間。等時間一到,轉換已經完成,就可以從“三態輸出鎖存器”讀取數據。
特點:電路連接簡單,但CPU費時較多。
·查詢方式
采用查詢法就是將轉換結束信號接到I/O接口的某一位,或經過三態門接到單片機數據總線上。A/D轉換開始之后,CPU就查詢轉換結束信號,即查詢EOC引腳的狀態:若它為低電平,表示A/D轉換正在進行,則MCS-51應當繼續查詢;若查詢到EOC變為高電平,則給OE線送一個高電平,以便從線上提取A/D轉換后的數字量。
特點:占用CPU時間,但設計程序比較簡單。
·中斷方式
采用中斷方式傳送數據時,將轉換結束信號接到單片機的中斷申請端,當轉換結束時申請中斷,CPU響應中斷后,通過執行中斷服務程序,使OE引腳變高電平,以提取A/D轉換后的數字量。
特點:在A/D轉換過程中不占用CPU的時間,且實時性強。
4) 應用舉例
例 分別采用不同方式對8路模擬信號輪流采一遍樣,并依次把轉換后的數據存放到數據存儲區。ADC0809與8031接口工作方式見圖。
·EOC開始轉換時為低電平,當轉換結束時為高電平。
·查詢方式:查詢EOC引腳,接P1.0。
·中斷方式:EOC經反相器接8051的外部中斷引腳INT1。
1)定時傳送方式
MAIN:MOV R1,#data
MOV DPTR,#7FF8H;P2.7=0,且指向通道0
MOV R7,#08H;置通道數
LOOP:MOVX @DPTR,A;啟動A/D轉換
MOV R6,#0AH
DLAY:NOP
NOP
NOP
NOP
DJNZ R6,DLAY
MOVX A,@DPTR;讀取轉換結果
MOV @R1,A
INC DPTR;指向下一個通道
INC R1;修改數據區指針
DJNZ R7,LOOP
2)查詢方式
MAIN:MOV R1,#data
MOV DPTR,#7FF8H;P2.7=0,且指向通道0
MOV R7,#08H;置通道數
LOOP:MOVX @DPTR,A;啟動A/D轉換
SETB P1.0
WAIT:JNB P1.0,WAIT;查詢P1.0狀態
MOVX A,@DPTR;讀取轉換結果
MOV @R1,A
INC DPTR;指向下一個通道
INC R1;修改數據區指針
DJNZ R7,LOOP;8個通道全采樣完了嗎?
RET
3)中斷方式
SETB IT1
SETB EX1
SETB EA
MOV DPTR,#7FF8H
MOV A,#0
MOVX @DPTR,A
…
EINT1:MOV DPTR,#7FF8H
MOVX A,@DPTR
MOV 30H,A
MOV A,#00
MOVX @DPTR,A
RETI
第二節 后向輸出通道接口技術
在以單片機為核心組成的測控系統中,單片機要通過后向輸出通道輸出控制信號對控制對象實現控制操作。
知識要點:
后向輸出通道的作用、結構
D/A轉換接口及應用
一、概述
1.后向輸出通道的作用分析:
·數/模轉換單片機輸出的控制信號是數字信號,需要通過D/A轉換器把數字量轉換成控制對象所需的模擬電壓或電流。
·功率放大驅動經數/模轉換得到的模擬電壓或電流控制信號,不能滿足控制對象的功率要求,必須經功率放大,驅動外部伺服系統。
·干擾信號防治后向輸出通道接近控制對象,工作環境相對惡劣,會出現伺服驅動系統通過信號通道、電源以及空間電磁場對單片機應用系統的電磁干擾,另外還會出現機械干擾,因此通常采用信號隔離、電源隔離和大功率開關實現過零切換等方法進行干擾防治。
2.后向輸出通道的結構
根據單片機輸出信號和控制對象的特點,后向輸出通道的結構如圖8-12所示。單片機通過1/0接口或數據總線輸出的開關量、數字量和頻率量可以直接用于開關量、數字量控制系統和頻率調制系統,對于模擬量控制系統,需通過D/A、F/V轉換成模擬量控制信號。下面對后向輸出通道中的重要部分D/A轉換接口進行詳細分析。
二、D/A轉換接口
D/A轉換接口技術的主要內容是合理選擇D/A轉換器和其他有關器件,實現與微機的正確連接以及編制轉換程序。
1.概述
(1) D/A轉換器
D/A轉換器(Digital to Analog Conver)是一種能把數字量轉換成模擬量的電子器件。在單片機測控系統中經常采用的是D/A轉換器的集成電路芯片,稱為D/A接口芯片或DAC芯片。
(2) D/A轉換器的性能指標
·分辨率(Resolution)
指D/A接口芯片能分辨的最小輸出模擬增量。輸人數量發生單位數碼變化時,即LSB(最低有效位)產生一次變化時,所對應的輸出的模擬量的變化量。對于線性D/A轉換器來說,其分辨率△與數字量的位數n的關系為
在實際使用中,表示分辨率高低更常用的方法是采用輸入量的位數,如滿量程10V的8位DAC芯片的分辨率為8位。
·轉換精度(Conversion Accuracy)
指滿量程時DAC的實際模擬輸出量與理論值的接近程度,與D/A轉換芯片的結構和接口配置電路有關。通常,DAC的轉換精度為分辨率的一半。
·失調誤差
指輸人數字量為零時,模擬輸出量與理想輸出量的偏差。偏差值的大小一般用LSB的份數或用偏差值表示。
(3)D/A轉換器的選擇要點
·輸人信號的形式。
輸人信號有并行和串行兩種形式,根據實際要求選定。在實際應用中大多數為并行輸入。串行輸入節省數據線,但速度較慢,適用于遠距離數據傳輸。
·分辨率和轉換精度
根據對輸出模擬量的精度要求來確定D/A轉換器的分辨率和轉換精度。常用的分辨率有8位、10位和12位。在精度指標方面,零點誤差和滿量程誤差可以通過電路調整進行補償,因此主要看芯片的非線性誤差和微分非線性誤差。
·建立時間
D/A轉換器的電流建立時間很短,一般為50-500ns。若是輸出電莊形式,加上運算放大器電路,電壓建立時間一般為1us到幾us,一般都能滿足系統要求。
·轉換結果的輸出形式
轉換結果的輸出形式有電流或電壓,有單極性或雙極性,有不同量程,還有多通道輸出方式。這可根據應用系統對模擬量形式的實際要求來確定。
2.D/A轉換典型芯片DAC0832芯片
DAC0832是微處理器完全兼容的,具有8位分辨率的D/A轉換集成芯片,以其價廉、接口簡單、轉換控制容易等優點,在單片機應用系統中得到了廣泛的應用。
(1) DAC0832的引腳
其邏輯結構及管腳號如圖所示。
它由8位輸人鎖存器、8位DAC寄存器、8位D/A轉換電路及轉換控制電路構成。為20腳雙列直插式封裝結構。各引腳信號說明如下:
·DI7~DI0—轉換數據輸入。
·/CS—片選信號(輸入),低電平有效。
·ILE—數據鎖存允許信號(輸入),高電平有效。
·/WR1—第1寫信號(輸入),低電平有效。該信號與ILE信號共同控制輸入寄存器是數據直通方式還是數據鎖存方式:
當ILE=1和/WR1=0時,為輸入寄存器直通方式;
當ILE=1和/WR1=1時,為輸入寄存器鎖存方式。
·/XFER—數據傳送控制信號(輸入),低電平有效。
·/WR2—第2寫信號(輸入),低電平有效。該信號與/XFER信號合在一起控制DAC寄存器是數據直通方式還是數據鎖存方式:
/WR2=0和/XFER=0時,為DAC寄存器直通方式;
/WR2=1和/XFER=0時,為DAC寄存器鎖存方式。
·Iout1—電流輸出“1”;當數據為全1時,輸出電流最大;為全0時輸出電流最小。
·Iout2—電流輸出“2”;DAC轉換器的特性之一是:Iout1+Iout2=常數。
·Rfb—反饋電阻端。
即運算放大器的反饋電阻端,電阻已固化在芯片中。因為DAC0832是電流輸出型D/A轉換器,為得到電壓的轉換輸出,使用時需在兩個電流輸出端接運算放大器Rfb即為運算放大器的反饋電阻,運算放大器的接法如圖所示。
·Vref—基準電壓,是外加高精度電壓源。該電壓可正可負,范圍為-10V~+10V。
·DGND—數字地。
·AGND—模擬地。
(2)DAC0832內部結構
DAC0832的內部結構框圖如圖9. 3所示。
“8位輸人寄存器”用于存放CPU送來的數字量,使輸人的數字量得到緩沖和鎖存,由/LE1控制。“8位DAC寄存器”用于存放待轉換的數字量,由/LE2控制。“8位D/A轉換電路”由T型電阻網絡和電子開關組成,電子開關受“8位DAC寄存器”輸出控制。
(3)DAC0832和MCS-51單片機的接口方式
·單緩沖方式連接
所謂單緩沖方式就是使DAC0832的兩個輸入寄存器中有一個(多為DAC寄存器)處于直通方式,而另一個處于受控的鎖存方式。
應用場合:如果只有一路模擬量輸出,或雖是多路模擬量輸出但并不要求輸出同步的情況下,就可采用單緩沖方式。單緩沖方式連接如圖9.4所示。
單緩沖方式應用舉例:
例1產生鋸齒波,其電路連接如圖所示。
圖中的DAC0832工作于單緩沖方式,其中輸入寄存器受控,而DAC寄存器直通。假定輸入寄存器地址為5000H,產生鋸齒波的程序清單如下:
MOV DPTR ,#5000H
MOV R0,#00H
WW:MOV A,R0
MOVX @DPTR , A
INC R0
NOP
NOP
NOP
AJMP WW
例.2小電機驅動。
分析:對于小功率直流電機驅動,使用單片機極為方便,其方法就是控制電機定子電壓接通和斷開時間的比值(即占空比),以此來驅動電機和改變電機的轉速,這種方法稱為脈沖寬度調速法(或簡稱脈寬調速法)。占空比以及占空比與電機轉速的關系如圖所示。
電壓變換周期為T,電壓接通時間為t,則占空比表示為D=t/T。設電機固定接通電源時的最大轉速為Vmax,則用脈沖寬度調速的電機轉速為:
Vd=Vmax×D
Vd與D的函數曲線如9.7(b)所示。可以看出,實際上Vd與D并不完全是線性關系(如圖中實線所表示),但可以近似地看成是線性關系,為此我們可以采用控制加電脈沖寬度的辦法來驅動電機并調節其轉速。
按圖9.9的連接,DAC0832輸入寄存器的地址為9000H,則MCS- 51電機驅動程序清單如下:
ORG 0000H
AJMP DAMOT
ORG 08100H
DAMOT:MOV DPTR,#9000H;翰入寄存器地址
MOV A,#80H
MOVX @DPTR,A;輸出0V電平
ACALL DELAY1,維持0V電平
MOV A,#0FFH
MOVX @DPTR, A;輸出+5V電平
ACALL DELAY2,維持+5V電平
AJMP DAMOT
說明:按上述程序,改變延時子程序的延遲時間就可以改變電機的轉速。如把第二次轉換的數字圣從0FFH改為00H,則輸出脈沖的極性改變(0V~-5V),從而也就改變了電機的轉向。
例3按圖8031與DAC0832的接口編寫程序,在運算放大器輸出端輸出一個三角波電壓。
DAC0832單緩沖方式接口電路:
ORG 1000H
MOV DPTR,#7FFFH;指向0832
MOV R2,#0FFH;循環次數
MOV A,#00H;賦初值
LOOP1:MOVX @DPTR,A;D/A轉換輸出
INC A
DJNZ R2,LOOP1
MOV R2,#0FEH
LOOP2:DEC A
MOVX GDPTR,A
DJNZ R2,LOOP2
ALMP LOOP1
END
·雙緩沖方式連接
所謂雙緩沖方式,就是把DAC0832的輸入寄存器和DAC寄存器都接成受控鎖存方式。雙緩沖方式DAC0832的連接如圖9.10所示。
應用場合:對于多路D/A轉換接口,要求同步進行D/A轉換輸出時,必須采用雙緩沖器同步方式接法。
0832采用這種接法時,數字量的輸人鎖存和D/A轉換輸出是分兩步完成的,即CPU的數據總線分時地向各路D/A轉換器輸入要轉換的數字量并鎖存在各自的輸入寄存器中,然后CPU對所有的D/A轉換器發出控制信號,使各個D/A轉換器輸入寄存器中的數據送人DAC寄存器,實現同步轉換輸出。
應用舉例:下圖是一個兩路同步輸出的D/A轉換接口電路。
P2.5和P2.6分別選擇兩路D/A轉換器的輸人寄存器,控制輸人鎖存;P2.7連到兩路D/A轉換器的/XFER端控制同步轉換輸出;8031的/WR端與所有的/WR1和/WR2端相連。執行下面8條指令就能完成D/A的同步轉換輸出。
MOV DPTR,#0DFFFH;指向0832 (1)
MOV A,#data11;datal送人0832 (1)中鎖存
MOVX @DPTR,A
MOV DPTR,#0BFFFH;指向0832 (2)
MOV A,data2;data2送人0832 (2)中鎖存
MOVX @DPTR,A
MOV DPTR,#7FFFH;給0832(1)、0832(2)提供信號,同時完成D/A轉換輸出
MOVX @DPTR,A
第七章 單片機控制系統抗干擾技術
本章將從干擾源的來源、硬件、軟件以及電源系統各方面研究分析并給出有效可行的解決辦法。
第一節 干擾的來源及分析
一、 主要的干擾源
影響正常工作的信號稱為噪聲,又稱干擾。
舉例:在單片機控制系統中,出現了干擾,就會影響指令的正常執行,造成控制事故或控制失靈;在測量通道中產生了干擾,就會使測量產生誤差,計數器收到干擾有可能亂記數,造成記數不準,電壓的沖擊有可能使系統遭到致命的破壞。
凡是能產生一定能量,可以影響到周圍電路正常工作的媒體都可認為是干擾源。干擾有的來自外部,有的來自內部。一般來說,干擾源可分為以下三類:
①自然界的宇宙射線,太陽黑子活動,大氣污染及雷電因素造成的;
②物質固有的,即電子元器件本身的熱噪聲和散粒噪聲;
③人為造成的,主要是由電氣和電子設備引起。
舉例:在系統工作的環境中廣泛存在,包括動力電網的電暈量放電、絕緣不良的弧光放電、交流接觸器、開關電感負載的繼電器接點引起的電火花,照明燈管所引起的放電、變壓器、電焊機、吊車,大功率設備啟動浪涌,可控硅開關造成的瞬間尖峰,都會對電網產生影響。另外像大功率廣播、電視、通訊、雷達、導航、高頻設備以及大功率設備所發出的空間電磁干擾。系統本身電路的過渡過程,電路在狀態轉換時引起的尖峰電流,電感或電容所產生的瞬間電壓和瞬變電流也會對系統工作產生千擾。另外,印制電路板布局不合理、布線不周到、排列不合理、粗細不合理,使電路板自身產生相互影響,系統安裝布線不合理,強弱電走線不能分開,造成相互干擾。
二、 噪聲干擾產生的原因
①電路性干擾。電路性干擾是由于兩個回路經公共阻抗耦合而產生的,干擾量是電流。
②電容性干擾。電容性干擾是由于干擾源與干擾對象之間存在著變化的電場,從而造成了干擾影響,干擾量是電壓。
③電感性干擾。電感性干擾是由于干擾源的交變磁場在干擾對象中產生了干擾感應電壓。而產生感應電壓的原因則是由于在干擾源中存在著變化電流。
④波干擾。波干擾是傳導電磁波或空間電磁波所引起的。空間電磁波的干擾量是電場強度和磁場強度。傳導波的干擾量是傳導電流和傳導電壓。
三、 干擾竄入系統的渠道
環境對單片機控制系統的干擾一般都是以脈沖的形式進人系統的,干擾竄入系統的渠道主要有三條,如圖7-1所示。
由圖中可見,空間干擾(場干擾)是通過電磁波輻射入系統;過程通道干擾是通過和主機系統相連接的輸入通道、輸出通道及與其他主機系統相連的通信通道進入單片機系統的;供電系統干擾,主要通過供電系統的直流電源線路或地線進人系統。一般情況下,空間干擾在強度上遠小于其他兩個渠道進人系統的干擾,而且空間干擾可用良好的屏蔽與正確的接地,或采用高頻濾波器加以解決。因此抗干擾的重點應放在供電系統和過程通道的干擾。
第二節 硬件抗干擾技術
一、選用可靠的元器件
一般情況下,元器件在出廠前都進行了測試。在通常應用時,不再進行測試,而直接將元器件用于電路中進行通電運行考驗。在考驗中發現問題,直接替換不合格芯片或器件。
按著一般的經驗,如芯片在通電使用一個月左右而不產生損壞,就可以認為比較穩定。但在購買時,最好到較正規的大公司或商店購買元器件,一般都能保證元器件本身質量的可靠。
二、接插件的選擇應用
單片機控制系統通常可由幾塊印制電路板組成,各板之間以及各板與基準電源之間經常選用接插件相聯系。在接插件的插針之間也易造成干擾,這些干擾與接插件插針之間的距離以及插針與地線之間的距離都有關系。在設計選用時要注意以下幾個問題。
1.合理地設置插接件
如電源插接件與信號插接件要盡量遠離,主要信號的接插件外面最好帶有屏蔽。
2.插頭座上要增加接地針數
在安排插針信號時,用一部分插針為接地針,均勻分布于各信號針之間,起到隔離作用,以減小針間信號互相干擾。最好每一信號針兩側都是接地針,使信號與接地針理想的比例為1:1。
3.信號針盡量分散配置,增大彼此之間的距離。
4. 設計時考慮信號的翻轉時差,把不同時刻翻轉的插針放在一起。同時翻轉的針盡量離開,因信號同時翻轉會使干擾疊加。
三、印制電路板抗干擾設計技術
印制電路板是器件、信號線、電源線的高密度集合體,布線和布局好壞對可靠性影響很大。
1.印制電路總體布局原則
①印制電路板大小要適中,板面過大印制線路太長,阻抗增加,成本偏高;板子太小,板間相互連線增加,易增加干擾環境。
②印制板元件布局時相關元件盡量靠近。如晶振、時鐘發生器及CPU時鐘輸入端相互靠近,大電流電路要遠離主板,或另做一塊板。
③考慮電路板在機箱內的位置,發熱大的元器件放置在易通風散熱的位置。
2.電源線和地線與數據線傳輸方向一致,有助于增強抗干擾能力。接地線可環繞印制板一周安排,盡可能就近接地。
3.地線盡量加寬,數字地、模擬地要分開,根據實際情況考慮一點或多點接地。
4.配置必要的去耦電容
①電源進線端跨接100up以上的電解電容以吸收電源進線引入的脈沖干擾。
②原則上每個集成電路芯片都配置一個0.01up的瓷片電容或聚乙烯電容,可吸收高頻干擾。
③電容引線不能太長,高頻旁路電容不能帶引線。
四、執行機構抗干擾技術
在單片機控制系統輸出回路中,存在著執行開關、線圈等回饋干擾。特別是感性負載,電機電樞的反電動勢會損壞電子器件,甚至會破壞計算機系統或擾亂程序系統,為防止由于電感負載的瞬間通、斷造成的干擾,常采用以下措施:
1.觸點兩端并聯阻容吸收電路,控制觸點間放電,如圖7-2(a)所示。
2.電感負載兩端并聯反向二極管,形成反電動勢放電回路,保護設備。如圖7-2(b)所示,在繼電器線圈兩端并接二極管。當開關斷開時,感應電動勢通過二極管放電,防止擊穿電源及開關。
第三節 軟件抗干擾技術
一、設置軟件陷阱
由于系統干擾可能破壞程序指針PC,PC一旦失控,使程序“亂飛”可能進人非程序區,造成系統運行的一系列錯誤。設置軟件陷阱,可防止程序“亂飛”。
方法:在ROM或RAM中,每隔一些指令(十幾條即可),就把連續幾個單元設置成空操作(所謂陷阱)。當失控的程序掉入“陷阱”,也就是連續執行幾個空操作后,程序自動恢復正常,繼續執行后面的程序,也可以在程序芯片沒有被程序指令字節使用的部分全部置成空操作指令代碼,在最后使用跳轉指令,一般跳到程序開頭。一旦程序飛出到非程序區,執行空操作之后,最后跳回到程序初始化,重新執行程序。或隔一段使用一條跳轉到程序開頭的指令。
二、增加程序監視系統(Watchdog )
利用設置軟件陷阱的辦法雖在一定程度上解決了程序“飛出”失控問題,但不能有效地解決死循環問題。
設置程序監視器(Watchdog看門狗)可比較有效地解決死循環問題。程序監視器系統有的采用軟件解決,大部分都是采用軟硬件相結合的辦法。下面以兩種解決辦法來分析其結構原理。
1、利用單片機內部定時器進行監視
方法:在程序一開始就啟動定時器工作,在主程序中增設定時器賦值指令,使該定時器維持在非溢出工作狀態。定時時間要稍大于程序一次循環的執行時間。程序正常循環執行一次給定時器送一次初值,使其不能溢出。但若程序失控,定時器則計滿溢出中斷,在中斷服務程序中使主程序自動復位又進入初始狀態。
例8051單片機若晶振頻率使用6MHz,選定時器T0定時監視程序。程序如下:
ORG 0000H
START:AJMP .MAIN
ORG 000BH
AJMP START
MAIN:SETB EA
SETB IE0
SETB TR0
MOV TMOD,#01H
MAIN1:MOV TH0,datal
MOV TL0,datal
LJMP MAIN
2、利用單穩觸發器構成程序監視器
方法:利用軟件經常訪問單穩電路,一旦程序有問題,CPU不能照常訪問,單穩電路則產生翻轉脈沖使單片機復位,程序重新開始執行。
三、軟件冗余技術
軟件冗余技術,就是多次使用同一功能的軟件指令,以保證指令執行的可靠性,這從以下幾個方面考慮。
1.采取多次讀入法,確保開關量輸人正確無誤
重要的輸人信息利用軟件多次讀入,比較幾次結果一致后再讓其參與運算。對于按鈕和開關狀態讀入時,要配合軟件延時可消除抖動和誤動作。
2.不斷查詢輸出狀態寄存器,及時糾正輸出狀態
設置輸出狀態寄存器,利用軟件不斷查詢,當發現和輸出的正確狀態不一致時,及時糾正,防止由于干擾引起的輸出量變化導致設備誤動作。
3.對于條件控制系統,把對控制條件的一次采樣、處理控制輸出改為循環地采樣、處理輸出。這種方法對于慣性較大的控制系統具有良好的抗偶然干擾作用。
4.為防止計算錯誤,可采用兩組計算程序,分別計算,然后將兩組計算結果進行比較,如兩次計算結果相同,則將結果送出。如出現誤差,則再進行一次運算,重新比較,直到結果相同。
四、軟件可靠性設計
1、利用軟件提高系統抗干擾能力
在軟件設計時采用如下措施,對提高系統抗干擾能力是積極有力的。
①增加系統信息管理軟件。它與硬件相配合,對系統信息進行保護。其中包括防止信息被破壞,出故障時保護信息,故障排除之后恢復信息等。
②防止信息的輸人輸出過程中出錯。如對關鍵數據采用多種校驗方式,對信息采用重復傳送校驗技術,從而保證信息的正確無誤。
③編制診斷程序,及時發現故障,找出故障位置,以便及時檢修或啟用冗余軟件。
④用軟件進行系統調度,包括出現故障時保護現場,迅速將故障裝置切換成備用裝置,在環境條件發生變化時,采取應急措施,故障排除后,迅速恢復系統,繼續投人運行等。
2、提高軟件自身的可靠性
1).程序分段和采用層次結構
在進行程序設計時,將程序分成若干個具有獨立功能的子程序塊。各個程序塊可以
單獨使用,也可與其他程序塊一起使用。各程序塊之間可通過一固定的通信區和一些指
定的單元進行信息傳遞。每個程序塊都可單獨進行調整和修改而不影響其他程序塊。
2).采用可測試性設計
軟件在編制過程中會出現一些錯誤。為便于查出程序錯誤,提高軟件開發效率,可采用以下三種方法:一是明確軟件規格,使測試易于進行;二是將測試設計的程序段作為軟件開發的一部分;三是把程序結構本身組成便于測試的形式。
3).對軟件進行測試
測試軟件的基本方法是,給軟件一個典型的輸入,觀測輸出是否符合要求。發現錯誤進行修改,直至消除錯誤,達到設計要求。
測試軟件可按下述步驟進行:
①單元測試,即對每個程序塊單獨進行測試;
②局部或系統測試,即對多個程序塊組成的局部或系統程序進行測試,以發現塊間連接錯誤;
③系統功能測試,按功能對軟件進行測試,如控制功能、顯示功能、通信功能、管理功能、報瞥功能等;
④現場測試,即硬件安裝調試后將軟件進行安裝測試,以便對整個控制系統的功能及性能作出評價。
五、軟件自診斷技術
軟件診斷技術主要從兩個方面進行考慮,一方面是對系統硬件和過程通道的自診斷,另一方面是對過程軟件本身進行診斷和故障排除。
1、對硬件系統進行診斷
對硬件系統診斷包含兩個方面內容:一是確定硬件電路是否存在故障,這叫故障測試;二是指出故障的確切位置,給維護以操作指導,這叫故障定位。
單片機控制系統有的配備有系統測試程序,在系統上電時,首先對系統的主要部件以及外設I/0端口進行測試,以確認系統硬件工作是否正常。對接口故障的測試,主要是檢測接口中元器件的故障,這就要求在進行接口電路設計時要考慮以下因素:
①在接口設計時,除考慮接口的功能外,要考慮提供檢測的寄存器或緩沖器,以便檢測使用;
②可將接口劃分成若干個檢測區,在每一檢測區將檢測點逐一編號,進行測試;
③可將測試點按順序編制成故障字典,以便按測試結果給出故障部位,進行故障定
位。
2、軟件運行自診斷
設置陷阱、使用程序監視器、時間冗余方法
時間冗余方法是通過消耗時間資源達到糾錯的目的。時間冗余方法通常采用指令復執和程序卷回兩種途徑來實現。
1)指令復執技術
所謂復執,就是程序中的每條指令都是一個重新啟動點,一旦發現錯誤,就重新執行被錯誤破壞的現行指令,指令復執既可用編制程序來實現,也可用硬件控制來實現,基本的實現方法是:
①當發現錯誤時,能準確保留現行指令的地址,以便重新取出執行;
②現實指令使用的數據必須保留,以便重新取出執行時使用。
指令復執的次數通常采用次數控制和時間控制兩種方式,如在規定的復執次數或時間之內故障沒有消失,稱之復執失敗。
2)程序卷回技術
程序卷回不是某一條指令的重復執行,而是一小段程序的重復執行。為了實現卷回,也要保留現場。程序卷回的要點是:
①將程序分成一些小段,卷回時也要卷回一小段,不是卷回到程序起點;
②在第n段之末,將當時各寄存器、程序計數器及其他有關內容移人內存,并將內存中被第n段所更改的單元又在內存中另開辟一塊區域保存起來。如在第(n+1)段中不出問題,則將第(n+1)段現場存檔,并撤消第二段所存內容;
③如在第(n+1)段出現錯誤,就把第n段的現場送給機器的有關部分,然后從第(n+1)段起點開始重復執行第(n十1)段程序。
第四節 供電系統抗干擾技術
供電系統干擾分為:
① 過壓、欠壓、停電 使用各種穩壓器和不間斷電源UPS
② 浪涌、下陷、降出 快速響應的交流電壓調壓器
③ 尖峰電壓 使用具有噪聲抑制能力的交流穩壓器或隔離變壓器
④ 射頻干擾 低通濾波器
一、建議的供電解決方案
為了防止電源系統竄人干擾,影響單片機控制系統的正常工作,可采用如圖7-5所示的供電配置。
如圖7-5所示,整個供電系統從以下幾個方面考慮。
①交流進線端加交流濾波器,可濾掉高頻干擾,如電網上大功率設備啟停造成的瞬間干擾。濾波器市場上的成品有一級、二級濾波之分,安裝時外殼要加屏蔽并使其良好接地,進出線要分開,防止感應和輻射耦合。低通濾波器僅允許50Hz交流通過,對高頻和
中頻干擾有很好的衰減作用。
②要求高的系統加交流穩壓器。
③采用具有靜電屏蔽和抗電磁干擾的隔離電源變壓器。
④采用集成穩壓塊兩級穩壓。
⑤主電路板采取獨立供電,其余部分分散供電,避免一處電源有故障引起整個系統顛覆。
⑥直流輸出部分采用大容量電解電容進行平滑濾波。
⑦線間對地增加小電容濾波消除高頻干擾。
⑧交流電源線與其他線盡量分開,減少再度耦合干擾。
⑨盡量提高接口器件的電源電壓,提高接口的抗干擾能力。
第五節 接地系統抗干擾技術
在設計時,若能將接地和屏蔽正確地結合起來使用,可以解決大部分干擾引起的故障。接地問題包括兩個方面的內容:一個是接地點是否正確;另一個是接地點是否牢固。接地點選擇正確可防止系統各部分的串擾,接地點牢固可使接地點處于零阻抗,從而降低了接地電位,防止了接地系統的共模干擾。
一、系統地線分類
兩大類:
保護接地主要是為了避免工作人員因設備絕緣損壞或性能下降時遭受觸電危險和保證設備的安全
工作接地主要是保證控制系統穩定可靠的運行,防止地環路引起的干擾。
在單片機控制系統中,地線大致分為以下幾類:
① 數字地也叫邏輯地,它是數字電路的零電位;
② 模擬地它是放大器、采樣保持器以及A/D轉換器和比較器等的零電位;
③功率地即大電流網絡元件、功放器件的零電位;
④信號地即傳感器件的地電平;卜
⑤交流地指交流50Hz電源的零線;
⑥直流地指直流電源的地線;
⑦屏蔽地一般同機殼相聯,為防止靜電感應和磁場感應而設置的,常和大地相接。
二、不同地線的處理原則
1.一點接地和多點接地
在低頻(小于1MHz)電路中,布線和元件之間的電感不會產生太大影響,常采用一點接地。
在高頻(高于10MHz)電路中,寄生電容和電感影響較大,易采用多點接地。
2. 數字地和模擬地必須分開。
3.交流地與信號地不要共用。
4.浮地和接地
系統浮地,是將系統電路的各個部分地線浮置起來,不與大地相聯。通常采用系統浮地,機殼接地,可使抗干擾能力強,安全可靠。
5.印制電路板地線布線
其如下所示:
①TTL、CMOS器件的地線要呈輻射網狀,其他地線不要形成環路;
②地線盡量加寬,最好不要小于3mm;
③旁路電容地線不要太長;
④大規模集成電路最好跨越平行的地線和電源線,以消除干擾。
6.傳感器信號地
由于傳感器和機殼之間易引起共模干擾,為提高抗共模干擾能力,一般A/D轉換器的模擬地采用浮空隔離,并可采用三線采樣雙層屏蔽浮地技術,就是將地線和信號線一起采樣,可有效地抑制共模干擾。
第六節 輸入輸出通道抗干擾技術
一、開關信號的抗干擾技術、
1、開關量的電平轉換
提高開關量電平進行開關信號傳輸,可以降低電磁干擾,而輸人到單片機中的電平都是TTL電平,因此存在一個電平轉換問題。可采用如圖7-9所示的電路。若提高開關量輸出的電平可參考圖7-10所示的電路。
二、采用隔離技術
① 對啟停負荷不大、響應速度不太高的設備,一般采用繼電器隔離比用光電隔離更直接。繼電器能直接控制動力電路,而驅動繼電器的集成電路要用集電極開路的集成電路(OC門),并在繼電器線圈兩端加續流二極管,以保證驅動電路正常工作,如圖7-11所示。
② 在交流啟停負荷較大時,大負荷觸點在接通或斷開時,所產生的火花和電弧具有十分強烈的干擾作用,可采用如圖7-12所示的電路,用兩個對接的可控硅代替交流接觸器,它們的控制極由小繼電器的一個觸點控制,觸點接通,兩個可控硅輪流導通,觸點斷開,兩個可控硅完全關斷。固態繼電器也就是將對接的可控硅封裝在一個模塊中的器件。
③ 快速直流負載的光耦合驅動。如圖7-13所示。
④ 快速驅動交流負載的光電耦合驅動。如圖7-14所示。
二、模擬通道的抗干擾技術
1 、硬件措施
1)模擬量輸人回路
加入RC濾波器,以減小工頻干擾信號對輸入信號的影響,如圖7-15所示。
2)光電耦合器隔離
在模擬通道使用光電耦合器要按照如圖7-16的安排設計。
3)適當選用A/D芯片
在干擾嚴重的場合,可選用雙積分式A/D轉換器。要求轉換速度快的場合,要選用逐次逼近方式的轉換器。
2 、軟件措施
用軟件對輸入量的濾波處理是消除低頻干擾的重要措施,常用的濾波算法有以下幾
種:
1)限幅濾波
規定在相鄰兩次采樣信號之間的差值不得超過一個固定數值。
2)中值濾波
每獲得一個采樣數據時連續采樣三次,找出三個采樣值中的一個居中的值作為本次采樣值。
3)算術平均值濾波
連續記錄幾次采樣值,求其平均值作為本次采樣值。
4)五中取三平均值濾波
該辦法是若得到一個采樣值,要連續采樣五次,然后按大小順序排列,去掉一個最大的,去掉一個最小的,取其中間三個數求其平均值。
5)一階慣性濾波
對于低頻干擾信號,可用此濾波模擬RC濾波,來消除干擾。
三、長線傳輸的抗干擾技術
1 、雙絞線傳輸
在數字信號傳輸過程中,根據傳送距離的不同,雙絞線使用方法也有所不同,如圖7-17所示。
當傳送距離在5m以下時,發送和接收端連接負載電阻。若發送側為集電極開路驅動,則接收側的集成電路用施密特型電路,抗干擾能力更強。
當用雙絞線作遠距離傳送數據時,或有較大噪聲干擾時,可使用平衡輸出的驅動器和平衡輸入的接收器。發送和接收信號端都要接匹配電阻,如圖7-17(b)、(c)所示。
用雙絞線傳輸與, 光電耦合器聯合使用時,可按圖7-18所示的方式連接。圖中(a)是集電極開路驅動器與光電耦合器的一般情況。(b)是開關接點通過雙絞線與光電耦合器連接的情況。如在光電耦合器的光敏晶體管的基極上接有電容及電阻,且后面連接施密特集成電路驅動器,則會大大加強抗噪聲能力,如圖中所示。
二、長線傳輸的阻抗匹配
長線傳輸時如匹配不好,會使信號產生反射,從而形成嚴重的失真。為了對傳輸線進行阻抗匹配,必須估算出其特性阻抗Rpo利用示波器觀察的方法可以大致測定傳輸線特性阻抗的大小,測試方法如圖7-19所示。調節可變電阻R,當R與特性阻抗Rp相匹配時,用示波器測量A門輸出波形畸變最小,反射波幾乎消失,這時R值可認為是該傳輸線的特性阻抗Rp。
傳輸線阻抗的匹配有以下四種形式:
1 .終端并聯匹配
如圖7-20所示,終端匹配電阻Rl、R2的值,按Rp=RI/R2的要求選取。一般Rl為220-330Ω,而R2可在270-390Ω范圍內選取。此種方法由于終端阻值偏低,相當于負載加重,使高電平有所下降,使高電平抗干擾能力有所下降。
2 .始端串聯匹配
如圖7-21所示,匹配電阻R的取值為Rp與A門輸出低電平時輸出阻抗Rsc(約20Ω)之差值。此方法會使終端低電平抬高,相當于增加了輸出阻抗,降低了低電平的抗干擾能力。
3 .終端并聯隔直匹配
如圖7-22所示,因電容C在較大時起隔直作用,并不影響匹配。所以只要求匹配電阻R與Rp相等即可。它不會引起輸出低電平的降低,增加了高電平的抗干擾能力。
4 .終端鉗位二極管匹配
如圖7-23所示,利用二極管D把B門輸人端低電平鉗位在0.3V以下,可以減少波的反射和振蕩,可提高動態抗干擾能力。
三、長線電流傳輸
用電流傳輸代替電壓傳輸,可獲得較好的抗干擾能力。如圖7-24所示,從電流轉換器輸出0-10mA(或4-20mA)電流,在接收端并上500Ω(或lkΩ)的精密電阻,將此電流轉換為0-5V(或1-5V)的電壓,然后送人A/D轉換器。在有的實用電路里輸出端采用光電耦合器輸出驅動,也會獲得同樣的效果。此種方法可減少在傳輸過程中的干擾,提高傳輸的可靠性。