關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 無線傳感組網技術

        無線傳感組網技術

        作者: 時間:2013-07-22 來源:網絡 收藏

        【主要程序文件】:

        //******************************SJA1000初始化***********************************

        void SJA1000_Init(void)
        {
        uchar i,a,b,i_temp=0,TempData,j_temp=0;

        CLI();
        SJA100HardWareRest(); //硬件復位
        //Read_SJA1000(CAN_IR); //讀中斷寄存器,清除中斷位
        SJAEntryResetMode(); //進入復位模式
        DelayUs(5);
        SR_status = Read_SJA1000(CAN_SR); //讀狀態
        //進入Pelican模式
        Write_SJA1000(CAN_CDR,0xc0); //選擇Pelican模式,CBP=1,激活RX0; 關閉TX1中斷與時鐘輸出。
        SR_status = Read_SJA1000(CAN_SR); //讀狀態
        DelayUs(5);

        //自檢模式,自發自收檢測
        //Write_SJA1000(CAN_MOD,0x04); //配置模式寄存器,雙濾波,自發自收

        //接收所有報文
        Write_SJA1000(CAN_AMR0,0xff); //配置驗收屏蔽AMR0=0FFH
        Write_SJA1000(CAN_AMR1,0xff); //配置驗收屏蔽AMR1=0FFH
        Write_SJA1000(CAN_AMR2,0xff); //配置驗收屏蔽AMR2=0FFH
        Write_SJA1000(CAN_AMR3,0xff); //配置驗收屏蔽AMR3=0FFH
        Write_SJA1000(CAN_ACR0,0x00); //配置驗收代碼ACR1=0:
        Write_SJA1000(CAN_ACR1,0x00); //配置驗收代碼ACR1=0:
        Write_SJA1000(CAN_ACR2,0x00); //配置驗收代碼ACR1=0:
        Write_SJA1000(CAN_ACR3,0x00); //配置驗收代碼ACR3=0;


        Write_SJA1000(CAN_TXERR,0x00);
        Write_SJA1000(CAN_RXERR,0x00);
        Write_SJA1000(CAN_ECC,0x00);
        Write_SJA1000(CAN_RBSA,0x00);

        //設置波特率(16MHZ晶振,125Kb)
        Write_SJA1000(CAN_BTR0,0x03); //配置總線定時--1255kbps 0x6e03
        Write_SJA1000(CAN_BTR1,0x1C); // 0xffaf
        Write_SJA1000(CAN_OCR,0xaa); //配置輸出控制
        Write_SJA1000(CAN_EWLR,0xff); //配置錯誤報警限制為255
        Write_SJA1000(CAN_CMR,0x0c); // 清楚數據溢出和釋放接收緩沖器

        // 退出復位模式,進入工作模式
        SJAQuitResetMode();
        SR_status = Read_SJA1000(CAN_SR); //讀狀態
        //Write_SJA1000(CAN_TXB+4,ID3); //配置發送緩沖區的ID3-
        // Write_SJA1000(CAN_IER,0x01); //配置SJA10000中斷-錯誤報警/發送/接收中斷0x07
        Write_SJA1000(CAN_IER,0x81); //使能SJA1000接收中斷位,和總線錯誤中斷位
        SEI();

        }

        //******************************SJA1000發送程序*********************************
        void send_sja1000(void)
        {
        uchar s,i,canstatus,canstatus1,canstatus2,canstatus3,canstatus4;
        //CLI();
        canstatus= Read_SJA1000(CAN_SR); //讀狀態
        canstatus1 = Read_SJA1000(CAN_MOD); //讀模式
        canstatus2 =Read_SJA1000(15); //TX錯誤計數
        canstatus3 =Read_SJA1000(14); //RX錯誤計數
        canstatus4 =Read_SJA1000(12); //錯誤代碼捕捉

        for( i=0;i5;i++ );
        {
        canstatus = Read_SJA1000(CAN_SR);
        }

        if((canstatus 0x0C)== 0x0C) //查詢SJA1000是否處于接收狀態,當SJA1000不處于接收狀態時才可繼續執行
        { //SR.3=0,發送請求未處理完,等待直到SR.3=1
        goto SJA1000; //SR.2=0,發送緩沖器被鎖
        }
        else
        {
        LEDSysMode = 0;
        return;
        }

        SJA1000:

        //發送數據寫進發送緩沖區中
        WriteSJARegBlock(16,Send_CAN_Info_ID,5); //擴展幀,向發送緩沖區寫入5個識別碼
        Write_SJA1000(21,DataText[0]); //擴展幀,向發送緩沖區寫入8個數據
        Write_SJA1000(22,DataText[1]);
        Write_SJA1000(23,DataText[2]);
        Write_SJA1000(24,DataText[3]);
        Write_SJA1000(25,DataText[4]);
        Write_SJA1000(27,DataText[6]);
        Write_SJA1000(26,DataText[5]);
        Write_SJA1000(28,DataText[7]);
        // 啟動發送
        Write_SJA1000(CAN_CMR,0x01);//使能發送請求,發送數據。(0x03,單次發送,有錯誤不重新發送;0x01發送請求命令,當錯誤時可重發;0x10產生一次自接收性質的報文發送)
        SEI();
        DataText[7]=0x00;
        while((canstatus0x08) ==0) //檢測是否發送完畢
        {
        canstatus = Read_SJA1000(CAN_SR); //讀狀態
        }
        LEDSysMode = 1;

        }

        【總結】:

        本系統主要是RF和CAN總線兩大塊,功能都能實現。部分代碼如上所示,若網友希望進一步了解,可以站內信聯系。

        原帖地址:http://bbs.21ic.com/icview-584206-1-1.html


        上一頁 1 2 3 下一頁

        關鍵詞: 技術 組網 傳感 無線

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 崇明县| 安达市| 蓬溪县| 汾西县| 定边县| 内乡县| 扎兰屯市| 宜兴市| 深圳市| 武邑县| 高唐县| 浦北县| 景宁| 星座| 新巴尔虎右旗| 洪雅县| 罗定市| 祥云县| 钟山县| 湖北省| 信丰县| 峡江县| 平定县| 孟连| 盐源县| 汉源县| 广饶县| 宣城市| 若羌县| 咸宁市| 崇文区| 资兴市| 屏东市| 遂川县| 平南县| 玛沁县| 佳木斯市| 南溪县| 乌苏市| 黄浦区| 海阳市|