PIC與計算機(jī)接口設(shè)計_第1頁
PIC與計算機(jī)接口設(shè)計_第2頁
PIC與計算機(jī)接口設(shè)計_第3頁
PIC與計算機(jī)接口設(shè)計_第4頁
PIC與計算機(jī)接口設(shè)計_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PIC與計算機(jī)接口設(shè)計

本章主要對PIC單片機(jī)系統(tǒng)的有關(guān)數(shù)據(jù)傳輸和數(shù)據(jù)通信的基本方

法及相關(guān)的器件芯片做較為詳細(xì)的介紹,圍繞PIC單片機(jī)在實際應(yīng)用

中與計算機(jī)通信時的接口設(shè)計。根據(jù)通信的不同方式介紹PIC單片機(jī)

與計算機(jī)的各種通信方式和數(shù)據(jù)傳輸方式。

本章內(nèi)容主要包括:PIC與計算機(jī)的串行通信、PIC的USART使用

及PIC的USB接口設(shè)計等。

PIC單片機(jī)(或者計算機(jī))與外界進(jìn)行的信息交換經(jīng)常被人們稱

為數(shù)據(jù)通信,通信的基本方式分為并行通信和串行通信兩種。

并行通信是指一次就可以同時傳送一個數(shù)據(jù)字的傳輸方式(其中

包括8位、16位,甚至更長位的數(shù)據(jù))。其優(yōu)點是傳輸速度快;缺點

是需要同時連接的線數(shù)多,尤其在通信距離較長時,傳輸線的成本會

急劇增加。對于單片機(jī)而言,還需要占用多個寶貴的弓腳資源。40引

腳的PIC16F87X內(nèi)有一個并行通信模塊PSP,它就是利用RD和RE端口的

11個引腳(8根數(shù)據(jù)線+3根控制線),來實現(xiàn)與其他處理器(如計算

機(jī))之間的并行通信。

串行通信是指把一個數(shù)據(jù)字逐位順序分時進(jìn)行的傳輸方式。其缺

點是指傳送速度較低,假設(shè)并行傳送n位數(shù)據(jù)所需要的時間是T,那么

串行傳送同樣數(shù)據(jù)的時間至少nT,實際工程上往往總是大于nT,原因

是時間上還需要額外的開銷。而串行通信的突出的優(yōu)點是僅僅需要數(shù)量很少

的傳輸線,特別適合遠(yuǎn)距離傳輸。此外,對于PIC單片機(jī)而言,串行通信的另

一個優(yōu)點就是,需要占用的引腳的資源較少。

PIC16F87X單片機(jī)內(nèi)部集成了兩個類型不同的串行通信模塊,即通用同步

/異步收發(fā)器USART(UniversalSynchronous/AsynchronousReceiver

Transmitter)模塊和主控同步串行端口MSSP(MasterSynchronousSerial

Port)模塊。前者的主要應(yīng)用目標(biāo)是系統(tǒng)之間的遠(yuǎn)距離串行通信,此項技術(shù)

的應(yīng)用歷史比較久遠(yuǎn)。而后者的主要應(yīng)用目標(biāo)是系統(tǒng)內(nèi)部近距離的串行擴(kuò)展。

串行通信的實現(xiàn),在制式、種類、形式、規(guī)范、標(biāo)準(zhǔn)、編碼、檢錯、糾錯、

幀結(jié)構(gòu)、組網(wǎng)方式、調(diào)制方式等方面,存在著多種類型、變化、選擇和解決

方案。例如,Philips公司發(fā)明的12c總線,Intel等公司提出的SMBUS總線,

Freescale公司首先應(yīng)用的SPI接口,美國國家半導(dǎo)體公司(NSC)公司首先應(yīng)

用的MicroWire接口,達(dá)拉斯公司推出的l-Wire總線,美國電子工業(yè)協(xié)會推薦

標(biāo)準(zhǔn)RS-232、RS433、RS-485接口,Intel等公司提出的USB總線,蘋果公司提

出的IEEE-1394總線,博世公司提出的CAN總線,現(xiàn)場總線基金推出的FF總線,

Motorola公司聯(lián)合東芝公司共同開發(fā)的LONworks總線等,都是用來實現(xiàn)與串

行通信功能相關(guān)的技術(shù)和規(guī)范。

8.1標(biāo)準(zhǔn)串行接口RS-232C接續(xù)

串行通信是指單片機(jī)或者計算機(jī)和外設(shè)之間使用一根數(shù)據(jù)信號線,

數(shù)據(jù)在一個數(shù)據(jù)信號線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一

個固定地時間長度,串行通信的特點是使用的數(shù)據(jù)線少,其傳輸?shù)乃?/p>

度比較慢。串行通信的優(yōu)點也正體現(xiàn)在遠(yuǎn)程通信和上下位機(jī)通信中,

隨著新的串行數(shù)據(jù)協(xié)議的誕生,速度和距離都有了較大提高。

一個完整的串行通信系統(tǒng)如圖8.1所示,該通信系統(tǒng)包括數(shù)據(jù)終

端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)。

1.數(shù)據(jù)通信設(shè)備DTE:DTE是產(chǎn)生二進(jìn)制信號的數(shù)據(jù)源,也是

接收信息的目的,是由數(shù)據(jù)發(fā)送器或接收器或兼具兩者組成的設(shè)備,

它可以是一臺計算機(jī)。

2.數(shù)據(jù)通信設(shè)備DCE:DCE是一個使傳輸信號符合線路要求,

或者滿足DTE要求的信號匹配器,它是提供數(shù)據(jù)終端設(shè)備與通信線路

之間通信的建立、維持和終止連接等功能的設(shè)備,同時執(zhí)行信號變換

與編碼,它可以是一個MODEM。

山井

圖8.1串行通信系統(tǒng)

在數(shù)據(jù)通信、計算機(jī)網(wǎng)絡(luò)以及分布式工業(yè)控制系統(tǒng)中,經(jīng)常采用串行通

信來交換數(shù)據(jù)和信息。1969年,美國電子工業(yè)協(xié)會(EIA)公布了RS-232c作

為串行通信接口的電氣標(biāo)準(zhǔn),該標(biāo)準(zhǔn)定義了數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信

設(shè)備(DCE)間按位串行傳輸?shù)慕涌谛畔ⅲ侠戆才帕私涌诘碾姎庑盘柡蜋C(jī)械

要求,在世界范圍內(nèi)得到了廣泛的應(yīng)用。但它采用單端驅(qū)動非差分接收電路,

因而存在著傳輸距離不太遠(yuǎn)(最大傳輸距離15m)和傳送速率不太高(最大位

速率為20Kb/s)的問題。遠(yuǎn)距離串行通信必須使用Modem,增加了成本。在分

布式控制系統(tǒng)和工業(yè)局部網(wǎng)絡(luò)中,傳輸距離常介于近距離(<20m)和遠(yuǎn)距

離(>2km)之間的情況,這時RS-232c(25腳連接器)不能采用,用Modem又

不經(jīng)濟(jì),因而需要制定新的串行通信接口標(biāo)準(zhǔn)。

1977年EIA缶U定了RS-449。它除了保留與RS-232c兼容的特點外,還

在提高傳輸速率,增加傳輸距離及改進(jìn)電氣特性等方面作了很大努力,并增

加了10個控制信號。與RS-449同時推出的還有RS-422和RS-423,它們是

RS-449的標(biāo)準(zhǔn)子集。另外,還有RS-485,它是RS-422的變形。RS-422、

RS-423是全雙工的,而RS-485是半雙工的。

RS-422標(biāo)準(zhǔn)規(guī)定采用平衡驅(qū)動差分接收電路,提高了數(shù)據(jù)傳輸速率(最

大位速率為10Mb/s),增加了傳輸距離(最大傳輸距離1200m)。

RS-423標(biāo)準(zhǔn)規(guī)定采用單端驅(qū)動差分接收電路,其電氣性能與RS-232c

