<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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


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

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

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

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


SJA1000控制器部分

初始化子程序INIT()
選用2. 0協(xié)議構建控制網(wǎng)絡(luò ),對SJA1000的初始化主要包括工作方式的設置、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、波特率的參數設置等。
void canàinit(void) /*SJA1000的初始化子函數*/
{control = 1; /*禁止超載、出錯及接收中斷,并置復位請求位使其進(jìn)入復位狀態(tài)*/
 while (control0x01== 0);
 acceptanceàcode = 0x01; /*驗收碼寄存器(存機號1號)*/
 acceptanceàmask= 0xfe ; /*驗收屏蔽碼寄存器*/
 busàtimingà0= 0x03; /*定時(shí)寄存器0,同步跳轉寬度
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; /*清復位請求,使其進(jìn)入工作狀態(tài)*/
}

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

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

結束語(yǔ)

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

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>