谢谢各位前辈给我的建议和热心的解答!但是我的问题是为什么会出现这样的情况以及解决方法,最佳答案只能给解决了这两个问题的人哈。大家对我编程的建议我都应用在后续程序中了,使得逻辑更加清晰了,非常感谢!![]() |
void intSIO() interrupt 4 using 2 { if(TI) { TI=OFF; if(bSD) { if(curSND<lenSND) SBUF=bufSND[curSND++]; else {bSD=OFF;/*mSI=0;*/}}} if(RI){ RI=OFF; bufRCV[putRCV++]=SBUF; putRCV &= 0X07;} } |
那请问将发送写入中断后,如何触发TI=1的条件呢?如果不能触发TI=1就不能将数据写入SBUF,而数据没有写入SBUF,就无法触发TI=1的条件,这是个死循环啊。。。。。。 我的理解是这样的![]() |
象这样写. void intSIO() interrupt 4 using 2 { if(TI){ TI=OFF; if(bSD){ if(curSND<lenSND) SBUF=bufSND[curSND++]; else {bSD=OFF;/*mSI=0;*/}}} if(RI){ RI=OFF; bufRCV[putRCV++]=SBUF; putRCV &= 0X07;} } |
把发送也要写到中断里,不能这样写 |
你的send_str函数里面已经在for循环里将i++了,然后你TI = 0;后依然i++。检查一下。 void send_str(void) //发送接收到的字符串 { u8 i; for(i=0; i<10; i++) { TI = 0; SBUF=rec[i]; while(!TI); TI = 0; } } |