PIC18F單片機(jī)CAN通信程序及AD采樣_第1頁
PIC18F單片機(jī)CAN通信程序及AD采樣_第2頁
PIC18F單片機(jī)CAN通信程序及AD采樣_第3頁
PIC18F單片機(jī)CAN通信程序及AD采樣_第4頁
PIC18F單片機(jī)CAN通信程序及AD采樣_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、、程序流程圖功能描述:AD數(shù)據(jù)采集,AD采集20組數(shù)據(jù),每組數(shù)據(jù) 50個采樣值,然后將采樣值經(jīng)過計算平均值并轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)后發(fā)送到CAN,在PC機(jī)上用CANTools軟件調(diào)試主函數(shù)流程圖中斷函數(shù)流程圖三、程序源碼/*/*#include "pic18f4680.h"/* PIC18 系列的頭文件 */char CAN_TX_Adress_H,CAN_TX_Adress_L;/* CAN 發(fā)送郵箱標(biāo)識符高低字節(jié) */ char CAN_RX_Adress_H,CAN_RX_Adress_L/* CAN 接收郵箱標(biāo)識符高低字節(jié) */ #define CHANNEL7 0X1D

2、 /選擇模擬通道 7采集正輸出電壓#define CHANNEL6 0X19/選擇模擬通道 6采集正輸出電流#define CHANNELS 0X0D選擇模擬通道 3采集正輸出電壓#define CHANNEL2 0X09/選擇模擬通道 2采集正輸出電流#define CHANNEL1 0X05/選擇模擬通道1采集負(fù)輸出電流#define CHANNEL0 0X01/選擇模擬通道 0采集負(fù)輸出電壓#define LN 50 /采集50次進(jìn)行平均#define LAN 20 /采集20個平均值bank2 uint ADLN;/ 存放 50 次采樣值uint RESLAN; /存放20個平均值ui

