MCU:MC9S12XDP512 问题:首先自动发送i++的数据,发现0-255中0x11和0x13时,PC端的串口调试工具不能收到,用示波器测试波形,可以确认MCU绝对发送了数据,但PC机就是没有收到。然后我用串口向MCU发数据,同时MCU发回接收到的数据,通过测试0X11和0X13单片机能收到,并且通过TXD引脚发回给PC机,但同样PC机没有收到。请问这是什么原因?? 源程序: #include <hidef.h> /* common defines and macros */ #include <mc9s12xdp512.h> /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xdp512" /*-------串口初始化----------------------*/ void Sci0Init() { //设置波特率,波特率=MCLK/(16*BR) SCI0BDH = 0x00; //关闭红外,IREN=0 SCI0BDL = 81; //9600波特率//81,19.2Kbps //控制寄存器,设置回送,单线等方式选择,帧格式,唤醒,空闲检测类型以及奇偶校验 SCI0CR1=0; /*normal,no parity*///0x13:11位奇校验,0x12:11位偶校验 SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/ } /*-------发射端程序----------------------*/ void Sci0Tx(unsigned char text) { unsigned char temp; temp=SCI0SR1; /*clear flag*/ //发送前判断SC0DR是否处于忙状态。SC0DR.7=0:处于忙状态 while (!SCI0SR1_TDRE); /* wait for output buffer empty */ while(!SCI0SR1_TC); //等待数据发送结束 SCI0DRH=0; SCI0DRL=text; }
/*-------接受端程序----------------------*/ byte Sci0Rx(void) { byte result,temp; temp=SCI0SR1; /*clear flag*/ if((temp&0x20)>0) result=SCI0DRL; return result; }
/****************************************************************** *函数名:PLLINIT *入口参数SNNR寄存器值,REFDV0寄存器值 *出口参数: 无 *功能描述:使用PLLCLK,时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1) *******************************************************************/ void PLLINIT(byte SYNR0,byte REFDV0) { CLKSEL=0x00; //disable pll; CLKSEL_PLLSEL = 0; PLLCTL_PLLON = 0; SYNR = SYNR0; // REFDV = REFDV0; PLLCTL = 192; //0xC0 CME=1,PLLON=1 PLLCTL_PLLON = 1; while(!CRGFLG_LOCK); CLKSEL_PLLSEL = 1; return; }
byte data=0; void main(void) { /* put your own code here */ byte i=0; EnableInterrupts; PLLINIT(24,9); Sci0Init(); for(;;) { Sci0Tx(i++); } }
/*--------中断程序-----------------------*/ #pragma CODE_SEG NON_BANKED //中断函数必须定义在0x4000--0xFEFF区间内
void interrupt SCI0_Irp(void) { data=Sci0Rx(); Sci0Tx(data); } #pragma CODE_SEG DEFAULT
[此贴子已经被作者于2008-7-14 12:53:13编辑过] |