打印
[PIC®/AVR®/dsPIC®产品]

请教大家一个PIC16F690的问题

[复制链接]
2199|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2shift|  楼主 | 2016-10-16 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我第一次用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;
}
}
沙发
2shift|  楼主 | 2016-10-16 09:20 | 只看该作者
找到问题了,我这个串口是RS485的,当RB6=1的时候发送,当RB6=0的时候接收数据。我在发送中断里面判断发送10个字节后,将RB6=0了。这个时候,估计单片机还没发送完数据,所以导致监控到的数据不对。
看来是我不明白pic和51的串口发送机制导致的。我再修改一下。

使用特权

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

本版积分规则

16

主题

114

帖子

1

粉丝