sunxj02 发布于 2007-11-10 18:27:00 我们最近在研究NRF9E5,我们自己做了一个基于nrf9e5的射频收发系统,也根据已有的一些程序调试串口通讯,但在使用中出现了以下问题: 串口通讯一直调试不通,返回值持续为乱码。
因为之前我们用过PTR5000,而且调试是成功的,所以过PTR5000及PTR8500两款产品进行调研,认为:
1.两款产品使用芯片在单片机内核上是基本一致的,主要不同在RF射频部分,而非与计算机的通讯部分;
2.对两款产品C编程时所使用的头文件进行比较,发现:这两款产品在关于串口通讯方面使用的寄存器名称和地址都是一致的,我们认为这两款产品与串口通讯部分的程序应该也是一致的,并且可以互相交叉使用。
3.经过与一些网上公布的成熟程序相比较,我们使用的串口通讯程序是正确的。
所以进行了以下步骤的测试:
l 对EEPROM下载串口通讯部分程序
l 在调试板上插接PTR5000,发现返回值正常
l 在测试板上插接PTR8500,发现返回值为乱码,而且乱码还会随着程序返回内容的不同而改变
由以上问题,我们想请教一下: 1.为何会出现上述乱码现象(软件及硬件军可能出现的问题是什么?)
2.这两款模块在使用过程中,外围电路有什么不同(主要指串行通讯和与EEPROM通讯方面)
PS:在下文中附上我们使用的用于调试NRF9E5的串口通讯程序。谢谢!
#include <Nordic\reg9e5.h> void Init(void) { TH1 = 243; // 4800@4MHz (when T1M=1 and SMOD=1) CKCON |= 0x10; // T1M=1 (/4 timer clock) PCON = 0x80; // SMOD=1 (double baud rate) SCON = 0x52; // Serial mode1, enable receiver TMOD = 0x20; // Timer1 8bit auto reload TR1 = 1; // Start timer1 P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2 P0_DIR |= 0x02; // P0.1 (RxD) is input }
void PutChar(char c) { SBUF = c; while( ! TI ) ; TI = 0; }
void PutString(const char *s) { while(*s != 0) PutChar(*s++); }
void main(void) { int i ; Init(); for (i=0;i<5;i++) PutString( " Hello World ! \ n " ); } 盼有大侠回复!谢谢!
hotpower 发布于 2007-11-10 22:00:00 hotpower 发表于 2007-11-10 18:48 通信技术 ←返回版面
3楼: 哈哈~~~楼主得到提示走了~~~俺忘记暂借她的ID用了~~~可惜.
哈哈~~~讯通搞得鬼~~~
void TimeInit() using 0 { TMOD = 0x21; //timer1 working mode 1 SCON = 0x58; //uart mode 1,ren==1 // PCON = 0x00; PCON = 0x80; /*---------------------------------- 定时器0定时参数设置 ----------------------------------*/ TL0 = 0; TH0 = T0_5mS; TR0 = 1;//启动定时器0 SystemBuffers.DisplayCount = 0; /*---------------------------------- 定时器1定时参数设置 ----------------------------------*/ TL1 = 0xfd; TH1 = 0xfd; hotpower 发表于 2007-11-10 21:43 通信技术 ←返回版面
5楼: 很抱歉,楼主17:51:07给我发送邮件时俺还在此灌水垦荒呢~~~
你的邮件没附件,俺看不到图~~~
虽没实际用过9e5,但感觉应该不难.和905应该有相同之处.
如果是串口的问题就很好解决.
如果不改写现有程序,在串口助手里将停止位设置为2即可.
调试程序有很多方法和技巧,可根据硬件决定.
要多用"游击队"的方法,要机动灵活.
串口乱码很好整治~~~
1.MCU只编写串口通讯部分,且只编写发送代码. 2.向PC发送256个0x55(方波信号 0 10101010 1) 单字符发送间隔拉大些,如>10mS.这主要是对付停止位为1/2的不同 3.串口助手(注意设置,可能由于SCON的问题,停止位有1,2的问题)应该有数据. 若无数据(可能没收到停止位 可用示波器查看) 若出现乱码(根据乱码判断波特率高低我网上有论述,一时找不到), 可微调TH1(因为MCU的主频不对,如11.0592错记为12~~~). 4.肯定调试结束. 5.要还不行...俺"收费"通过QQ远程遥控~~~
"收费"办法: 在QQ里暂借你在21IC的合法注册ID几分钟,用完立即归还~~~
哈哈~~~不知俺"收费"是否合理???
如果你已经投票了,那咱这笔"生意"就算泡汤了~~~
* - 本贴最后修改时间:2007-11-10 22:20:39 修改者:hotpower http://www.ednchina.com/blog/hotpower/57751/message.aspx
 |