幾乎相同,并設(shè)計成可連接RS-232c和RS-422。它一端可與RS-422連接,

另一端則可與RS-232c連接,提供了一種從舊技術(shù)到新技術(shù)過渡的手段。同

時又提高位速率(最大為300Kb/s)和傳輸距離(最大為600m)。

RS-485為半雙工的,當(dāng)用于多站互連時可節(jié)省信號線,便于高速、遠(yuǎn)距

離傳送。許多智能儀器設(shè)備均配有RS-485總線接口,將它們聯(lián)網(wǎng)也十分方便。

串行通信由于接線少、成本低,在數(shù)據(jù)采集和控制系統(tǒng)中得到了廣泛的應(yīng)用,

產(chǎn)品也多種多樣。

8.1.1RS?232C接口規(guī)格

RS-232c其中RS是RecommendedStandard的縮寫,代表標(biāo)準(zhǔn),232是標(biāo)

識符,C代表RS-232的最新一次修改(1969年),在這之前,有過RS-232A、

RS-232B標(biāo)準(zhǔn),它規(guī)定連接電纜和機(jī)械、電氣特性、信號功能及傳送過程。

現(xiàn)在,計算機(jī)上的串行通信端口(RS-232)是標(biāo)準(zhǔn)配置端口,已經(jīng)得到廣泛

應(yīng)用,目前計算機(jī)上一般都1?2個標(biāo)準(zhǔn)RS-232c串口,即通道COM1和COM2。

1.RS-232c標(biāo)準(zhǔn)的電氣特性

EIA-RS-232c對電器特性、邏輯電平和各種信號線功能都作了明確規(guī)定。在TXD和RXD

引腳上電平定義:邏輯1(MARK)=-3V-15V;邏輯0(SPACE)=+3?+15V

在RTS、CTS、DSR、DTR和DCD等控制線上電平定義:信號有效(接通,ON狀態(tài),正

電壓)=+3V?+15V;信號無效(斷開,OFF狀態(tài),負(fù)電壓)=-3V?T5V

對于數(shù)據(jù)(信息碼):邏輯“1”的傳輸?shù)碾娖綖?3V?-15V,邏輯“0”傳輸?shù)碾娖?/p>

為+3V?+15V;對于控制信號;接通狀態(tài)(0N)即信號有效的電平為+3V?+15V,斷開狀

態(tài)(OFF)即信號無效的電平為-3V?-15V,也就是當(dāng)傳輸電平的絕對值大于3V時,電路

可以有效地檢查出來;而介于-3?+3V之間的電壓即處于模糊區(qū)電位,此部分電壓將使得

計算機(jī)無法準(zhǔn)確判斷傳輸信號的意義,可能會得到0,也可能會得到1,如此得到的結(jié)果

是不可信的,在通信時候體現(xiàn)的是會出現(xiàn)大量誤碼,造成通信失敗。因此,實際工作時,

應(yīng)保證傳輸?shù)碾娖皆凇?3?15)V之間。

目前,大部分計算機(jī)的RS-232c通信接口都使用了DB9連接器,主板的接口連接器有9

根針輸出,也有些比較舊的計算機(jī)使用DB25連接器輸出,表8.1為RS-232c串口引腳定義菜

9針RS-232串口(DB9)325針RS-232串口(DB25)*

引孫倚耳小功能說明引孫簡寫p

載波偵測(Carrier載波偵測(Carrier

CD/82CD?

Detect)~Detect)產(chǎn)

2~RXDr接收數(shù)據(jù)(Receive)~33RXD^接收數(shù)據(jù)(Receive)

32TXD^發(fā)送數(shù)據(jù)(Transmit)一2PTXD^發(fā)送數(shù)據(jù)(Transmit)

數(shù)據(jù)終端準(zhǔn)備(Data數(shù)據(jù)終端準(zhǔn)備(Data

42DIR+3207DTR~

TerminalReady)?TerminalRead/)r

5〃GND-地線(Ground)一72GNDc地線(Ground)一

數(shù)據(jù)準(zhǔn)備好(DataSet數(shù)據(jù)準(zhǔn)備好〔DataSet

62DSfB62DSR^

Reacfy)2Readjr)一

請求發(fā)送(RequestTo請求發(fā)送(RequestTo

RTS/43RTS卡

Send)3Send)一

清除發(fā)送(ClearTo清除發(fā)送(ClearTo

CTS-5~CTS一

Send)小Send)卡

振鈴指示(Ring振鈴指示(Ring

9~RIP223RIP

Indicator)小Indicator)一

表8.1RS-232c串口引腳定義表

RS-232c規(guī)定的邏輯電平與一般微處理器、單片機(jī)的邏輯電平是不同的,例如

RS-232的邏輯“1”是以-3?-15V來表示的,而單片機(jī)的邏輯“1”是以+5V來表示的,

兩者完全不同。因此,單片機(jī)系統(tǒng)要和電腦的RS-232接口進(jìn)行通信,就必須把單片

機(jī)的信號電平(TTL電平)轉(zhuǎn)換成計算機(jī)的RS-232c電平,或者把計算機(jī)的RS-232c

電平轉(zhuǎn)換成單片機(jī)的TTL電平,通信時必須對兩種電平進(jìn)行轉(zhuǎn)換。實現(xiàn)這種轉(zhuǎn)換的方法

可以使用分立元件,也可以使用專用RS-232電平轉(zhuǎn)換芯片。目前較為廣泛地使用專用

電平轉(zhuǎn)換芯片,如MC1488、MC1489、MAX232等電平轉(zhuǎn)換芯片來實現(xiàn)EIA到TTL電

平的轉(zhuǎn)換。下面介紹MAXIM公司的單電源電平轉(zhuǎn)換芯片MAX232及接口電路。

如圖8.2中所示,MAX232是單電源雙RS-232發(fā)送/接收芯片,采用單電源(+5V)

供電,外接只需4個電容,便可以構(gòu)成標(biāo)準(zhǔn)的RS-232通信接口,硬件接口簡單,所以被

廣泛采用。

,^7

MAX220

