《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > PIC16系列單片機與PC機串行通信的軟硬件實現
PIC16系列單片機與PC機串行通信的軟硬件實現
互聯網
摘要: 介紹一種運用PIC16F84單片機實現與PC機串行通信的方法,并給出其硬件接口電路及通信源程序。
Abstract:
Key words :
1 前言

美國Microchip公司的PIC16系列單片機是一種新型的CMOS工藝的8位單片機。其中,PIC16FXX單片機的程序存儲器為電可擦除閃速存儲器(flash),可多次修改程序,甚至可以在線編程。PIC16F83和PIC16F84片內數據存儲器除RAM外,還有64字節的EEPROM,可以當作一般的或非易失性的數據存儲器使用,簡單方便。它還具有片內上電復位、延時電路、看門狗電路等。另外,PIC16系列單片機功耗極低,因而是一種非常適合在各種便攜式設備中使用的高性價比的單片機,并已經得到了越來越廣泛的應用。
但是在許多需要大量計算的運用中,還必須借助微機的強大數據處理能力。這樣必須通過通信電路實現PIC單片機與微機間的可靠數據傳輸。有的PIC16單片機內并沒有提供串行口,所以串行通信必須通過自己設計的硬件電路和通信軟件來實現。
下面介紹用查詢法實現異步串行通訊的方法。同時給出了用PIC16F84單片機的兩個I/O口模擬2線串行口的硬件接口電路、程序流程框圖、單片機內通信程序以及微機內的通信程序等。

2 硬件實現方法與電路

PIC16F84單片機的程序存儲器由1K×14的閃速(flash)存儲器構成,它只有13條I/O口,1個定時器,為了盡量節省單片機的軟硬件資源,采用下述異步串行通信的實現方法。
如圖1所示,PIC16F84在4MHz時鐘下,采用半雙工方式,可實現9600波特率的異步串行數據通信,1位停止位,8位數據位,無校驗位。接收和發送以低位在先(一般模式),采用軟件延時。為節省篇幅,單片機內的通信程序中未提供任何握手協議,用戶可根據自己的需要在軟件中加入握手方式。

由于PIC16F84單片機本身沒有專門的串行口,這里用其I/O口來模擬串行口的功能。
PC機的串行接口是符合EIA RS-232C規范的外部總線標準接口。RS-232C采用的是負邏輯,即邏輯“1”:-5V至-15V;邏輯“0”:+5V至+15V。而CMOS電平為:邏輯“1”:4.99V,邏輯“0”:0.01V;TTL電平的邏輯“1”和“0”則分別為2.4V和0.4V。因此在用RS-232C總線進行串行通信時需外接電路實現電平轉換。在發送端用驅動器將TTL或CMOS電平轉換為RS-232C電平,在接收端用接收器將RS—232C電平再轉換為TTL或CMOS電平。
這里選用了MAXIM公司的MAX202E來作電平轉換。MAX202E屬于MAXIM公司的通用串行接收/發送驅動器芯片。其外圍電路簡單,只需外接四個0.1μF的電容即可,如圖1所示。



圖1 接口原理圖

3 PIC16F84單片機內通信程序的設計

 


圖2 接收子程序框圖 圖3發送子程序框圖


圖2和圖3分別是串行發送和接收的子程序流程框圖。發送時,通過使數據發送端DX為低電平并保持B秒(9600波特率時為104μs)來發送起始位。隨后每B秒鐘通過置位或清零DX端把數據發送出去。這里的B是指一位所持續的時間(B=1/波特率)。接收時,數據接收端DR大約要每B/2秒(9600波特率時為52μs)查詢一次以檢測起始位,如果檢測到起始位,則在大約1.5B秒(9600波特率時為156μs)后檢測第一位數據位,隨后每B秒鐘檢測一次其它的數據位。
相應的源程序如下:

;接收子程序
Rcvr
clrwdt
;清片內看門狗
;定時器
btfsc
RA,DR ;檢測起始位
goto
Rcvr ;未檢測到起始位
movlw
8 ;檢測到起始位
movwf
R_CNT ;8位數據位
Rnext
call
Delay ;延時B/2秒
bcf
STATUS,C ;清進位標志
rrf
RevReg ;LSB在先
btfsc
RA,DR ;該位為0
 
