




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新春系列回饋活動方案
- 春日養(yǎng)生沙龍活動方案
- 舊衣服更換活動方案
- 春季品茶活動方案
- 整裝公司營銷活動方案
- 新公司成立運營策劃方案
- 整潔庭院活動方案
- 早晨美容活動方案
- DB42T 1864.4-2022 家禽疫病診斷技術(shù)規(guī)程 第4部分:禽白血病抗原ELISA檢測方法
- DB42T 1825-2022 大棚藜蒿栽培技術(shù)規(guī)程
- 成套設(shè)備電氣技術(shù)要求
- 《HSK標(biāo)準(zhǔn)教程3》第5課課件
- 2020年12月9日湖北武漢黃陂區(qū)社區(qū)干事招聘筆試試題
- 戰(zhàn)術(shù)基礎(chǔ)動作教案
- 公益協(xié)會財務(wù)管理制度3篇-2023修改整理
- DB44-T 2410-2023紅樹林生態(tài)修復(fù)工程評價技術(shù)規(guī)程
- 高中英語3500單詞(表格)只有中文
- 公司理財-羅斯(完整版)
- 改變觀念提高效率課件
- 立責(zé)于心履責(zé)于行全面落實企業(yè)安全生產(chǎn)主體責(zé)任課件
- 醫(yī)療垃圾廢物處理課件
評論
0/150
提交評論