\W(232

MAX必

DIP/SO

圖8.2MAX232實物及芯片引腳排列

8.1.2接續(xù)方法

單片機(jī)和計算機(jī)RS-232接口電路如圖8.3所示,圖中的Cl、C2、C3、C4是

電荷泵升壓及電壓反轉(zhuǎn)部分電路,產(chǎn)生V+、V-電源供EIA電平轉(zhuǎn)換使用,C5是

VCC對地去耦電容,其值為0.1UF,電容C1?C5安裝時必須盡量靠近MAX232芯

片引腳,以提高抗干擾能力。

VCC

~~C5

vccMAX232CPEn.

IC10.1UF=

ClCN

C1+C2+

r5nC21

1UFC1C2-1UFT

片T111114R:工,2

XDTlinTloutO

機(jī)-7

R2outR2in-o

10T3

RloutRlinTo

T2inT2out-o

4o

V-9

V+-5

C4

1UF二1UFDBPMale

VCC

圖8.3采用MAX232CPE芯片的PC機(jī)與單片機(jī)串行通信接口電路

圖8.4是一個采用分立元件構(gòu)成的簡易RS-232串行通信接口電路,使用三極管

進(jìn)行電平轉(zhuǎn)換,由于簡單的通信,對于通信穩(wěn)定性要求較高的應(yīng)用,不建議使用分立

元件,因為分立元件電路的穩(wěn)定性,誤碼率較高,不能完全滿足RS-232c的全部技術(shù)

指標(biāo)。分立元件組成的電路優(yōu)點是成本低廉,部分網(wǎng)站上介紹的產(chǎn)品就分立元件構(gòu)成。

圖8.4采用分立元件的簡易RS-232c通信接口電路

8.1.3PIC串行通信設(shè)計實例

當(dāng)PIC單片機(jī)不具備片上硬件USART或者USART不夠用時,可以利用軟件模擬實

現(xiàn)異步串行通信。Microchip公司推出的PIC系列單片機(jī)PIC16c711具有運行速度快、

低功耗、價格低、體積小等優(yōu)點。因為,不具備硬件USART時需要用一般I/O口來模擬

串行口。

1.串行接口硬件電路

如圖8.5所示,RB0為接收腳,RB5為發(fā)送腳。RB0除作為一般I/O引腳外,還可

以作為外部中斷輸入引腳,引起中斷的方式分為上跳沿和下跳沿兩種方式。設(shè)置下跳沿

引起中斷。當(dāng)起始位到來時,RB0上出現(xiàn)下跳沿,引起中斷,如果不是干擾信號則開始

接收數(shù)據(jù)。

RS-485標(biāo)準(zhǔn)的特點是抗干擾能力強(qiáng),傳輸速率高、傳送距離遠(yuǎn)。它規(guī)定了雙端(平

衡式)電氣接口特性。當(dāng)單片機(jī)與具有RS-485接口的PC機(jī)通信時,需要進(jìn)行信號形式

的轉(zhuǎn)換。從單片機(jī)發(fā)送到PC機(jī)的信號首先轉(zhuǎn)換成平衡信號,再送往PC機(jī)。從PC機(jī)發(fā)送

到單片機(jī)的信號先轉(zhuǎn)換成非平衡信號,再輸入單片機(jī)。信號形式的轉(zhuǎn)換工作由RS-485接

口芯片SN75176完成。SN75176差分總線收發(fā)器工作在半雙工方式,當(dāng)工作于發(fā)送方

式時,發(fā)送使能引腳DE為高電平,接收使能引腳RE也為高電平。當(dāng)工作于接收方式時,

發(fā)送使能引腳DE為低電平,接收使能引腳RE也為低電平。這樣,可以將DE與RE連接

在一起,由RB6引腳輸出控制信號,控制SN75176的發(fā)送和接收使能。為了減少線路

上信號的反射,需要匹配線路的特性阻抗。由于通信載體是雙絞線,它的特性阻抗為

120c左右,所以線路設(shè)計時,在RS-485網(wǎng)絡(luò)傳輸線的始端和末端各應(yīng)接1只120c

的匹配電阻,R1為單片機(jī)一側(cè)的匹配電阻。由于RS485芯片的特性,接收器的靈敏度

為±200mV,即差分輸入端VA-VB2200mV時,輸出邏輯“V;VA-VBW-200mV4

輸出邏輯“0”。當(dāng)IVA-VB|<200mV時,輸出不確定。因此,當(dāng)A、B無信號輸入時,

可能造成接收引腳R上出現(xiàn)低電平,這會誤認(rèn)為通信幀起始位到來而引起工作不正常。

為了避免這種情況發(fā)生,可以人工的讓A端電位高于B端電位,使R引腳在RS485總線

不發(fā)送期間呈現(xiàn)唯一的高電平,單片機(jī)不會被誤中斷而接收到亂字符。通過在A、B接上

拉、下拉電阻R3、R2可解決這個問題。

圖8.5PIC16c711與PC機(jī)之間的接口電路

2.單片機(jī)通信程序框圖

PIC單片機(jī)與PC機(jī)之間的通信方式為半雙工方式。一幀數(shù)據(jù)包括一位起始位、8位數(shù)

據(jù)位、一位停止位和無奇偶校驗位。設(shè)發(fā)送和接收數(shù)據(jù)的波特率為9600b/s,則每一位

占用的時間td為19600s,約為104|JS。單片機(jī)晶振頻率為4MHz,單片機(jī)執(zhí)行一條指

令耗費時間Ips。

?單片機(jī)接收數(shù)據(jù)程序框圖

PIC16c711單片機(jī)的RB0引腳具備外部引腳跳變沿中斷功能,向RB0引腳送一個上

跳沿或下跳沿信號,則INTCON寄存器的外部引腳跳變沿中斷標(biāo)志位INTF被置1。如果

總中斷和外部引腳跳變沿中斷都使能,并且此時單片機(jī)沒有執(zhí)行其他中斷服務(wù)子程序,程

序進(jìn)入INT中斷服務(wù)子程序。根據(jù)異步串行通信的特點,通信線路空閑時單片機(jī)接收的是

高電平,起始位到來時單片機(jī)接收到低電平,因此空閑位和起始位之間是一個下跳沿。單

片機(jī)接收到下跳沿即起始位后,馬上進(jìn)入中斷服務(wù)子程序,準(zhǔn)備接收一幀數(shù)據(jù)。因此在主

程序中設(shè)置由下跳沿引起外部引腳跳變沿中斷。下面將主要分析接收子程序即中斷服務(wù)子

程序。單片機(jī)接收數(shù)據(jù)程序框圖如圖8.6所示。

進(jìn)入中斷服務(wù)子程序后,首先保護(hù)中斷現(xiàn)場,然后檢測起始位是否是“真的”。由于百

能存在的各種干擾,PIC單片機(jī)有可能接收到的干擾信號正好是一個下跳沿,而實際上此正

根本沒有數(shù)據(jù)到來,從而造成誤接收數(shù)據(jù)。因此檢測起始位的真實性是有必要的。采取的

方法是在52ps(起始位的中點)后,檢測一次RBO上的信號。程序框圖中是延時472

后檢測RBO上的信號,原因是保護(hù)中斷現(xiàn)場的幾條指令要耗費幾個四。如果是低電平,

則起始位是“真的”,否則為干擾信號,單片機(jī)清INTF標(biāo)志位,然后退出中斷服務(wù)子程月

回到主程序。若起始位是“真的”,則準(zhǔn)備接收數(shù)據(jù)。設(shè)計規(guī)定數(shù)據(jù)位為8位,故首先設(shè)于

接收計數(shù)器R_CNT內(nèi)容為8o然后將STATUS寄存器中的C位清零,并右移接收數(shù)據(jù)寄

存器RCV_R。C的內(nèi)容即。移入RCV_R最高位,接下來接收數(shù)據(jù)位。為盡量保證數(shù)據(jù)的

準(zhǔn)確性,應(yīng)該在每位數(shù)據(jù)的中點檢測該位數(shù)據(jù)。因此,檢測第一位數(shù)據(jù)的時刻距離檢測起

始位的時刻應(yīng)該是一位數(shù)據(jù)所占的時間即104ps,此后的每一位數(shù)據(jù)檢測時刻之間也是

如此。此時又要用到延時程序。因為每兩次檢測時刻之間除了延時之外,指令(C清零、

右移等指令)還要占用時間,這些指令占用5?6加,因此,為了盡量保證在每一位的中

心位置檢測數(shù)據(jù),延時時間定為98.。如果檢測得到的數(shù)據(jù)位為1,則置RCV_R最高位.

lo如果數(shù)據(jù)位為0,則不必改變最高位,因為C為0且已經(jīng)移入RCV_R的最高位。

然后,將接收計數(shù)器內(nèi)容減1。8位數(shù)據(jù)接收完畢后,清INTF標(biāo)志。薪,退出中斷服務(wù)

子程序。至此,8位數(shù)據(jù)接收全部存放于RCV_R中。

?單片機(jī)發(fā)送數(shù)據(jù)程序框圖

用RB5引腳作為發(fā)送引腳,單片機(jī)發(fā)送數(shù)據(jù)程序框圖如圖8.7所示。當(dāng)有數(shù)據(jù)

要從單片機(jī)發(fā)往PC機(jī)時,單片機(jī)調(diào)用發(fā)送子程序。在發(fā)送子程序中,首先設(shè)置發(fā)送

計數(shù)器內(nèi)容為8,然后發(fā)送起始位,起始位應(yīng)持續(xù)104|JSo因此要調(diào)用延時子程序,

延時子程序執(zhí)行完后,RB5上的信號并未立刻變成第一位數(shù)據(jù)的值,這是因為還要

執(zhí)行幾條指令,如右移TRS_R、置位等RB5上的信號才會變化。假設(shè)延時1042,

那么加上幾條指令的執(zhí)行時而,起始位就比1042寬了。因此,延時子程序少于

104|JS,根據(jù)具體的程序定為97ps。然后,右移發(fā)送數(shù)據(jù)寄存器TRS_R,將其

最低位即要發(fā)送的數(shù)據(jù)位移入C中,再根據(jù)C中的內(nèi)容將RB5清零或置1,然后將

發(fā)送計數(shù)器內(nèi)容減1,并判斷其是否為0。若為1,則說明未發(fā)送完畢,繼續(xù)發(fā)送;

否則,發(fā)送停止位。最后,退出發(fā)送子程序。

開始

圖8.6單片機(jī)接收數(shù)據(jù)程序框圖8.7單片機(jī)發(fā)送數(shù)據(jù)程序框圖

8.2PIC的USART應(yīng)用

8.2.1PIC16F877非同步通信功能(USART接口)

通用同步/異步接收發(fā)送模塊(USART)是兩個串行通信接口之一,

USART又稱為SCI(SerialCommunicationInterface)。USART可

以設(shè)置為全雙工異步串行通信系統(tǒng),這種方式可以與個人計算機(jī)PC或串行

接口CRT等外圍設(shè)備進(jìn)行串行通信。也可以設(shè)置為半雙工異步串行通信系

統(tǒng),與串行接口的A/D或D/A集成電路、串行EEPROM等器件連接。

USART是二線制串行通信接口,它可以被定義如下三種工作方式:

全雙工異步方式、半雙工同步主控方式、半雙工同步從動方式。為了把

RC6和RC7分別設(shè)置成串行通信接口的發(fā)送/時鐘(TX/CK)線和接收/數(shù)

據(jù)(TX/DT)線,必須首先把SPEN位(TCSTAT的RD7)和方向寄存器

TRISCWD7:D6置1。

USART功能模塊含有兩個8位可讀/寫的狀態(tài)/控制寄存器,它們是發(fā)

送狀態(tài)/控制寄存器TXSTA和接收狀態(tài)/控制寄存器。

USART帶有一個8位波特率發(fā)生器BRG(BaudRatoGenerator),BRG支持

USART的同步和異步工作方式。用SPBRG寄存器控制一個獨立的8位定時器的周期。

在異步方式下,發(fā)送狀態(tài)/控制寄存器TXSTA的BRGH位(即D2)也被用來控制波特

率(在同步方式下忽略BRGH位)。

向波特率寄存器SPBRG寫入一個新的初值時,都會使BRG定時器復(fù)位清零,由此

可以保證BRG不需要等到定時器溢出后就可以輸出新的波特率。

對USART方式進(jìn)行初始化的程序如下:

BSFSTATUS,RP0;將指針指向數(shù)據(jù)存儲器的第1頁

MOVLW0x19

MOVWFSPBRG;設(shè)置波特率為9600

BCFSTATUS,RP0;將指針指向數(shù)據(jù)存儲器的第。頁

CLRFRCSTA;將接收控制和狀態(tài)寄存器清零

BSFRCSTA,SPEN;串口允許

CLRFPIR1;清除中斷標(biāo)志

BSFSTATUS,RP0;將指針指向數(shù)據(jù)存儲器的第1頁

CLRFTXSTA;將發(fā)送控制和狀態(tài)寄存器清零

BSFTXSTA,BRGH;設(shè)置為異步、高速波特率

BSFTXSTA,TXEN;允許發(fā)送

BCFSTATUS,RP0;將指針指向數(shù)據(jù)存儲器的第0頁

BSFRCSTA,CREN;允許接收

初始化完成后,即可發(fā)送或接收數(shù)據(jù)。在發(fā)送或接收數(shù)據(jù)時'通過查詢發(fā)送/接收中

斷標(biāo)志位即可判斷是否發(fā)送完一個數(shù)據(jù)/接收到一個數(shù)據(jù)。

送/接收中斷標(biāo)地不需要也不有用軟件復(fù)位。

在異步串行發(fā)送的過程中,只要TXREG寄存器為空,中斷標(biāo)志TXIF就置位。因此,

TXIF為1并不是發(fā)送完畢的標(biāo)志,但仍可以用TXIF標(biāo)志來判斷。因此當(dāng)TXREG為空時,

將數(shù)據(jù)送入后,數(shù)據(jù)會保留在TXREG寄存器中,直到前一個數(shù)據(jù)從發(fā)送移位寄存器中移

出,即前一個數(shù)據(jù)發(fā)送。

8.2.2串行接口芯片8251A

8251的管腳和內(nèi)部結(jié)構(gòu)如圖8.8所示。

1.同CPU的連接信號

?RESET:當(dāng)這個引腳上出現(xiàn)一個6倍時鐘寬的高電平信號時,芯片被復(fù)位,使芯片

處于空閑狀態(tài)。這個空閑狀態(tài)將一直保持到由編程確定了新狀態(tài)才結(jié)束。在系統(tǒng)中

使用此芯片時,總是把復(fù)位端與系統(tǒng)的復(fù)位線相連,使它受到加電自動復(fù)位和人工

復(fù)位的控制。

?CLK:是為芯片內(nèi)有關(guān)電路工作提供時鐘的輸入端。這個時鐘的頻率與數(shù)據(jù)速率并

無直接關(guān)系,但是,為了電路工作可靠,在同步方式下最好使這個頻率比數(shù)據(jù)速率

大30倍以上。在異步方式下,大4.5倍。

?、:是CPU對8251A中的寄存器讀、寫時的控制信號輸入端。

?C/:是一個決定CPU對芯片讀寫內(nèi)容的控制輸入端。如果輸入為高電平,CPU

對芯片就是寫控制字或讀狀態(tài)字;反之,讀寫的內(nèi)容就是數(shù)據(jù)。通常,將該端與地址

線的最低位相接。于是,8251A就占有兩個端口地址,偶地址為數(shù)據(jù)口地址,而奇

地址為控制口地址。

:片選輸入端。該引腳輸入低電平時,芯片可以與CPU之間傳輸數(shù)據(jù);反之,

芯片的8個數(shù)據(jù)引腳處于懸空狀態(tài)。

D21

D3228D1

R327DO

GXD426VCC

25RxC

DN4D5

D5624DTR

D67823RTS

D7822DSR

9)21RESET

