打印

PIC16F877A USART功能

[复制链接]
1870|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cainiao402|  楼主 | 2010-10-25 21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾:小弟刚玩PIC单片机。在使用PIC16F877A的USART功能时老是出现怪问题。
问题1:发送不正常,我要发送4字节数据0x55,但发送完数据后,停止发送功能(TXEN=0).
但我在接收端看数据时,发现除了我要的数据外,还有其他的0x00这样的数据。接收端数据类似 0x55  0x55  0x55   0x55  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
这是怎么回事呢?
我的程序如下。
#include<pic.h>
__CONFIG(XT&WDTDIS);
#define uchar unsigned char
#define uint unsigned int
uchar send_count;
void interrupt ISR(void)
{
if(TXEN&TXIF)
  {
   if(send_count<5)
    {TXREG=0x55;}
   else
    {
     TXEN=0;//停止发送
     send_count=0x00;
     }
   
   send_count++;
  }
}
void Init_system(void)
{
send_count=0x00;
/************/
BRGH=1;
SPBRG=25;//选择9600波特率
SYNC=0;//异步模式
SPEN=1;//串行口使能
TXIE=1;//允许中断
TX9=0;//8位数据传输
TXEN=1;//允许发送数据,同时TXIF会置位
TX9D=0;
GIE=1;//开总中断
PEIE=1;//开外设中断


}
void main(void)
{
Init_system();
while(1)
  {NOP();}
}
是不是我关发送的时候引起的发送模块复位引起的呢,我应该怎么去避免这问题呢?
PIC的发送标志TXIF又只能往TXREG写数据清零。
我应该怎么样让它停止发送数据呢?

相关帖子

沙发
cainiao402|  楼主 | 2010-10-26 11:59 | 只看该作者
问题是不是太菜了呢?
大虾们怎么不扔砖的啊。

使用特权

评论回复
板凳
yewuyi| | 2010-10-26 13:10 | 只看该作者
可能连连接到PC串口时,因为输入阻抗比较大,使用的串口监控软件读到到的干扰信号。

可以在串口上拉或者下拉电阻固定UART空闲状态下的信号,避免被干扰误读。

使用特权

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

本版积分规则

99

主题

238

帖子

2

粉丝