基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)_第1頁(yè)
基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)_第2頁(yè)
基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)_第3頁(yè)
基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)_第4頁(yè)
基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 . . . 基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)2901302001 景夢(mèng)園CAN總線通信是一個(gè)非常實(shí)用的技術(shù),無(wú)論在工業(yè),制造業(yè)還是生活中都有相關(guān)的應(yīng)用。這次我們所做的基于CAN總線的通信系統(tǒng)實(shí)現(xiàn)是一個(gè)最基本的應(yīng)用。在這項(xiàng)技術(shù)中,我們采用了C51、SJA1000、TJA1050三種芯片來(lái)實(shí)現(xiàn)兩個(gè)節(jié)點(diǎn)之間的通信。為了方便演示,加入MAX232芯片與單片機(jī)相連實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)的串口通信。1、 CAN總線節(jié)點(diǎn)技術(shù):控制局域網(wǎng)絡(luò)CAN(Controller Area Network)總線是德國(guó)BOSCH公司20世紀(jì)80年代初為解決汽車中眾多控制與測(cè)試儀器間的數(shù)據(jù)交換而開(kāi)發(fā)的串行數(shù)據(jù)通信協(xié)議。這是一種多主

2、總線,無(wú)論是在高速網(wǎng)絡(luò)還是在低成本的節(jié)點(diǎn)系統(tǒng),應(yīng)用都很廣泛。由于采用了許多新技術(shù)與獨(dú)特的設(shè)計(jì),與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性,其主要特點(diǎn)如下:   通信方式靈活,可以多主方式工作,網(wǎng)絡(luò)上任意一個(gè)節(jié)點(diǎn)均可以在任意時(shí)刻主動(dòng)向網(wǎng)絡(luò)上的其他節(jié)點(diǎn)發(fā)送信息,不分主從。   CAN節(jié)點(diǎn)只需對(duì)報(bào)文的標(biāo)識(shí)符濾波即可實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)與全局廣播方式發(fā)送和接收數(shù)據(jù),其節(jié)點(diǎn)可分成不同的優(yōu)先級(jí),節(jié)點(diǎn)的優(yōu)先級(jí)可通過(guò)報(bào)文標(biāo)識(shí)符進(jìn)行設(shè)置。CAN總線通信格式采用短幀格式,每幀字節(jié)數(shù)量多為8個(gè)字節(jié),可滿足一般工業(yè)領(lǐng)域中控制命

3、令、工作狀態(tài)與測(cè)試數(shù)據(jù)的要求,同時(shí),8個(gè)字節(jié)不會(huì)占用總線時(shí)間過(guò)長(zhǎng),保證了通信的實(shí)時(shí)性。   采用非破壞性總線仲裁技術(shù),當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)向總線發(fā)送信息出現(xiàn)沖突時(shí),優(yōu)先級(jí)低的節(jié)點(diǎn)會(huì)主動(dòng)退出數(shù)據(jù)發(fā)送,而優(yōu)先級(jí)高的節(jié)點(diǎn)可不受影響地繼續(xù)傳輸數(shù)據(jù),大大節(jié)省了總線沖突仲裁時(shí)間,在網(wǎng)絡(luò)重載的情況下也不會(huì)出現(xiàn)網(wǎng)絡(luò)癱瘓。   直接通信距離最大可達(dá)10 km (速率在5 kb/s以下),最高通信速率可達(dá)1 Mb/s (此時(shí)距離最長(zhǎng)為40 m);節(jié)點(diǎn)數(shù)可達(dá)110個(gè),通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維。   CAN總線采用CR

4、C檢驗(yàn)并可提供相應(yīng)的錯(cuò)誤處理功能,保證數(shù)據(jù)通信的可靠性,其節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)關(guān)閉輸出功能,使總線上其他節(jié)點(diǎn)的操作不受影響。2、89C51單片機(jī)芯片:89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓、高性能CMOS8位微處理器(MCU),俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡(jiǎn)版本。89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)