020CLK

1C1119TxD

1218TxEMPT

1317CTS

^

Y416

—15TxRDY

圖8?88251A芯片引腳

?DO?D7:雙向8位數(shù)據(jù)線,同片內(nèi)數(shù)據(jù)總線緩沖器相連,CPU通過DO?D7向8251A

寫數(shù)據(jù)和控制字,以及讀數(shù)據(jù)和狀態(tài)字。

2.MODEM控制信號

8251A還提供了四個與MODEM相連的控制信號,信號的含義與RS232c標(biāo)準(zhǔn)相同。

?(DataTerminalReady):數(shù)據(jù)終端準(zhǔn)備好(輸出,低電平有效)。這是

一個通用的輸出信號,可由命令字的位1置“1”,而變?yōu)橛行В靡员硎綜PU準(zhǔn)備就緒

DSR(DataTerminalReady):數(shù)據(jù)終端準(zhǔn)備好(輸出,低電平有效)。這是

一個通用的輸出信號,可由命令字的位1置“1”,而變?yōu)橛行В靡员硎綜PU準(zhǔn)備就空

?(RequestToSend):請求發(fā)送(輸出,低電平有效)。此信號用于通知

調(diào)制器,CPU已準(zhǔn)備好發(fā)送。它可由命令字的位5置“1”而變?yōu)橛行Вǖ碗娖接行В?/p>

?醛(ClearToSend):清除發(fā)送信號(輸入,低電平有效)。這是調(diào)制解凋器

或其它外設(shè)送到8251A中的調(diào)制解調(diào)器控制器的信號。當(dāng)其有效時,表示允許USAR

發(fā)送數(shù)據(jù)。

上述四不信號在使用時應(yīng)按規(guī)定引腳連接。信號在傳輸過程中,由MODEM輸入

