主頁 >  其他 > C8051F040芯片的can通訊問題,求大神解答!!!!!

C8051F040芯片的can通訊問題,求大神解答!!!!!

2020-09-18 09:12:04 其他

#include <INTRINS.H>
//------------------------------------------------------------------------------------------

#define   CANCTRL   0x00 //控制暫存器
#define   CANSTAT   0x01 //狀態暫存器
#define   ERRCNT    0x02 //錯誤計數暫存器
#define   BITREG    0x03 //位定時暫存器
#define   INTREG    0x04 //中斷暫存器
#define   CANTSTR   0x05 //測驗暫存器
#define   BRPEXT    0x06 //BRP擴展暫存器
//IF1介面暫存器
//IF1 命令請求暫存器
#define   IF1CMDRQST  0x08 //IF1命令請求
#define   IF1CMDMSK   0x09 //命令掩碼暫存器
#define   IF1MSK1     0x0a //掩碼暫存器1
#define   IF1MSK2     0x0b //掩碼暫存器2
#define   IF1ARB1     0x0c //仲載暫存器1
#define   IF1ARB2     0x0d //仲載暫存器2
//IF1 訊息控制暫存器
#define   IF1MSGC     0x0e //訊息控制暫存器
#define   IF1DATA1    0x0f //資料A暫存器
#define   IF1DATA2    0x10 
#define   IF1DATB1    0x11 //資料B暫存器
#define   IF1DATB2   0x12
//IF2介面暫存器
//IF2命令請求暫存器
#define   IF2CMDRQST  0x20
#define   IF2CMDMSK   0x21 //命令掩碼暫存器
#define   IF2MSK1     0x22 //掩碼暫存器1
#define   IF2MSK2     0x23 //掩碼暫存器2 
#define   IF2ARB1     0x24 //仲裁暫存器1
#define   IF2ARB2     0x25 //仲裁暫存器2
//IF2 訊息控制暫存器
#define   IF2MSGC   0x26
#define   IF2DATA1   0x27 //資料A暫存器
#define   IF2DATA2   0x28
#define   IF2DATB1    0x29 //資料B暫存器
#define   IF2DATB2    0x2a
//==訊息處理器暫存器
//==傳輸請求暫存器==
#define   TRANSREQ1   0x40
#define   TRANSREQ2   0x41
#define   NEWDAT1     0x48 //新資料暫存器
#define   NEWDAT2     0x49
//==中斷掛起暫存器
#define   INTPEND1    0x50
#define   INTPEND2    0x51
#define   MSGVAL1     0x58 //訊息有效暫存器
#define   MSGVAL2     0x59
//全域變數
char MsgNum; //訊息物件號
char status; //狀態
int  m;
sfr16  CAN0DAT = 0xD8;
void main()
{
       SFRPAGE=0x0F;
OSCXCN_Init();    //振蕩器初始化

SFRPAGE=0x0F;     //埠初始化
IO_Init();

clear_msg_objects(); //清除訊息RAM
//發送用的,在CAN2.0中可不用的
init_msg_object_RX(0x04); //接受初使化函式

EIE2 = 0x20; //使能CAN中斷
start_CAN(); //CAN初使化設定函式
EA = 1;

}
//-----------------------------------------------------------------------------
// 函式名:void clear_msg_objects(void)
// 功  能:清除訊息物件
// 描  述:   
//-----------------------------------------------------------------------------
void clear_msg_objects(void)
{
SFRPAGE = CAN0_PAGE;
CAN0ADR = IF1CMDMSK; //指向命令掩碼暫存器
CAN0DATL= 0xff; //將所有訊息物件的方向定為寫
for(m=0;m<33;m++)
{
 CAN0ADR = IF1CMDRQST; //清除32個訊息物件
 CAN0DATL= m;
}
}
//-----------------------------------------------------------------------------
// 函式名:void init_msg_object_RX(char MsgNum)
// 功  能:接受函式初使化
// 描  述:  
//-----------------------------------------------------------------------------
void init_msg_object_RX(char MsgNum)
{
SFRPAGE = CAN0_PAGE;
CAN0ADR = IF2CMDMSK; //指向命令掩碼暫存器1
CAN0DAT = 0x00F8; //將選中的訊息緩沖暫存器的資料發送到命令請求暫存器尋址的訊息物件
//設為寫,并改變所有訊息物件,除了標識掩碼和資料位 //掩碼位不變
//發送ID號+dir+xtd+MsgVal到訊息物件
//發送控制位到訊息物件
//當寫操作時,此位被忽略
//接受位不變
//資料位元組0---3不變
//資料位元組4---7不變
//增加屏蔽位
CAN0ADR = IF2MSK1;                        //(可接受ID 00 01 10 11)
CAN0DAT = 0x0000;
CAN0DAT =0x0000; //擴展的對接受過濾沒有作用/訊息方向用于接受過濾/11位的屏蔽符全部用上

CAN0ADR = IF2ARB1; //指向仲裁暫存器
CAN0DAT = 0x0000; //將仲裁ID優先級設定最高優先級

CAN0DAT = 0xc000; //訊息物件被配置,并且通過訊息處理來考慮
//設定訊息有效位,沒有擴展ID,方向為接受 //訊息物件使用標準標志符11位
//訊息方向為接受
//11位的識別符號
    CAN0ADR = IF2MSGC;
CAN0DAT = 0x1480; //訊息控制暫存器    
//設定接受允許,禁止遠程幀 //沒有新的資料寫入這個訊息物件
//從CPU對這個位重置以來,沒有訊息丟失。
//這個訊息物件不是中斷源
//屏蔽忽略(使用)
//在幀的成功傳輸后,中斷掛起來會改變
//在幀的成功接受后,中斷掛起會必設定
//在接受遠程幀時,發送請求不改變
//這個訊息物件沒有等待傳輸
//單個訊息物件或是FIFO最后一個物件

CAN0ADR = IF2CMDRQST; //指向命令請求暫存器
CAN0DATL = MsgNum; //寫訊息物件號,即對哪個訊息物件進行操作。
//在3--6個CAN時鐘周期后,IF暫存器中的內容將被移到CAN存盤器的訊息物件中
}


