基于CAN總線的溫控制系統(tǒng)_第1頁
基于CAN總線的溫控制系統(tǒng)_第2頁
基于CAN總線的溫控制系統(tǒng)_第3頁
基于CAN總線的溫控制系統(tǒng)_第4頁
基于CAN總線的溫控制系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于CAN總線的溫度控制系統(tǒng)前言CAN (Controller Area Network) 總線又稱控制器局域網(wǎng)是Bosch 公司, 在現(xiàn)代汽車技術中領先推出的一種多主機局部網(wǎng)由于其卓越的性能極高的可靠性獨特靈活的設計和低廉的價格現(xiàn),已廣泛應用于工業(yè)現(xiàn)場控制智能大廈小區(qū)安防交通工具醫(yī)療儀器環(huán)境監(jiān)控等眾多領域CAN, 已被公認為幾種最有前途的現(xiàn)場總線之一CAN。 總線規(guī)范已被ISO 國際標準組織制訂為國際標準,CAN 協(xié)議也是建立在國際標準組織的開放系統(tǒng)互連參考模型基礎上的,主要工作在數(shù)據(jù)鏈路層和物理層。用戶可在其基礎上開發(fā)適合系統(tǒng)實際需要的應用層通信協(xié)議,但由于CAN 總線極高的可靠性從而使應

2、用層通信協(xié)議得以大大簡化。CAN總線的物理層是將ECU連接至總線的驅動電路。ECU的總數(shù)將受限于總線上的電氣負荷。物理層定義了物理數(shù)據(jù)在總線上各節(jié)點間的傳輸過程,主要是連接介質、線路電氣特性、數(shù)據(jù)的編碼解碼、位定時和同步的實施標準??刂破骶钟蚓W(wǎng)CAN是目前為止被批準為國際標準的少數(shù)現(xiàn)場總線之一。CAN網(wǎng)絡可以采用多主方式工作。它采用非破壞性的總線仲裁技術,其控制和信號傳輸采用短幀結構,因而具有低耦合性和較強的抗干擾能力。它的傳輸介質可以是雙絞線、同軸光纖或電纜,選擇十分靈活;每幀信息都有CRC校驗及其它檢錯措施,因此數(shù)據(jù)出錯率極低,可靠性較高;當其傳輸?shù)男畔⒊鲥e嚴重時,節(jié)點可以自動斷開與總線的

3、聯(lián)系,以使其總線上其它的操作不受影響。 雖然目前USB、PCI等總線技術得到了快速發(fā)展,但是在大量應用的測試微機及工控機中,用的最多的還是ISA總線。ISA總線具有16位數(shù)據(jù)寬度,其最高工作頻率為8MHz,數(shù)據(jù)傳輸速率可達到16MBs,地址總線有24條,可尋址16MB的地址單元,其總線信號分為5類,分別為數(shù)據(jù)線、控制線、地址線、電源線和時鐘線。控制器局域網(wǎng)CAN屬于現(xiàn)場總線的范疇,是一種有效支持分布式控制系統(tǒng)的串行通信網(wǎng)絡。是德國博世公司在20世紀80年代專門為汽車行業(yè)開發(fā)的一種串行通信總線。由于其高性能、高可靠性以及獨特的設計而越來越受到人們的重視,被廣泛應用于諸多領域。由于CAN

4、總線具有很高的實時性能和應用范圍,從位速率最高可達1Mbps的高速網(wǎng)絡到低成本多線路的50Kbps網(wǎng)絡都可以任意搭配。因此,CAN總線己經(jīng)在工業(yè)控制、汽車業(yè)、航空業(yè)、安全防護等領域中得到了廣泛應用?,F(xiàn)場總線是應用在生產(chǎn)最底層的一種總線型拓撲的網(wǎng)絡,是用作現(xiàn)場控制系統(tǒng)的、直接與所有受控節(jié)點串行相連的通信網(wǎng)絡。受控設備和網(wǎng)絡所處的環(huán)境可能很特殊,對信號的干擾往往是多方面的,這就要求控制必須是實時性很強。CAN控制器SJA1000的地址數(shù)據(jù)總線是分時復用的,它通過ALE信號的下降沿可鎖存總線上的地址信號;ISA總線上的數(shù)據(jù)總線和地址是單獨提供的, 其不能直接和SJA1000的地址數(shù)據(jù)總線相連。此設計

