请教大家一个PIC16F690的问题

大家好,我第一次用PIC单片机,在我在编写串口中断发送数据的时候,本来是计划发送10个字节的数据的,但是程序一直是只发送8个。发送0--9,结果通过串口监控出来的数据只有0-7.程序如下,麻烦给纠正一下哪里的问题。
#include<pic.h>
/***********************************/
unsigned char send[10],send_count;
unsigned char rcv[10],rcv_count,rcv_flag;
unsigned int lsd;
unsigned char ssy;
/***********************************/
void var_init(void);
//void interrupt ISR(void);
/***********************************/
__CONFIG(FOSC_HS & PWRTE_ON & BOREN_ON & WDTE_OFF);
void main(void)
{
//++++++++++++++++++++++//
var_init();
//++++++++++++++++++++++// 

TRISA&=0xfb;
PORTA=0X00;
TRISB&=0xbf;
//PORTB=0X00;
RB6=0;
//+++++++++++++++++++++TXSTA
BRGH=1;
BRG16=1;
SPBRG=0x1f;
SPBRGH=0x01;
//+++++++++++++++++++++RCSTA
SYNC=0;
SPEN=1;
//+++++++++++++++++++++BUADCTL 
//++++++++++++++++++++++//
TXEN=1;
TXIE=1;
PEIE=1;
GIE=1;
RCIE=1;
CREN=1;
RB6=0;
while(1)
{
  //for(lsd=0;lsd<60000;lsd++);
  //PORTA&=0xfb;
  //for(lsd=0;lsd<60000;lsd++);
  //PORTA|=0x04;
  /*if(rcv_flag==1)
  {
   rcv_flag=0;
   for(ssy=0;ssy<rcv_count;ssy++) 
   {
    send[ssy]=~rcv[ssy];
   }
   send_count=0;
   s=rcv_count;
   rcv_count=0;
   TXIE=1;
   TXEN=1;
  }*/
}
}
void var_init(void)
{
send_count=0;
rcv_count=0;
rcv_flag=0;
for(ssy=0;ssy<10;ssy++) {send[ssy]=ssy;rcv[ssy]=ssy;}
RA2=0;
}
void interrupt ISR(void)
{
if(TXIE&&TXIF)
{
  RB6=1;
  TXREG=send[send_count++];
  if(send_count>=10) 
  {
   send_count=0;RB6=0;
   TXIE=0;
   if(rcv_flag==0){rcv_flag=1;RA2=1;}
  else{rcv_flag=0;RA2=0;}
  }
}
if(RCIE&&RCIF)
{
  rcv[rcv_count++]=RCREG;
}
}

 

补充:

找到问题了,我这个串口是RS485的,当RB6=1的时候发送,当RB6=0的时候接收数据。我在发送中断里面判断发送10个字节后,将RB6=0了。这个时候,估计单片机还没发送完数据,所以导致监控到的数据不对。
看来是我不明白pic和51的串口发送机制导致的。我再修改一下。

永不止步步 发表于10-22 10:50 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号