;還是為1
bsf
RcvReg,MSB ;為1
call
Delay ;延時B/2秒
decfsz
R_CNT
goto
Rnext
retlw0
;返回
;發送子程序
Xmtr
clrwdt
;清片內看門狗
;定時器
movlw
8 ;發送位數為8
movwf
X_CNT
bcf
RA,DX ;發送起始位
Xnext
call
Delay ;延時B/2秒
call
Delay ;延時B/2秒
rrf
XmtReg ;LSB在先
btfsc
STATUS,C ;檢測將要發送
 
;的數據位
bsf
RA,DX ;數據位為1
btfss
STATUS,C
bcf
RA,DX ;數據位為0
decfsz
X_CNT ;位計數為0則
;發停止位
goto
Xnext ;位計數不為0
;則發下一位數據位
Xstop
call
Delay ;延時B/2秒
call
Delay ;延時B/2秒
Bsf
RA,DX ;發送停止位
Retlw
0 ;返回
;延時子程序
Delay
movlw
12 ;52μS延時
movwf
DCNT ;
Dnext
decfsz
DCNT
goto
Dnext ;
retlw 0
;

4 Win95的串行通信機制及串口查詢法的原理

常用的DOS系統主要是工作在響應中斷方式。PC機串行通信程序大多利用其BIOS塊的INT14H中斷,以查詢串口的方式完成異步串行通信。
Windows系統函數即包含了通信支持中斷功能。Win95系統為每個通信設備開辟了用戶定義的輸入輸出緩沖區(即讀/寫緩沖區),數據進出通信口均由系統后臺來完成。應用程序只需完成對輸入輸出緩沖區操作就可以了。實際過程是每接收一個字符就產生一個低級硬件中斷,Win95系統中的串行驅動程序就取得了控制權,并將接收到的字符放入輸入數據緩沖區。然后將控制權返還正在運行的應用程序。如果輸入緩沖區數據已滿,串行驅動程序用當前定義的流控制機制通知發送方停止發送數據。隊列中的數據按“先進先出”的次序處理。
(1) 按協議的設置初始化并打開串口,這樣做就是通知Windows本應用程序需要這個串口,并封鎖其他應用程序使它們不能使用此串口。
(2) 配置這個串口。
(3) 在串口上往返地傳輸數據,并在傳輸過程中進行校驗。
(4) 不需要此串口時,關閉串口。即釋放串口以供其它應用程序使用。
在這四個步驟中,主要的程序代碼集中在第(3)步。
串口查詢法是一種主要工作在查詢方式下的實現方法。當通信程序工作在“查詢”方式時,可以不考慮Win95的進程和線程的問題。僅在串口有數據時,去讀串口緩沖區就可以了,如圖4所示。這種方法下確定串口讀取的時機、握手協議及軟件糾錯的實現是程序員應考慮的主要問題。

 

圖4 讀取接收緩沖區數據流程圖

 


圖5 串口初始化流程


由于這種方法主要工作在查詢方式。程序員必須完成相當一部分通信狀態的檢測工作,許多細節(甚至包括通信過程中的字符屬性的轉換)也必須通過程序代碼完成。這種查詢方法對通信雙方協議的依賴性尤其大。雙方通信協議的約定對程序實現的難易程度影響很大。
串口查詢法中,一般串口初始化的流程如圖5。
值得注意的一點是,此方法下協議的約定必須滿足以下條件:即甲方發送時,乙方必須在甲方發送動作之前進入循環接收狀態,直到接收到字符后通過對串口讀取函數ReadFile返回值的判斷跳出循環狀態。
同時,一般為了不使系統因循環等待接收而進入“死循環”狀態,可以人為設置讀取串口的循環次數,一般1000~10000次即可。
本程序的實現平臺是VB4,這是一種極為靈活的高級語言,它可以方便地引入匯編語言的思維,利用其GoTo轉向語句方便地控制程序的流程,靈活方便。