5、廉的方案。3、 SJA1000芯片:SJA1000是PHILIPS公司生產(chǎn)的一種獨(dú)立控制器,用于移動(dòng)目標(biāo)和一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡(luò)控制(CAN),支持CAN總線通信協(xié)議。 SJA1000有兩種工作模式:基本模式和增強(qiáng)模式。在基本模式下,SJA1000只可收發(fā)標(biāo)準(zhǔn)數(shù)據(jù)幀(標(biāo)準(zhǔn)數(shù)據(jù)幀的標(biāo)識(shí)符為11位),且錯(cuò)誤報(bào)警的極限值不能修改;在增強(qiáng)模式下,SJA1000既可接收標(biāo)準(zhǔn)數(shù)據(jù)幀,也可接收擴(kuò)展數(shù)據(jù)幀(擴(kuò)展數(shù)據(jù)幀的標(biāo)識(shí)符為29位),可修改錯(cuò)誤報(bào)警的極限值,并且SJA1000具有更加靈活的濾波方式,能夠根據(jù)數(shù)據(jù)幀的標(biāo)識(shí)符有選擇地接收一些數(shù)據(jù)幀。另外,增強(qiáng)模式下的SJA1000能夠進(jìn)行自檢,即可通過(guò)自發(fā)自收

6、一組報(bào)文來(lái)判斷該控制節(jié)點(diǎn)是否正常地掛在CAN總線上。使用者所要做的主要工作是SJA1000的初始化,收發(fā)報(bào)文的處理以與對(duì)節(jié)點(diǎn)脫離總線的檢測(cè)量與處理。4、 TJA1050芯片:TJA1050 是控制器區(qū)域網(wǎng)絡(luò)(CAN)協(xié)議控制器和物理總線之間的接口,是一種標(biāo)準(zhǔn)的高速CAN收發(fā)器。TJA1050可以為總線提供差動(dòng)發(fā)送性能,為CAN控制器提供差動(dòng)接收性能。TJA1050 是PCA82C250和PCA82C251高速CAN收發(fā)器的后繼產(chǎn)品。5、 MAX232芯片:MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的單電源電平轉(zhuǎn)換芯片,使用+5v單電源供電。具有如下特性:1、符合所有的RS-

7、232C技術(shù)標(biāo)準(zhǔn)2、只需要單一 +5V電源供電3、片載電荷泵具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓V+、V-4、功耗低,典型供電電流5mA5、部集成2個(gè)RS-232C驅(qū)動(dòng)器6、部集成兩個(gè)RS-232C接收器電路圖:C語(yǔ)言程序:/一號(hào)單片機(jī)程序#include<reg51.h>#include"lcd.h"/#include"DS1820'h"#include"SJA1000gai.h"#define key P22char table1="Message is sending"

8、;char table2="Sengding succeded"char table3="Receiveing succeded"/定義BUF數(shù)據(jù)結(jié)構(gòu)/*struct BASICCAN_BUFstructunsigned char FrameID_H;/標(biāo)識(shí)符高八位(信息功能2加節(jié)點(diǎn)號(hào)6)unsigned char FrameLENTH;/數(shù)據(jù)長(zhǎng)度碼unsigned char FrameKIND;/RTR位(1為遠(yuǎn)程幀,0為數(shù)據(jù)幀)unsigned char FrameID_L3;/低3位(信息格式)unsigned char FrameData;/數(shù)據(jù)

9、BASICCAN_FRAME,receive_BUF,send_BUF;*/*char temp_buffer2;/溫度緩沖char disp_char="Temperature is: "char disp_temp=' ',' ',' ',' ','.',' ','c','e','n','t','i','g','r','a','d',

10、'e'/溫度顯示存儲(chǔ);uchar dot_temp=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;/溫度精確到小數(shù)點(diǎn)一為以后void read_temp() init_ds1820(); write_byte(0xcc); write_byte(0x44); delay1ms(500); init_ds1820(); write_byte(0xcc); write_byte(0xbe); temp_buffer0=read_byte();temp_buffer1=read_byte(); void display_temp(void)uchar i;bit f

11、lag;if(temp_buffer1&0xf8)=0xf8)temp_buffer1=temp_buffer1;temp_buffer0=temp_buffer0+1;if(temp_buffer0=0) temp_buffer1+;flag=1;disp_temp5=dot_temptemp_buffer0&0x0f+0x30;temp_buffer1=(temp_buffer0>>4)|(temp_buffer1&0x07)<<4);disp_temp3=temp_buffer1%10+0x30;disp_temp2=temp_buffer

12、1%100/10+0x30;disp_temp1=temp_buffer1/100+0x30;if(disp_temp1=0x30) disp_temp1=' 'if(disp_temp1=0x30&&disp_temp2=0x30) disp_temp2=' 'if(flag)disp_temp0='-'elsedisp_temp0=' 'for(i=0;i<16;i+) write_(0x80+i);write_data(disp_chari);write_(0xc0+i);write_data(disp

13、_tempi); */void send() uchar Data,sdat; uchar i,j; if(!key) Data=0xaa; for(i=0;i<18;i+) write_data(table1i); delay1ms(200); write_reg(0x10,0x41); write_reg(0x11,0x21); write_reg(0x12,Data); write_reg(0x01,0x01);/置位發(fā)送請(qǐng)求位 delay1ms(500); sdat=read_reg(0x02); if(sdat&0x10!=0) for(j=0;j<17;j+)