后存放在8251A的狀態(tài)字節(jié)中,芯片內(nèi)對此并不作處理,只有當(dāng)CPU讀狀態(tài)后才可能

給出響應(yīng)。CTS也是從MODEM送來的信號,如果為低電平。且8251A中已經(jīng)設(shè)置了

允許發(fā)送命令,芯片就可以向MODEM送出串行數(shù)據(jù)。如果在數(shù)據(jù)傳送中,出現(xiàn)了某

個條件不滿足的情況,那么,在傳輸完當(dāng)前的字節(jié)后,即行停止。和都是由CPU寫命

令時給8251A設(shè)置的,為使兩個引腳有效(低電平),對寄存器中這兩位應(yīng)寫入“1”。

3.發(fā)送器有關(guān)信號

?TxD:發(fā)送數(shù)據(jù)。發(fā)送緩沖器從數(shù)據(jù)總線上接收數(shù)據(jù),轉(zhuǎn)換成串行數(shù)據(jù)、并按要求

插入附加字符或附加位后,在時鐘的下降沿按位從TxD上發(fā)送出去。

?xRDY:發(fā)送器準(zhǔn)備好信號。如果該信號有效,就表示發(fā)送緩沖器已空,CPU可以向

芯片送入新的數(shù)據(jù)。這個信號的狀態(tài)要受到命令字中TxEN位(允許發(fā)送)的控制。

如果把TxRDY信號作為向CPU請求數(shù)據(jù)的中斷信號,TxEN位就可以看作是中斷控

制的屏蔽位。在8251A的狀態(tài)字中有一位TxRDY,CPU也可以用查詢的方式判斷

是否可以送數(shù)據(jù)。

?TxE:發(fā)送緩沖器空標(biāo)志。不管發(fā)送時是處于等待還是發(fā)送狀態(tài),只要發(fā)送緩沖器

中沒有再要發(fā)送的字符,這個標(biāo)志就變高。當(dāng)從CPU送入一個數(shù)據(jù)字符時,該位標(biāo)

志就被復(fù)位。這個標(biāo)志可以用來表示一段數(shù)據(jù)傳輸?shù)慕Y(jié)束。如果是半雙工工作,

這個標(biāo)志可以用作從發(fā)到收的轉(zhuǎn)換。同步工作時,如果臨時出現(xiàn)TxE,就意味著數(shù)據(jù)

發(fā)送出現(xiàn)空缺,芯片會自動插補同步字符。

?:輸人控制發(fā)送器數(shù)據(jù)速率的時鐘。每個數(shù)據(jù)的移位輸出,是在TxC的下降

沿實現(xiàn)的。異步方式下齷薄的頻率可以是數(shù)據(jù)速率的1、16或64倍。同步方式時,

的頻率與數(shù)據(jù)速率相同。一

4.接收器有關(guān)信號

?RxD:接收數(shù)據(jù)。用來接收外設(shè)送來的串行數(shù)據(jù),按規(guī)定檢查有關(guān)字符或有關(guān)位后,

經(jīng)串一并轉(zhuǎn)換送入數(shù)據(jù)總線緩沖器,RxD在時鐘上升沿采樣輸入。

?RxRDY:接收器準(zhǔn)備好標(biāo)志。如果該位為高電乎,接收緩沖器中就已經(jīng)有組裝好了

的一個數(shù)據(jù)字符,可通知CPU將它取走。與TxRDY相似,RxRDY也可用作中斷請

求信號,也可以通過讀狀態(tài)字了解接收器狀態(tài)。一旦CPU讀走這個數(shù)據(jù)字符,RxRDY

被復(fù)位。要是CPU沒有及時取走數(shù)據(jù),新接收數(shù)據(jù)將覆蓋數(shù)據(jù),使一個數(shù)據(jù)丟失,

出現(xiàn)溢出錯誤,并反映在狀態(tài)字中。

?:接收時鐘輸入端。當(dāng)時鐘處在上升沿時,才可能把數(shù)據(jù)取樣輸入。時鐘速率

的規(guī)定與相同。實際上,和往往連接在一起,用同一個時鐘源。

?SYNDET/BRKDET:同步和間斷檢測。芯片在同步方式工作時,用作同步檢測端;

異步時則用作間斷檢測輸出。芯片可以由編程確定是內(nèi)同步還是外同步。如果是內(nèi)

同步,就由芯片內(nèi)電路搜索同步字符,一旦找到,就由該端輸出一個高電平。

如果是外同步,當(dāng)片外檢測電路找到同步字符后,就可以從該引腳輸入一個高電平

信號,使8251A正式開始接收。一旦開始正常接收數(shù)據(jù),同步檢測端恢復(fù)低電平輸

出O

點步方式工作中,通常在線路上無數(shù)據(jù)時以高電平表示。在8251A中也可以由程序

控制,使無數(shù)據(jù)的間斷時間內(nèi)線路上呈現(xiàn)低電平,即發(fā)送一個字符長度的全“0”碼。接收

端具有對這種間斷碼檢測的能力,如果檢測到間斷碼,將從該端輸出一個高電平。為了

避免接收器對尚未正式開始工作的線路低電平誤認(rèn)為間斷狀態(tài),8251A在復(fù)位后總是要

在檢測到一次高電平輸入后,才開始對間斷狀態(tài)的檢測。

對于8251A它有三個字,一個方式指令字、命令指令字、狀態(tài)字,其中方式指令字

和命令字都是要寫入到控制口里的,而狀態(tài)字是從控制口讀出來的,如果讀和寫能夠區(qū)

別,也就是狀態(tài)字和指令字這兩個可以區(qū)別,但指示字里是方式指示字還是命令指示字,

這個關(guān)系必須要注意,它們的關(guān)系應(yīng)是在開機(jī)時、在復(fù)位時以及完成后,先給的字認(rèn)為

是方式指示字。給完了方式指示字后再給的自動認(rèn)為是命令指令字,就不會把后面給的

當(dāng)作方式字進(jìn)行保存,而當(dāng)作命令控制操作。

8.2.3USART應(yīng)用通信編程實例

1.概述

要在PIC16F877與PC機(jī)間進(jìn)行數(shù)據(jù)交換,這里可應(yīng)用USART來實現(xiàn)。在編寫程序

時首先要設(shè)置好USART異步通訊模塊工作模式及相關(guān)寄存器,PIC16F877的USART與

其他具有USART的PIC單片機(jī)一樣,可以被設(shè)置成為與PC機(jī)進(jìn)行全雙工異步通訊,

它是利用PORTC口的RC6和RC7兩個引腳作為通訊的2線制串行通訊接口。為了把

PORTC口的RC6和RC7兩個引腳分別設(shè)置成串行通訊接口的發(fā)送(TX)腳和接收(RX)

腳,必須要把USART的接收狀態(tài)和控制寄存器RCSTA的bit7(SPEN)位和TRISC寄

存器的bit7置“1”,把TRISC寄存器的bit6置“0”。為了使USART分別工作于接收或發(fā)這

狀態(tài),就必須設(shè)置相應(yīng)的狀態(tài)寄存器和控制寄存器。在設(shè)置接收器時,要注意接收腳對

接收信號的采樣。接收腳RX上的數(shù)據(jù)被采樣3次,通過一個三中取二邏輯檢測電路來判

斷RX腳上的電平是高還是低,以作為采樣取值。另外,要使USART工作在異步通訊方

式,就必須要設(shè)置通訊的傳送、接收速率即波特率,USART的波特率設(shè)置是通過控制獨

立的一個8位波特率發(fā)生器BRG實現(xiàn)的。

在異步工作方式下,串行通訊接口USART采用標(biāo)準(zhǔn)的不歸0(NRZ)格式(即1位

起始位、8位或9位數(shù)據(jù)位及1位停止位),最常用的數(shù)據(jù)格式是8位。PIC16F877片內(nèi)