5、利用地址譯碼電路來對地址信號線進行譯碼,從而為CAN適配卡分配出一定的端口地址。然后利用74HC373芯片的數(shù)據(jù)鎖存功能鎖存第一次IO操作中通過ISA數(shù)據(jù)總線傳送的數(shù)據(jù)信號,以便作為訪問CAN控制器SJA1000中寄存器的地址信號,最后在第二次IO操作中完成對SJA1000中相應地址寄存器的讀寫操作。其它現(xiàn)場總線較差,這也是目前CAN總線在眾多領域被廣泛采用的原因。節(jié)點是網(wǎng)絡上信息的接CAN總線與其它幾種現(xiàn)場總線比較而言是最容易實現(xiàn)價格最為低廉的的一種,但其性能并不比收和發(fā)送站,由微處理器和可編程的CAN 控制芯片組成的就是所謂智能節(jié)點。它們有兩者合二為一的如芯片P8XC592,也有如此文介紹

6、的獨立的通信控制芯片與單片機接口。其后者的優(yōu)點是比較靈活。DALLAS的最新單線數(shù)字溫度傳感器DS18B20體積更小、適用電壓更寬、更經(jīng)濟, DALLAS 半導體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 "一線總線"接口的溫度傳感器。一線總線獨特且經(jīng)濟的特點,用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構建引入全新概念。DS18B20、DS1822 “一線總線”數(shù)字化溫度傳感器與DS1820一樣,DS18B20也支持“一線總線”接口,測量溫度范圍為-55°C+125°C,在-10°C+85°C范圍內,精度為±0.5&

7、#176;C。DS1822的精度較差為± 2°C?,F(xiàn)場溫度是直接以"一線總線"的數(shù)字方式傳輸,這樣大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:設備或過程控制、環(huán)境控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同的是新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設計更方便、靈活。且新一代產(chǎn)品更便宜,體積更小。DS18B20、DS1822的特性DS18B20可以程序設定912位的分辨率,精度為±0.5°C??蛇x用更小的封裝方式,更寬的電壓適用范圍。分辨率的設定,及用戶設定的報警溫度存儲在EEPROM中,掉電后依然保存。DS18B2

8、0的性能是新一代產(chǎn)品中最好的!其性能價格比也非常出色!DS1822與 DS18B20軟件兼容,是DS18B20的簡化版本。省略了存儲用戶定義分辨率參數(shù)和報警溫度的EEPROM,精度降低為±2°C,適用于對性能要求不高,成本控制嚴格的應用,是經(jīng)濟型產(chǎn)品。DS1820開辟了溫度傳感器技術的新概念。DS18B20和DS1822使特性、電壓及封裝有更多的選擇,讓我們可以構建適合自己的經(jīng)濟的測溫系統(tǒng)。1 總體設計1.1 課題背景隨著科學技術的飛速發(fā)展,過程控制領域在過去的兩個世紀里發(fā)生了巨大的變革。19世紀60年代出現(xiàn)的基于513psi的氣動信號標準,標志著控制理論初步形成,20世紀

9、50年代,隨著基于420mA或010mA的電流模擬信號的模擬過程控制體系被提出被得到廣泛的應用,標志著電氣自動控制時代的到來,20世紀70年代,隨著數(shù)字計算機的介入,產(chǎn)生了“集中控制”的中央控制計算機系統(tǒng),不久后伴隨著“集中控制”的北人們發(fā)現(xiàn),該系統(tǒng)存在著可靠性低、易失控等缺點,很快就將其發(fā)展為分布式控制系統(tǒng);隨著快速發(fā)展的微處理器被廣泛的應用,數(shù)字化通信網(wǎng)絡被延伸到工業(yè)過程現(xiàn)場成為可能,也就產(chǎn)生了以微處理器為核心,使用集成電路代替常規(guī)電子線路,實施信息采集、處理、顯示、傳輸以及優(yōu)化控制等功能的智能設備。設備之間彼此控制、通信,在精度、可靠性以及可維護性、可操作性等都有更高的要求。因此,現(xiàn)場總

