pic c18f 串口打印调试程序

[复制链接]
3617|9
 楼主| isbit 发表于 2010-3-25 11:11 | 显示全部楼层 |阅读模式
SendToComport('t');//---串口打印正常
SendToComport('t');//---串口打印正常
SendToComport('t');//---串口打印正常
SendToComport('t');//---串口打印正常




Prints("test",1);乱码  1--为换行打印
不知什么原因,请指点,谢谢!
/**************************************************************************
/º¯ÊýÃû³Æ:ini_UART
/Èë¿Ú²ÎÊý:none
/³ö¿Ú²ÎÊý:none
/º¯Êý¹¦ÄÜ:´®¿Ú³õʼ»¯20Mhz
//º¯ÊýÃû³Æ:prints
***************************************************************************/
void ini_UART(void)
{
SPBRG=25;   //½«´«ÊäµÄ²¨ÌØÂÊÉèΪ115200b/s
TXSTA=0X24;//Ñ¡ÔñÒì²½´«Ê䷽ʽ16bit
//BAUDCON = 0x08;      // BRG16 = 1
RCSTA=0X80;//´ò¿ª´®¿Ú
mInituart_TX();
mInituart_RX(); //ÉèΪÊäÈë
}

/**************************************************************************
/º¯ÊýÃû³Æ:SendToComport
/Èë¿Ú²ÎÊý:BYTE d
/³ö¿Ú²ÎÊý:none
/º¯Êý¹¦ÄÜ:Íù´®¿Ú·¢ËÍÒ»×Ö½ÚÊý¾Ý
/
***************************************************************************/
void SendToComport(uint8 d)
{

while(PIR1bits.TXIF==0);
  TXREG=d;
}

/**************************************************************************
/º¯ÊýÃû³Æ:prints
/Èë¿Ú²ÎÊý:uint8 * pd,uint8 line_feed
/³ö¿Ú²ÎÊý:none
/º¯Êý¹¦ÄÜ:·¢ËÍÒ»¸ö×Ö·û´®
/
***************************************************************************/
void Prints(const uint8 *pd,uint8 line_feed)
{
while((*pd)!='*')
   {
    SendToComport(*pd);
    pd++;
   }
  if(line_feed)
  {
   SendToComport('\r');
   SendToComport('\n');
  }
}
歪 歪 发表于 2010-3-25 16:23 | 显示全部楼层
抓包分析,看看到底发送了什么字符。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!
NE5532 发表于 2010-3-25 19:45 | 显示全部楼层
拿串口助手抓下来看了。
 楼主| isbit 发表于 2010-3-27 10:00 | 显示全部楼层
我看指针指到无效位置
tjx727 发表于 2010-3-27 15:44 | 显示全部楼层
Prints("test",1);

你试试这样看看行不行,uint8 test[]="test";
Prints(test,1);

要是这样行的话那跟我的问题就一样了,呵呵……
 楼主| isbit 发表于 2010-3-29 09:55 | 显示全部楼层
LS
你试试这样看看行不行,uint8 test[]="test";
Prints(test,1);
这样可以,我已经试过了,但占用内存大;
我想这样写:Prints("test",1); 但是乱码;
我在51上就是这样写的,为什么pic编译器就不行呢,晕!
tjx727 发表于 2010-3-29 13:05 | 显示全部楼层
先别着急,藐视我找到了一个方法,只是得到一个提示,还没有试验,等我试验了,有效果再告诉你啊。
同是天涯沦落人啊!呵呵
tjx727 发表于 2010-3-30 12:15 | 显示全部楼层
目前想出来的方法:
#include <stdio.h>
printf("\rPress a key and I will echo it back:\n");
void putch(unsigned char byte)
{
        /* output one byte */
        while(!TXIF)        /* set when register is empty */
                continue;
        TXREG = byte;
}
这样就可以打印出任意长度的字符串,但是有一个问题,发送字符串的时候不能出现中断,要是出现中断就会打断打印,并且后面没有打印出来的也不会继续打印,不清楚是什么原因。
哎,看样子PIC单片机的指针不是很好用啊,幸好我要串口显示的东西不多,楼主要是显示的东西多,就禁用中断了 再打印吧,然后开中断.我就懒得麻烦了,直接一个个输出去算了,只是想弄明白到底是怎么回事!
希望能够对楼主有所帮助!
 楼主| isbit 发表于 2010-3-30 17:13 | 显示全部楼层
谢谢tjx727,我用你的方法测试一下先;
PIC怎么有这个问题呢,貌似全世界只有我们两个发现这个问题啊,哈哈
tjx727 发表于 2010-3-31 10:04 | 显示全部楼层
不客气
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

972

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部