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