的8位波特率發(fā)生器BRG可以用來驅(qū)動振蕩器的時鐘,產(chǎn)生標(biāo)準(zhǔn)的波特率頻率。

PIC16F877的USART發(fā)送和接收順序是從最低位(LSB)開始。USART發(fā)送器和接收

器在功能上是完全獨立的,但是它們所用的數(shù)據(jù)格式和波特率必須是相同的。波特率發(fā)生

器可以根據(jù)發(fā)送狀態(tài)和控制寄存器TXSTA的bit2(BRGH)位設(shè)置產(chǎn)生2種不同的移位

速度:對系統(tǒng)時鐘16分頻和64分頻的波特率時鐘,即設(shè)置該位在異步通訊模式為1時表

示通訊為高速,為0時表示通訊為低速。要使USART工作于異步通訊模式,可通過對發(fā)

送狀態(tài)和控制寄存器TXSTA的bit4(SYNC)位設(shè)置清“0”。

由上可知,PIC16F877的USART異步工作設(shè)置主要包括對以下部件的設(shè)置:波特率

發(fā)生器BRG、采樣電路、異步發(fā)送器、異步接收器等。這里關(guān)于PIC16F877的USART

異步工作有兩點需要說明:一是USART硬件不支持奇偶效驗,但可以用軟件實現(xiàn)(并可

作為第9位數(shù)據(jù)傳輸);二是在CPU處于休眠工作方式時;USART不能工作在異步通訊

方式。

2.USART波特率發(fā)生器BRG設(shè)置

在異步通訊方式下,波特率發(fā)生器BRG需要設(shè)置一個初值,以使BRG輸出一個合適

的波特率。在BRG設(shè)置時,其工作在高速還是低速是由發(fā)送狀態(tài)寄存器和控制寄存器

TXSTA的bit2(BRCH)位進(jìn)行設(shè)置的。在PIC16F877內(nèi)部時鐘工作模式下,設(shè)置

BRG波特率寄存器SPBRG在低速和高速初值的計算公式如下:

BRGH=O(低速)

異步波特率=FOSC/(64(X+1))

BRGH=1(高速)

波特率=FOSC/(16(X+1))

其中,X為SPBRG寄存器的值(0-255)o

實際應(yīng)用中,上式用于高速方式(BRGH=1)下計算波特率可以減小誤差。另外,

在向波特率寄存器SPBRG寫入一個新值時會使BRG定時器復(fù)位(清零),由此就可保

證波特率發(fā)生器BRG不需要等到定時器溢出后就可輸出新的波特率。

3.USART異步通訊的寄存器設(shè)置

實現(xiàn)USART異步通訊的寄存器主要有:發(fā)送狀態(tài)寄存器和控制寄存器TXSTA、接

收狀態(tài)和控制寄存器RCSTA、波特率發(fā)生器存器SPBRG、發(fā)送數(shù)據(jù)寄存器TXREG、接

收數(shù)據(jù)寄存器RCREG、外圍接口中斷使能寄存器PIE1和外圍接口標(biāo)志寄存器PIR1等。

?發(fā)送狀態(tài)和控制寄存器(表8.2)

表8.2發(fā)送狀態(tài)和控制寄存器

WW-0RZW-0R/WORZW-0U-0WW-0R-]RW-0

CSRCTX9TXENS\NC-BRCHTRMTTX9D

bit7bit0

bit7CSRC:異步方式未用。

bit6TX9:發(fā)送數(shù)據(jù)長度選擇位。1=選擇9位數(shù)據(jù);0=選擇8位數(shù)據(jù)。

bit5TXEN:發(fā)送允許位。1=允許發(fā)送;0二關(guān)閉發(fā)送。

bit4SYNC:USART同步/異步方式選擇位。1=選擇同步方式;0=選擇異步方式。

bit3此位未用。

bit2BRGH:高速波特率使能位。1=高速;0=低速。

bitlTRMT:發(fā)送移位寄存器(TSR)“空”標(biāo)志位。1=TSR空;0=TSR滿。

bitOTX9D:發(fā)送數(shù)據(jù)的第9位。

?接收狀態(tài)和控制寄存器(表8.3)

表8.3接收狀態(tài)和控制寄存器

RW-0R/W-0R/W-0R/W-0R/W-0R-0R-0R-x

CPENIX)SRENCRENAIDENFERROERRRXJD

bit7bit0

bit7SPEN:串行口使能位。1=允許串行口工作(把RC7和RC6設(shè)置成串行口弓I腳;

0=禁止止串行工作;

bit6RX9:接收數(shù)據(jù)長度選擇位。1=選擇接收9位數(shù)據(jù);0=選擇接收8位數(shù)據(jù)。

bit5SREN:單字節(jié)接收允許位。異步方式此位未用。

Bit4CREN:連續(xù)接收選擇位。1=允許連續(xù)接收;0=禁止連續(xù)接收。

bit3ADDEN:地址匹配檢測使能位。1=允許地址匹配檢測,允許中斷并且當(dāng)RSR

的D8被置1時讀接收緩沖器數(shù)據(jù);0=禁止地址匹配檢測,接收所有字節(jié),第9位被看作

奇偶效驗位。

bit2FERR:幀格式錯標(biāo)志位。1=幀格式錯(讀RCREG寄存器可對該位刷新并且

準(zhǔn)備接收下一個有效位);0=無幀格式錯。

bitlOERR:越位溢出錯標(biāo)志位。1=有溢出錯,清CREN位可將此位清零;0=無溢出

bitORX9D:接收數(shù)據(jù)的第9位,可作奇偶效驗位。

?外圍接口中斷使能寄存器(表8.4)

表8.4外圍接口中斷使能寄存器

R/W-0RZW-0R/W-0RZW-0RW-0RW-0RW-0RZW-0

PSPIEADIEROE1X1ESSPIECCP1正!小3正jTVR1IE

bit7bit0

bit5RCIE:串行異步通訊接口接收中斷使能位。1=允許USART接收中斷;

0=禁止US2ART接收中斷。

bit4TXIE:串行異步通訊接口發(fā)送中斷使能位。1=允許USART發(fā)送中斷;

0;禁止USART發(fā)送中斷。

其余位在異步通訊中未用。

?外圍接口中斷標(biāo)志寄存器(表8.5)

表8.5外圍接口中斷標(biāo)志寄存器

R/W-0R/W-0R-0R-0R/W-()RW-0RW-1R/W-()

PSPIFADIFRCIFTXIFSSPIFCCP1IF1NR2IF1MR1IF

bit7bit0

bit5RCIF:異步串行通訊(USART)接口接收中斷標(biāo)志位;1=USART接收緩沖區(qū)

滿;0=USART接收緩沖區(qū)空。

bit4TXIF:異步串行通訊(USART)接口發(fā)送中斷標(biāo)志位;1=USART發(fā)送緩沖區(qū)

空;0=USART發(fā)送緩沖區(qū)滿。

其余位在異步通訊中未用。

?其他寄存器波特率

發(fā)生器存器SPBRG的設(shè)置可以參考USR2TA波特率發(fā)生器BRG的設(shè)置內(nèi)容,在設(shè)

置該寄存器就是根據(jù)單片機(jī)工作時鐘頻率確定傳輸數(shù)據(jù)的波特率,只要將其初值寫入

SPBRG寄存器即可。

發(fā)展數(shù)據(jù)寄存加TXREG是將單片機(jī)需要發(fā)送的數(shù)據(jù)存放的寄存器,在單片機(jī)未發(fā)

送之前就必須要將備發(fā)送的數(shù)據(jù)裝入該寄存器。接收數(shù)據(jù)寄存器RCREG是將單片機(jī)接收

到外界數(shù)據(jù)后存放數(shù)據(jù)的寄存器,在單片機(jī)確定接收的數(shù)據(jù)無誤后,將其數(shù)據(jù)存放到該

寄存器中。

4.PICI6F877單片機(jī)與PC機(jī)實現(xiàn)電平轉(zhuǎn)換

PC機(jī)的串行接口是符合EIARS-232c規(guī)范的外部總線標(biāo)準(zhǔn)接口。RS-232C

采用的是負(fù)邏輯,即邏輯"1":-5?-15V;邏輯”0":+5?+15Vo而CMOS電平為

邏輯“1”:4.99V,邏輯“0”:0.01V;TTL電平的邏輯“1”和“0”則分別為2.4V和0.4

因此在用RS-232c總線進(jìn)行串行通信時需外接電路實現(xiàn)電平轉(zhuǎn)換。在發(fā)送端用驅(qū)動器將

7TL或CMOS電平轉(zhuǎn)換為RS-232c電平,在接收端用接收器將RS-232c電平再轉(zhuǎn)換為

TTL或CMOS電平。這里選用了MAXIM公司的MAX232來作電平轉(zhuǎn)換。MAX232屬于

MAXIM公司的通用串行接收/發(fā)送驅(qū)動器芯片。其外圍電路簡單,只需外接4個O.1|JF的

電容即可,其系統(tǒng)硬件電路如圖8.9所示。圖中MAX232將PIC16F877的TX輸出的TTL

電平信號轉(zhuǎn)換為RS-232c電平,輸入到PC機(jī),并將PC機(jī)輸出的RS-232C電平轉(zhuǎn)換為

TTL電平,輸出到PIC16F877單片機(jī)的RX引腳。

5.PC機(jī)支持與PIC16F877

進(jìn)行數(shù)據(jù)交換的PC機(jī)可與PIC16F877可以編程實現(xiàn),其實現(xiàn)功能如下:PC機(jī)和單

片機(jī)均可發(fā)送和接收數(shù)據(jù),由PC機(jī)決定是發(fā)送還是接收;程序設(shè)定當(dāng)PC機(jī)鍵盤輸入發(fā)

送指令時,PC機(jī)分別顯示PC機(jī)發(fā)送的數(shù)據(jù)和單片機(jī)會送的數(shù)據(jù);當(dāng)PC機(jī)鍵盤輸入接收

指令時,PC機(jī)將接收單片機(jī)發(fā)送過來的數(shù)據(jù),并將其數(shù)據(jù)顯示。在編程中,必須要注意

設(shè)置PC機(jī)與PIC16F877單片機(jī)在進(jìn)行數(shù)據(jù)交換時的數(shù)據(jù)傳輸格式相同。通常采用的通

訊協(xié)議如下:波特率為9600bps,8位數(shù)據(jù)位,1位停止位,無奇偶效驗位。PC機(jī)發(fā)

送命令給單片機(jī),鍵盤輸入發(fā)送命令時,控制單片機(jī)接收數(shù)據(jù),當(dāng)PC機(jī)鍵盤輸入接收命

令時,控制單片機(jī)發(fā)送數(shù)據(jù)給PC機(jī)。PC機(jī)與PIC16F877單片機(jī)進(jìn)行數(shù)據(jù)交換的程序編

制流程如圖8.10所示。

DE9S-FRS

圖8.9PIC16F877與PC接口原理圖

源程序如下:

1)初始化設(shè)置部分