5 PC機內通信程序的實例

現約定甲方是PC機,乙方是單片機系統(如讀卡器)。通信格式設置為2400波特率,8位數據位,1位停止位,無奇偶校驗。
下面是一個約定好通訊協議的程序實例,協議流程如圖6所示。
以下是甲方(PC機)的幾個子函數的程序實例。



圖6 通信協議流程


Private Function OpenThePort(cPort as String,cBaud as String,cParity

as String,cData as String,tStops asString)As Boolean ’ 打開串口的子過程

Dim lResult as Long

Dim lHandle as Long

Dim DCB_COMM as DCB

Dim cDCBConfig as String

lHandle = CreateFile(cPort,GENERIC_READ Or GENERIC_WRITE,

0&,0&,OPEN_EXISTING,0&,0&)

If lHandle = -1 Then ’打開串口失敗

OpenThePort = False

MsgBox “串口可能正被其他應用程序占用!”

lResult = CloseHandle(lHandle) ’先關閉串口后再打開

If lResult = 0 Then

OpenThePort

Exit Function

End If

End If

cDCBConfig.band = 2400 ’設置DCB

cDCBConfig.parity = None

cDCBConfig.data = 8

cDCBConfig.stop = 1

lResult = BuildCommDCB(cDCBConfig,DCB_COMM) ’按用戶設定配置一個DCB結構

If lResult = 0 Then

OpenThePort = False

MsgBox “無法建立DCB設備控制塊”

Exit Function

End If

lResult = SetCommState(lHandle,DCB_Comm) ’實際設置一個串口的DCB

If lResult = 0 Then

OpenThePort = False

MsgBox “無法建立DCB設備控制塊”

Exit Function

End If

OpenThePort = True

End Function

Private Sub SendHand ( ) ’發送握手信號的子過程

Dim Nchars As Long

Static Readbuff As String * 1

Static Writebuff As String * 1

Dim lpDCB As DCB

Dim lRet As Long

Dim lHandle As Long

Dim lpOverlapped As OVERLAPPED

Dim RNum As Integer

MsgBox “請把讀卡器插在串口2上!”,

48,“提示窗口”

lHandle = OpenThePort(COMM1,2400,None,8,1)

lRet = PurgeComm( lHandle,1 ) ’清輸出緩沖區

lRet = PurgeComm( lHandle,0 ) ’清輸入緩沖區

lRet = GetCommState ( lHandle,lpDCB ) ’獲得通訊口的狀態

Shand:

Writebuff$= Chr$(&H8F)

lRet = WriteFile (lHandle,Writebuff$,1,Nchars,lpOverlapped )

’送握手信號入串口緩沖區

If lRet <= 0 Then

MsgBox “發送操作出錯,卡握手信號未發送成功”, 16

GoTo Shand ’不成功則重發

Else

GoTo Qtest

End If

GoTo Shand

Qtest:

Readbuff$ =“ ” ’清除緩沖區為空

Do While lHandle ’循環查詢串口

RNum = 0 ’設置讀串口次數的指針為0

ReadAgain:

lRet = ReadFile( lHandle, Readbuff$,1,Nchars,lpOverlapped )

If lRet < 0 Then

MsgBox “讀取應答信號時出錯”, 16

End If

If lRet = 0 Then

If RNum > 1000 Then ’只讀1000次串口,以免陷入死循環

MsgBox

"卡沒有插接好或卡沒有接在串口上!"

GoTo CloseP

End If

RNum = RNum + 1

GoTo ReadAgain

End If

If Hex$(Asc(Readbuff)) <> Hex$(&HFF) Then GoTo Shand

’回送碼不正確則返回繼續發送握手信號

Else

Label1.Caption = “握手信號是:”

+Hex$(Asc(Readbuff$))

Msgbox “握手信號正確,已正確聯機”

GoTo CloseP

End If

Loop

CloseP:lRet = CloseHandle( lHandle )

If lRet = 0 Then

MsgBox “串行通訊口關閉成功”,

48,“提示窗口”

End If

End Sub

