• <del id="qqie6"><sup id="qqie6"></sup></del>
  • <tfoot id="qqie6"></tfoot>
  • <ul id="qqie6"></ul>
  • 產品推薦:水表|流量計|壓力變送器|熱電偶|液位計|冷熱沖擊試驗箱|水質分析|光譜儀|試驗機|試驗箱


    儀表網>技術中心>應用設計>正文

    歡迎聯系我

    有什么可以幫您? 在線咨詢

    PIC單片機與PC機異步串行通信的設計

       2012年04月01日 17:05  
      引言
      
      因為具有運行速度快、低功耗、價格低、體積小等優點,Microchip公司推出的PIC系列單片機已經得到越來越廣泛的應用。應用之一是作為下位機與上位機(例如PC機)通信,它被廣泛應用在工業控制、數據采集和檢測等領域中。單片機與PC機通信的方式有串行通信、并行通信。其中,串行通信具有硬件電路簡單、軟件實現容易和運行可靠等優點,十分適合對實時性要求不太高的場合。由于部分PIC單片機不具備串行通信所需的硬件USART口,故系統設計者需要用軟件實現PIC單片機與PC機之間的串行通信。筆者介紹利用PIC單片機的中斷功能實現異步串行通信的方法。
      
      異步串行通信基本概念
      
      異步串行通信字符格式如圖1所示。通信線路上傳送的每個字符包括1個起始位、5~8個數據位、1個奇偶校驗位(可無)和1~2個停止位。每個字符的傳送都是以起始位作為開始標志,緊跟其后的是要傳送的數據(低位先傳送),然后是奇偶校驗位,zui后是停止位。相鄰字符之間的時間間隔即空閑時間可為任意長。線路空閑時應表現為“1”,當檢測到“0”時,表示一幀字符的開始。
      
      圖1異步串行通信字符格式
      
      串行接口硬件電路
      
      選用的單片機型號為PIC16C711,不具備硬件USART,需要用一般I/O口來模擬串行口。如圖2所示,RB0為接收腳,RB5為發送腳。RB0除作為一般I/O引腳外,還可以作為外部中斷輸入引腳,引起中斷的方式分為上跳沿和下跳沿2種方式。在本文中,設置下跳沿引起中斷。當起始位到來時,RB0上出現下跳沿,引起中斷,如果不是干擾信號則開始接收數據。
      
      RS-485標準的特點是抗*力強,傳輸速率高、傳送距離遠。它規定了雙端(平衡式)電氣接口特性。當單片機與具有RS-485接口的PC機通信時,需要進行信號形式的轉換。從單片機發送到PC機的信號首先轉換成平衡信號,再送往PC機。從PC機發送到單片機的信號先轉換成非平衡信號,再輸入單片機。信號形式的轉換工作由RS-485接口芯片SN75176完成。SN75176差分總線收發器工作在半雙工方式,當工作于發送方式時,發送使能引腳DE為高電平,接收使能引腳也為高電平。當工作于接收方式時,發送使能引腳DE為低電平,接收使能引腳也為低電平。這樣,可以將DE與連接在一起,由RB6引腳輸出控制信號,控制SN75176的發送和接收使能。為了減少線路上信號的反射,需要匹配線路的特性阻抗。由于通信載體是雙絞線,它的特性阻抗為120Ω左右,所以線路設計時,在RS-485網絡傳輸線的始端和末端各應接1只120Ω的匹配電阻,R1為單片機一側的匹配電阻。由于RS485芯片的特性,接收器的靈敏度為±200mV,即差分輸入端VA-VB≥±200mV時,輸出邏輯“1”;VA-VB≤200mV時,輸出邏輯“0”。當︱VA-VB︱≤200mV時,輸出不確定。因此,當A、B無信號輸入時,可能造成接收引腳R上出現低電平,這會誤認為通信幀起始位到來而引起工作不正常。為了避免這種情況發生,可以人為的讓A端電位高于B端電位,使R引腳在RS485總線不發送期間呈現*的高電平,單片機不會被誤中斷而接收到亂字符。通過在A、B接上拉、下拉電阻R3、R2可解決這個問題。
      
      圖2PIC16C711與PC機之間的接口電路
      
      單片機通信程序框圖
      
      單片機與PC機之間的通信方式為半雙工方式。一幀數據包括一位起始位、8位數據位、一位停止位和無奇偶校驗位。設發送和接收數據的波特率為9600b/s,則每一位占用的時間td為1/9600s,約為104μs。單片機晶振頻率為4MHz。單片機執行一條指令耗費時間1μs。
      
      單片機接收數據程序框圖
      
      PIC16C711單片機的RB0引腳具備外部引腳跳變沿中斷功能,向RB0引腳送一個上跳沿或下跳沿信號,則INTCON寄存器的外部引腳跳變沿中斷標志位INTF被置1。如果總中斷和外部引腳跳變沿中斷都使能,并且此時單片機沒有執行其他中斷服務子程序,程序進入INT中斷服務子程序。根據異步串行通信的特點,通信線路空閑時單片機接收的是高電平,起始位到來時單片機接收到低電平,因此空閑位和起始位之間是一個下跳沿。單片機接收到下跳沿即起始位后,馬上進入中斷服務子程序,準備接收一幀數據。因此在主程序中設置由下跳沿引起外部引腳跳變沿中斷。以下內容主要分析接收子程序即中斷服務子程序。單片機接收數據程序框圖如圖3所示。進入中斷服務子程序后,首先保護中斷現場,然后檢測起始位是否是“真的”。由于可能存在的各種干擾,單片機有可能接收到的干擾信號正好是一個下跳沿,而實際上此時根本沒有數據到來,從而造成誤接收數據。因此檢測起始位的真實性是有必要的。采取的方法是在52μs(起始位的中點)后,檢測一次RB0上的信號。程序框圖中是延時47μs后檢測RB0上的信號,原因是保護中斷現場的幾條指令要耗費幾個μs。如果是低電平,則起始位是“真的”,否則為干擾信號,單片機清INTF標志位,然后退出中斷服務子程序,回到主程序。若起始位是“真的”,則準備接收數據。本文規定數據位為8位,故首先設置接收計數器R_CNT內容為8。然后將STATUS寄存器中的C位清零,并右移接收數據寄存器RCV_R。C的內容即0移入RCV_Rzui高位,接下來接收數據位。
      
      為盡量保證數據的準確性,應該在每位數據的中點檢測該位數據。因此,檢測*位數據的時刻距離檢測起始位的時刻應該是一位數據所占的時間即104μs,此后的每一位數據檢測時刻之間也是如此。此時又要用到延時程序。因為每兩次檢測時刻之間除了延時之外,指令(C清零、右移等指令)還要占用時間,這些指令占用5~6μs,因此,為了盡量保證在每一位的中心位置檢測數據,延時時間定為98μs。如果檢測得到的數據位為1,則置RCV_Rzui高位為1。如果數據位為0,則不必改變zui高位,因為C為0且已經移入RCV_R的zui高位。然后,將接收計數器內容減1。8位數據接收完畢后,清INTF標志。zui后,退出中斷服務子程序。至此,8位數據接收全部存放于RCV_R中。
      
      圖3單片機接收數據程序框圖
      
      單片機發送數據程序框圖
      
      用RB5引腳作為發送引腳,單片機發送數據程序框圖如圖4所示。當有數據要從單片機發往PC機時,單片機調用發送子程序。在發送子程序中,首先設置發送計數器內容為8,然后發送起始位,起始位應持續104μs。因此要調用延時子程序,延時子程序執行完后,RB5上的信號并未立刻變成*位數據的值,這是因為還要執行幾條指令,如右移TRS_R、置位等RB5上的信號才會變化。假設延時104μs,那么加上幾條指令的執行時間,起始位就比104μs寬了。因此,延時子程序少于104μs,根據具體的程序定為97μs。然后,右移發送數據寄存器TRS_R,將其zui低位即要發送的數據位移入C中,再根據C中的內容將RB5清零或置1,然后將發送計數器內容減1,并判斷其是否為0。若為1,則說明未發送完畢,繼續發送;否則,發送停止位。zui后,退出發送子程序。
      
      圖4單片機發送數據程序框圖
      
      PC機通信程序
      
      VB6.0提供了串行通訊MSComm(盒)控件來為應用程序提供串行通信,它將串口設備當作一個目標封裝起來,容易操作,編程很方便,其良好的用戶界面、簡單方便的串行通信和實用性強的優點,無需借用其他語言就可以開發出的通信軟件,因而PC機軟件采用VB6.0語言編寫。
      
      MSComm控件的調出及其主要屬性如下。
      
      (1)MSComm控件的調出
      
      VB6.0的MSComm控件并不會主動出現在工具箱中,當需要它時,讓它出現在工具箱中的步驟如下:
      
      ①選擇菜單上的“工程”;
      
      ②在“工程”菜單中選擇“部件”;
      
      ③出現對話框后,在可勾選的項目中勾選MicrosoftCommControl6.0;
      
      ④按下“確定”按鈕,即可在工具箱中見到“盒”的圖標,就可以將此控件加載進行串行通信。
      
      (2)MSComm屬性
      
      MSComm屬性很多,其重要的屬性說明如下:
      
      ①CommPort:設定或返回通信端口號。端口號由1開始往上遞增,zui大值是16。
      
      ②Settings:設定通信端口初始化參數。其格式為“Baud,P,D,S”,其中Baud為波特率,可設為1200、2400、9600、14400、19200和28800等幾種;P為校驗位(E表示偶校驗、O表示奇校驗、M表示符號校驗(即在校驗位放置一個1的位)、S表示空白校驗(即在校驗位放置一個0的位)、N表示無校驗位(默認值));D為數據位數,可選值為4、5、6、7、8(默認值);S表示停止位數,可選值為1、1.5、2。
      
      ③PortOpen:設定并返回通信端口的狀態。
      
      使用串行端口之前必須先打開該端口(PortOpen=True),而在使用完畢后必須關閉該端口(PortOpen=False)。
      
      ④Input:從輸入緩沖區返回并清除字符。這是一種FIFO(FirstinFirstOut)機制。如Buffer$=MSComm1.Input,表示將輸入緩沖區的字符讀入Buffer字符串變量中。
      
      ⑤Output:將一個字符或字符串寫入傳輸緩沖區,如MSComm1.Output=“ABCD”。此即將ABCD4個字符通過串行端口傳送出去。
      
      ⑥InBufferCount:傳回在接收緩沖區中的字符數,是指已接收,并在接收緩沖區等待讀取的字符數。
      
      ⑦InputMode:設定和返回類型。該屬性設為0時,數據通過Input屬性以文本方式取回,如設為1,則數據通過Input屬性以二進制方式取回。
      
      結論
      
      利用PIC16C711的外部中斷輸入引腳RB0/INT接收數據,避免了查詢法帶來的耗費大量系統資源的缺點。PIC系列單片機執行指令的速度快,提高了系統效率。PIC16C711內部無硬件UART,本文用軟件模擬它與PC之間的串行異步通信,從而降低了硬件成本。VB具備MSComm(盒)控件,實現串行通信非常方便。

    免責聲明

    • 凡本網注明“來源:儀表網”的所有作品,均為浙江興旺寶明通網絡有限公司-儀表網合法擁有版權或有權使用的作品,未經本網授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明“來源:儀表網”。違反上述聲明者,本網將追究其相關法律責任。
    • 本網轉載并注明自其它來源(非儀表網)的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或和對其真實性負責,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品第一來源,并自負版權等法律責任。
    • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
    聯系我們

    客服熱線: 15024464426

    加盟熱線: 15024464426

    媒體合作: 0571-87759945

    投訴熱線: 0571-87759942

    關注我們
    • 下載儀表站APP

    • Ybzhan手機版

    • Ybzhan公眾號

    • Ybzhan小程序

    企業未開通此功能
    詳詢客服 : 0571-87759942
    主站蜘蛛池模板: 成人欧美一区二区三区1314| 国产成人精品久久| 成人欧美一区二区三区视频| 中文字幕人成人乱码亚洲电影| 午夜精品成人毛片| h成人在线观看| 成人毛片免费网站| 四虎国产精品成人免费久久| 欧美日韩国产成人高清视频| 国产成人欧美一区二区三区vr| 69成人免费视频| 国产成人精品一区二区三区无码 | 久久久久成人精品无码| 成人观看网站a| 国产成人久久综合二区| 日韩黄a级成人毛片| 亚洲色成人WWW永久网站| 成人在线观看国产| 日韩成人在线免费视频| 亚洲国产成人91精品| 国产成人精品日本亚洲直接| 成人看片黄a在线观看| 亚洲av成人精品网站在线播放| 国外成人免费高清激情视频| 成人综合在线视频| 青青草成人免费| 久久成人国产精品一区二区| 国产成人手机高清在线观看网站| 成人免费福利视频| 爱情岛永久地址www成人| 久久久久成人精品免费播放动漫| 国产成人www| 国产成人av免费观看| 国产成人久久综合二区| 四虎国产欧美成人影院| 四虎精品成人免费影视| 国产成人精品一区二区三区| 国产成人精品影院狼色在线| 国产成人免费福利网站| 免费一级成人毛片| 亚洲av成人一区二区三区|