ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:24.50KB ,
资源ID:8972990      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(无线HART发送与接收代码.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

无线HART发送与接收代码.docx

1、include    #include    #define uchar unsigned char   /***************************************************/   #define TX_ADR_WIDTH   5  // 5字节宽度的发送/接收地址   #define TX_PLOAD_WIDTH 4  // 数据通道有效数据宽度   #define LED P1   uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0

2、x10,0x01};  // 定义一个静态发送地址   uchar RX_BUF[TX_PLOAD_WIDTH];   uchar TX_BUF[TX_PLOAD_WIDTH];   uchar flag;   uchar DATA = 0x01;   uchar bdata sta;   sbit  RX_DR  = sta^6;   sbit  TX_DS  = sta^5;   sbit  MAX_RT = sta^4;   sbit key=P2^0;   sbit wela=P2^6;   sbit dula=P2^7;   /****************

3、/   /**************************************************  函数: init_io()  描述:      初始化IO  /**************************************************/   void init_io(void)         {       CE  = 0;        // 待机       CSN = 1;        // SPI禁止       SCK = 0;       

4、 // SPI时钟置低       IRQ = 1;        // 中断复位       LED = 0xff;     // 关闭指示灯   }   /**************************************************/   /**************************************************  函数:delay_ms()  描述:      延迟x毫秒  /**************************************************/   void delay_ms

5、uchar x)   {       uchar i, j;       i = 0;       for(i=0; i

6、RW()  描述:      根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01      读出一字节  /**************************************************/   uchar SPI_RW(uchar byte)   {       uchar i;       for(i=0; i<8; i++)          // 循环8次       {           MOSI = (byte & 0x80);   // byte最高位输出到MOSI           byte <<= 1; 

7、            // 低一位移位到最高位           SCK = 1;  // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据           byte |= MISO;           // 读MISO到byte最低位           SCK = 0;                // SCK置低       }       return(byte);               // 返回读出的一字节   }   /**************************************************

8、/   /**************************************************  函数:SPI_RW_Reg()  描述:      写数据value到reg寄存器  /**************************************************/   uchar SPI_RW_Reg(uchar reg, uchar value)   {       uchar status;       CSN = 0;                   // CSN置低,开始传输数据       status = SP

9、I_RW(reg);      // 选择寄存器,同时返回状态字       SPI_RW(value);             // 然后写数据到该寄存器       CSN = 1;                   // CSN拉高,结束数据传输       return(status);            // 返回状态寄存器   }   /**************************************************/   /**************************************************  函数:S

10、PI_Read()  描述:      从reg寄存器读一字节  /**************************************************/   uchar SPI_Read(uchar reg)   {       uchar reg_val;       CSN = 0;                    // CSN置低,开始传输数据       SPI_RW(reg);                // 选择寄存器       reg_val = SPI_RW(0);        // 然后从该寄存器读数据       CS

11、N = 1;                    // CSN拉高,结束数据传输       return(reg_val);            // 返回寄存器数据   }   /**************************************************/   /**************************************************  函数:SPI_Read_Buf()  描述:      从reg寄存器读出bytes个字节,通常用来读取接收通道      数据或接收/发送地址  /***********

12、/   uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)   {       uchar status, i;       CSN = 0;                    // CSN置低,开始传输数据       status = SPI_RW(reg);       // 选择寄存器,同时返回状态字       for(i=0; i

13、 逐个字节从nRF24L01读出       CSN = 1;                    // CSN拉高,结束数据传输       return(status);             // 返回状态寄存器   }   /**************************************************/   /**************************************************  函数:SPI_Write_Buf()  描述:      把pBuf缓存中的数据写入到nRF24L01,通常用来写入发 

14、    射通道数据或接收/发送地址  /**************************************************/   uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)   {       uchar status, i;       CSN = 0;                    // CSN置低,开始传输数据       status = SPI_RW(reg);       // 选择寄存器,同时返回状态字       for(i=0; i

15、       SPI_RW(pBuf[i]);        // 逐个字节写入nRF24L01       CSN = 1;                    // CSN拉高,结束数据传输       return(status);             // 返回状态寄存器   }   /**************************************************/   /**************************************************  函数:RX_Mode()  描述:      这个函数设置n

16、RF24L01为接收模式,等待接收发送设备的数据包  /**************************************************/   void RX_Mode(void)   {       CE = 0;       SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);// 接收设备接收通道0使用和发送设备相同的发送地址       SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);               // 使能接收通道0自动应答      

17、 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);           // 使能接收通道0       SPI_RW_Reg(WRITE_REG + RF_CH, 40);                 // 选择射频通道0x40       SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);  // 接收通道0选择和发送通道相同有效数据宽度       SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);            // 数据传输率1Mbps,发射功率0dBm,低噪

18、声放大器增益       SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);              // CRC使能,16位CRC校验,上电,接收模式       CE = 1;                                            // 拉高CE启动接收设备   }   /**************************************************/   /**************************************************  函数:TX_Mode() 

19、描述:      这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),      130us后启动发射,数据发送结束后,发送模块自动转入接收      模式等待应答信号。  /**************************************************/   void TX_Mode(uchar * BUF)   {       CE = 0;       SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);// 写入发送地址       SPI_Write_Buf

20、WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);// 为了应答接收设备,接收通道0地址和发送地址相同       SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);   // 写数据包到TX FIFO       SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);       // 使能接收通道0自动应答       SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);   // 使能接收通道0       SPI_RW_Reg(WRIT

21、E_REG + SETUP_RETR, 0x0a);  // 自动重发延时等待250us+86us,自动重发10次       SPI_RW_Reg(WRITE_REG + RF_CH, 0x40);         // 选择射频通道0x40       SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);    // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益       SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);      // CRC使能,16位CRC校验,上电       CE = 1;   }  