COUNTEQU0X20

TEMPEQU0X21

JOEQU0X22

ORGO

NOP

STARTGOTOMAIN

ORG0X05

MAIN

BANKSELTRISC

MOVLWB'IOOOOOOO)

MOVWFTRISC

MOVLW0X30/^RAM單元初始化

MOVWFFSRBCFSTATUS,RPO

MOVLWOX22

MOVWFCOUNT

BCFPIR1,RCIF

BSFPIR1,TXIF

INTRAMMOVFCOUNT,0

MOVWFINDF

INCFCOUNT,1

INCFFSR,1

BTFSSFSR,7

GOTOINTRAM圖8.10數(shù)據(jù)交換程序流程框圖

BANKSELTXSTA

MOVLWOX19

MOVWFSPBRG;波特率設(shè)置為9600bps

MOVLW0X04

MOVWFTXSTA;異步高速方式

BCFSTATUS,RPO

MOVLW0X80

MOVWFRCSTA;串行口使能

MOVLW0X30

MOVWFFSR

BSFRCSTA,CREN;接收允許

BSFSTATUS,RPO

BSFTXSTA,TXEN;發(fā)送允許

BCFSTATUS,RPO

2)接收并返回數(shù)據(jù)部分

WAITBTFSSPIR1,RCIF

GOTOWAIT;接收PC機(jī)命令

MOVFRCREG,0

MOVWFTEMP

MOVWFINDF

INCFFSR

DECFSZTEMP;接收到的數(shù)據(jù)為1,則接收

GOTOTXW;否則發(fā)送數(shù)據(jù)

MOVLW0X06

MOVWFTEMP

WAIT1BTFSSPIR1,RCIF

GOTOWAIT1;接收一個數(shù)據(jù)

MOVFRCREG,0

MOVWFCOUNT

MOVWFTXREG

LOOPTXBTFSSPIR1,TXIF;將接收到的數(shù)據(jù)送回PC機(jī)

GOTOLOOPTX

MOVFCOUNT,0

MOVWFINDF

INCFFSR

DECFSZTEMP

GOTOWAIT1

GOTOOVER;處理完畢

TXWMOVLW0X09;向PC機(jī)發(fā)送9個數(shù)據(jù)

MOVWFTEMP

MOVLWD,00,

MOVWFJO

3)發(fā)送數(shù)據(jù)部分

TXWOMOVFJO,0

MOVWFTXREG

INCFJO;單片機(jī)發(fā)送的數(shù)據(jù)為。?8和一位存儲數(shù)據(jù)

TXW1BTFSSPIR1,TXIF

GOTOTXW1

DECFSZTEMP

GOTOTXWO

OVERBCFRCSTA,CREN;通信任務(wù)完成,關(guān)接收和發(fā)送允許

要實現(xiàn)PIC單片機(jī)與PC機(jī)間的數(shù)據(jù)通訊,不僅是要連接硬件電路和對單片機(jī)進(jìn)行

編程,同時還需要在PC上編寫數(shù)據(jù)收發(fā)的程序。通常,對于單片機(jī)與PC機(jī)間的數(shù)據(jù)通

訊交換調(diào)試時,可以串口通訊調(diào)試工具,同時也可以自編調(diào)試程序。程序編寫好后,

再與上述PIC16F877一起進(jìn)行操作,即可實現(xiàn)簡易通訊數(shù)據(jù)交換。

這里特別需要注意的是:當(dāng)PC機(jī)與單片機(jī)系統(tǒng)通信時,單片機(jī)數(shù)據(jù)存儲

區(qū)(RAM)內(nèi)的數(shù)據(jù)是十六進(jìn)制,在信號線上傳輸?shù)氖鞘M(jìn)制數(shù)的ASCH

碼的二進(jìn)制形式;而Windows系統(tǒng)下使用的是ANSI碼,ANSI碼僅在前126個

與ASCII碼相同,即在Windows下接收到的是十六進(jìn)制數(shù)的ASCH碼的字符串,

可先轉(zhuǎn)換為ANSI碼后再在Windows下還原為十六進(jìn)制數(shù)。

.3USB接口設(shè)計

USB的全稱是通用串行總線(UniversalSerialBus),最多可連接

127臺外設(shè),USB其最大的特點是支持熱插拔和即插即用。當(dāng)設(shè)備插入時,

主機(jī)枚舉此設(shè)備并加載所需的驅(qū)動程序,因此使用遠(yuǎn)比PCI和ISA總線方便。

USB速度比平行并聯(lián)總線(ParellelBus,例如EPP、LPT)與串聯(lián)總線

(SerialPort,例如RS-232)等傳統(tǒng)電腦用標(biāo)準(zhǔn)總線快上許多。原標(biāo)準(zhǔn)中

USB1.1的最大傳輸帶寬為12Mbps,USB2.0的最大傳輸帶寬為

480MbpsUSB的設(shè)計為非對稱式的,它由一個主機(jī)(host)控制器和若干

