英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3588|回复: 1
打印 上一主题 下一主题

串口通讯中古怪的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-8 10:35:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用PIC16F876A的串口进行异步通讯。一个byte一个byte的发,然后用一个for循环,连续发送n个数,然后通过485的转换口传到计算机上看。(整个程序不止这一段)      无论n为多大,每次程序全速运行的时候,在计算机上看到的接受到的数都只有n-1个,如果n=1的话,就什么也接受不到。但是在watch窗口中看到的TXREG中的值正是未发出去的第n个数。
     可是在调试环境下,如果在这个for循环结束的下一条指令前加上一个断点,PC上接到的数据就为n个了,而且正确无误。
      同样的,如果不是一个byte一个byte的发,而是连续发n个数的话,症状跟上面所述的一模一样。
     另附初始化的程序和两个发送的子程序,谢谢大家指教//bow
   初始化
   unsigned char sci_Init(unsigned long int baud, unsigned char ninebits)
{
int X;
unsigned long tmp;

/* calculate and set baud rate register */
/* for asynchronous mode */
tmp = 16UL * baud;
X = (int)(FOSC/tmp) - 1;
if((X>255) || (X<0))
{
  tmp = 64UL * baud;
  X = (int)(FOSC/tmp) - 1;
  if((X>255) || (X<0))
  {
   return 1; /* panic - baud rate unobtainable */
  }
  else
   BRGH = 0; /* low baud rate */
}
else
  BRGH = 1; /* high baud rate */
SPBRG = X; /* set the baud rate */
SYNC = 0; /* asynchronous */
SPEN = 1; /* enable serial port pins */
CREN = 1; /* enable reception */
SREN = 0; /* no effect */
TXIE = 0; /* disable tx interrupts */
RCIE = 0; /* disable rx interrupts */
TX9  = ninebits?1:0; /* 8- or 9-bit transmission */
RX9  = ninebits?1:0; /* 8- or 9-bit reception */
TXEN = 1; /* enable the transmitter */
return 0;
}
单字节发送子程序
void
sci_PutByte(unsigned char byte)
{
   RA3=1;
  TXREG = byte;
   while(!TXIF);
  return;
}
字符串发送子程序
void sci_Putstring(unsigned char *str)
{ unsigned char k;
RA3=1;
for(k=0;k<N;k++)
{ TXREG = *(str+k);
   while(!TXIF);
}
return;
}
2#
 楼主| 发表于 2009-4-8 10:36:09 | 只看该作者
改:

void
sci_PutByte(unsigned char byte)
{
   RA3=1;
  

while(!TXIF);

TXREG = byte;

}



另外发送连续数据这样写比较标准:

void sci_Putdata(unsigned char *str,unsigned char str_length)
{ unsigned char k;
RA3=1;
for(k=0;k{   

sci_PutByte(*(str++));

}
}



如果是字符串:

void sci_Putstring(const char *str)
{
RA3=1;
while (*str!='\0') {
  sci_PutByte(*str++);
}

}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-5-13 21:21 , Processed in 0.050575 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表