|
在pic多机通信中,采用9位模式区分数据和地址。
当ADDEN=0,发生和接收均正常。
当ADDEN=1,TX9D=1,接收中断正常相应。
当ADDEN=1,TX9D=0,本来应该不会有接收中断,但是居然接收中断了,而且接收的数据错误。
不知是哪里错了?
请高手看看,谢谢啦!
本人刚刚接触PIC。
# include <pic.h>
# include "delay.h"
# include<string.h>
# include"sci.h"
__CONFIG( HS & WDTDIS& PWRTEN& BOREN& UNPROTECT );
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;
ADDEN=1;
//--------------------------------
TX9 = ninebits?1:0; /* 8- or 9-bit transmission */
RX9 = ninebits?1:0; /* 8- or 9-bit reception */
//-----------------------
TRISC6=1;
TRISC7=1;
//--------------
TXEN = 1; /* enable the transmitter */
return 0;
}
void interrupt ccc(void)
{
if(RCIF&&RCIE) //SCI interrupt
{
TRISD=0;
// if((RCREG==2) && (ADDEN==1) ) ADDEN=0;
// if(ADDEN==0)
PORTD=RCREG;
TRISC0=0;
RC0=RX9D;
// RCIF=0;
}
}
main()
{
unsigned char i;
GIE=1;
PEIE=0X1;
RCIF=0;
sci_Init(9600, SCI_NINE);
TRISC0=0;
RC0=0;
TRISD=0;
while(1)
{
TX9D=1;//地址
RC0=0;
// TX9D=0;//date
sci_PutByte(0X55);
DelayMs(10);
}
} |
|