亿加合和智能车制作

标题: SCI寄存器SCI0DRL值一直为0 [打印本页]

作者: 轉変→駊茧!    时间: 2013-4-21 18:00
标题: SCI寄存器SCI0DRL值一直为0
小弟新手,在运行sci程序时,SCI0DRL寄存器的值一直是0,电脑也接收不到数据。希望有好心人能帮忙解答,为这个问题困惑好久了,已经试了n个网上例程了 ,下面是我现在正在测试的一很简单的程序,还是不行。
#include <hidef.h>      
#include "derivative.h"      
#include<mc9s12xs128.h>

void Sci_init(void)
{
    SCI0BD = 52;                                        //设置波特率为9 600 bps
    SCI0CR1 = 0x00;                      //LOOPS=0,SCISWAI=0,RSRC=0,M=0,
                                                    //WAKE=0,ILT=0,PE=0,PT=0        
    SCI0CR2 = 0x0C;                                //TIE=0,TCIE=0,RIE=0,ILIE=0,
                                                    //TE=1,RE=1,RWU=0,SBK=0
}

void Sci_flg_send(int data)
{
    while(!SCI0SR1_TDRE);
    SCI0DRL = data;
}
void main(void)   
{  
   Sci_init();
   while(1) {
     Sci_flg_send(9);
   }
}


作者: 轉変→駊茧!    时间: 2013-4-21 19:05
没人能回答我的问题么,这是我自己改进后的程序,串口能显示了,但是会参杂一些乱码,而且不能一直显示,显示两排就停止了,清空显示后会再出现两排就停止显示,a的值0到98循环,但是不知道为什么,SCI0DRL的值还是0.。。。求解。。。
#include <hidef.h>      
#include "derivative.h"      
#include<mc9s12xs128.h>
int a;
  void delay(int i)        //     20*12/40=6us
{
int j,k;
for (j=0; j< 20; j++)
  for(k=0; k<i; k++);
}

void Sci_init(void)
{
    SCI0BD = 52;                                        //设置波特率为9 600 bps
    SCI0CR1 = 0x00;                      //LOOPS=0,SCISWAI=0,RSRC=0,M=0,
                                                    //WAKE=0,ILT=0,PE=0,PT=0        
    SCI0CR2 = 0x0C;                                //TIE=0,TCIE=0,RIE=0,ILIE=0,
                                                    //TE=1,RE=1,RWU=0,SBK=0
}

void Sci_flg_send(void)
{
     while(SCI0SR1_TDRE==1)
    {
      SCI0DRL=a;
      delay(5000);
      a++;
      if(a>98)
        a=0;
    }   
}
void main(void)   
{   
   a=0;
   Sci_init();
   for(;;) {
   Sci_flg_send();
   delay(5000000);
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  
   
}
作者: 轉変→駊茧!    时间: 2013-4-21 19:24
感觉我快疯了,看的人这么多就没人能回答么,你们谁有空试试这两个程序,看有木有和我一样的问题啊,本以为sci很简单就搞定了,现在弄了两天,表示束手无策了。。。。。。。
作者: yumo_linux    时间: 2013-4-21 19:26
发送前将SCI0DRH写入0,然后再发送数据试试!!
作者: 轉変→駊茧!    时间: 2013-4-21 20:54
yumo_linux 发表于 2013-4-21 19:26
发送前将SCI0DRH写入0,然后再发送数据试试!!

也不行,现在可以发送字符串,但是数据还是跟上面的一样情况

作者: jimmy0087    时间: 2013-4-22 10:39
void sci_init(void)        //串口初始化
{
        SCI0BDH=0x00;
        SCI0BDL=0xD0;        //设置波特率为19200,SCI0BD=fbus/16/19200=208,总线位64MHZ
        SCI0CR1=0x00;        //设置工作方式为8位数据模式,无奇偶校验位
        SCI0CR2=0x2c;        //允许sci发送数据与接受收据,允许接收中断,收据有效,可以读取数据
}


这是我的初始化,能用,借鉴下吧
作者: 轉変→駊茧!    时间: 2013-4-24 02:32
jimmy0087 发表于 2013-4-22 10:39
void sci_init(void)        //串口初始化
{
        SCI0BDH=0x00;

已经搞定了,不过还是谢谢了

作者: 寂伦    时间: 2013-5-23 22:25
楼主怎么解决啊!我也遇到这个问题了

作者: 周光荣    时间: 2014-4-30 08:54
楼主是怎么搞定的,可以分享一下吗
作者: 骑单车的猫    时间: 2015-4-26 16:29
同问,楼主怎么解决的?

作者: 小小追梦人    时间: 2015-11-16 11:44
楼主,给分享下吧,我也是这个问题
作者: 18451396395    时间: 2016-1-4 15:59
楼主,你的问题怎么解决的,看可以告诉我吗,我也忙了好几天,都没结果
作者: yunxialeiyu    时间: 2017-2-20 21:56
你好,我是看见《SCI寄存器SCI0DRL值一直为0 》这个帖子找到的您,我最近也遇见这个问题,换了好几个例程,XS128、XEP100的 都是这个问题,RS485发不出数或者发出的数是错的,因为SCI0DRL不能赋值,我就想知道 你当时是怎么解决的 谢谢

作者: yunxialeiyu    时间: 2017-2-20 21:57
18451396395 发表于 2016-1-4 15:59
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,你当时怎么解决的这个问题?SCIDRL不能赋值

作者: yunxialeiyu    时间: 2017-2-20 21:58
小小追梦人 发表于 2015-11-16 11:44
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,你当时怎么解决的这个问题?SCIDRL不能赋值

作者: yunxialeiyu    时间: 2017-2-20 22:01
寂伦 发表于 2013-5-23 22:25
楼主怎么解决啊!我也遇到这个问题了

你好,你当时怎么解决的这个问题?SCIDRL不能赋值

作者: yunxialeiyu    时间: 2017-2-20 22:02
周光荣 发表于 2014-4-30 08:54
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,你当时怎么解决的这个问题?SCIDRL不能赋值

作者: yunxialeiyu    时间: 2017-2-20 22:02
骑单车的猫 发表于 2015-4-26 16:29
同问,楼主怎么解决的?

你好,你当时怎么解决的这个问题?SCIDRL不能赋值

作者: znjqr    时间: 2017-2-21 10:41
强烈支持楼主ing……





欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2