10、線的產(chǎn)生成為了必然?,F(xiàn)場總線是應用在生產(chǎn)最底層的一種總線型拓撲的網(wǎng)絡,是用作現(xiàn)場控制系統(tǒng)的、直接與所有受控節(jié)點串行相連的通信網(wǎng)絡。受控設備和網(wǎng)絡所處的環(huán)境可能很特殊,對信號的干擾往往是多方面的,這就要求控制必須是實時性很強。在20世紀80年代初,工程人員開始討論現(xiàn)有的總線系統(tǒng)運用于轎車的可能性。1986年2月在SAE大會上,博世公司提出了CAN,稱為“Automotive SerialController Area Network”。而今幾乎在歐洲誕生的每一輛新轎車都裝配有一個或多個CAN網(wǎng)絡系統(tǒng)。CAN網(wǎng)絡系統(tǒng)也應用在了從火車到輪船等其他類型的運輸工具上,以及工業(yè)控制方面 。僅1999年,就

11、有近六千萬個CAN控制器投入使用,2000年這個數(shù)字達到一億。1.2 開發(fā)意義由于CAN總線具有多主方式工作、非破壞總線仲裁、直接通訊距離遠、通信介質靈活、性價比高等特點,它的應用范圍現(xiàn)在已不再局限于汽車行業(yè),而已經(jīng)擴展到了機械工業(yè)、農業(yè)機械、紡織機械、數(shù)控機床、機器人、家用電器等行業(yè)領域。CAN總線已經(jīng)形成了國際標準,并且被公認為其中最有前途的現(xiàn)場總線之一。對于CAN總線的開發(fā)具有重要的現(xiàn)實意義。1.3 課題完成功能利用P89C51單片機、和SJA1000CAN控制器設計開發(fā)智能溫度節(jié)點,實時上傳測量的溫度并顯示,接收命令來控制溫度。 2 系統(tǒng)硬件設計2.1 系統(tǒng)總圖 上位機電平轉換收發(fā)主節(jié)

12、點溫度節(jié)點控制節(jié)點RS232總線CAN總線圖2.1-1 系統(tǒng)總圖2.2 硬件電路圖5、7、8、12本文中所設計的CAN總線系統(tǒng)智能節(jié)點是以89C51作為節(jié)點的微處理器在CAN總線通信接口中采用PHILIPS公司的SJA1000和隔離CAN收發(fā)器模塊。SJA1000是獨立CAN, CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器,CAN總線保護于一體的隔離CAN收發(fā)器模塊。如圖所示,CAN總線系統(tǒng)智能節(jié)點硬件電路主要由四部分所構成微控制器89C51,獨立CAN 通信控制器SJA1000 CAN,隔離CAN收發(fā)器模塊和DS18B20數(shù)字溫度傳感器。89C51負責SJA1000的初始化且通過控制

13、SJA1000實現(xiàn)數(shù)據(jù)的發(fā)送和接收等通信任務。SJA1000的AD0AD7連接到89C51的P0口,CS接高,CPU通過這些地址可對SJA1000執(zhí)行相應的讀寫操作。SJA1000的INT接89C51的INT0 ,89C51也可通過中斷方式訪問SJA1000。89C51的P3.0接LED,作為繼電器的狀態(tài)顯示。P3.1接繼電器,控制電阻絲的通斷,來控溫。89C51的P0為數(shù)碼管的斷碼,P2為位碼。顯示實時測量溫度和控溫點,各為兩位數(shù)。CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器,CAN總線保護于一體的隔離CAN收發(fā)器模塊,該模塊RXD、TXD引腳兼容+3.3V、及+5V的CAN控制器,

14、不需要外接其他元器件,直接將+3.3V或+5V的CAN控制器發(fā)送、接收引腳與CTM模塊的發(fā)送、接收引腳相連接.圖2.2-1 硬件電路圖3 系統(tǒng)各模塊介紹3.1 P89C51單片機1 、2、6、9P89C51是PHILIPS半導體公司生產(chǎn)的低電壓 、高性能CMOS、8位單片機,片內含有4kbytes的可反復擦寫的Flash只讀程序存儲器(ROM)和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM ),器件采用PHILIPS半導體公司的高密度、非易失性存儲技術生產(chǎn),它兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器(CPU)和Flash存儲單元,功能強大的P89C51單片機可為您提供許多高性價

