大家好,我第一次用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的串口发送机制导致的。我再修改一下。