ImageVerifierCode 换一换
格式:DOCX , 页数:152 ,大小:51.68KB ,
资源ID:12903107      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12903107.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CANBUS 甲烷高低浓度传感器.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CANBUS 甲烷高低浓度传感器.docx

1、CANBUS 甲烷高低浓度传感器 /* / CAN_BUS 甲烷高低浓度传感器 / PUMA OF ONTARIO /*/* 说明 */MCU:PIC18F4580 (自带CAN控制器)/编译器:HI_TECH PICC18 V8.35/CH4_4580 2006.4.3/高级中断: 红外键入/低级中断: 2秒TIMER_0;CAN接收;/每2秒经比较后向主机发送CH4值,若6秒未发则必须发一次/TXB0-向主机送数据,源节点为SID=LOCALAD, 目标节点为DID=0X101,数据在TXB0D0:1=fs_data中,2个字节/TXB1-横向送数据,源节点为SID=LOCALAD,目标节

2、点为DID,据在TXB1D0:1中,2个字节/TXB2-向主机送参数表,源节点为SID=LOCALAD,目标节点为DID=0X101,数据在TXB2D0:7中,8个字节,字节长度=9/CH4经与报警、断电门限比较后向控制器发控制信号,放在TXB1中 /每隔4秒钟向控制器(横向)发一次联络信号(数据长度=0),表示CH4传感器通讯正常/TRKVOLT 可测得/控制目标(也是数据发送目标)可有4个:DID1、DID2、DID3、DID4/*#include stdlib.h#include math.h#include stdio.h#include pic18.h#include delay.h

3、#define uchar unsigned char #define uint unsigned int#define ushort unsigned short #define ulong unsigned long #define CANCON CANCON_0 /pic18f4580.h中定义CANCON_0,CANSTAT_0 #define CANSTAT CANSTAT_0 /常数(CAN-OPERATION MODE:)#define CONFIG 0X80 /CAN BUS 配置模式#define LISTEN 0X70 /CAN BUS 监听模式 #define SELF_

4、CHK 0X40 /CAN BUS 自检模式#define SHUT_OFF 0X20 /CAN BUS 关闭模式#define NORMAL 0X0 /CAN BUS 正常模式#define bitset(var,bitno) (var)|=1(bitno) #define bitclr(var,bitno) (var)&=(1ch4h 切换点/#define WARM_UP_VAL 3.5 /切换预热点 #define HtoL_SWT_VAL 2.8 /ch4h-ch4l 切换点/* 数据表定义(ROM)*/ const uchar TAB_MMSR=0XC3,0XDC,0XC2,0XE