15、比的應用場合,靈活應用于各種控制領域。 功能特性概述P89C51提供4k字節(jié)Flash閃速存儲器、128字節(jié)內RAM,它有32個I/O口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時,P89C51可降至OHz的靜態(tài)邏輯操作,并且支持兩種軟件可選的節(jié)電工作模式。其空閑方式停止CPU的工作,但允許RAM、定時/計數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作。在掉電方式保存RAM 中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。3.1.2 引腳功能說明圖3.1.2-1 幾腳功能圖引腳功能說明P0口:PO口是一組8位漏極開路型雙向I/0口

16、,也即地址/數(shù)據(jù)總線復用口。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯門電路,對端口寫”1”可作為高阻抗輸入端用。Pl口:P1是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。P2口:P2是一個帶有內部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。P3口除了作為一般的I/0口線外,更重要的用途是它的第二功能,如下表所示:表-1 第二功能端口引腳第二功能P3.0串行輸入口P3.1串行輸出口P3.2外中斷0P3.3外中斷1P3.4定時/計數(shù)器0P3.5定時/計數(shù)器1P3.6外部數(shù)據(jù)存儲器寫選

17、通P3.7外部數(shù)據(jù)存儲器讀選通P3口還接收一些用于FLASH閃速存儲器編程和程序校驗的控制信號。XTAL1:振蕩器反相放大器的及內部時鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。3.2 CAN控制器SJA10003 、10、12SJA1000是一獨立的CAN控制器,它主要用于一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡控制和移動目標。它是美國PHILIPS半導體公司PCA82C200 CAN控制器的替代產(chǎn)品,而且它增加的是一種新的操作模式PeliCAN,這種模式支持CAN2.0B協(xié)議。 主要性能特點SJA1000的主要性能特點如下:引腳可以與PCA82C200獨立CAN控制器兼容電器特性可以與PCA8

18、2C200獨立CAN控制器兼容以有擴展的接收緩沖器64字節(jié),先進先出(FIFO)。它支持CAN2.0A/B協(xié)議它支持29位和11位標識碼 其通信位速率可達1Mbps其驗收濾波器的擴展時鐘頻率是24MHz可以與不同的微處理器接口有可編程的CAN輸出驅動器配置等。3.2.2 SJA1000引腳功能說明圖3.2.2-1 SJA1000引腳表3.2.2-2 SJA1000引腳功能符 號引 腳功 能AD0 AD72,1,28 23地址/數(shù)據(jù)復用總線ALE3ALE 信號INTEL 方式或AS 信號Motorola 方式/CS4片選輸入低電平允許訪問SJA1000/RD5微控制器的讀信號Intel 方式或E

19、 信號Motorola 式/WR6微控制器的寫信號Intel 方式或讀寫信號Motorola 方式CLKOUT7SJA1000 產(chǎn)生的提供給微控制器的時鐘輸出信號此信號由內部振蕩器經(jīng)可編程分頻器得到可編程禁止該引腳VSS18邏輯電路地XTAL19振蕩放大器輸入外部振蕩放大器信號經(jīng)此引腳輸入XTAL210振蕩放大器輸出使用外部振蕩信號時此引腳必須開路MODE11方式選擇輸入端1=Intel 方式0=Motorola 方式VDD312輸出驅動器5V 電源TX013由輸出驅動器0 至物理總線的輸出端TX114由輸出驅動器1 至物理總線的輸出端VSS315輸出驅動器地/INT16中斷輸出端用于向微控制

20、器提供中斷信號/RST17復位輸入端用于重新啟動CAN 接口低電平有效VDD218輸入比較器5V 電源RX0 RX119 20由物理總線至SJA1000輸入比較器的輸入端顯性電平將喚醒處于睡眠方式的SJA1000 當RX0高于RX1時讀出為隱性電平否則為顯性電平VSS221輸入比較器地VDD122邏輯電路5V 電源 SJA1000的內部結構方框圖圖3.2.3-1 SJA1000的內部結構方框圖3.3 隔離CAN收發(fā)器模塊(CTM Module)3CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器和CAN總線保護于一體的隔離CAN收發(fā)器模塊,該模塊RXD、TXD引腳兼容+5V、及+3.3V的C

