我的意图是用usart0接收命令数据,然后判断各个命令字节,然后再用usart0发送出数据。能将以下switch语句加到usart0接收中断里么?如不然该怎么判定命令数据来了,能及时处理这个命令?求大神指导
#pragma vector=UART0RX_VECTOR__interrupt void UART0_RX(void)
{ for(temp=0;temp<8;temp++)
{
str[temp]=U0RXBUF; //USART_Transmit(RecBuffer[RecPoint][temp8+4]);
}
while(rfovertime)
{
NORWDI;
if(str[0]==DeviceID)
{
LED1ON; //Delay(1) //Delay(1); switch(str[1])
{ //case 0:break; //case 1:break;
case 1: rfovertime=MaxWaitTime; Delay(1); str[0]=DeviceID;
str[1]=0x01;
str[2]=ReadPCF8563(0xa2,0x02); //秒 str[3]=ReadPCF8563(0xa2,0x03); //分 str[4]=ReadPCF8563(0xa2,0x04); //时 str[5]=ReadPCF8563(0xa2,0x05); //日 str[6]=ReadPCF8563(0xa2,0x07); //月 str[7]=ReadPCF8563(0xa2,0x08); //年 Delay(1); NORWDI; RFFIFOSendData(8,&str[0]); //while(!(IFG1 & UTXIFG0));//缓存空闲 NORWDI; Delay(1); break;
下面一堆case,拜谢了
灰小子:
这样也可以。但一般情况,都是把能放在中断服务程序外的都放在外面。
当然,也要看你你说的“及时”是多长的延时。
wei shi4:
回复 灰小子:
请问大神,如果我接收数据的判别SWITCH放在中断外面,那我收到数据的时候,设中断标志位?还是等主程序循环到?
灰小子:
回复 wei shi4:
如果能接受这种延时,就放主程序循环里
wei shi4:
回复 灰小子:
if(IFG1 & URXIFG0) { for(temp=0;temp<8;temp++) { str[temp]=U0RXBUF; }
大神,我能这么写么?如果RXBUF不为空,然后存给st【】,存完后,RXBUF里还有数据吗?也就是说,下次调用数据的时候直接用st【】,还是能继续用RXBUF?
灰小子:
回复 wei shi4:
RXBUF随时会被新的数据覆盖掉的,所以一般放在中断里及时读出