//-----------------------------------------------------------------------------
// 函式名:void start_CNA(void)
// 功  能:CAN初使化設定函式
// 描  述:  
//-----------------------------------------------------------------------------
void start_CAN(void)
{
SFRPAGE = CAN0_PAGE;
CAN0CN  = CAN0CN | 0x41; //使能CCE和INIT位
//使能初使化,置開始初使化為1 //正常運行
//CPU有資料寫入到位定時暫存器(當INIT=1)
//啟動訊息干擾自動重傳
//不產生錯誤中斷狀態
//不產生狀態改變中斷
//禁用模塊中斷IRQ_B總是處于高電平
//開始初使化

CAN0ADR = BITREG; //指向位定時器賦值
CAN0DAT = 0x2303; //給位定時器賦值

//增加
   // CAN0ADR = CANTSTR;
//CAN0DAT = 0x0004;
//發送用的,在CAN2.0中可以不要
// CAN0ADR = IF1CMDMSK; //指向命令掩碼暫存器1
// CAN0DAT = 0x0087; //寫:
//設定CAN RAM為寫,寫資料位元組, //設定發送請求位
//將發送0---3發送到訊息物件
//將發送4---7發送到訊息物件

CAN0ADR = IF2CMDMSK; //指向命令掩碼暫存器2(設定接收,讀CAN_RAM,讀資料位元組)
CAN0DATL = 0x7f; //設定為接受
//掩碼位不變
//仲裁位不變
//發送控制位到IFx訊息緩沖暫存器
//清除訊息物件中斷掛起位
//清除訊息物件中的NewData位
//將資料位元組0---3位元組發送到訊息緩沖暫存器中
//將資料位元組4---7位元組發送到訊息緩沖暫存器中

CAN0CN = 0x2e; //全域初始化IE和SIE
//啟動中斷,如IRQ_B被置為低電平,并保持低電平直到所有的中斷都被處理
//當一個訊息成功傳輸或檢測到CAN總線出錯時產生一個中斷

//清除CPU沒有資料寫入定時暫存器
//正常運行
}
void receive_data()
{
int h;
char sq;
char SFRPAGE_SAVE = SFRPAGE; //保存SFR頁
SFRPAGE = CAN0_PAGE;
CAN0ADR = INTREG;
sq = CAN0DATL;
CAN0ADR = IF2CMDRQST; //指向命令掩碼暫存器
CAN0DATL = sq; //接受來自訊息物件的新資料
CAN0ADR = IF2DATA1;                       //指向資料域的第一位
    for(h=0;h<4;h++)
{
JSSJ[h]=CAN0DAT;
}
S_SET=1;
T1JSA=0X00;
CAN0ADR = IF2ARB1;
ZC = CAN0DAT;

if(ZC==0x2001)
{
FREQ5Z=JSSJ[0];
FREQ6Z=JSSJ[1];
FREQ7Z=JSSJ[2];
FREQ8Z=JSSJ[3];
if(FREQ5Z!=FREQ5)
{
SETPGNB=0x08;
LEFTJS=1;
here: if(S_SENTING==0)
{
KET00();
}
else
{
goto here;
}

}

}


//來自其他節點的0信號使燈滅
SFRPAGE = SFRPAGE_SAVE;
}
//中斷服務程式
void ISRname(void) interrupt 19
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CAN0_PAGE;
status  = CAN0STA;

if((status&0x10)!=0)
{
//RxOK位為1,則是由于接收引起的中斷
CAN0STA = ((CAN0STA&0xef)|0x07); //復位RxOK,設定LEC無變化(即表明自從CPU最近一次將其復位后中,表明沒有完整訊息被成功接受,不使用錯誤碼)
receive_data();
}

if((status&0x08)!=0)
{
//TxOK位為1,則是由于發送引起的中斷
CAN0STA = ((CAN0STA&0xF7)|0x07); //復位TxOK,設定LEC無變化(即表明訊息傳輸不成功,)
}

if(((status&0x07)!=0)&&((status&0x07)!=7)) //錯誤中斷,改變LEC
{
CAN0STA = CAN0STA | 0x07; //設定LEC無變化
//為什么在中斷中狀態暫存器改變不了
}

SFRPAGE = SFRPAGE_SAVE;

}



我運行完這個子程式can后  回到主程式時,它影響了定時器T1,定時器T1在運行但是就是不進中斷   求大神解答   十分感謝!!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/72546.html

標籤:單片機/工控

上一篇:軟體工程師想學點android嵌入式開發。

下一篇:求大神指導一下如何控制ardiuno智能小車去踢足球

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more