3、nt RESVP=0x0000; 存放正輸出電壓采樣值,供CAN上傳數(shù)據(jù)uint RESIP=0X0000;/存放正輸出電流電壓采樣值,供 CAN上傳數(shù)據(jù)uint RESVN=0X0000;/存放負(fù)輸出電壓采樣值,供CAN上傳數(shù)據(jù)uint RESIN=0X0000;/存放負(fù)輸出電流正電壓采樣值,供CAN上傳數(shù)據(jù)uchar WAIT_FLAG;/等待中斷標(biāo)志位uint count;/100 次計數(shù)/* *函數(shù)名:initial()*功能描述:系統(tǒng)初始化子程序,放在程序首部* */ void initial() (count=0;INTCON=0x00;PIE1=0;PIE2=0;PIE3=0;/

4、* bit7-bit0:關(guān)總中斷 */* PIE1的中斷不使能*/* PIE2的中斷不使能*/* PIE3的中斷不使能*/* * * 函數(shù)名:initcan()*功能描述:CAN初始化子程序,采用標(biāo)準(zhǔn)標(biāo)識符,正常工作模式* */ void initcan()(/設(shè)置發(fā)送郵箱 0標(biāo)識符:10011001010=0x04CACAN_TX_Adress_L=0x55;/CAN 低地址標(biāo)識符CAN_TX_Adress_L=CAN_TX_Adress_L&0xe0;CAN_TX_Adress_H=0x99;/CAN高地址標(biāo)識符,應(yīng)與發(fā)送方標(biāo)識符相同/設(shè)置接收郵箱 0標(biāo)識符:00110011111

5、=0x019FCAN_RX_Adress_H=0x33;/CAN 高地址標(biāo)識符CAN_RX_Adress_L=0xe0;/CAN低地址標(biāo)識符,應(yīng)與發(fā)送方標(biāo)識符相同CAN_RX_Adress_L=CAN_RX_Adress_L&0xe0;/*設(shè)置對CAN進(jìn)行配置*TRISB=TRISB & 0XFB;CANCON=0X80;/ 設(shè)置 CANRX/RB3輸入,CANTX/RB2輸出/CANCON, bit7-5:1XX 請求配置while(CANSTAT & 0X80)=0) / CAN 狀態(tài)寄存器。bit7-5:100 配置方式(;/等待進(jìn)入CAN配置模式 OPMODE=

6、100/ *波特率設(shè)置 *BRGCON1=0X07;/ Sync_Seg(bit7-6)=1TQ,BRP(bit5-0)=1 , 則TQ=(2*(BRP+1)/Fosc=16/32M=0.5usBRGCON2=0X90;/bit7=1 自 由編程,bit6=0 總線在采樣點(diǎn)采樣 1次;phase_Seg1(bit5-3)=3TQ;BRGCON3=0X42;/ Prog_Seg(bit2-0)=1TQ,設(shè)置 Phase_Seg2(bit2-0)=3TQ/標(biāo)稱 位時間=TQ*(Sync_Seg+ Prop_Seg+ Phase_seg1+ Phase_seg2)=(1+1+3+3)TQ8TQ,/

7、位率=1/(8*0.5us)=250Kbps/ *設(shè)置發(fā)送郵箱0和初始發(fā)送的數(shù)據(jù)*/標(biāo)準(zhǔn)標(biāo)識符的10-3位/ bit1-0:發(fā)送優(yōu)先級,設(shè)置TXB0為最高優(yōu)先級3/設(shè)置數(shù)據(jù)長度為8個字節(jié)/*寫發(fā)送緩沖器數(shù)據(jù)區(qū)數(shù)據(jù)初值*/TXB0SIDL=CAN_TX_Adress_L&0xe0; /bit3=0 標(biāo)準(zhǔn)標(biāo)識符,bit7-5:標(biāo)準(zhǔn)標(biāo)識符 2-0 位TXB0SIDH=CAN_TX_Adress_H;TXB0CON=0X03;TXB0DLC=0X08;TXB0D0=0X00;TXB0D1=0X00;TXB0D2=0X00;TXB0D3=0X00;TXB0D4=0X00;TXB0D5=0X00;

8、TXB0D6=0X00;TXB0D7=0X00;/*接收緩沖區(qū)0的ID、數(shù)據(jù)長度寫無效,故不需設(shè)置*/RXB0CON=0X20;/ bit6-5=01只接收有效的標(biāo)準(zhǔn)標(biāo)識符信息/ *初始化接收濾波器 0和接收屏蔽*RXF0SIDH=CAN_RX_Adress_H;RXF0SIDL=CAN_RX_Adress_L&0xe0; /高3位為標(biāo)識符低 3位,低5位是配置 RXM0SIDH=0XFF;RXM0SIDL=0XE0;/ 11個1表示接收11位標(biāo)識符進(jìn)行濾波, 標(biāo)識符不同不接收;若全為0,若正確信息,全部接收/=0X40,進(jìn)入自測試模式;=0x00,正常操作模式/檢測CAN配置完成/

9、* 設(shè)置 CAN 工作模式 *CANCON=0X00;while(CANSTAT&0XE0)!=0);/*初始化CAN的中斷,PIR3為CAN的外圍中斷標(biāo)志寄存器*/PIR3=0X00;/清所有CAN中斷標(biāo)志PIE3=PIE3|0X01;/使能接收緩沖器 0的接收中斷IPR3=IPR3|0X01;/接收緩沖器0的接收中斷為最高優(yōu)先級 void CAN_SEND() (TXB0REQ=0; /*關(guān)發(fā)送,該位發(fā)送成功則自動清零*/TXB0D0=RESVP/100;TXB0D1=(RESVP%100)/10;TXB0D1=(TXB0D1<<4)|(RESVP%100)%10);T

10、XB0D2=RESIP/100;TXB0D3=(RESIP%100)/10;TXB0D3=(TXB0D3<<4)|(RESIP%100)%10);TXB0D4=RESVN/100;TXB0D5=(RESVN%100)/10;TXB0D5=(TXB0D5<<4)|(RESVN%100)%10);TXB0D6=RESIN/100;TXB0D7=(RESIN%100)/10;TXB0D7=(TXB0D7<<4)|(RESIN%100)%10);TXB0REQ=1;/* bit3(TXREQ)=1請求發(fā)送,開始發(fā)送數(shù)據(jù)*/while(TXB0REQ=1);等待發(fā)送完

