技術頻道

      CAN總線控制器的初始化程序


      摘  要:<">


        摘 要:介紹了can總線控制器sja1000芯片,并給出用c51語言編寫sja1000總線控制器的初始化程序,方便使用者學習和掌握。

        關鍵詞:sja1000;can總線;c51;寄存器

        0 引 言

        隨著自動化底層設備通信的需要,使現場總線技術得到了迅速的發展,各廠家都紛紛推出自己的總線控制器。sja1000 就是philips公司推出的一種高性能的can總線控制器,它得到了廣泛的應用,但是有關sja1000初始化的文章比較少見,介紹的程序也不完全,這給使用者增加了難度。為了方便使用者掌握和使用can總線,本文作者成功地運用c51語言初始化sja1000為核心的can總線控制器,縮短了程序開發周期,提高了工作效率。

        1 sja1000的新功能與內部結構

        1.1 sja1000的主要新功能

        sja1000是philips公司早期can總線控制器pca82c200的替代品,功能更強大,與pca82c200相比,具有許多優點,詳見文獻[4].

        1.2 sja1000的內部寄存器

        sja1000的寄存器和管腳配置允許它使用于各種各樣的集成的或分立的can 收發器,這使不同微控制器之間的接口能夠被靈活運用。若要正確、靈活的運用sja1000,就必須了解內部寄存器的地址、功能和作用。sja1000內部寄存器的結構如表1所示(具體每一位的作用,請參閱文獻[2]).

        1.3 sja1000與89c52的連線原理

        為了連接到主控制器,sja1000提供一個復用的地址/數據總線和附加的讀/寫控制信號,見圖1.sja1000能被看作外圍存儲器并為主控制器映射i/o設備。為了保證系統的同步,本電路使用了一個24 mhz的晶振作為sja1000的振蕩器,用它的7號引腳(clkout)作為89c52的時鐘脈沖。本文中sja1000的片選由微控制器的p2.7口控制,其內部寄存器的地址由p0口和p2口共同來決定,p0口為低8位,p2口為高8位。

        圖1 原理接線圖

        2 程 序

        c語言是一種常用的計算機程序設計語言,它既有高級語言的各種特征,又能直接操作系統硬件,而且可以進行結構化程序設計,用c語言編寫的程序很容易移植。近年來出現的各種專為微型計算機設計的c語言編譯器,如美國franklin軟件公司推出的franklin c51,德國keil公司推出keil c軟件,都是高性能的c編譯器,它編譯的目標代碼簡潔且運行速度高。后者是現在比較流行的軟件,它深受單片機開發人員的喜愛。下面就以keil c51為平臺,系統的介紹如何用c51語言對sja1000 can總線控制器進行初始化。

        從圖1可以看到,主控制器89c52的p0.0-p0.7直接與sja1000的ad0-ad7相連,主控制器既要傳送地址,又要傳送數據,就必須對p0口進行分時控制,而sja1000的ad0-ad7正好提供一個復用的地址/數據總線和附加的讀/寫控制信號。

        sja1000由主控制器的程序進行功能配置和激活,因此sja1000能滿足不同屬性的can總線系統的要求。主控制器89c52和sja1000之間的數據交換經過一系列的寄存器控制段和一個ram 信息緩沖器完成,對于主控制器來說,構成發送和接收

        sja1000初始化流程圖

        緩沖器的寄存器和一部份ram的地址窗口,就象是外圍的寄存器。

        sja1000初始化的流程圖如圖2所示。

        為了讓工程技術人員更加深入的學習和使用can總線,這里完整的給出了sja1000的初始化程序。

        程序如下:

        #define crxbyte[0x8000] // 控制寄存器地址

        #define cmrxbyte[0x8001] // 命令寄存器地址

        #define srxbyte[0x8002] // 狀態寄存器地址

        #define irxbyte[0x8003] // 中斷寄存器地址

        #define acrxbyte[0x8004] // 驗收碼寄存器地址

        #define amrxbyte[0x8005] // 驗收屏蔽寄存器地址

        #define btr0xbyte[0x8006] // 總線定時寄存器0地址

        #define btr1xbyte[0x8007] // 總線定時寄存器1地址

        #define ocrxbyte[0x8008] // 輸出控制寄存器地址

        #define trxbyte[0x8009] // 測試寄存器地址

        #define transbuffer1xbyte[0x800a] // 發送緩沖器

        #define transbuffer2xbyte[0x800b]

        #define transbuffer3xbyte[0x800c]

        #define transbuffer4xbyte[0x800d]

        #define transbuffer5xbyte[0x800e]

        #define transbuffer6xbyte[0x800f]

        #define transbuffer7xbyte[0x8010]

        #define transbuffer8xbyte[0x8011]

        #define transbuffer9xbyte[0x8012]

        #define transbuffer10xbyte[0x8013]

        #define rxbuffer1xbyte[0x8014] // 接收緩沖器

        #define rxbuffer2xbyte[0x8015]

        #define rxbuffer3xbyte[0x8016]

        #define rxbuffer4xbyte[0x8017]

        #define rxbuffer5xbyte[0x8018]

        #define rxbuffer6xbyte[0x8019]

        #define rxbuffer7xbyte[0x801a]

        #define rxbuffer8xbyte[0x801b]

        #define rxbuffer9xbyte[0x801c]

        #define rxbuffer10xbyte[0x801d]

        #define cdrxbyte[0x801f] // 時鐘頻分寄存器

        #include “at89x52.h”

        #include “stdio.h”

        #include “math.h”

        #include “intrins.h”

        #include “ctype.h”

        #include “mylib.h”

        #include “absacc.h”

        void init&shy;_can(void) // 初始化sja1000主控制器子函數

        {

        cr=0x01; // 控制寄存器為復位

        cdr=0; // 設置時鐘分頻器

        acr=0; // 驗收碼寄存器

        amr=0xff; // 驗收屏蔽寄存器

        btr0=0x31; // 總線定時寄存器0

        btr1=0x18; &

        文章版權歸西部工控xbgk所有,未經許可不得轉載。

        下一篇:基于ARM的電子系統設計

        你可能感興趣的文章

        工控機常見故障及其排除
        大聯大旗下凱悌集團推出馬達控制解決方案
        西門子PLC與CHV系列變頻器通信
        深圳振通公交電子站牌及智能調度管理系統解決方案
        用數字數傳電臺建專網大家關心的幾個問題
        工廠管理自動化系統
        紡織車間網絡化綜合應用發展概述
        研祥EIP在發電市場技術支持系統解決方案

        研討培訓

        更多>

        技術視頻

        更多>

        熱門下載

        更多>
        主站蜘蛛池模板: 国产在线aaa片一区二区99| 国产精品一区在线观看你懂的| 亚洲一区二区在线视频| 国产午夜精品一区二区三区嫩草 | 一区二区三区日韩| 夜夜高潮夜夜爽夜夜爱爱一区| 波多野结衣一区二区免费视频| 亚洲一区二区精品视频| 国产精品电影一区| 久久99国产精品一区二区| 怡红院一区二区三区| 国产高清一区二区三区| 国产成人精品一区在线 | 精品国产一区二区三区2021| 国产精品一区二区久久精品涩爱| 亚州AV综合色区无码一区| av一区二区三区人妻少妇| 国产一区二区精品久久| 久久久久国产一区二区三区| 国产亚洲欧洲Aⅴ综合一区| 午夜福利一区二区三区高清视频| 亚洲高清毛片一区二区| 日韩精品一区二区三区在线观看l| 日本无卡码免费一区二区三区| 国产一区二区在线观看麻豆| 亚洲AV无码一区二区乱子伦| 国产午夜精品一区二区三区| 性色av一区二区三区夜夜嗨| 99久久精品费精品国产一区二区| 成人精品视频一区二区三区尤物| 99久久无码一区人妻a黑| 色一乱一伦一图一区二区精品| 久久99热狠狠色精品一区| 色偷偷一区二区无码视频| 精品人妻码一区二区三区| 天天爽夜夜爽人人爽一区二区| 亚洲av区一区二区三| 亚洲av一综合av一区| 正在播放国产一区| 中文字幕日本精品一区二区三区| 色偷偷久久一区二区三区|