感谢你,搞好了,原因串口2中断函数没写。我想着不接收数据,就没写了。感谢感谢。就算空函数也要加一个才行![]() |
happy2058 发表于 2021-9-13 18:22 我是说,你开了中断,只要发送完,TI = 1, 就会触发中断,只要你不 TI = 0 就会不停的进入中断。换句话说,有可能,你主程序永远没有 机会执行 TI = 0; 8H1K08 我手头焊好的没有,也没办法测试。你要是不想加标志,就先不开 串口中断。光试发送呗。 |
188610329 发表于 2021-9-13 17:43 用是的8h1K08 串口1在最后一次发送完后T=0了。 |
happy2058 发表于 2021-9-13 17:36 我说的中断那个, 你试了没? |
188610329 发表于 2021-9-13 16:58 也试过,卡死。所以才这行直接一点 |
|
最后, 你 串口1 开了中断,但是,只对RI作了处理,没有对TI 做处理, 我不知道你什么型号的单片机,不排除,死在中断里出不来的可能。一般开了中断,都会用一个 TI_Busy的标志位 写了SBUF之后,就把 TI_Busy = 1; 然后下面 就 While(TI_Busy) ; , 中断里面加一个 IF(TI) { TI = 0; TI_Busy = 0; } 你参考一下吧。 |
|
uchar k= 0 ; do { S2BUF = (*(str + k)); k++; while (S2CON==0x50); S2CON &= ~0x02; } while (k < strlen); 另外,这个写法……, 真的没关系么? 一般的写法好像应该: for(k= 0 ; k<strlen;k++) { S2BUF = *(str++); while ((S2CON & 0x02)==0); S2CON &= ~0x02; } 这样子么? |
|
你的: while (S2CON==0x50); 这里应该 : while(S2CON & 0x02) !=0x02); 才对吧? |