11、成 /* * * 函數(shù)名:interrupt HI_ISR()*功能描述:高優(yōu)先級中斷子程序:RXB0接收郵箱0接收中斷子程序* */ void interrupt HI_ISR() (if(RXB0IF=1)(if(RXB0D0=0xF0)(WAIT_FLAG=0x00;RXB0FUL=0;RXB0IF=0;/判斷命令,是否要上傳數(shù)據(jù)/置接收到CAN數(shù)據(jù)/ bit7 = 0打開接收緩沖器接收新信息/清接收中斷標(biāo)志void get_ad(uint *x)GODONE=1;/開始AD轉(zhuǎn)換,轉(zhuǎn)換完成后 GODONE清零while(GODONE);/等待轉(zhuǎn)換完成*x=(ADRESH<<8

12、)+ADRESL;/*主程序 *void main() (uchar ia,ib;osc_config(0x70,0x40);initial();io_init();adc_init();initcan();IPEN=1;INTCON=INTCON|0xC0;TXB0REQ=0;RXB0FUL=0;WAIT_FLAG=0X01;/8MHz,四倍頻 Fosc=8MHz*4/系統(tǒng)初始化子程序/ CAN設(shè)置初始化/使能中斷高低優(yōu)先級/開總中斷、開外圍接口中斷/*關(guān)發(fā)送,TXB0REQ=O®沖區(qū)沒有要發(fā)送的數(shù)據(jù)/*清零RXB0FUL#示緩沖區(qū)未接收到數(shù)據(jù) */ 關(guān)發(fā)送,TXB0REQ=0;*

13、/while(1)(while (WAIT_FLAG=0X01); / 等待中斷測正電壓 *for (ib=0;ib<LAN;ib+)( for (ia=0;ia<LN;ia+)/LN=64(50)(ADCON0=CHANNEL3;get_ad(&ADia); RESib=0x0000; for (ia=0;ia<LN;ia+)( RESib+=ADia; RESib=RESib/50;/* */LAN=16(20)RESVP=0X0000;for (ib=0;ib<LAN;ib+) (保存平均的結(jié)果RESVP=RESVP+RESib; RESVP=RESVP/

14、20;* 測正壓 ACS輸出 *for (ib=0;ib<LAN;ib+) (for (ia=0;ia<LN;ia+)(ADCON0=CHANNEL2;get_ad(&ADia); RESib=0x0000; for (ia=0;ia<LN;ia+)( RESib+=ADia; RESib=RESib/50;RESIP=0X0000;/保存平均的結(jié)果for (ib=0;ib<LAN;ib+) ( RESIP+=RESib;RESIP=RESIP/20;/*測負(fù)電壓 *for (ib=0;ib<LAN;ib+)(for (ia=0;ia<LN;ia+)(ADCON0=CHANNEL0;get_ad(&ADia);RESib=0x0000;for (ia=0;ia<LN;ia+)(RESib+=ADia;RESib=RESib/50; 保存平均的結(jié)果RESVN=0X0000;for (ib=0;ib<LAN;ib+)RESVN+=RESib;RESVN=RESVN/20;/*測負(fù)電源ACS輸出*for (ib=0;ib<LAN;ib+) (for (ia=0;ia<LN;ia+) ( ADCON0=CHANNEL1; get_ad(&ADia); RESi

溫馨提示

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

最新文檔

評論

0/150

提交評論