21、AN控制器,而不需要外接其他元器件,直接將+5V或+3.3V的CAN控制器接收、發(fā)送引腳與CTM模塊的接收、發(fā)送引腳相連接!如圖所示為PHILIPS與CTM1050的SJA1000連接原理圖,其電路采用了隔離CAN收發(fā)器模塊,有了隔離CAN收發(fā)器,就可以很好地實現(xiàn)CAN-bus總線上各節(jié)點電源、電氣之間完全獨立和隔離,提高了節(jié)點的安全性和穩(wěn)定性。4 系統(tǒng)軟件設計4.1 軟件流程圖圖4.1-1 軟件流程圖1總流程:當開始工作時,首先CPU初始化,然后CAN控制器SJA1000初始化,得到最初的溫度值,通過數(shù)碼管顯示。當還沒有到設定的時間段而且沒有中斷時,就通過數(shù)碼管繼續(xù)顯示原來的溫度。當?shù)搅嗽O定

22、的時間段則發(fā)送一個最新的實際溫度值,在沒有中斷的條件下通過數(shù)碼管顯示最新的實際溫度。當有中斷時就接受命令再通過數(shù)碼管顯示。圖4.1-1 軟件流程圖2SJA1000初始化:當開始時,首先CAN控制器SJA1000進入復位模式,選擇PeliCAN模式,開放中斷,再設置驗收代碼寄存器和驗收屏蔽寄存器并設置總線定時器400Kbps波特率和輸出控制寄存器為正常輸出,然后返回工作狀態(tài),SJA1000就初始化完了。圖4.1-1 軟件流程圖3SJA1000發(fā)送:當開始時,首先讀入SJA1000狀態(tài),然后判斷是否正在接收?不是則再進入讀入SJA1000狀態(tài);是則等待,待接收完成后繼續(xù)判斷是否先前發(fā)送是否成功?不

23、是則再進入讀入SJA1000狀態(tài),是則等待,然后判斷發(fā)送緩沖器是否鎖定?不是則要設置TX標準幀報文,再設置ID數(shù)據(jù)報,再裝入實際溫度值,然后啟動發(fā)送,最后返回。圖4.1-1 軟件流程圖4SJA1000接收:當開始時,首先讀入SJA1000狀態(tài),然后判斷總線關閉、錯誤狀態(tài)、溢出是否有數(shù)據(jù)?不是則返回;是則繼續(xù)判斷總線是否關閉?是則清除中斷位并恢復總線,不是或已經(jīng)恢復了總線則繼續(xù)判斷數(shù)據(jù)是否溢出?是則清除數(shù)據(jù)溢出和釋放接收緩沖區(qū),不是或已經(jīng)清除數(shù)據(jù)溢出和釋放接收緩沖區(qū)則繼續(xù)判斷是否有數(shù)據(jù)?是則接收數(shù)據(jù)并做處理開斷繼電器,再釋放接收緩沖區(qū),然后釋放仲裁丟失捕捉寄存器,最后釋放錯誤丟失捕捉寄存器,再返

24、回;不是則直接返回。4.2 Kile編譯平臺界面圖4.2-1 Kile編譯平臺界面4.3 系統(tǒng)程序清單4 、10CAN總線節(jié)點的軟件設計包括主要三大部分:CAN節(jié)點的初始化和報文發(fā)送以及報文接收。熟悉了這三部分程序的設計就能編寫出利用CAN總線進行通信的一般應用程序,當然要將CAN總線應用于通信任務比較復雜的系統(tǒng)中還需詳細了解有關CAN總線錯誤處理總線脫離處理接收濾波處理波特率參數(shù)設置和自動檢測以及CAN總線通信距離和節(jié)點數(shù)的計算等方面的內容。程序用語言編寫,簡潔明了且有詳細的注釋,并寫成頭文件的形式,可移植更強。 主程序包括定時發(fā)送、中斷接收、溫度顯示。5 小結經(jīng)過半年多的努力終于完成畢業(yè)設

