打印

奇怪:在51下能用的函数,在pic下为啥不能用了?

[复制链接]
1742|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
isbit|  楼主 | 2010-3-23 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1:

/**************************************************************************
/º¯ÊýÃû³Æ:SendToComport
/Èë¿Ú²ÎÊý:BYTE d
/³ö¿Ú²ÎÊý:none
/º¯Êý¹¦ÄÜ:Íù´®¿Ú·¢ËÍÒ»×Ö½ÚÊý¾Ý
/
***************************************************************************/
void SendToComport(uint8 d)
{
#if 1     //pic
while(PIR1bits.TXIF==0);
  TXREG=d;
#else   //51
  sending=1;
  TXREG=d;
  while(sending);
#endif
}

/**************************************************************************
//º¯ÊýÃû³Æ:prints
/Èë¿Ú²ÎÊý:uint8 * pd,uint8 line_feed
/³ö¿Ú²ÎÊý:none
/º¯Êý¹¦ÄÜ:·¢ËÍÒ»¸ö×Ö·û´®
/
***************************************************************************/
void Prints(uint8 *pd,uint8 line_feed)
{
while((*pd)!='\0')
   {
    SendToComport(*pd);
    pd++;
   }
  if(line_feed)
  {
   SendToComport('\r');
   SendToComport('\n');
  }
}
以上为我打印 字符串函数,简单方便,又好懂,我一直用它;
可我放在pic用,麻烦就来了;

所以只有这样写;
void putsUSART(char *s)
{
    while(*s) {
        while(!TXSTAbits.TRMT);  
        TXREG = *s++;
}
}
  sprintf(temp, "Test psp joystick\r\n");
  putsUSART(temp);

不知道什么原因????
高手指点一二,谢谢!
沙发
maomao603| | 2010-3-29 14:46 | 只看该作者
你先看看
pic的指针和51的有不同

建议pic不要用指针

使用特权

评论回复
板凳
yewuyi| | 2010-3-29 15:54 | 只看该作者
你先看看
pic的指针和51的有不同

建议pic不要用指针
maomao603 发表于 2010-3-29 14:46


你别把新人忽晕了,事实上只是PIC16上不建议使用函数指针,这个是由PIC16的硬件结构决定的,其堆栈是硬件堆栈,不可软件修改,如此,使用函数指针不是很方便,如果非要用函数指针,可以使用RAM区域自己模拟一段堆栈使用,也完全可以。

在于在PIC24等上面,都一切OK

使用特权

评论回复
地板
maomao603| | 2010-3-30 12:11 | 只看该作者

对不起哟
我一般用的都是16的现在
所以没有用指针
麻烦,居然要在一个bank
我还想问问高手
是不是pic的这些硬件架构导致其内部的走线不同
在某些型号的某些方面的抗干扰增强

使用特权

评论回复
5
tjx727| | 2010-3-31 10:12 | 只看该作者
3# yewuyi
原来这样,受用,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

194

主题

959

帖子

1

粉丝