基于can总线的温湿度及光感度测量_单片机课程设计(编辑修改稿)内容摘要:
********/ char quit_RST(void) { unsigned char MID_DATA。 //定义一个字节变量,用于存储从 SJA1000 控制寄存器读出的数据 MID_DATA = Read_Reg(CONTROL)。 //访问 SJA1000 控制寄存器,保存原始值 Write_Reg(CONTROL,MID_DATAamp。 0xfe)。 //置位复位请求 if((Read_Reg(CONTROL)amp。 0x01)==0) //读 SJA1000 的控制寄存器数值,判断清除复位请求是否有效 {return 0。 } //0:表示 SJA1000 成功退出复位工作模式 else {return 1。 } } /********************************************************* 函数原型: char set_rate(unsignen char CAN_rate_num) 函数功能:用于设置 CAN 总线的通信波特率,只能在 SJA1000 进入复位模式下使用 基于 CAN 总线的温湿度及光感度测量 参数说明:参数 CAN_rate_num 用于存放 CAN 通信波特率的数组列表中的系列号,范围为 0~12. 返回值说明: 0:波特率设置成功 1:波特率设置失败 **********************************************************/ unsigned char rate_tab[]={ 0x53,0x2f, //20kbit/s 的波特率预设值 0x87,0xff, //40kbit/s 0x47,0x2f, //50kbit/s 0x83,0xff, //80kbit/s 0x43,0x2f, //100kbit/s 0x03,0x1c, //125kbit/s 0x81,0xfa, //200kbit/s 0x01,0x1c, //250kbit/s 0x80,0xfa, //400kbit/s 0x00,0x1c, //500kbit/s 0x80,0xb6, //666kbit/s 0x00,0x16, //800kbit/s 0x00,0x14 //1000kbit/s }。 // char set_rate (unsigned char CAN_rate_num) { char wrong_flag=1。 unsigned char BIT0_data,BIT1_data。 //用于存放从波特率数组中读出来的数值 unsigned char wrong_count=32。 //32 次报错次数 if(CAN_rate_num12) //设置数组列表中的序列号范围为 0~12 { wrong_flag=1。 } //如果超出范围,报警,波特率设置失败 else { while(wrong_count) //最多 32 次设置 SJA1000 内部寄存器 BIT0 和 BIT1 { BIT0_data=rate_tab[CAN_rate_num*2]。 BIT1_data=rate_tab[CAN_rate_num*2+1]。 //将波特率的设置值从数组中读出 Write_Reg(BIT_0,BIT0_data)。 //访问 CAN 总线定时寄存器 0,写入参数 if(Read_Reg(BIT_0) != BIT0_data )continue。 //校验写入值 Write_Reg(BIT_1,BIT1_data)。 //访问 CAN 总线定时寄存器 1,写入参数 if(Read_Reg(BIT_1) != BIT1_data )continue。 //校验写入值 wrong_flag = 0。 基于 CAN 总线的温湿度及光感度测量 break。 } //while 结束 } return wrong_flag。 } /********************************************************* 函数 原型: char set_ACR_AMR(unsignen char ACR_DATA,unsignen char AMR_DATA) 函数功能:用于设置验收代码寄存器( ACR),屏蔽寄存器( AMR)只能在 SJA1000进入复位模式下使用 参数说明: ACR_DATA :用于存放验收代码寄存器( ACR)的参数值 AMR_DATA :用于存放验收代码寄存器( AMR)的参数值 返回值说明: 0:通信对象设置成功 1:通信对象置失败 **********************************************************/ char set_ACR_AMR(unsigned char ACR_DATA,unsigned char AMR_DATA) //滤波器设计 { Write_Reg(ACR,ACR_DATA)。 //访问 CAN 总线验收代码寄存器,写入参数 if(Read_Reg(ACR) != ACR_DATA)//校验写入值 {return 1。 } Write_Reg(AMR,AMR_DATA)。 //访问 CAN 总 线验收代码寄存器,写入参数 if(Read_Reg(AMR) != AMR_DATA)//校验写入值 {return 1。 } return 0。 } /********************************************************* 函数原型: char set_CLK (unsigned char SJA_OUT_MODE,unsigned char SJA_Clock_Out) 函数功能:用于设置输出寄存器( OCR)的参数、时钟分频寄存器( CDR)的参数, 只能在 SJA1000 进入复位模式下使用 参数说明: SJA_OUT_MODE :用于存放输出寄存器( OC)的参数 SJA_Clock_Out :用于存放时钟分频寄存器( CDR)的参数 返回值说明: 0:设置( OCR)和( CDR)寄存器成功 1:设置( OCR)和( CDR)寄存器失败 **********************************************************/ char set_CLK (unsigned char SJA_OUT_MODE,unsigned char SJA_Clock_Out) { Write_Reg(OCR,SJA_OUT_MODE)。 //访问输出控制寄存器,写入设置的 OCR 参数值 if(Read_Reg(OCR) != SJA_OUT_MODE)//校验写入值 {return 1。 } 基于 CAN 总线的温湿度及光感度测量 Write_Reg(CDR,SJA_Clock_Out)。 //访问输出控制寄存器,写入设置的 CDR 参数值 // if(Read_Reg(CDR) != SJA_Clock_Out)//校验写入值 // {return 1。 } return 0。 } /********************************************************* 函数原型: char SJA_send_data(unsigned char *senddatabuf) 函数功能:用于发送 CAN 总线一帧数据(数据帧或远程帧)到 SJA1000 的发送缓冲区, 数据帧长度不大于 8 字节 参数说明: senddatabuf :指向的用于存放发送数据的数组的首址 返回值说明: 0:将发送数组的数据成功送至 SJA1000 的发送区 1: SJA1000 正在接收信息,或 SJA1000 的发送缓冲区被锁定, 或上一次发送的一帧数据还没有完成发送 **********************************************************/ char SJA_send_data(unsigned char *senddatabuf) //gai!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { unsigned char send_num,STATUS_data。 unsigned char i。 STATUS_data = Read_Reg(STATUS)。 //读取状态寄存器数值到 STATUS_data if(STATUS_data amp。 0x10) {return 1。 } //STATUS_data^4,表示 SJA1000 在接收信息 if((STATUS_data amp。 0x04)==0)//判断 SJA1000 发送缓冲区是否为锁定状态 ,0 锁定 {return 1。 } if((STATUS_data amp。 0x08)==0)//判断上次发送是否完成, 0 上次发送未完成 {return 1。 } senddatabuf[0] = 0xAC。 senddatabuf[1] = 0x06。 Write_Reg(TxBuffer1,senddatabuf[0])。 Write_Reg(TxBuffer2,senddatabuf[1])。 if((senddatabuf[1]amp。 0x10)==0) //判断 RTR 位,是数据帧还是远程帧判定 { send_num = (senddatabuf[1]amp。 0x0f)。 //是数据帧,则取一帧 CAN 数据的第 2 字节的低 4 位, //计算得出发送数据的长度 if(send_num8) //发送最大长度为 8 个字节 send_num = 8。 for(i=0。 i send_num。 i++) { Write_Reg(TxBuffer3+i,senddatabuf[2+i])。 基于 CAN 总线的温湿度及光感度测量 delay_us(2)。 } } else { send_num=0。 //是远程帧,则发送数据长度为 0 for(i=0。 i send_num。 i++) { Write_Reg(TxBuffer3+i,senddatabuf[2+i])。 delay_us(2)。 } } SJA_mand_control(0x01)。 //调用发送请求 return 0。 } /********************************************************* 函数原型: char SJA_rcv_data(unsigned char *rcvdatabuf) 函数功能:用于接收 CAN 总线 一帧数据 参数说明: rcvdatabuf :指向的用于存放发送数据的数组的首址 返回值说明: 0:成功接收 CAN 总线的一帧数据 1:接收 CAN 总线的一帧数据失败 **********************************************************/ char SJA_rcv_data(unsigned char *rcvdatabuf) { unsigned char rcv_num,STATUS_data。 STATUS_data = Read_Reg(STATUS)。 //读取状态寄存器数值到 STATUS_data if((STATUS_data amp。 0x01)==0) //判断接收缓冲区中是否有信息,为 0 表示。基于can总线的温湿度及光感度测量_单片机课程设计(编辑修改稿)
相关推荐
ctg 同理,也可计算出电流的幅值、相角和有效值。 由于非正弦周期函数的有效值等于信号中的各次谐波的有效值的平方和的平方根,所以电压、电流总的有效值分别为: 0202kkkkIUIU 电网中的有功功率一般指的是平均功率,可定义为: T dttituTp 0 )()(1 将 u(t)和 i(t)分别用傅立叶级数表示展开,并考虑正弦函数的正交性,可 得:
38 系统设计的主要动因与目的 38 系统需求分析 38 系统总体结构分析 46 系统实现的难点分析 46 界面设计 47 本章小结 48 第 6 章 改进效果与工作总结 49 改进效果分析 49 工作总结 56 56 63 参考文献 65 附 录 68 致 谢 71 第 1 章 绪论 1 第 1 章 绪论 项目 背景 和研究意义 项目 背景 现今的社会是知识经济高度发达的信息化时代
LM2940 低压差稳压芯片克服了早期稳压芯片的缺点。 与其它的稳压芯片一样, LM2940 需要外接一个输出电容来保持输出的稳定性。 出于稳定性考虑,需要在稳压输出端和地之间接一个 22uF低等效电阻的电容器。 舵机额定工作电压是 6V,此时舵机的滞后常数很大,在毫秒级上。 我们测量了电机的内阻(不考虑感性因素)为 2Ω,综合电机的功率以及电池电压10%的波动,简单计算了一下在 9V 以下电
的 CAN总线控制 器芯片 ,它完全 符合 CAN 总线的 技术规范 ,并带有符合工业标准的 SPI串行接口。 MCP2510在目前市场上是体积最小、最易于使用也是最节约成本的独立 CAN 控制器。 MCP2510是一种带有 SPI接口的 CAN控制器, 它支持 CAN技术规范 ;并能够发送的接收标准的和扩展的信息帧,同时具有接收滤波和信息管理的功能。 MCP2510 通过 SI 接口与 MCU
和增大转矩,以满足工作需要。 主要用于带式输送机及各种运输机械,也可用于其它通用机械的传动机构中。 它具有承载能力高、寿命长、体积小、效率高、重量轻、噪声低等优点,用于输入轴与输出轴呈垂直方向布置的传动装置中。 图 节气门 AutoCAD 简介 AutoCAD( Auto Computer Aided Design)是 Autodesk(欧特克)公司首次于 1982
压 下图 74HC573 的仿真图,其中引脚 2~9 分别接 AT89C51 的 P0,引脚 12~19 分别接数码管的 A、 B、 C、 D、 E、 F、 G、 D、 P 端,引脚 1 接电源端,引脚 11 接地端。 图 34 74HC573 仿真图 74HC138 按照三位二进制输入码和赋能输入条件 ,从 8 个输出端中译出一个低电平输出。