调试时TDRE = 1,这个不怎么变化, 这个标志TC = 1,这个有时候变化。 但是SCI0DRL中一直没有我要发送的数据。 接受的时候可以收到数据。 硬件连接开始直接用串口线,后来用得USB转串口。 调试软件是串口调试助手V2.2 请问给位大侠给我指点一下。可能是什么问题。 程序如下: /*---------延迟程序----------------------*/ void Delay(void) { unsigned char i,j; for(i=0;i<200;i++) { for(j=0;j<100;j++) asm nop; } } /*--------闪烁程序-----------------------*/ void light(void) { unsigned char i; for(i=0;i<10;i++) { PORTB=0; Delay(); PORTB=0XFF; Delay(); } } /*-------串口初始化----------------------*/ void SciInit(){ SCI0BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/); SCI0CR1=0; /*normal,no parity*/ SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/ } /*-------发射端程序----------------------*/ void SciTx(unsigned char text){ unsigned char temp; temp=SCI0SR1; /*clear flag*/ while (!(SCI0SR1&0x80)); /* wait for output buffer empty */ SCI0DRH=0; SCI0DRL=text; } /*-------接受端程序----------------------*/ char SciRx(void){ char result,temp; temp=SCI0SR1; /*clear flag*/ while(!(SCI0SR1&0x20)); result=SCI0DRL; return result; }
/*--------中断程序-----------------------*/ interrupt void Serv_int(void) {unsigned char data; DisableInterrupts; data=SciRx(); light(); SciTx(data); EnableInterrupts; }
/*-------主函数--------------------------*/ void main(void) { EnableInterrupts; DDRB=0XFF; SciInit(); for(;;) {
} }
[此贴子已经被作者于2009-3-8 16:50:31编辑过] |