我写了一道PC写单片机通讯的程序,PC用串口助手发送ASCII字符过来,单片机接收。每当串口助手一次过发几个字符时,单片机接收第一个字符是正常的,后面的全都出错了,SCI0SR1_IDLE位置1。但用串口助手将字符一个一个地发时,接收又正常。不知道哪里出错了,望各位指点一下,谢谢。程序如下:<br /><br /><br />#include <hidef.h><br />#include <string.h> <br />#include <mc9s12dg128.h><br />#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"<br /><br />char i;<br />char re[3];<br /><br />#pragma CODE_SEG __NEAR_SEG NON_BANKED <br />interrupt 20 void SCI0_rx(void)<br />{ <br /><br /> if(SCI0SR1 & 0x20){ <br /><br /> re=SCI0SR1;<br /> re=SCI0DRL;<br /> i++;<br /> if(i==3)i=0;<br /> } <br />}<br /><br /> <br />#pragma CODE_SEG DEFAULT<br /><br />// SCI参数设置 <br /> <br />void Init_SCI(void)<br />{<br /> <br /> SCI0BDL=52; <br /> SCI0BDH=0; //CLOCK=16MHz, bps=9600 <br /> SCI0CR1=0x14; //8 bit, 无效验 <br /> SCI0CR2=0x2C; //中止符产生器关闭<br /> SCI0CR2 |= 0x80; /*Enable TDRE interrupt*/<br />} <br /><br />void main(void) <br />{ <br /> Init_SCI();<br /> DDRB = 0Xff;<br /> PORTB = 0XAA;<br /> EnableInterrupts;<br /> <br /> for (;;)<br /> {} <br />} |
|