手机版av在线_96精品国产aⅴ在线观看_中文字幕35页_国产亚洲成AV人片在线观黄桃_全黄性色大片_免费视频h

產(chǎn)品推薦:水表|流量計(jì)|壓力變送器|熱電偶|液位計(jì)|冷熱沖擊試驗(yàn)箱|水質(zhì)分析|光譜儀|試驗(yàn)機(jī)|試驗(yàn)箱


儀表網(wǎng)>技術(shù)中心>應(yīng)用設(shè)計(jì)>正文

歡迎聯(lián)系我

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

PIC單片機(jī)與PC機(jī)異步串行通信的設(shè)計(jì)

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

免責(zé)聲明

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

客服熱線: 13199863987

加盟熱線: 13199863987

媒體合作: 0571-87759945

投訴熱線: 0571-87759942

關(guān)注我們
  • 下載儀表站APP

  • Ybzhan手機(jī)版

  • Ybzhan公眾號

  • Ybzhan小程序

企業(yè)未開通此功能
詳詢客服 : 0571-87759942
主站蜘蛛池模板: 日日碰狠狠躁久久躁 | 四虎国产精品永久在线国在线 | 91一区二区三区四区 | 亚洲精品久久无码 | www.中出| 丁香花在线观看免费观看 | 午夜福利无码不卡在线观看 | 日本片成人在线观看 | 蜜桃臀AV高潮无码 | 大地资源二中文在线观看官网 | 中文无码精品视频在线看 | 精品护士一区二区三区 | 国产日本亚洲欧美 | 狠狠综合久久久久综合 | 男人天堂亚洲成人 | 亚洲精品永久在线观看 | 国产尤物av尤物在线观看 | 国产精品成人免费精品自在线观看 | 在线精品亚洲一区二区 | 国产成人午夜片在线观看高清观看 | av一级毛片 | 日日射影院| 亚洲永久经典 | 99免费精品视频 | 亚洲成年在线 | 国产精品推荐天天看天天爽 | 性国产日韩欧美一区二区在线 | 麻豆精品区 | 国产大片中文字幕在线观看 | 亚洲国产精品高清在线第1页 | 久久国产精品久久久 | 性少妇无码播放 | 欧美乱妇日本无乱码特黄大片 | 日本一区二区三区视频中文字幕 | 久久久WWW成人免费毛片 | 少妇下面好紧好爽视频 | 一区二区三区精品视频免费播放 | 美女精品国产 | 久久免费在线 | 人妻夜夜添夜夜无码AV | 成人日韩精品 |