5、B,0XCA,0XE4,0XC8,0XEB; /密码输入 /* 全局变量定义 (RAM) * struct chillon uchar cunt; uint local_sid_1st; /本机SID_1: (0xxxH, 12位HEX) uint ch4_low_alm; /ch4报警下限值 (16位BCD) uint ch4_high_alm; /ch4报警上限值 (16位BCD) uchar work_mode; /工作模式 (0=CH4, 1=CH4/T) uchar local_type; /本机TYPE (01H=CH4, 13H=CH4/T) uchar ch4l_zero; /

6、低浓ch4 零位值 (8 位HEX) uint ch4l_k; /低浓ch4 k系数 (16位HEX) uint local_sid_2nd; /本机SID_2: (保留:for基带干线!) uchar ch4h_zero; /高浓ch4 零位值 (8 位HEX) uint ch4h_k; /高浓ch4 k系数 (16位HEX) uint ctrl_id1; /控制目标地址1 (12位HEX) uint ctrl_id2; /控制目标地址2 (12位HEX) uint ctrl_id3; /控制目标地址3 (12位HEX) uint ctrl_id4; /控制目标地址4 (12位HEX) ui

7、nt ch4_res_alm; /ch4复电限 (16位BCD) float coeff; /修正因数 (only for ch4l !) ; union brisbane /包含结构体的共用体! uchar ram_blk64; struct chillon ram_var; ; union brisbane ram_para; /flash参数在ram中的映射 uint master_sid=0X0101; /中心站SID uint rev_sid; /can_bus:RXB0接收到的SID uint rev_did; /can_bus:RXB0接收到的DID uchar rev_dat8

8、; /can_bus:RXB0接收到的数据域 uchar simul_test_set=0X0; /模拟断电/报警命令设置变量 uint ch4l_calib_gas; /低浓ch4标定气样值(16位BCD) uint ch4h_calib_gas; /高浓ch4标定气样值(16位BCD) uchar ch4_alarm_flag; /ch4报警标志: (D0=1:报警, D1=1:断电) uchar kout_flag; /开出控制重复确认标志:(D0=1:报警, D1=1:断电) uchar kout_cunt; /开出控制重复确认计数变量 uchar ch4_state_flag; /c

9、h4状态标志 (for 横向发送命令) /uchar protect_proc=0X0; /探头保护进程标志变量 /uchar protect_tmr=0X0; /探头保护定时计数变量 /uchar warm_up_cunt; /ch4切换预热计数 uchar swt_cunt; /ch4切换计时 uchar ch4_switch_state; /ch4切换状态变量:00h=低浓测量,01h=低-高过渡 /02h=高-低过渡, 03h=高浓测量 uint upload_ch4l_data; /ch4l: 04%-04095 uint upload_ch4h_data; /ch4h: 040%-

10、04095 uint upload_ch4; /FOR CAN_BUS上传!(统一量程ch4: 040%-04095) /uint ch4_data; /FOR CAN_BUS上传!(ch4: 04%-04095) uint real_ch4; /ch4实测值! uint original_ch4; /未经修正因数校正的ch4l值! (040%-04095) uint vtrk_data; /Vtrk*(R/4R)分压-ADC (05v-01023) persistent uint mid_fil_cache5; /中值滤波缓存 uint rank_cache5; /排序缓存 uint pea

11、k_fil_cache; /峰值滤波缓存 uchar peak_fil_cunt; /峰值滤波计数变量 uint epm_cfrm_cache52; /EEPROM数据校验缓存 uchar ir_data; /红外接收数据 uchar key_cache6; uchar *key_ptr=key_cache; uchar key_proc; uint fun_code; /功能代码=0xxx (2字节) uchar key_comb; /组合键标志 uchar key_tmr_cunt; /键盘超时检测定时计数变量(与定时中断配合!) uchar led_byte4; /LED显示缓存 uch

12、ar dsp_work_cunt; /LED翻屏显示定时计数变量 uchar dsp_work_item; uchar para_send_cunt=0X1E; /参数帧上传定时计数变量 (定时=30s) uchar upload_cunt; /CAN_BUS 数据上传定时计数变量 uchar fout_cunt; /fout 刷新计数变量 /* 位变量定义 * bit ir_ok=0; /1:红外接收到有效值 (红外中断+查询组合) bit key_working=0; /1:键盘操作进程中 bit key_tmr_on=0; /1:键盘超时检测定时启动 bit fix_on=0; /1:检

13、修状态启动 bit ch4l_zero_on=0; /1:低浓ch4自动调零开始 bit ch4h_zero_on=0; /1:高浓ch4自动调零开始 bit ch4l_calib_on=0; /1:低浓ch4自动标定开始 bit ch4h_calib_on=0; /1:高浓ch4自动标定开始 bit send_ok_0=0; /1: CAN_BUS/TXB0组发送成功 bit para_send_ok=0; /1: CAN_BUS/参数帧发送成功 bit master_ack_ok=0; /1: CAN_BUS/正确收到中心站ACK bit can_cmd_rev=0; /1:CAN_BUS

14、接收到新命令帧 (CAN/RXB0接收中断+查询组合) bit alarm_flash=0; /报警时LED闪烁 /bit peak_fil_start=0; /1: 峰值滤波开始 /bit ir_beeper; /Ir-Beeper控制标志位 bit send_flip=0; /横向发送切换标志位 /* 函数声明 * void port_initial(void); /I/O口初始化函数 void ad_initial(void); /ADC 模块初始化 void wdt_initial(void); /WDT 模块初始化 void tmr0_initial(void); /TMR0模块初始

15、化 void spi_initial(void); /SPI 模块初始化 void pwm_initial(void); /PWM 模块初始化 void can_initial(void); /CAN 模块初始化 void pwm_fout(void); /频率输出 void ch4_alarm_chk (void); /报警断电门限检测 void kout_clr (void); /开关量输出:清0 void kout_control (void); /开关量输出控制 /void protect(void); /探头保护 void ch4_switch_ctrl (void); /高低浓切换

16、控制 void get_flash(void); /读取flash_para-ram_para void flash_update (void); /保存ram_para-flash_para void flash_wr_cycle (void); /flash写时序周期 void flash_erase (ulong flash_add); /flash擦除操作 void flash_wr (ulong flash_add, uchar *ram_data); /flash写操作 uchar flash_rd (ulong flash_add);/flash读操作 void led_conf

17、ig(void); /LED驱动芯片14489配置寄存器设定 void led_dsp(void); /LED驱动芯片14489显示寄存器设定 void dsp_work (void); /工作画面显示 (温度/开入-切换显示) void dsp_ch4 (void); /ch4测量值显示 void dsp_ok(void); /显示:YYY void dsp_nod(void); /显示:ppp void dsp_fail(void); /显示:FFF void ir_rev(void); /红外接收 void key_manage(void); /键盘逻辑管理 void key_sync_

18、execute(void); /键盘命令处理及显示 (同步于键盘操作中断) uint adc_sample (uchar channel); /ADC采集 uint mid_filter(uint m); /中值滤波 uint peak_filter (uint n); /峰值滤波 void ch4l_zero_auto (void); /低浓ch4自动调零 (900) void ch4l_calib_auto (void); /低浓ch4自动标定 (909) void ch4h_zero_auto (void); /高浓ch4自动调零 (910) void ch4h_calib_auto (

19、void); /高浓ch4自动标定 (919) void can_send (uchar n); /can_bus 数据发送 void send_to_master_para (void); /向中心站上传参数帧 void send_to_master_dat (void); /向中心站上传ch4数据 void send_to_controller_dat (void); /向断电控制器发送数据 void send_id_set (uint send_sid,uint send_did,uchar send_type,uchar n); /发送ID寄存器SFR设定 void can_send_

20、LOW_ISR (uint send_sid,uint send_did,uchar send_type,uchar n); /自动标定同时can_bus 数据发送 (TMR0中断调用!) void can_opt_mode(uchar m); /CAN:改变CAN模块operation mode void can_cmd_execute (void); /CAN:命令帧处理 void can_cmd_ack (void); /CAN:命令帧应答 uchar compatible_state_code (uchar m); /横向命令发送的第3字节兼容代码转换 void delay_ms(ui

21、nt t); /延时函数(单位:ms) void delay_us(uchar t); /延时函数(单位:us) void delay_ir_us(uchar t); /延时函数(单位:us,红外接收中断专用) void delay_ir(uchar t); /延时函数(单位:us,红外接收中断专用) void delay_LOW_ISR_ms(uint t); /延时函数(单位:ms,TMR0中断专用)/*/ 主函数/* void main() uint m,n,t; ulong p; ulong tmp1,tmp2; port_initial(); /I/O口初始化 kout_clr ()

22、; /4路开关量输出:清0 ad_initial(); /ADC 模块初始化 wdt_initial(); /WDT 模块初始化 tmr0_initial(); /TMR0模块初始化 spi_initial(); /SPI 模块初始化 pwm_initial(); /PWM 模块初始化 get_flash(); /读取flash预存参数-RAM变量 can_initial(); /CAN 模块初始化 /是上电复位! if (RCON&0X1F)=0X1C)&(STKFUL=0)&(STKUNF=0) asm(clrwdt); /WDT 清0 delay_ms(500); /延时500ms as

23、m(clrwdt); /WDT 清0 delay_ms(500); /延时500ms asm(clrwdt); /WDT 清0 led_byte0=0XFF; /显示: O led_config(); led_byte1=0X80; led_byte2=0X00; led_byte3=0X70; led_dsp(); asm(clrwdt); /WDT 清0 delay_ms(500); /延时500ms asm(clrwdt); /WDT 清0 delay_ms(500); /延时500ms asm(clrwdt); /WDT 清0 led_byte0=0XD1; /显示:ch4 1,2,3

24、. led_config(); led_byte1=0X0C; led_byte2=0X24; led_byte3=0X00; t=(uchar)(ram_para.ram_var.local_sid_1st)+60; for (n=0; n开启3v开关电源 asm(clrwdt); /WDT 清0 /再延时60*500ms-等待ch4l探头上电稳定 if (n%2)=0) led_byte3=led_byte3+0X10; led_dsp(); /ch4l 3v开关电源=开启 if (n=(uchar)(ram_para.ram_var.local_sid_1st) pwr_3v_cs1=1; delay_ms(500); for (n=0; n5; n+) /中值滤波缓存清0! mid_fil_cachen=0x0; RCON=RCON|0X1F;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1