




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
nrf401实验c51程序/*-nrf401实验程序雁塔菜农HotP-*/i nclude i nclude i nclude i nclude i nclude i nclude #define T0_8mS -8000#define T1_8mS -8000#define T2_1_25mS -576 /-1250*0.9216=1.25MS/*-系统函数-*/void MainInit(void);/系统初始化void ClrWdt(void);/喂狗void nRFInit(void);void SystemInit(void);/系统初始化void SystemSetup(void);/系统设置void SystemIoInit(void);/系统接口初始化void UserSetup(void);/用户运行环境设置void TimeInit(void);unsigned char crc8r(unsigned char crcbyte);unsigned int crc16r(unsigned int crcword, unsigned int crc);unsigned int GetTXBuffWord(unsigned char ledpos);void SetTXBuffWord(unsigned char ledpos, unsigned int val);unsigned int GetRXBuffWord(unsigned char ledpos);void SetRXBuffWord(unsigned char ledpos, unsigned int val);SystemData SystemBuffers;/申请系统数据结构SioData SioBuffers;/*-主程序初始化-*/void MainInit(void)/系统初始化SystemIoInit();/系统接口初始化ClrWdt();/清除看门狗计数器if (SystemBuffers.RamTest != 0x55aa) /内存测试SystemInit();/系统上电初始化SystemSetup();/系统运行环境设置UserSetup();/用户运行环境设置void SystemInit(void)/系统初始化SystemBuffers.RamTest = 0x55aa;/内存初始化void SystemSetup(void)/系统设置AUXR = 0x01;/关闭EMInRFInit();TimeInit();IP = 0x10;/中断优先级EX1ET2ET0EX0ESIE = 0xb4;/开中断EA,ET2,ET1,EX1,ET0void UserSetup(void)/用户运行环境设置void SystemIoInit(void)IE = 0x00;/关闭中断P0 = 0xff;/P0口初始化P1 = 0xff;/P1口初始化P2 = 0xff;/P2口初始化P3 = 0xff;/P3口初始化void TimeInit()TMOD = 0x21;/定时器0,1为方式1(十六位定时器)TCON = 0x55;/启动定时器TR1EQUTR0EQU1,IT1EQUIT0EQU1/*-定时器0定时参数设置-*/TL0 = 0;TH0 = 0;TR0 = 1;/启动定时器0/*-定时器0定时参数设置-*/TL1 = SIO_BPS;TH1 = SIO_BPS;PCON = 0x00;TR1 = 1;/启动定时器1/*-定时器2定时参数设置-*/TIMEER2 = T2_1_25mS;RCAP= T2_1_25mS;TR2= 1;/启动定时器2void nRFInit(void)nRFCS= 0;/433.92MHz/1/434.33MHznRFTXEN= 0;/接收nRFPWR= 1;/上电SioBuffers.TXMAXCount = 0;SioBuffers.TXCount = 0;/SioBuffers.RXCount = 0;SCON= 0x50;/* SCON: mode 2, 9-bit UART, enable rcvr*/SioBuffers.RXCount = 16;/*-外部INT0中断服务程序-*/void int0proc() interrupt IE0_VECTOR/ using 1/*-定时器T0中断服务程序-*/void t0proc() interrupt TF0_VECTOR/ using 1/*-外部INT1中断服务程序-*/void int1proc() interrupt IE1_VECTOR using 1/*-定时器T1中断服务程序-*/void t1proc() interrupt TF1_VECTOR/ using 1/*-串口SIO中断服务程序-*/void sioproc() interrupt SIO_VECTOR/ using 1unsigned char i;unsigned int crc;if (RI) /接收中断RI = 0;if (!nRFTXEN & SioBuffers.RXCount) /每次接收20个数据i = SBUF;SioBuffers.RXCount -;SioBuffers.RXBuffers19 - SioBuffers.RXCount = i;switch(SioBuffers.RXCount) case 19:if (i != 0x55) SioBuffers.RXCount = 20;break;case 18:if (i != 0xaa) SioBuffers.RXCount = 20;break;case 0:crc = 0;for (i = 1; i = 8; i +) crc = crc16r(GetRXBuffWord(i + i), crc);if (crc != GetRXBuffWord(18)SioBuffers.RXCount = 20;else nRFTXEN = 1;/发送for (i = 0; i 19) SBUF = 0x00;/SBUF = 0xff;else SBUF = SioBuffers.TXBuffers19 - SioBuffers.TXCount;if (SioBuffers.TXCount = 0) if (SioBuffers.TXMAXCount) SioBuffers.TXMAXCount -;SioBuffers.TXCount = TX_Count;else nRFTXEN = 0;/发送结束立即转为接收SioBuffers.RXCount = 20;/*-定时器T2中断服务程序(1.25mS)-*/void t2proc() interrupt TF2_VECTOR/ using 2/unsigned char i;/unsigned int crc;TF2 = 0;if (PCON & GF0) /中断是从主循环内跳入的才能喂狗ClrWdt();/清除看门狗计数器PCON &= GF0;/清除标志 SystemBuffers.T2Count +; /if (SystemBuffers.T2Count = 80) /100mS到if (SystemBuffers.T2Count = 400) /500mS到SystemBuffers.T2Count = 0;/if (SystemBuffers.T2Count & 3) = 0) & (SioBuffers.TXCount = 0) /10mS/if (SioBuffers.TXCount = 0) /10mS/*if (!ES & (SioBuffers.TXCount = 0) /10mSSioBuffers.TXCount = 18;crc =GetTXBuffWord(2);crc = crc16r(crc);SetTXBuffWord(4, crc);nRFTXEN = 1;/发送TI = 1;ES = 1;*/ /SioBuffers.TXCount = 8;/nRFTXEN = 1;/发送/ SBUF = SioBuffers.TXBuffers0;/ES = 1;void ClrWdt(void)/喂狗WDTRST = 0x1e;/89s52内狗WDTRST = 0xe1;/89s52内狗unsigned char crc8r(unsigned char crcbyte) unsigned char i,crc; crc = 0;for(i = 0; i = 1; else crc = 0x18;/0x18;/CRC=X8+X5+X4+1crc = 1; crc |= 0x80; crcbyte = 1; return crc; unsigned int crc16r(unsigned int crcword, unsigned int crc) unsigned char i; for(i = 0; i = 1; else crc = 0x810;/0x0810;/CRC=X16+X12+X5+1 crc = 1; crc |= 0x8000; crcword = 1; return crc; unsigned int GetTXBuffWord(unsigned char ledpos)unsigned char val1, val2;unsigned int val;val1 = SioBuffers.TXBuffersledpos;val2 = SioBuffers.TXBuffersledpos + 1;val = (val1 8); SioBuffers.TXBuffersledpos + 1 = val & 0xff;unsign
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度电视机产品智能语音交互技术研发合同
- 2025年度土地买卖合同履行及监管规范
- 诺如知识培训方案课件
- 2025年度汽车租赁企业培训及拓展合同
- 2025年度智慧校园食堂运营管理承包合同
- 2025版涂料产品进出口代理合同标准范本
- 2025版科技园区融资中介服务合作协议范本
- 2025版新能源设备以租代售租赁协议范本
- 2025版水管材料电商平台服务条款合同
- 2025合同样本库建设与管理的规范指南
- 隔声窗施工方案
- (高清版)DB11∕T687-2024公共建筑节能设计标准
- 《医药电子商务实务》考试复习题库(含答案)
- 钢板仓施工流程及安全保证方案
- 农业互联网与农产品营销策略优化
- 知识产权具体实施细则
- 泄密案件整改报告范文
- 船舶危险源辨识及防范措施
- 严重精神障碍患者报告卡
- 空气源热泵计算
- 学员陪跑合同模板
评论
0/150
提交评论