R485_RE=1;//发送
tranflag=1;
inittx485();
TXCOUNT=32;
PIE1bits.TX1IE=1;//使能发送中断
//TXSTAbits.TXEN=1;//发送使能
send_count=0;//*发送数据计数清0*/
pointer=&DATA485[0];//*发送指针指向发送数据数组首地址*/
TXREG1=*pointer++;//*发送第一个数据后,将发送指针加1*/
TXSTA1bits.TXEN=1;//*使能发送*/
do{
R485_RE=1;//发送
R485_RE=1;//发送
_asm
nop
nop
_endasm
}
while(tranflag==1);
//************************************************************
// 低优先中断服务程序入口函数void PIC18F_Low_isr(void)
//************************************************************
void PIC18F_Low_isr(void)
{
if(PIR1bits.RC1IF==1)//*RS232接收中断*/
{
PIR1bits.RC1IF=0;/*清中断标志*/
receive232[receive_count]=RCREG1;//*接收数据并存储*/
receive_count++;//*接收计数器加1*/
if(receive_count>32)//*如果已经接收到32个数据*/
{
receive_count=0;//*接收计数器清0*/
SciReceiveFlag=1;//*置接收到8个数据标志*/
}
}
//*中断发送数据方式且为发送中断*/
else if(PIR1bits.TX1IF==1)
{
//FLAGLED=0;
//PORTFbits.RF0=1;
if(send_count>TXCOUNT)//*已经发送完个数*/
{
PIE1bits.TXIE=0;//使能发送中断
TXSTA1bits.TXEN=0;//*发送不使能*/
tranflag=0;//发送完成,置接收
return;
}
else
{
TXREG1=*pointer++;//*发送当前应发送数据,发送指针加1*/
send_count++;//*发送计数器加1*/
}
}
}
為什么還沒等32個數據發完,就出等待了,感覺是中斷返回加PCL加了2,
Edited by Ryang on 2009年01月19日 16:00:46