14、write_data(table21); delay1ms(200); void receive() uchar temp,sdat; uchar i; sdat=read_reg(0x02); if(sdat&0x01=1)/接受緩沖不為空 temp=read_reg(0x22); delay1ms(50); write_reg(0x01,0x04);/清除緩存 for(i=0;i<19;i+) write_data(table3i); delay1ms(200); write_(0x01);/清屏 write_data(temp); void main() init_lcd(

15、); init_SJA1000NO1(); /void read_temp(); /display_temp(); while(1) send(); receive(); /二號(hào)單片機(jī)程序#include<reg51.h>#include"lcd.h"#include"ser.h"#include"SJA1000gai.h"#define key P22char table1="Message is sending"char table2="Sengding succeded"cha

16、r table3="Receiveing succeded"void send() uchar Data,sdat; uchar i,j; if(!key) Data=0xaa; for(i=0;i<18;i+) write_data(table1i); delay1ms(200); write_reg(0x10,0x42); write_reg(0x11,0x21); write_reg(0x12,Data); write_reg(0x01,0x01);/置位發(fā)送請(qǐng)求位 delay1ms(500); sdat=read_reg(0x02); if(sdat&

17、0x10!=0) for(j=0;j<17;j+) write_data(table21); delay1ms(200); void receive() uchar temp,sdat; uchar i; sdat=read_reg(0x02); if(sdat&0x01=1)/接受緩沖不為空 temp=read_reg(0x22); delay1ms(50); write_reg(0x01,0x04);/清除緩存 for(i=0;i<19;i+) write_data(table3i); delay1ms(200); write_(0x01);/清屏 write_data

18、(temp); void sendser() if(flag) ES=0; flag=0; SBUF=0xaa; while(!TI); TI=0; ES=1; void main() init_lcd(); init_SJA1000NO2(); init_ser(); while(1) send(); receive(); sendser(); 頭文件DS1802.H#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P33;vo

19、id init_ds1820();void delay_us(uchar us);void write_byte(uchar);uchar read_byte();void delay5us();void delay5us();void delay_us(uchar us)/調(diào)用函數(shù)24us,每一次計(jì)數(shù)16us(11.0592M晶振) uchar i; for(i=0;i<us;i+);void init_ds1820() DQ=0; delay_us(29);/480us DQ=1; delay_us(3);/等待DS1820回應(yīng)void write_byte(uchar dat) u

20、char i,temp; for(i=0;i<8;i+) temp=dat&0x01; DQ=0; delay5us(); if(temp) DQ=1; delay_us(2); DQ=1; dat>>=1; uchar read_byte() uchar i; bit j; uchar dat=0; for(i=0;i<8;i+) DQ=0;/下降沿,讀時(shí)間隙開(kāi)始 delay5us(); DQ=1;/釋放總線 delay5us(); j=DQ; if(j) dat=dat|0x80; delay_us(2); dat>>=1; return(dat

21、);LCD.H#include<reg51.h>sbit RS=P25;sbit RW=P24;sbit lcden=P23;void delay1ms(int s);void write_(int comd);void write_data(int dat);void init_lcd();void delay1ms(int s) int i,j; for(i=0;i<s;i+) for(j=0;j<110;j+);void write_(int comd) RS=0; P1=comd;delay1ms(5); lcden=1; delay1ms(5); lcden=

22、0;void write_data(int dat) RS=1; P1=dat;delay1ms(5); lcden=1; delay1ms(5); lcden=0; void init_lcd() RW=0; lcden=0; write_(0x38); write_(0x0f); write_(0x06); write_(0x01); write_(0x80+0x01);SER.H#include<reg51.h>void init_ser();void ser() interrupt 4;char flag,a;void init_ser() TMOD=0x20;/設(shè)置定時(shí)器

23、1為工作方式2TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;void ser() interrupt 4RI=0;P1=SBUF;a=SBUF;flag=1;SJA1000GAI.H#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit CS=P27;/T1=P35;sbit WR=P36;sbit RD=P37;void nop();void write_reg(uchar);uchar read_reg(uchar);void init_SJA1000NO1();void init_SJA1000NO2();void nop();/寫寄存器void write_reg(uchar adr,uchar date ) ALE=1; P0=adr; nop(); ALE=0; CS=0; n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論