22、/**************************************************/   /**************************************************  函数:Check_ACK()  描述:      检查接收设备有无接收到数据包,设定没有收到应答信      号是否重发  /**************************************************/   uchar Check_ACK(bit clear)   {       while(IRQ);       sta =

23、SPI_RW(NOP);                    // 返回状态寄存器       if(MAX_RT)           if(clear)                         // 是否清除TX FIFO,没有清除在复位MAX_RT中断标志后重发               SPI_RW(FLUSH_TX);       SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除TX_DS或MAX_RT中断标志       IRQ = 1;       if(TX_DS)           return(0x00); 

24、      else           return(0xff);   }   /**************************************************/   /**************************************************  函数:main()  描述:      主函数  /**************************************************/   void main(void)   {       init_io();       dula=0;wela

25、0;            // 初始化IO       DATA=0x01;       while(1)       {           TX_BUF[0] = ~DATA;          // 数据送到缓存               TX_Mode(TX_BUF);            // 把nRF24L01设置为发送模式并发送数据               LED = ~DATA;                // 数据送到LED显示               Check_ACK(1);               // 等待发送完毕,清除TX FI

26、FO               delay_ms(250);               delay_ms(250);               LED = 0xff;                  // 关闭LED               DATA <<= 1;               if(DATA==0)DATA=0x01;                                  //RX_Mode();                    // 设置为接收模式           //  while(!(P1 & 0x01));       

27、    //             //  if(!DATA)           //      DATA = 0x01;       }   }   /**************************************************/   #ifndef _API_DEF_   #define _API_DEF_   // Define interface to nRF24L01   // Define SPI pins   sbit CE   = P0^2;  // Chip Enable pin signal (output)  

28、 sbit CSN  = P0^3;  // Slave Select pin, (output to CSN, nRF24L01)   sbit IRQ  = P0^5;  // Interrupt signal, from nRF24L01 (input)   sbit MISO = P0^0;  // Master In, Slave Out pin (input)   sbit MOSI = P0^4;  // Serial Clock pin, (output)   sbit SCK  = P0^1;  // Master Out, Slave In pin (output)

29、   // SPI(nRF24L01) commands   #define READ_REG    0x00  // Define read command to register   #define WRITE_REG   0x20  // Define write command to register   #define RD_RX_PLOAD 0x61  // Define RX payload register address   #define WR_TX_PLOAD 0xA0  // Define TX payload register address   #d

30、efine FLUSH_TX    0xE1  // Define flush TX register command   #define FLUSH_RX    0xE2  // Define flush RX register command   #define REUSE_TX_PL 0xE3  // Define reuse TX payload register command   #define NOP         0xFF  // Define No Operation, might be used to read status register   // SPI

31、nRF24L01) registers(addresses)   #define CONFIG      0x00  // 'Config' register address   #define EN_AA       0x01  // 'Enable Auto Acknowledgment' register address   #define EN_RXADDR   0x02  // 'Enabled RX addresses' register address   #define SETUP_AW    0x03  // 'Setup address width' regist

32、er address   #define SETUP_RETR  0x04  // 'Setup Auto. Retrans' register address   #define RF_CH       0x05  // 'RF channel' register address   #define RF_SETUP    0x06  // 'RF setup' register address   #define STATUS      0x07  // 'Status' register address   #define OBSERVE_TX  0x08  // 'Obser

33、ve TX' register address   #define CD          0x09  // 'Carrier Detect' register address   #define RX_ADDR_P0  0x0A  // 'RX address pipe0' register address   #define RX_ADDR_P1  0x0B  // 'RX address pipe1' register address   #define RX_ADDR_P2  0x0C  // 'RX address pipe2' register address   #de