通過hub設(shè)備以樹形連接的設(shè)備組成。一個控制器下最多可以有5級hub,包

括Hub在內(nèi),最多可以連接127個設(shè)備,而一臺計算機(jī)可以同時有多個控制

器。和SPI-SCSI等標(biāo)準(zhǔn)不同,USBhub不需要終結(jié)器

USB可以連接的外設(shè)有鼠標(biāo)、鍵盤、gamepad、游戲桿、掃描儀、數(shù)

碼相機(jī)、打印機(jī)、硬盤和網(wǎng)絡(luò)部件。對數(shù)碼相機(jī)這樣的多媒體外設(shè)USB已經(jīng)

是缺省接口;由于大大簡化了與計算機(jī)的連接,USB也逐步取代并口成為打

印機(jī)的主流連接方式。2004年已經(jīng)有超過1億臺USB設(shè)備;到2005年顯示

器和高清晰度數(shù)字視頻外設(shè)是僅有的USB未能染指的外設(shè)類別,,因為他們

需要更高的傳輸速率。

由于USB支持熱插拔,即插即用的優(yōu)點,所以USB接口已經(jīng)成為計算機(jī)的標(biāo)準(zhǔn)接口。

USB目前有兩個版本,USB1.1的最高數(shù)據(jù)傳輸率為12Mbps,USB2.0則提高到

480Mbps。二者的物理接口完全一致,數(shù)據(jù)傳輸率上的差別完全由PC的USBhost

控制器以及USB設(shè)備決定。USB還可以通過連接線為設(shè)備提供最高5V,500mA的電力。

現(xiàn)標(biāo)準(zhǔn)中將UBS統(tǒng)一為USB2.0,分為:

(1)High-speed,傳輸速率25Mbps?400Mbps(最大480Mbps)

(2)Full-speed,傳輸速率500Ktips?10Mbps(最大12Mbps)

(3)Low-speed,傳輸速率10Kbps?100Kbps(最大1.5Mbps)

USB的優(yōu)點:

?USB具有真正的“即插即用”特性,用戶可以很容易地對外設(shè)進(jìn)行安裝和拆卸,

主機(jī)可按外設(shè)的增刪情況自動配置系統(tǒng)資源,同時用戶可以在不關(guān)機(jī)的情況下

進(jìn)行外設(shè)的更換,外設(shè)裝置的驅(qū)動程序的安裝刪除將實現(xiàn)自動化。

?USB具有很強(qiáng)的連接能力。

?低成本。

?空間的節(jié)省。

?USB與ETDM特性可以支持諸如ISDN等高速數(shù)字電話信息通路接口。

?連接電纜輕巧,電源體積縮小。

?USB一種開放性的不具專利版權(quán)的理想工業(yè)標(biāo)準(zhǔn)。

8.3.1USB接口規(guī)范

目前USB支持3種數(shù)據(jù)信號速率,USB設(shè)備應(yīng)該在其外殼或者有時是自身上正確

標(biāo)明其使用的速率。USB-IF進(jìn)行設(shè)備認(rèn)證并為通過兼容測試并支付許可費用的設(shè)備

提供基本速率(低速和全速)和高速的特殊商標(biāo)許可。

1.5Mbit/s(183KByte/s)的低速速率,主要用于人機(jī)接口設(shè)備(Human

InterfaceDevices,HID)而如鍵盤、鼠標(biāo)、游戲桿。

12Mbit/s(1.4MByte/s)的全速速率,在USB2.0之前是曾經(jīng)是最高速率,

后起的更高速率的高速接口應(yīng)該兼容全速速率。多個全速設(shè)備間可以按照先到先得法

則劃分帶寬;使用多個等時設(shè)備時會超過帶寬上限也并不罕見。所有的USBHub支持

全速速率。

480Mbit/s(57MByte/s)的高速速率,并非所有的USB2.0設(shè)備都是高速的。

高速設(shè)備插入全速hub時應(yīng)該與全速兼容。而高速hub具有所謂TransactionTranslator

(事務(wù)翻譯器)功能,能夠隔離全速、低速設(shè)備與高速之間數(shù)據(jù)流,但是不會影響供電

和串聯(lián)深度。

1.機(jī)械和電氣標(biāo)準(zhǔn)

圖8.11標(biāo)準(zhǔn)USB接口

標(biāo)準(zhǔn)USB接口如圖8.11所示,其電氣特性見表8.6。

USB信號使用分別標(biāo)記為D+和D-的雙絞線傳輸,各自使用半雙工差分信號并協(xié)

同工作,以抵消長導(dǎo)線的電磁干擾。

USB的電纜有四根線,兩根傳送的是5V的電源,有一些直接和電源HUB相連的

設(shè)備可以直接利用它來供電。另外的兩根是數(shù)據(jù)線,數(shù)據(jù)線是單工的,在整個的一個

系統(tǒng)中的數(shù)據(jù)速率是一定的,要么是高速,要么是低速,沒有一個可以中間變速的設(shè)

備來實現(xiàn)數(shù)據(jù)碼流的變速.在這一點上,USB和1394有明顯的差別。

USB的總線可以在不使用的時候被掛起,這樣一來就可以節(jié)約能源。

在有些時候的總線還有可能擋機(jī)(stall),比如說象數(shù)據(jù)傳送的時候突然被打斷,

這個時候通過host的重新配置可以實現(xiàn)總線的重新工作。

2.編碼方式

USB標(biāo)準(zhǔn)采用NRZI方式(翻轉(zhuǎn)不歸零制)對數(shù)據(jù)進(jìn)行編碼。翻轉(zhuǎn)不歸零制(non-

returntozero,inverted),電平保持時傳送邏輯1,電平翻轉(zhuǎn)時傳送邏輯0。

3.軟件架構(gòu)

一個USB主機(jī)通過hub鏈可以連接多個設(shè)備。由于理論上一個物理設(shè)備可以承擔(dān)多

種功能,例如路由器同時也可以是一個SD卡讀卡器,USB的術(shù)語中設(shè)備(device)指

的是功能(functions)。集線器(hub)由于作用特殊,按照正式的觀點并不認(rèn)為是

functiono直接連接到主機(jī)的hub是根(root)hub。

4.端點

"設(shè)京/功能(和集線器)與管道(pipe)(即邏輯通道)聯(lián)系在一起,管道把主機(jī)控

制器和被稱為端點的邏輯實體連接起來。管道和比特流(例如UNIX的pipeline)有著

相同的含義,而在USB詞匯中術(shù)語端點經(jīng)常和管道混用,甚至在正式文檔中。

端點(和各自的管道)在每個方向上按照0-15編號,因此一個設(shè)備/功能最多有32

個活動管道,16個進(jìn),16個出。兩個方向的端點0總是留給總線管理,占用了32個端

點中的2個。在管道中,數(shù)據(jù)使用不同長度的包傳遞,端點可以傳遞的包長度上限一般

是長度的2人n字節(jié),所以USB包經(jīng)常包含的數(shù)據(jù)量依次有8、16、32、64、128、

256、512或者1024字節(jié)。

一個端點只能單向(進(jìn)/出)傳輸數(shù)據(jù),自然管道也是單向的。每個USB設(shè)備至少有

兩個端點/管道:它們分別是進(jìn)出方向的,編號為0,用于控制總線上的設(shè)備。按照各自

的傳輸類型,管道被分為4類:

?控制傳輸一般用于短的、簡單的對設(shè)備的命令和狀態(tài)反饋,例如用于總線控制的0

號管道。

?等時傳輸——按照有保障的速度(可能但不必然是盡快地)傳輸,可能有數(shù)據(jù)丟失,

例如實時的音頻、視頻。

?中斷傳輸——用于必須保證盡快反應(yīng)的設(shè)備(有限延遲),例如鼠標(biāo)、鍵盤。

?批量傳輸——使用余下的帶寬大量地(但是沒有對于延遲、連續(xù)性、帶寬和速度的

保證)傳

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論