25、計,通過這次畢業(yè)設計我學習到了許多以前學習不到或是沒去學習的知識,了解到了一些當前的國際科技情形,同時提升了自己個人單獨面臨和處理問題的能力。但由于經(jīng)驗匱乏,難免有許多考慮不周全的地方,如果沒有導師的指導和同學的關心與幫助,想要完成這個設計是難以想象的。在這里首先要感謝我的導師王維博教授。他平日里工作繁多,但在我做畢業(yè)設計的每個階段,從需求分析到查閱資料,設計草案的確定和修改,中期檢查,后期詳細設計,設計電路等整個過程中都給予了我悉心的指導。我的設計比較復雜煩瑣,但是王教授仍然細心地糾正設計過程中的錯誤。通過這次畢業(yè)設計我認識到不論課本理論知識學得多好,沒有通過自己動手將知識應用到生活中,那么

26、一切都如紙上談兵,都是空的。學習知識和將其應用到生活中是相輔相成的,只有學以致用才能使自己不斷提高,才能成為有用的人。在這里我要特別感謝大學四年來教導我們的所有的老師,他們?yōu)槲覀兇蛳铝俗詣踊瘜I(yè)知識的基礎;包括實驗中心的各位老師,讓我們鍛煉了動手能力,讓理論在實踐中得到了升華,讓我們的能力有了很大的提高;同時還要感謝所有的同學,正是因為有了他們的支持和幫助,此次畢業(yè)設計才會順利完成。同時,真誠的感謝學院四年來對我的支持、關心和鼓勵,使我能夠順利的完成學業(yè)!附錄:主程序: 包括定時發(fā)送、中斷接收、溫度顯示。/*頭文件*/#include "reg51.h"#include&q

27、uot;intrins.h"#include"absacc.h"#include "sja1000reg.h"#include "sja1000.h"#include "ds18b20.h"/*數(shù)據(jù)類型*/#define uchar unsigned char#define uint unsigned int/*管腳定義*/#define SEG_WORDPORT P1/段碼#define SEG_DIGPORT P2/位碼uchar code Seg_Code10=0xc0,0xf9,0xa4,0xb0

28、,0x99,0x92,0x82,0xf8,0x80,0x90;/*函數(shù)聲明*/void Cpu_Init(void);void Display_Seg(uchar wd_h,uchar wd_l);/*主程序*/main()uchar *Tempcode;Delay(0,0);/0.524sDelay(0,0);/0.524s/復位后延時等待系統(tǒng)外圍復位完成Cpu_Init();/CPU初始化Sja1000_Init();/SJA1000初始化DQ=0; /DS18B20開始工作while(1)Tempcode=DS18B20_RdTemp(); /讀溫度值Display_Seg(*(Temp

29、code+1),*Tempcode);/顯示/*CPU初始化*/void Cpu_Init()EA=0;IT0=1; EX0=1;/開外部中斷0TMOD=0X01; ET0=1; /開定時中斷0TH0=0X3C; TL0=0XB0;/方式1,50ms定時TR0=1;EA=1;/開總中斷LED=0; /led亮SW_JDQ=1;/繼電器開,加熱/*數(shù)碼管顯示*/void Display_Seg(uchar wd_h,uchar wd_l)uchar buf4;/顯示單元uchar i;uchar dig=0x01;wd=(wd_h&0x07)*16+(wd_l&0xf0)>

30、>4);/溫度值if(wd!=85)/屏蔽85度,因開機為85?buf3=Seg_Codekw&0xf0;/控制溫度的十位buf2=Seg_Codekw&0x0f;/控制溫度的個位buf1=Seg_Codewd/10%10;/測量溫度的十位buf0=Seg_Codewd%10;/測量溫度的個位for(i=0;i<4;i+)/4個數(shù)碼管SEG_WORDPORT=0xff;/清屏SEG_DIGPORT=dig<<i;/位碼SEG_WORDPORT=bufi;/段碼Delay(50,125);/延時 /*外部0中斷*/void int0()interrupt