這里要注意的是:當PC機與單片機系統通信時,單片機數據存儲區( RAM )內的數據是十六進制,在信號線上傳輸的是十六進制數的ASCII碼的二進制形式;而Windows系統下使用的是ANSI碼,ANSI碼僅在前126個與ASCII碼相同。即在Win95下接收到的是十六進制數的ASCII碼的字符串,可先轉換為ANSI碼后再在Win95下還原為十六進制數。
具體為:Code$=Hex$(Asc ( Readbuff$ ) )
另外,由于32位API函數參數的數據類型的變化,所有整形參數都被換為長整型(Long)以支持32位的處理,這一點在設置返回值時尤其如此。

6 結束語

以上的軟硬件在我們的實踐中達到了較為理想的效果。通過軟件節省了硬件的開銷,并通過在PIC16F84單片機系統和PC機雙方的通信軟件內增加握手信號,達到了軟件數據校驗的目的,獲得了較高的通信可靠性。

參 考 文 獻

1 MICROCHIP CO. PIC16/17 MICROCO-NTROLLER DATA BOOK. 1995/1996
2 李東星等. PIC16CXX系列單片機應用設計. 高奇電子科技公司,1996.10
3 美 Darwin Boyle等. Visual Basic 4 Developer’s Guide. 北京:機械工
業出版社,1997.       
此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          米奇777超碰欧美日韩亚洲| 国产综合视频在线观看| 欧美综合第一页| 欧美一区二区三区四区高清| 欧美激情综合在线| 久久女同互慰一区二区三区| 欧美精品自拍| 99热免费精品| 日韩视频在线永久播放| 午夜精品在线| 欧美激情在线狂野欧美精品| 国产欧美一区二区三区沐欲| 欧美一二区视频| 亚久久调教视频| 午夜久久美女| 欧美人成网站| 激情综合视频| 欧美一区二区视频在线观看| 亚洲女人av| 亚洲国产精品久久久久| 亚洲国产美国国产综合一区二区| 日韩视频一区二区三区在线播放免费观看| 欧美日韩亚洲网| 国产一区二区三区免费不卡| 国产精品永久| 国产精品女同互慰在线看| 亚洲一区二区三区精品动漫| 久久精品2019中文字幕| 亚洲国产精品第一区二区三区| 久久精品成人| 亚洲一区在线观看免费观看电影高清| 最新高清无码专区| 麻豆精品精华液| 亚洲国产精品综合| 国产麻豆精品在线观看| 国产一区二区高清| 国产精品女人久久久久久| 欧美α欧美αv大片| 亚洲国产精品免费| 欧美午夜激情小视频| 91久久中文字幕| 国产日产精品一区二区三区四区的观看方式| 久久久无码精品亚洲日韩按摩| 午夜精品久久久久久久| 亚洲欧美视频一区| 亚洲福利视频网站| 亚洲理伦电影| 亚洲欧美日韩综合国产aⅴ| 久久午夜羞羞影院免费观看| 亚洲青色在线| 欧美激情精品久久久久久黑人| 欧美三级特黄| 性色av一区二区三区红粉影视| 国产一区二区三区高清播放| 国产伦精品一区二区三区在线观看| 欧美91福利在线观看| 欧美激情va永久在线播放| 国产伦精品一区二区三区四区免费| 亚洲综合首页| 欧美成人精品高清在线播放| 国产综合视频| 国产精品久久77777| 亚洲色无码播放| 一本不卡影院| 欧美视频福利| 亚洲美女视频在线观看| 亚洲福利国产精品| 国产欧美一区二区三区久久人妖| 亚洲欧美日本在线| 国产精品久久久久久久久免费| 国产精品白丝jk黑袜喷水| 亚洲精品乱码久久久久久蜜桃91| 亚洲影院色无极综合| 亚洲精品久久久久久一区二区| 亚洲第一福利在线观看| 一本色道久久综合狠狠躁篇的优点| 亚洲国产精品传媒在线观看| 亚洲第一天堂无码专区| 亚洲欧美日韩精品久久奇米色影视| 午夜久久99| 欧美一站二站| 欧美 亚欧 日韩视频在线| 韩国成人福利片在线播放| 国产日韩欧美| 国产精品一区二区三区观看| 美女成人午夜| 国产精品久久久久久久久免费| 99视频一区二区三区| 噜噜噜久久亚洲精品国产品小说| 美女黄网久久| 午夜精品久久久久久久久久久| 午夜性色一区二区三区免费视频| 国产麻豆精品theporn| 99视频一区二区三区| 久久婷婷人人澡人人喊人人爽| …久久精品99久久香蕉国产| 欧美电影在线播放| 在线欧美福利| 国产日韩欧美精品在线| 日韩午夜在线观看视频| 欧美日韩国产精品成人| 99视频精品在线| 久久久www成人免费精品| 西西裸体人体做爰大胆久久久| 欧美成人午夜激情在线| 国产欧美在线观看| 欧美午夜电影在线观看| 亚洲欧美日韩在线高清直播| 亚洲精品久久久久久久久久久| 亚洲欧洲综合另类在线| 中文亚洲字幕| 99综合电影在线视频| 在线精品视频一区二区三四| 欧美在线看片a免费观看| 欧美在线免费视频| 国产精品高清免费在线观看| 欧美精品一区三区在线观看| 亚洲一区区二区| 国产日韩欧美中文| 一本色道**综合亚洲精品蜜桃冫| 韩国三级电影一区二区| 欧美午夜一区二区三区免费大片| 精品动漫3d一区二区三区免费版| 国产精品久久久久免费a∨大胸| 免费日韩av片| 亚洲一区二区在线播放| 久久欧美肥婆一二区| 亚洲午夜影视影院在线观看| 亚洲欧美另类中文字幕| 亚洲综合国产激情另类一区| 国产日韩欧美夫妻视频在线观看| 久久精品网址| 亚洲一区二区三区欧美| 噜噜爱69成人精品| 国产精品第13页| 激情视频一区| 亚洲精品在线观看视频| 欧美激情一区三区| 午夜国产精品视频免费体验区| 性感少妇一区| 欧美日韩一区二区三区在线看| 久久久精品一区二区三区| 亚洲精品在线观看视频| 久久九九久久九九| 亚洲国产精品成人精品| 欧美插天视频在线播放| 国产午夜精品视频| 亚洲视频axxx| 欧美日韩第一页| 久久久久久久综合| 久久黄色小说| 亚洲私人影院| 亚洲毛片一区二区| 一区二区三区欧美视频| 99精品福利视频| 国产日韩欧美高清免费| 亚洲欧美日韩成人| 欧美亚洲成人免费| 久久狠狠亚洲综合| 国产欧美日韩免费看aⅴ视频| 另类春色校园亚洲| 欧美理论电影在线观看| 欧美日产一区二区三区在线观看| 国产日韩精品久久| 欧美aaaaaaaa牛牛影院| 国产一区二区三区成人欧美日韩在线观看| 亚洲中字黄色| 在线综合+亚洲+欧美中文字幕| 国产亚洲激情在线| 巨胸喷奶水www久久久免费动漫| 日韩特黄影片| 欧美va亚洲va日韩∨a综合色| 欧美日韩高清在线播放| 亚洲国产成人av好男人在线观看| 中国女人久久久| 久久国产一二区| 黄色日韩在线| 99在线观看免费视频精品观看| 亚洲国产欧美日韩另类综合| 欧美大片va欧美在线播放| 国产真实久久| 亚洲一区二区影院| 亚洲国产日韩欧美| 在线看日韩欧美| 国产一区二区三区在线免费观看| 欧美特黄一级大片| 欧美国产另类| 亚洲激情在线播放| 欧美一区二区三区另类| 欧美大片免费观看在线观看网站推荐| 欧美极品色图| 在线精品亚洲一区二区| 亚洲精品久久久久久久久久久| 久久九九免费| 亚洲美女免费精品视频在线观看| 欧美人成在线| 狼狼综合久久久久综合网| 麻豆成人小视频| 免费高清在线视频一区·| 激情综合五月天| 欧美激情精品久久久久久| 欧美少妇一区| 欧美1区2区| 久久精品视频亚洲| 亚洲第一黄色网| 欧美激情1区2区| 欧美色图一区二区三区| 欧美理论片在线观看| 黄色成人在线免费| 亚洲欧美国产精品专区久久| 日韩视频在线观看一区二区| 国产午夜精品久久久久久免费视| 久久久久国产精品一区| 国内精品美女在线观看| 国产综合欧美在线看| 国产亚洲一区二区三区在线播放| 黄色成人免费网站| 亚洲乱亚洲高清| 亚洲一区中文| 中文一区二区| 久久婷婷国产综合精品青草| 欧美视频在线不卡| 欧美亚州韩日在线看免费版国语版| aaa亚洲精品一二三区| 亚洲国产精品久久人人爱蜜臀| 欧美日韩三级电影在线| 黄色精品一区二区| 久久久www成人免费精品| 国产日韩欧美中文| 国产一级一区二区| 欧美日韩在线播放三区| 国产亚洲精品久久久久久| 国产精品久久久久秋霞鲁丝| 夜夜狂射影院欧美极品| 久久综合福利| 国产精品国产三级国产普通话99| 亚洲欧美成人在线| 欧美日韩国产在线观看| 国产精品女主播| 亚洲第一免费播放区| 国内成+人亚洲+欧美+综合在线| 欧美精选午夜久久久乱码6080| 国产精品影片在线观看| 亚洲天堂网站在线观看视频| 亚洲国产欧美在线| 欧美高清视频在线观看| 欧美日本成人| 国内精品写真在线观看| 国产精品99免视看9| 亚洲欧美日韩国产另类专区| 国产午夜精品久久久| 国产精品私拍pans大尺度在线| 久久精品国产免费| 国产精品入口麻豆原神| 久久久久久久成人| 99精品黄色片免费大全| 欧美一二三区精品| 国产精品一卡| 国产精品第三页| 国产性色一区二区| 在线播放豆国产99亚洲| 久久中文字幕导航| 国产精品女人久久久久久| 中文精品一区二区三区| 亚洲片区在线| 美女露胸一区二区三区| 亚洲欧美国产日韩中文字幕| 在线观看福利一区| 国产精品一区二区男女羞羞无遮挡| 国产字幕视频一区二区| 国产欧美一区二区三区久久人妖| 国产精品一区久久久| 欧美高清免费| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产精品日韩| 亚洲国产一区二区三区在线播| 国外成人免费视频| 亚洲在线视频一区| 欧美久久久久久久久久| 欧美三区在线观看| 亚洲色图自拍| 鲁大师成人一区二区三区| 欧美日韩国产影院| 久久精品国产77777蜜臀| 99精品热6080yy久久| 久久久久久久久综合| 伊人色综合久久天天五月婷| 国产精品久久久久久av福利软件| 欧美黄色aa电影| 亚洲精品一区二区在线观看| 久久青青草原一区二区| 老司机一区二区| 国产精品视频免费一区| 亚洲午夜久久久久久久久电影网| 欧美日韩在线精品一区二区三区| 欧美日韩无遮挡| 国产伦精品一区二区三区免费迷| 国产日韩欧美高清免费| 亚洲二区视频| 久久国产精品99国产| 欧美在线一二三| 久热爱精品视频线路一| 久久天堂av综合合色| 中日韩高清电影网| 洋洋av久久久久久久一区| 麻豆国产精品一区二区三区| 日韩视频精品在线| 亚洲自拍偷拍视频| 一区二区欧美日韩| 欧美日本中文字幕| 蜜桃av噜噜一区二区三区| 亚洲人体大胆视频| 欧美在线观看一区| 欧美在线日韩在线| 国内精品写真在线观看| 中文精品视频| 欧美日韩一二三区| 久久久久国产成人精品亚洲午夜| 久久精品99国产精品| 久久精品二区| 欧美激情精品久久久六区热门| 国产色产综合产在线视频| 极品尤物av久久免费看| 久久国产精品一区二区三区| 久久一区中文字幕| 国产嫩草一区二区三区在线观看| 亚洲欧洲精品一区| 国产精品99久久不卡二区|