Board logo

标题: MC9S12DP256B的SCI问题 [打印本页]

作者: wangcunlei    时间: 2006-10-26 00:13     标题: MC9S12DP256B的SCI问题

#include <hidef.h>            /* common defines and macros */
#include <mc9s12dp256.h>      /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"


int i,m=0;char t[]="ABCD ";
void main()
{DisableInterrupts;   /*禁止中断*/
 //初始化SCI
 SCI0BDL=0x34;        /*波特率常数为52,设置波特率为9600*/
 SCI0BDH=0x00;
 
 SCI0CR1=0x00;
//SCI0CR1_LOOPS=0;    /*正常工作模式*/
//SCI0CR1_SCISWAI=0;  /*等待模式下继续工作*/
//SCI0CR1_RSRC=0;     /*LOOPS为零此位无效*/
//SCI0CR1_M=0;        /*传输数据位为8位*/
//SCI0CR1_WAKE=0;     /*介质唤醒方式*/
//SCI0CR1_ILT=0;      /*保守检测*/
//SCI0CR1_PE=0;       /*不进行奇偶校验*/
//SCI0CR1_PT=0;       /*SCI0CR1_PE=0;此位无效*/


 SCI0CR2=0x08;
//SCI0CR2_SCTIE=0;    /*禁止发送器中断*/
//SCI0CR2_TCIE=0;     /*禁止发送结束中断*/
//SCI0CR2_RIE=0;      /*禁止接受中断*/
//SCI0CR2_ILIE=0;     /*禁止空闲中断*/
//SCI0CR2_TE=1;       /*发送允许*/
//SCI0CR2_RE=0;       /*禁止接收*/
//SCI0CR2_RWU=0;      /*接收器正常唤醒*/
//SCI0CR2_SBK=0;      /*中止符发送器关闭*/
 i=SCI0SR1;           /*清除标志位*/
 i=SCI0DRL;
 
//发送数"ABCD"
 while(1)
 {if(SCI0SR1_TDRE==1)     
  {SCI0DRL=t[m];      /*发送字符串*/
   SCI0DRH=0;
   m++;
  }
  if(m==5)SCI0CR2_TE=0; /*发送完成禁止发送器工作*/
 }
 
}


小弟是新手,调SCI时出现问题,我的理解是: SCI0SR1 寄存器里有个TDRE(发送保持器空标志位),程序烧写入单片机之后,单步运行,发现TDRE位一直为0(满),导致数据无法传输。



我是将板子的串口与PC机串口连接,用串口助手测试发送,一直没有显示。各位看看问题出在什么地方?谢谢!!


作者: strongchen    时间: 2006-10-26 14:42

你可以设断点看看程序是怎么跑的,停在了哪里,也可以用示波器看一下芯片口线上是否有信号波形。
作者: yunfeng    时间: 2006-10-31 09:02

void init_SCI0 ()
{
SC0BDW=Eclock/16/9600; //9600 buad rate
SC0CR2=0xc; //enable tx,rx
}


void tx_char0(char data)
{
while ((SC0SR1&0x40)!=0x40);
SC0DRL = data;
}


void main()
{
init_SCI0();
tx_char0('H');
tx_char0('E');
tx_char0('L');
tx_char0('L');
tx_char0('O');
for(;;)
{
}
}





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0