首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教HCS08系列单片机MC9S08AW16的串口程序问题

你的程序是停在while(!(SCI1S1&0X80))一句过不去呢,还是执行了SCI1D=0x01之后口线上没有输出?
海纳百川  有容乃大
你的程序是怎么循环的?
海纳百川  有容乃大
第一个while(!(SCI1S1&0X80)) 判断数据寄存器状态为空,可以过去.但是当SCI1D=0x01 语句后,SCI1D寄存器没有变化,线无输出.这样再判断寄存器状态时,程序就运行停在while(!(SCI1S1&0X80))上.......
所以根本的原因就是不能发送数据.....自己不清楚是寄存器配置问题,还是其它的问题....

[此贴子已经被作者于2006-8-4 12:04:03编辑过]

请教HCS08系列单片机MC9S08AW16的串口程序问题

下面是我MC9S08AW16的串口程序部分 


 /* include your code here */
 
   ICGC1=0X28;
   ICGC2=0X31;/****internal clock***/
 
  /******************initial ICG fext=32.768khz**********/
  //ICGC1=0X38;
  //ICGC2=0X11;
  //while(!(ICGS1&0X08));
  /*****************serial communication******************/
  SCI1BDH=0X10;
  SCI1BDL=0X52;
  /**DIVDED BY ***************************************/
  SCI1C1=0x00;
  /**LOOPS=0 SCISWAI =0 RSRC=0 M=0  WAKE=0 ILT=0 PE=0 PT=0**/
  SCI1C2=0x08;
  /**TIE=0 TCIE=0 RIE =0 ILIE=0 TE=1 RE=0 RWU=0 SBK=0*****/
  SCI1C3=0x10;
  /**R8=0 T8=0 TXDIR=0 TXINV=1  ORIE=0  NEIE=0 FEIE=0 PEIE=0**/
  while(!(SCI1S1&0X80));
  SCI1D=0x01;

  while(!(SCI1S1&0X80));

 


 


无论我怎么配置 三个控制寄存器,SCI1D就是不能发送数据...哪位大虾  指点一下,在串口寄存器配置时要注意什么问题呢,,,谢谢啊

[此贴子已经被作者于2006-8-4 12:05:46编辑过]

程序没有循环,,那个while 只是为了读取寄存器的状态,当数据寄存器为空时 我才发数据.

不论我怎么怎么修改控制寄存器,甚至不对寄存器进行配置,我就是不能往串口数据寄存器SCI1D里写入数据,软仿真里memory显示SCI1D是未定义的.
while(!(SCI1S1&0X80))和SCI1D=0x01这两句程序对应的汇编指令分别是怎样的?
海纳百川  有容乃大
我看那两句的反汇编程序是这样的
BRCLR 7 0X3C *+0 ;ABS=80A5
和mov #0x01,0x3f
一般的循环发送串口都是这个程序
while (!SCIS1_TDRE); /* ensure Tx data buffer empty */
SCID = 0x01; /* load data to data register */
while (!SCIS1_TC); /* wait for Tx complete */
供你参考
你的TXINV=1,倒相输出?

[此贴子已经被seuafu2005于2006-8-4 16:40:36编辑过]

SCI1D寄存器读的时候是读接收缓存中的数据,仿真时显示的也时接收缓存里的数据,所以软件仿真显示未定义是正常的。
我觉得你要确定一下你的时钟即总线频率的设置是对的。可以用一个口线输出脉冲,量一下脉冲的频率就可以知道总线频率到底是多少。
海纳百川  有容乃大
谢谢两位的指教,现在我已初步判定出问题所在,有待我硬件板子出来后做硬件的调试.
1.至于memory里的数据寄存器显示是未定义的,可能是strongchen 所说的原因.通过调试,感觉这是正常的,有的memory区确实是显示未定义的
2.由于我做的是软仿真,可能存放在SCI 移位寄存器里的数据发送不出去.通过调试我可以写两次数据,第三次就显示我不能再写入数据,表明刚好和一个移位寄存器和一个缓存(装两个数据)吻合.

大致就是这样的,所有结果在下周硬件调试 我再将正确的原因呈上来^_^
返回列表