31、0/接收中斷Sja1000_RX();/SJA1000接收/*定時0中斷*/void time0() interrupt 1 /定時發(fā)送uchar n;TR0=0;TH0=0X3C; TL0=0XB0;TR0=1;n+;if(n=20)/1sn=0;Sja1000_TX();/SJA1000發(fā)送sja1000reg.h頭文件用偽指令“define”來定義外部地址。/*PeliCAN模式SJA1000的內部寄存器地址的定義*/#define SJA_ADR 0X0000/片選直接接高#define MODE XBYTESJA_ADR+00/模式寄存器#define CMR XBYTESJA_AD

32、R+01/命令寄存器#define SR XBYTESJA_ADR+02/狀態(tài)寄存器#define IR XBYTESJA_ADR+03/中斷寄存器#define IER XBYTESJA_ADR+04/中斷使能寄存器#define BTR0 XBYTESJA_ADR+06/時序寄存器0#define BTR1 XBYTESJA_ADR+07/時序寄存器1#define OCR XBYTESJA_ADR+08/輸出控制寄存器#define TEST XBYTESJA_ADR+09/測試寄存器#define ALC XBYTESJA_ADR+11/仲裁丟失捕捉寄存器#define ECC XBY

33、TESJA_ADR+12/錯誤代碼捕捉寄存器#define ELWR XBYTESJA_ADR+13/錯誤報警限額寄存器#define RXERR XBYTESJA_ADR+14/RX錯誤計數(shù)器#define TXERR XBYTESJA_ADR+15/TX錯誤計數(shù)器/#define TXB XBYTESJA_ADR+16/報文發(fā)送緩沖區(qū)(操作模式下)/#define RXB XBYTESJA_ADR+16/報文接收緩沖區(qū)(操作模式下)#define TXSFFXBYTESJA_ADR+16/TX標準幀報文緩沖區(qū)(操作模式下)#define TXID1XBYTESJA_ADR+17/TX ID

34、1(操作模式下)#define TXID2XBYTESJA_ADR+18/TX ID2(操作模式下)#define TXDATA1XBYTESJA_ADR+19/TX DATA1(操作模式下)#define RXDATA1XBYTESJA_ADR+19/RX DATA1(操作模式下)#define ACR0 XBYTESJA_ADR+16/驗收代碼寄存器(復位模式下)#define ACR1 XBYTESJA_ADR+17/驗收代碼寄存器(復位模式下)#define AMR0 XBYTESJA_ADR+20/驗收屏蔽寄存器#define AMR1 XBYTESJA_ADR+21/驗收屏蔽寄存器

35、/#define RBSA XBYTESJA_ADR+30/RX緩沖區(qū)起始地址/?作用#define CDR XBYTESJA_ADR+31/時鐘分頻器#define ID 0x01/本機ID號#define TOID 0x00/上位機ID號sja1000.h頭文件包括SJA1000初始化、接收和發(fā)送子程序。只有在復位模式下SJA1000才可以進行初始化,主要包括工作方式的設置、接收屏蔽寄存器AMR、接收濾波方式的設置和接收代碼寄存器ACR的設置、中斷允許寄存器IER的設置和波特率參數(shù)設置等。在完成了SJA1000的初始化設置以后,SJA1000就可以回到工作狀態(tài)進行正常的通信任務。負責節(jié)點報

36、文的發(fā)送是發(fā)送子程序。發(fā)送時用戶只需要將待發(fā)送的數(shù)據(jù)按特定格式組合成一幀報文送入SJA1000發(fā)送緩存區(qū)中,然后啟動SJA1000發(fā)送就可以了。當然必須先作一些判斷才往SJA1000發(fā)送緩存區(qū)送報文。接收子程序負責節(jié)點報文的接收以及其它情況處理。發(fā)送子程序比接收子程序要簡單一些,因為在處理接收報文的過程中要同時對諸如總線脫離錯誤報警接收溢出等情況進行處理。本程序用的是斷接收方式,因這樣通信的實時性強。/*數(shù)據(jù)類型*/#define uchar unsigned char#define uint unsigned int/*定義*/sbit LED=P30;/(常斷)繼電器狀態(tài)標志,低電平點亮L

