C51中printf是如何实现串口输出的???? void main(void) { uint t,n,i; uchar m; SCON=0X50; TMOD=0X20; TH1=0XFD; TL1=0XFD; TI=0; TR1=1; i=0; while(1){ while(RI){ n=SBUF; RI=0; for(m=0;m <80;m=m+1) { TI=1; //这句不写接收端就收不到printf发的数,但把printf换成SBUF=123就可以,WHY?? t=4000; printf("%d
",t);//SBUF=123; P3_2=1; } } } } 如注释部分。。。。。
偶的猜想:
printf串口输出是采用中断方式,需要TI置位才能进入串口中断, 但这个函数本身被调用时确没有加入置位TI中断标志位的功能,所以需要自己在之前手动中断, 然后它被调用并执行完后却能自动清OTI退出中断。。。。。 请问各位大虾,如果是这样的话KEILC这么做什么意思??? |