34、fine RX_ADDR_P3  0x0D  // 'RX address pipe3' register address   #define RX_ADDR_P4  0x0E  // 'RX address pipe4' register address   #define RX_ADDR_P5  0x0F  // 'RX address pipe5' register address   #define TX_ADDR     0x10  // 'TX address' register address   #define RX_PW_P0    0x11  // 'RX payl

35、oad width, pipe0' register address   #define RX_PW_P1    0x12  // 'RX payload width, pipe1' register address   #define RX_PW_P2    0x13  // 'RX payload width, pipe2' register address   #define RX_PW_P3    0x14  // 'RX payload width, pipe3' register address   #define RX_PW_P4    0x15  // 'RX payl

36、oad width, pipe4' register address   #define RX_PW_P5    0x16  // 'RX payload width, pipe5' register address   #define FIFO_STATUS 0x17  // 'FIFO Status Register' register address   #endif   /* _API_DEF_ */   #include    #include    #define uchar unsigned ch

37、ar   /***************************************************/   #define TX_ADR_WIDTH   5  // 5字节宽度的发送/接收地址   #define TX_PLOAD_WIDTH 4  // 数据通道有效数据宽度   #define LED P1   uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};  // 定义一个静态发送地址   uchar RX_BUF[TX_PLOAD_WIDTH];   uchar TX_

38、BUF[TX_PLOAD_WIDTH];   uchar flag;   uchar DATA = 0x01;   uchar bdata sta;   sbit  RX_DR  = sta^6;   sbit  TX_DS  = sta^5;   sbit  MAX_RT = sta^4;   sbit wela=P2^6;   sbit dula=P2^7;   /**************************************************/   /***********************************************

39、  函数: init_io()  描述:      初始化IO  /**************************************************/   void init_io(void)   {       CE  = 0;        // 待机       CSN = 1;        // SPI禁止       SCK = 0;        // SPI时钟置低       IRQ = 1;        // 中断复位       LED = 0xff;     // 关闭指示灯   }   /***********

40、/   /**************************************************  函数:delay_ms()  描述:      延迟x毫秒  /**************************************************/   void delay_ms(uchar x)   {       uchar i, j;       i = 0;       for(i=0; i

41、 250;          while(--j);          j = 250;          while(--j);       }   }   /**************************************************/   /**************************************************  函数:SPI_RW()  描述:      根据SPI协议,写一字节数据到nrf24l01,同时从nRF24L01      读出一字节  /************************

42、/   uchar SPI_RW(uchar byte)   {       uchar i;       for(i=0; i<8; i++)          // 循环8次       {           MOSI = (byte & 0x80);   // byte最高位输出到MOSI           byte <<= 1;             // 低一位移位到最高位           SCK = 1;  // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据      

43、     byte |= MISO;           // 读MISO到byte最低位           SCK = 0;                // SCK置低       }       return(byte);               // 返回读出的一字节   }   /**************************************************/   /**************************************************  函数:SPI_RW_Reg()  描述:      写数据v

44、alue到reg寄存器  /**************************************************/   uchar SPI_RW_Reg(uchar reg, uchar value)   {       uchar status;       CSN = 0;                   // CSN置低,开始传输数据       status = SPI_RW(reg);      // 选择寄存器,同时返回状态字       SPI_RW(value);             // 然后写数据到该寄存器       CSN = 1

45、                   // CSN拉高,结束数据传输       return(status);            // 返回状态寄存器   }   /**************************************************/   /**************************************************  函数:SPI_Read()  描述:      从reg寄存器读一字节  /**************************************************/   u

46、char SPI_Read(uchar reg)   {       uchar reg_val;       CSN = 0;                    // CSN置低,开始传输数据       SPI_RW(reg);                // 选择寄存器       reg_val = SPI_RW(0);        // 然后从该寄存器读数据       CSN = 1;                    // CSN拉高,结束数据传输       return(reg_val);            // 返回寄存器数据   }  

47、 /**************************************************/   /**************************************************  函数:SPI_Read_Buf()  描述:      从reg寄存器读出bytes个字节,通常用来读取接收通道      数据或接收/发送地址  /**************************************************/   uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar b

48、ytes)   {       uchar status, i;       CSN = 0;                    // CSN置低,开始传输数据       status = SPI_RW(reg);       // 选择寄存器,同时返回状态字       for(i=0; i

49、     // 返回状态寄存器   }   /**************************************************/   /**************************************************  函数:SPI_Write_Buf()  描述:      把pBuf缓存中的数据写入到nRF24L01,通常用来写入发      射通道数据或接收/发送地址  /**************************************************/   uchar SPI_Write_Buf(uc

50、har reg, uchar * pBuf, uchar bytes)   {       uchar status, i;       CSN = 0;                    // CSN置低,开始传输数据       status = SPI_RW(reg);       // 选择寄存器,同时返回状态字       for(i=0; i

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服