37、EDsbit SW_JDQ=P31;/(常斷)繼電器uchar wd;/測量的溫度uchar kw;/控溫點/*sja1000初始化*/Sja1000_Init()uchar i;MODE=0X09;/設置方式寄存器,進入復位模式CDR=0X88;/設置時鐘分頻寄存器,選擇PeliCAN模式關閉時鐘輸出(CLKOUT)IER=0X0D;/設置中斷允許寄存器,開放(放送,溢出,錯誤警告)中斷ACR0=0X00;/設置驗收代碼寄存器,ACR1=ID<<5;/本機號為01AMR0=0X00;/設置驗收屏蔽寄存器AMR1=0X00;/不屏蔽BTR0=0X00;/設置總線定時器0BTR1=0

38、X1B;/設置總線定時器1,12MHz,400Kbps/?OCR=0XAA;/設置輸出控制寄存器,正常輸出/?/RBSA=0X00;/設置接收緩存器FIFO起始地址為0/作用 TXERR=0X00;/寫指令清除發(fā)送錯誤計數(shù)寄存器i=ECC;/讀指令清除錯誤代碼捕捉寄存器MODE=0X08;/設置單濾波方式,并返回工作狀態(tài)/*sja1000發(fā)送程序*/Sja1000_TX()uchar ss;doss=SR;/讀入SJA1000狀態(tài)while(ss&0x10);/判是否正在接收,是則等待doss=SR;/讀入SJA1000狀態(tài)while(!(ss&0x08);/判先前發(fā)送是否成功

39、,否則等待doss=SR;/讀入SJA1000狀態(tài)while(!(ss&0x04);/判發(fā)送緩沖器是否鎖定,是則等待TXSFF=0x01;/設置TX標準幀報文, FF=0,RTR=0,DLC=0X01(數(shù)據(jù)長度)TXID1=0x00;/TXID2=TOID<<5;/目標機號為00TXDATA1=wd;/發(fā)送實際溫度值CMR=0X01;/設置命令寄存器為啟動發(fā)送/*sja1000中斷接收程序*/Sja1000_RX()uchar ss;uchar buf_RX;ss=SR;/讀入SJA1000狀態(tài)ss&=0xc3;/取總線關閉,錯誤狀態(tài),溢出,有數(shù)據(jù)if(ss)/無上

40、述狀態(tài),則直接返回if(ss&0x80)/總線關閉ss=IR;/讀中斷寄存器以清除中斷位MODE=0X08;/恢復總線/?else ss=IR;/讀中斷寄存器以清除中斷位if(ss&0x08)/數(shù)據(jù)溢出CMR=0X0C;/清除數(shù)據(jù)溢出和釋放接收緩沖區(qū)elseif(ss&0x01)/接收緩沖區(qū)有數(shù)據(jù)buf_RX=RXDATA1;/接收數(shù)據(jù),為繼電器(開/斷)控溫命令if(buf_RX=0xbb)LED=1;/led滅SW_JDQ=0;/繼電器斷開else if(buf_RX=0xdd)LED=1;/led亮SW_JDQ=0;/繼電器閉合else if( (buf_RX&l

41、t;100) && (buf_RX>0) )/控溫點為199度kw=buf_RX;CMR=0X04;/設置命令寄存器為釋放接收緩沖區(qū)ss=ALC;/讀操作以釋放仲裁丟失捕捉寄存器ss=ECC;/讀操作以釋放錯誤丟失捕捉寄存器 ds18b20.h頭文件DS18B20為數(shù)字溫度傳感器,它是眾多傳感器中比較好用的之一,但它須很嚴格的時序,故運行此驅動程序時須關中斷,這里沒必要。/*管腳定義*/sbit DQ = P37; /data for DS18B20void Delay(uchar t1,uchar t2) for(;t1>0;t1-) for(;t2>0;t2-);DS18B20_Reset(void) DQ = 0; / DQ 低電平 Delay(1,65); / 480us>>960us DQ = 1; / DQ 高電平 Delay(1,2); / 等待15us>>60us while(DQ); while(DQ); Delay(1,5); /從1-wire 總線上讀取一個字節(jié)uchar DS18B20_Read_byte(void) uchar

溫馨提示

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

評論

0/150

提交評論