请教HCS08系列单片机MC9S08AW16的串口程序问题
- UID
- 104380
- 性别
- 男
|
你的程序是停在while(!(SCI1S1&0X80))一句过不去呢,还是执行了SCI1D=0x01之后口线上没有输出? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 145886
- 性别
- 男
|
第一个while(!(SCI1S1&0X80)) 判断数据寄存器状态为空,可以过去.但是当SCI1D=0x01 语句后,SCI1D寄存器没有变化,线无输出.这样再判断寄存器状态时,程序就运行停在while(!(SCI1S1&0X80))上....... 所以根本的原因就是不能发送数据.....自己不清楚是寄存器配置问题,还是其它的问题....
[此贴子已经被作者于2006-8-4 12:04:03编辑过] |
|
|
|
|
|
- UID
- 145886
- 性别
- 男
|
请教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编辑过] |
|
|
|
|
|
- UID
- 145886
- 性别
- 男
|
程序没有循环,,那个while 只是为了读取寄存器的状态,当数据寄存器为空时 我才发数据.
不论我怎么怎么修改控制寄存器,甚至不对寄存器进行配置,我就是不能往串口数据寄存器SCI1D里写入数据,软仿真里memory显示SCI1D是未定义的. |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
while(!(SCI1S1&0X80))和SCI1D=0x01这两句程序对应的汇编指令分别是怎样的? |
|
|
|
|
|
- UID
- 145886
- 性别
- 男
|
我看那两句的反汇编程序是这样的
BRCLR 7 0X3C *+0 ;ABS=80A5
和mov #0x01,0x3f |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
一般的循环发送串口都是这个程序 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编辑过] |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
SCI1D寄存器读的时候是读接收缓存中的数据,仿真时显示的也时接收缓存里的数据,所以软件仿真显示未定义是正常的。
我觉得你要确定一下你的时钟即总线频率的设置是对的。可以用一个口线输出脉冲,量一下脉冲的频率就可以知道总线频率到底是多少。 |
|
|
|
|
|
- UID
- 145886
- 性别
- 男
|
谢谢两位的指教,现在我已初步判定出问题所在,有待我硬件板子出来后做硬件的调试.
1.至于memory里的数据寄存器显示是未定义的,可能是strongchen 所说的原因.通过调试,感觉这是正常的,有的memory区确实是显示未定义的
2.由于我做的是软仿真,可能存放在SCI 移位寄存器里的数据发送不出去.通过调试我可以写两次数据,第三次就显示我不能再写入数据,表明刚好和一个移位寄存器和一个缓存(装两个数据)吻合.
大致就是这样的,所有结果在下周硬件调试 我再将正确的原因呈上来^_^ |
|
|
|
|
|