www.openedv.com
您好,欢迎您!    会员注册 | 登入 
公告:欢迎访问www.openedv.com开源电子网,开源共享共同进步,祝您新年快乐,万事如意!
设为首页 | 加入收藏
论坛首页 » 51单片机 前往: 
在程序调试中遇到的串口打印输出问题
发表人 内容
[Down] [Up]
[楼主位] ljc2046

等级:NO
注册时间:
2011/08/30 14:00
文章: 1
离线

 一.问题

以上的问题是我在程序调试中实验的结果:

实际遇到的问题是:要验证读写寄存器是否正确,如

把数据写入寄存器地址:

WriteRegister( adderss, data );

WriteRegister( 1, 15 );

 

读数据寄存器地址:

ReadRegister(address);

ReadRegister(1);

 

二.设计的解决问题方法

但这个过程是在单片机里面实现的,现在程序不能通过,我不能确认出现是在那个地方出现了问题。

现在要设计一个步骤来检查子程序是否正确。我觉得pfintf是一个好方式,可以这样设计:

unsigned char i;

i= ReadRegister(1);

printf("i的值为:%d ;",i);

这样可以认为i=15那么我的读写寄存器子程序就没有问题,如i=别的值这个读写寄存器子程序就不正确。

 

三.串口打印中遇到的问题

printf("15\n ");

在打印输出中可以得到结果:15.

 

而换一种方式:

i=15;

printf("i的值为:%d ;",i);

可以得到i的值为:3840.  想知道原因,求解决办法。

 

四.对问题的总结
1.求问思路是否正确。

2.所有问题是怎么验证在编程过程中我所编的子程序正确性,如果本身语法没有问题。对于像我这种刚学习编程的人来说,手里面没有验证过的保证正确的子程序,是个很大的问题。

如果谁又好的方法请不吝赐教,我在这膜拜了。

3.求解printf是否能读出寄存器里面的值

printf输出是个好方法,但不是这么直接用,我在网上少见有人讨论,我了解的是要把十六进制转换成ASICII后才能显示。

我不晓得事实是不是这样,如果是,请高手指教。



[加为好友] 回复 引用回复
[Down] [Up]
[1楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8089
来自: 湖南
在线

回复【楼主位】 ljc2046 :
---------------------------------
思路是对的.
至于i是3840,我也表示怀疑.不应该是3840的.
printf可以设置输出格式的.如果是%d,表示十进制.

楼主可以参考下我们的usmart,你的这些在usmart上直接就有实现.
搜索论坛.



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
 
前往: 

Powered by ALIENTEK工作室 © 粤ICP备12000418号-1