版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要介紹一種運(yùn)用PIC16F84單片機(jī)實(shí)現(xiàn)與PC機(jī)串行通信的方法,并給出其硬件接口電路及通信源程序。
1前言
美國(guó)Microchip公司的PIC16系列單片機(jī)是一種新型的CMOS工藝的8位單片機(jī)。其中,PIC16FXX單片機(jī)的程序存儲(chǔ)器為電可擦除閃速存儲(chǔ)器(flash),可多次修改程序,甚至可以在線編程。PIC16F83和PIC16F84片內(nèi)數(shù)據(jù)存儲(chǔ)器除RAM外,還有64字節(jié)的EEPROM,可以當(dāng)作一般的或非易失性的數(shù)據(jù)存儲(chǔ)器使用,簡(jiǎn)單方便。它還具有片內(nèi)上電復(fù)位、延時(shí)電路、看門(mén)狗電路等。另外,PIC16系列單片機(jī)功耗極低,因而是一種非常適合在各種便攜式設(shè)備中使用的高性價(jià)比的單片機(jī),并已經(jīng)得到了越來(lái)越廣泛的應(yīng)用。
但是在許多需要大量計(jì)算的運(yùn)用中,還必須借助微機(jī)的強(qiáng)大數(shù)據(jù)處理能力。這樣必須通過(guò)通信電路實(shí)現(xiàn)PIC單片機(jī)與微機(jī)間的可靠數(shù)據(jù)傳輸。有的PIC16單片機(jī)內(nèi)并沒(méi)有提供串行口,所以串行通信必須通過(guò)自己設(shè)計(jì)的硬件電路和通信軟件來(lái)實(shí)現(xiàn)。
下面介紹用查詢法實(shí)現(xiàn)異步串行通訊的方法。同時(shí)給出了用PIC16F84單片機(jī)的兩個(gè)I/O口模擬2線串行口的硬件接口電路、程序流程框圖、單片機(jī)內(nèi)通信程序以及微機(jī)內(nèi)的通信程序等。
2硬件實(shí)現(xiàn)方法與電路
PIC16F84單片機(jī)的程序存儲(chǔ)器由1K×14的閃速(flash)存儲(chǔ)器構(gòu)成,它只有13條I/O口,1個(gè)定時(shí)器,為了盡量節(jié)省單片機(jī)的軟硬件資源,采用下述異步串行通信的實(shí)現(xiàn)方法。
如圖1所示,PIC16F84在4MHz時(shí)鐘下,采用半雙工方式,可實(shí)現(xiàn)9600波特率的異步串行數(shù)據(jù)通信,1位停止位,8位數(shù)據(jù)位,無(wú)校驗(yàn)位。接收和發(fā)送以低位在先(一般模式),采用軟件延時(shí)。為節(jié)省篇幅,單片機(jī)內(nèi)的通信程序中未提供任何握手協(xié)議,用戶可根據(jù)自己的需要在軟件中加入握手方式。
由于PIC16F84單片機(jī)本身沒(méi)有專門(mén)的串行口,這里用其I/O口來(lái)模擬串行口的功能。
PC機(jī)的串行接口是符合EIARS-232C規(guī)范的外部總線標(biāo)準(zhǔn)接口。RS-232C采用的是負(fù)邏輯,即邏輯“1”:-5V至-15V;邏輯“0”:+5V至+15V。而CMOS電平為:邏輯“1”:4.99V,邏輯“0”:0.01V;TTL電平的邏輯“1”和“0”則分別為2.4V和0.4V。因此在用RS-232C總線進(jìn)行串行通信時(shí)需外接電路實(shí)現(xiàn)電平轉(zhuǎn)換。在發(fā)送端用驅(qū)動(dòng)器將TTL或CMOS電平轉(zhuǎn)換為RS-232C電平,在接收端用接收器將RS—232C電平再轉(zhuǎn)換為T(mén)TL或CMOS電平。
這里選用了MAXIM公司的MAX202E來(lái)作電平轉(zhuǎn)換。MAX202E屬于MAXIM公司的通用串行接收/發(fā)送驅(qū)動(dòng)器芯片。其外圍電路簡(jiǎn)單,只需外接四個(gè)0.1μF的電容即可,如圖1所示。
圖1接口原理圖
3PIC16F84單片機(jī)內(nèi)通信程序的設(shè)計(jì)
圖2接收子程序框圖圖3發(fā)送子程序框圖
圖2和圖3分別是串行發(fā)送和接收的子程序流程框圖。發(fā)送時(shí),通過(guò)使數(shù)據(jù)發(fā)送端DX為低電平并保持B秒(9600波特率時(shí)為104μs)來(lái)發(fā)送起始位。隨后每B秒鐘通過(guò)置位或清零DX端把數(shù)據(jù)發(fā)送出去。這里的B是指一位所持續(xù)的時(shí)間(B=1/波特率)。接收時(shí),數(shù)據(jù)接收端DR大約要每B/2秒(9600波特率時(shí)為52μs)查詢一次以檢測(cè)起始位,如果檢測(cè)到起始位,則在大約1.5B秒(9600波特率時(shí)為156μs)后檢測(cè)第一位數(shù)據(jù)位,隨后每B秒鐘檢測(cè)一次其它的數(shù)據(jù)位。
相應(yīng)的源程序如下:
;接收子程序
Rcvr
clrwdt
;清片內(nèi)看門(mén)狗
;定時(shí)器
btfsc
RA,DR;檢測(cè)起始位
goto
Rcvr;未檢測(cè)到起始位
movlw
8;檢測(cè)到起始位
movwf
R_CNT;8位數(shù)據(jù)位
Rnext
call
Delay;延時(shí)B/2秒
bcf
STATUS,C;清進(jìn)位標(biāo)志
rrf
RevReg;LSB在先
btfsc
RA,DR;該位為0
;還是為1
bsf
RcvReg,MSB;為1
call
Delay;延時(shí)B/2秒
decfsz
R_CNT
goto
Rnext
retlw0
;返回
;發(fā)送子程序
Xmtr
clrwdt
;清片內(nèi)看門(mén)狗
;定時(shí)器
movlw
8;發(fā)送位數(shù)為8
movwf
X_CNT
bcf
RA,DX;發(fā)送起始位
Xnext
call
Delay;延時(shí)B/2秒
call
Delay;延時(shí)B/2秒
rrf
XmtReg;LSB在先
btfsc
STATUS,C;檢測(cè)將要發(fā)送
;的數(shù)據(jù)位
bsf
RA,DX;數(shù)據(jù)位為1
btfss
STATUS,C
bcf
RA,DX;數(shù)據(jù)位為0
decfsz
X_CNT;位計(jì)數(shù)為0則
;發(fā)停止位
goto
Xnext;位計(jì)數(shù)不為0
;則發(fā)下一位數(shù)據(jù)位
Xstop
call
Delay;延時(shí)B/2秒
call
Delay;延時(shí)B/2秒
Bsf
RA,DX;發(fā)送停止位
Retlw
0;返回
;延時(shí)子程序
Delay
movlw
12;52μS延時(shí)
movwf
DCNT;
Dnext
decfsz
DCNT
goto
Dnext;
retlw0
;
4Win95的串行通信機(jī)制及串口查詢法的原理
常用的DOS系統(tǒng)主要是工作在響應(yīng)中斷方式。PC機(jī)串行通信程序大多利用其BIOS塊的INT14H中斷,以查詢串口的方式完成異步串行通信。
Windows系統(tǒng)函數(shù)即包含了通信支持中斷功能。Win95系統(tǒng)為每個(gè)通信設(shè)備開(kāi)辟了用戶定義的輸入輸出緩沖區(qū)(即讀/寫(xiě)緩沖區(qū)),數(shù)據(jù)進(jìn)出通信口均由系統(tǒng)后臺(tái)來(lái)完成。應(yīng)用程序只需完成對(duì)輸入輸出緩沖區(qū)操作就可以了。實(shí)際過(guò)程是每接收一個(gè)字符就產(chǎn)生一個(gè)低級(jí)硬件中斷,Win95系統(tǒng)中的串行驅(qū)動(dòng)程序就取得了控制權(quán),并將接收到的字符放入輸入數(shù)據(jù)緩沖區(qū)。然后將控制權(quán)返還正在運(yùn)行的應(yīng)用程序。如果輸入緩沖區(qū)數(shù)據(jù)已滿,串行驅(qū)動(dòng)程序用當(dāng)前定義的流控制機(jī)制通知發(fā)送方停止發(fā)送數(shù)據(jù)。隊(duì)列中的數(shù)據(jù)按“先進(jìn)先出”的次序處理。
(1)按協(xié)議的設(shè)置初始化并打開(kāi)串口,這樣做就是通知Windows本應(yīng)用程序需要這個(gè)串口,并封鎖其他應(yīng)用程序使它們不能使用此串口。
(2)配置這個(gè)串口。
(3)在串口上往返地傳輸數(shù)據(jù),并在傳輸過(guò)程中進(jìn)行校驗(yàn)。
(4)不需要此串口時(shí),關(guān)閉串口。即釋放串口以供其它應(yīng)用程序使用。
在這四個(gè)步驟中,主要的程序代碼集中在第(3)步。
串口查詢法是一種主要工作在查詢方式下的實(shí)現(xiàn)方法。當(dāng)通信程序工作在“查詢”方式時(shí),可以不考慮Win95的進(jìn)程和線程的問(wèn)題。僅在串口有數(shù)據(jù)時(shí),去讀串口緩沖區(qū)就可以了,如圖4所示。這種方法下確定串口讀取的時(shí)機(jī)、握手協(xié)議及軟件糾錯(cuò)的實(shí)現(xiàn)是程序員應(yīng)考慮的主要問(wèn)題。
圖4讀取接收緩沖區(qū)數(shù)據(jù)流程圖
圖5串口初始化流程
由于這種方法主要工作在查詢方式。程序員必須完成相當(dāng)一部分通信狀態(tài)的檢測(cè)工作,許多細(xì)節(jié)(甚至包括通信過(guò)程中的字符屬性的轉(zhuǎn)換)也必須通過(guò)程序代碼完成。這種查詢方法對(duì)通信雙方協(xié)議的依賴性尤其大。雙方通信協(xié)議的約定對(duì)程序?qū)崿F(xiàn)的難易程度影響很大。
串口查詢法中,一般串口初始化的流程如圖5。
值得注意的一點(diǎn)是,此方法下協(xié)議的約定必須滿足以下條件:即甲方發(fā)送時(shí),乙方必須在甲方發(fā)送動(dòng)作之前進(jìn)入循環(huán)接收狀態(tài),直到接收到字符后通過(guò)對(duì)串口讀取函數(shù)ReadFile返回值的判斷跳出循環(huán)狀態(tài)。
同時(shí),一般為了不使系統(tǒng)因循環(huán)等待接收而進(jìn)入“死循環(huán)”狀態(tài),可以人為設(shè)置讀取串口的循環(huán)次數(shù),一般1000~10000次即可。
本程序的實(shí)現(xiàn)平臺(tái)是VB4,這是一種極為靈活的高級(jí)語(yǔ)言,它可以方便地引入?yún)R編語(yǔ)言的思維,利用其GoTo轉(zhuǎn)向語(yǔ)句方便地控制程序的流程,靈活方便。
5PC機(jī)內(nèi)通信程序的實(shí)例
現(xiàn)約定甲方是PC機(jī),乙方是單片機(jī)系統(tǒng)(如讀卡器)。通信格式設(shè)置為2400波特率,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)。
下面是一個(gè)約定好通訊協(xié)議的程序?qū)嵗?,協(xié)議流程如圖6所示。
以下是甲方(PC機(jī))的幾個(gè)子函數(shù)的程序?qū)嵗?/p>
圖6通信協(xié)議流程
PrivateFunctionOpenThePort(cPortasString,cBaudasString,cParity
asString,cDataasString,tStopsasString)AsBoolean’打開(kāi)串口的子過(guò)程
DimlResultasLong
DimlHandleasLong
DimDCB_COMMasDCB
DimcDCBConfigasString
lHandle=CreateFile(cPort,GENERIC_READOrGENERIC_WRITE,
0&,0&,OPEN_EXISTING,0&,0&)
IflHandle=-1Then’打開(kāi)串口失敗
OpenThePort=False
MsgBox“串口可能正被其他應(yīng)用程序占用!”
lResult=CloseHandle(lHandle)’先關(guān)閉串口后再打開(kāi)
IflResult=0Then
OpenThePort
ExitFunction
EndIf
EndIf
cDCBConfig.band=2400’設(shè)置DCB
cDCBConfig.parity=None
cDCBConfig.data=8
cDCBConfig.stop=1
lResult=BuildCommDCB(cDCBConfig,DCB_COMM)’按用戶設(shè)定配置一個(gè)DCB結(jié)構(gòu)
IflResult=0Then
OpenThePort=False
MsgBox“無(wú)法建立DCB設(shè)備控制塊”
ExitFunction
EndIf
lResult=SetCommState(lHandle,DCB_Comm)’實(shí)際設(shè)置一個(gè)串口的DCB
IflResult=0Then
OpenThePort=False
MsgBox“無(wú)法建立DCB設(shè)備控制塊”
ExitFunction
EndIf
OpenThePort=True
EndFunction
PrivateSubSendHand()’發(fā)送握手信號(hào)的子過(guò)程
DimNcharsAsLong
StaticReadbuffAsString*1
StaticWritebuffAsString*1
DimlpDCBAsDCB
DimlRetAsLong
DimlHandleAsLong
DimlpOverlappedAsOVERLAPPED
DimRNumAsInteger
MsgBox“請(qǐng)把讀卡器插在串口2上!”,
48,“提示窗口”
lHandle=OpenThePort(COMM1,2400,None,8,1)
lRet=PurgeComm(lHandle,1)’清輸出緩沖區(qū)
lRet=PurgeComm(lHandle,0)’清輸入緩沖區(qū)
lRet=GetCommState(lHandle,lpDCB)’獲得通訊口的狀態(tài)
Shand:
Writebuff$=Chr$(&H8F)
lRet=WriteFile(lHandle,Writebuff$,1,Nchars,lpOverlapped)
’送握手信號(hào)入串口緩沖區(qū)
IflRet<=0Then
MsgBox“發(fā)送操作出錯(cuò),卡握手信號(hào)未發(fā)送成功”,16
GoToShand’不成功則重發(fā)
Else
GoToQtest
EndIf
GoToShand
Qtest:
Readbuff$=“”’清除緩沖區(qū)為空
DoWhilelHandle’循環(huán)查詢串口
RNum=0’設(shè)置讀串口次數(shù)的指針為0
ReadAgain:
lRet=ReadFile(lHandle,Readbuff$,1,Nchars,lpOverlapped)
IflRet<0Then
MsgBox“讀取應(yīng)答信號(hào)時(shí)出錯(cuò)”,16
EndIf
IflRet=0Then
IfRNum>1000Then’只讀1000次串口,以免陷入死循環(huán)
MsgBox
"卡沒(méi)有插接好或卡沒(méi)有接在串口上!"
GoToCloseP
EndIf
RNum=RNum+1
GoToReadAgain
EndIf
IfHex$(Asc(Readbuff))<>Hex$(&HFF)ThenGoToShand
’回送碼不正確則返回繼續(xù)發(fā)送握手信號(hào)
El
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年八年級(jí)語(yǔ)文上冊(cè)期末專項(xiàng)復(fù)習(xí):文學(xué)文化常識(shí)【考題猜想】原卷版
- 銷(xiāo)售對(duì)抗協(xié)議書(shū)范文范本
- 聘用心理顧問(wèn)協(xié)議書(shū)范文模板
- 2024年備件倉(cāng)庫(kù)出售合同范本
- 吉林師范大學(xué)《視覺(jué)設(shè)計(jì)基礎(chǔ)》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)《行書(shū)理論與技法I》2021-2022學(xué)年第一學(xué)期期末試卷
- 中醫(yī)藥法與現(xiàn)代醫(yī)療結(jié)合的總結(jié)
- 2024個(gè)人保密合同范本
- 幼兒園文化建設(shè)與推廣制度
- 吉林大學(xué)《消費(fèi)行為學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 鐵路路基施工與維護(hù)習(xí)題集
- 翻車(chē)機(jī)系統(tǒng)工作原理及運(yùn)行常見(jiàn)故障及處理
- 班主任培訓(xùn)專題講座
- 往復(fù)式壓縮機(jī)常見(jiàn)故障與排除
- 圓球幕墻施工方案
- 歌劇《洪湖水浪打浪-》課件
- 國(guó)家安全教育課-教案3篇
- 幼兒園優(yōu)質(zhì)公開(kāi)課:小班語(yǔ)言《小雞球球藏貓貓》課件(共同欣賞)
- 人教版八年級(jí)數(shù)學(xué)上冊(cè)全等三角形典型6類難題題型歸類
- 語(yǔ)音發(fā)聲(第四版)語(yǔ)音篇
- GB/T 43050-2023血液透析和相關(guān)治療用液體的制備和質(zhì)量管理通用要求
評(píng)論
0/150
提交評(píng)論