在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > CAN總線與PC機(jī)串口通信適配器設(shè)計(jì)與實(shí)現(xiàn)

            CAN總線與PC機(jī)串口通信適配器設(shè)計(jì)與實(shí)現(xiàn)

            作者: 時(shí)間:2009-09-16 來(lái)源:網(wǎng)絡(luò) 收藏


            以下為VB的發(fā)送接收程序:
            Private SuBcmdSendàClick() 使用按鈕控件
            MSComm1. Output= txtSend. Text 將傳送區(qū)內(nèi)的字符串以O(shè)utput屬性送出
            End Sub
            Private SuBFormàLoad() 窗體的加載事件
            MSComm1. PortOpeN= True  將通訊斷口開啟,通訊參數(shù)也可以在開啟前先設(shè)定
            MSComm1. RThreshold = Val (txtThreshold. Text) 設(shè)定引發(fā)接收事件的接收閾值,使程序一執(zhí)行便開啟通訊端口,將接收的閾值設(shè)定為閾值,設(shè)定文本框內(nèi)的值。
            End Sub
            Private SuBMSComm1. OnComm() 通訊控件的OnComm事件。引發(fā)接收事件后,將字符收進(jìn)來(lái)并放在接收的文本框中
            SelectCase MSComm1. CommEvent 根據(jù)下面每一個(gè)case 語(yǔ)句處理每個(gè)事件和錯(cuò)誤事件
              Case comEvCD  CD 線的狀態(tài)發(fā)生變化
              Case commEvReceive  收到Rthreshold # of
              txtReceive. Text= txtReceive. Text+ Trim(MSComm1. Input)vbCrLf
              Case comEvSend  傳輸緩沖區(qū)有Sthreshold 個(gè)字符
            End Select
            End Sub
            Private SuBtxtThreshold Change ( ) p閾值設(shè)定文本框的Change事件
            MSComm1. Rthreshold = Val (txtThreshold. Text) p當(dāng)設(shè)定的閾值變化時(shí),實(shí)時(shí)改變通訊對(duì)象的屬性
            End Sub

            AT89C51單片機(jī)部分
            單片機(jī)部分采用C語(yǔ)言編程。C語(yǔ)言編程具有快捷、模塊功能強(qiáng)大、可靠性好、效率高等優(yōu)點(diǎn)。其中程序初始化包括設(shè)定工作方式,定時(shí)器、中斷寄存器初始化,各變量的初始化。

            TMOD = 0x20; //定時(shí)器1為發(fā)生器
            SCON= 0x50; //工作方式1
            TH1= 0xfd ; //設(shè)定波特率= 9600bit/s
            TL1= 0xfd ;
            EA= 1; //開中斷
            ES= 1; //允許中斷
            TR1= 1; //啟動(dòng)定時(shí)器T1
            SPECHAR = 0xff ; //設(shè)定通訊開始標(biāo)志

            程序采用中斷接收,查詢發(fā)送的方式。串口中斷服務(wù)程序流程圖如圖3所示。


            SJA1000控制器部分

            初始化子程序INIT()
            選用2. 0協(xié)議構(gòu)建控制網(wǎng)絡(luò),對(duì)SJA1000的初始化主要包括工作方式的設(shè)置、驗(yàn)收代碼寄存器ACR、驗(yàn)收屏蔽寄存器AMR、波特率的參數(shù)設(shè)置等。
            void canàinit(void) /*SJA1000的初始化子函數(shù)*/
            {control = 1; /*禁止超載、出錯(cuò)及接收中斷,并置復(fù)位請(qǐng)求位使其進(jìn)入復(fù)位狀態(tài)*/
             while (control0x01== 0);
             acceptanceàcode = 0x01; /*驗(yàn)收碼寄存器(存機(jī)號(hào)1號(hào))*/
             acceptanceàmask= 0xfe ; /*驗(yàn)收屏蔽碼寄存器*/
             busàtimingà0= 0x03; /*定時(shí)寄存器0,同步跳轉(zhuǎn)寬度
            T0= T,BPS= 125 k*/
             busàtimingà1= 0x18; /*定時(shí)寄存器1,T1= 9T,T2=2T,波特率為500kbit/S*/
             outputàcontrol = 0x1A; /*正常輸出方式,TX1引腳懸浮*/
             clockàdivider = 0x40; /*BASICCAN模式,RX1接固定電平*/
             control = 0x1A; /*清復(fù)位請(qǐng)求,使其進(jìn)入工作狀態(tài)*/
            }

            發(fā)送canàsend()
            發(fā)送子程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的發(fā)送,由CAN控制器SJA1000獨(dú)立完成,將命令寄存器里的發(fā)送請(qǐng)求標(biāo)志置位,即可發(fā)送SJA1000發(fā)送緩沖區(qū)中的報(bào)文。
            void canàsend(unsigned char ID ,char*xdata) /*該子函數(shù)完成一幀數(shù)據(jù)的發(fā)送*/
            {while ( (status0x10)>> 4 == 1)àNOPà; /*檢查上次請(qǐng)求發(fā)送是否完成*/
            while ( (status0x04)>> 2== 0)àNOPà;
            Transmitbuffer1= ID;
            Transmitbuffer2= 0x08;
            Transmitbuffer3= txdata[0] ;
            Transmitbuffer10= txdata[7] ;
            Command = 0x05 ; /*發(fā)送請(qǐng)求*/
            while ( (status0x08)>> 3== 0);
            }

            接收子程序canàreceive ()
            接收子程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的接收。SJA1000自動(dòng)接收發(fā)往該節(jié)點(diǎn)的數(shù)據(jù)并將收到的數(shù)據(jù)放到它的接收緩沖器中。
            SJA1000的報(bào)文接收主要有2種方式:中斷接收方式和查詢接收方式。系統(tǒng)采用的是中斷接收方式。
            {unsigned char ir ;
             ir = interrupt; /*獲得SJA1000的中斷狀態(tài)*/
             EA= 0;
             If ( (ir0x04)>> 2== 1)error ( ); /*如果是出錯(cuò)中斷,則調(diào)出錯(cuò)處理函數(shù)*/
             If ( (ir0x08)>> 3== 1)overruN( ); /*如果是超載中斷,則調(diào)超載處理函數(shù)*/
             While ( ( (ir0x04)>> 2== 1)‖( ( (ir0x08)>> 3)== 1){àNOPà;}
              RxID[0] = Receivebuffer1;
              RxID[0] = Receivebuffer2;
            If ( ( (Receivebuffer20x10)>> 4)== 0) /*如果是數(shù)據(jù)幀,則接收數(shù)據(jù)*/
              {Rxdata[0] = Receivebuffer3;
              .
              Rxdata[7] = Receivebuffer10;
              Command = 0x04 ; /*SJA1000的接收緩存器被釋放*/
              }
             else if ( ( (Receivebuffer20x10)>> 4)== 1) /*如果是遠(yuǎn)程幀,則作相應(yīng)處理*/
              {  /*相應(yīng)處理程序*/
              EA= 1;
              }
            }

            結(jié)束語(yǔ)

            介紹了一種低成本、高可靠性、快捷的通用型CAN總線與機(jī)通過(guò)RS-232串口互連方案。該互連方案很好地保證了管理監(jiān)控層和現(xiàn)場(chǎng)生產(chǎn)測(cè)控層之間的連接,方便了上下層信息交流,滿足工廠、變電站等工業(yè)場(chǎng)合的應(yīng)用要求。

            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