打印

用C8051F310做串口通信,发现SBUF接收的数据一直是0X00,希望各位大神帮忙看下程序

[复制链接]
2888|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
henyuyu123|  楼主 | 2015-4-2 14:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void UART0_Init(void)
{
        SCON0 = 0x10;           //选择串口方式1
        CKCON |= 0x08;             //定时器1使用系统时钟
        TMOD |= 0x20;             //选择T1,方式2,自动再装入8位计数器                                  ·       
        TH1 = 0xFD;        //T1初值,根据波特率,时钟等计算. 0xFD, bps=9600bps   
        TL1 = 0XFD;
        TR1 = 1;                 //启动定时器T1         
        ES0 = 1;                 //UART0中断开启

}
void UART0_ISR(void) interrupt 4   
{   

        PCA0CPH4=0xff;
    if(RI0)                     //中断标志 RI0=1 数据完整接收   
    {   
    RI0 = 0;                                                                   //软件清零
    BUFDATA = SBUF0;                         //读缓冲                        
    if(POINT==0)                                                 
                {
                if(BUFDATA==0x68)      
                        {
                        RECEIVR_BUFFER[0] = BUFDATA;               
                POINT++;                                         
                        }                                     
                else                                                          
                        {POINT = 0;}                                  
                }
        else RECEIVR_BUFFER[POINT++] = BUFDATA;
   }
   if(TI0)
   {
   TI0=0;
   SBUF0=BUFDATA;
   }
}

相关帖子

沙发
ningling_21| | 2015-4-2 15:08 | 只看该作者
初始化不正确,如果不熟,最好用配置向导生成初始化代码

使用特权

评论回复
板凳
samglz| | 2015-4-3 09:48 | 只看该作者
这是C8051F020的串口通讯init,你可以看看
  SCON0=0X50;
  TMOD=0X20;  //定时器1自动重装8位计数器
  TH1=0XF4;
  TL1=0XF4;
  ES0=1;    // 允许RI0标志位或TI0标志位产生中断
  TF1=0;
  TR1=1;     // 定时器启动
  PCON=0X80;  // 波特率加倍 9600
  TI0=1;

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
henyuyu123 + 2
地板
henyuyu123|  楼主 | 2015-4-3 13:10 | 只看该作者
ningling_21 发表于 2015-4-2 15:08
初始化不正确,如果不熟,最好用配置向导生成初始化代码

怎么配置向导?这个没有用过。能否详细点

使用特权

评论回复
5
henyuyu123|  楼主 | 2015-4-3 13:12 | 只看该作者
samglz 发表于 2015-4-3 09:48
这是C8051F020的串口通讯init,你可以看看
  SCON0=0X50;
  TMOD=0X20;  //定时器1自动重装8位计数器

我这个波特率是9600,晶振是11.0592M。8位自动重装,初始值是不是0Xfd,我总感觉是不是我这个初始化出问题啦,但是一直找不到

使用特权

评论回复
6
ningling_21| | 2015-4-3 13:36 | 只看该作者
henyuyu123 发表于 2015-4-3 13:12
我这个波特率是9600,晶振是11.0592M。8位自动重装,初始值是不是0Xfd,我总感觉是不是我这个初始化出问 ...


外部晶振吗,初始化正常工作吗

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
henyuyu123 + 2
7
henyuyu123|  楼主 | 2015-4-3 13:51 | 只看该作者
ningling_21 发表于 2015-4-3 13:36
外部晶振吗,初始化正常工作吗

外部晶振,初始化,能运行,我在线仿真的时候能跳过去,但是却不知道怎么区别这个正常不正常那个,因为我用串口调试发数据68的时候,RI0置1,但SBUF0这个寄存器,只有0X00,

使用特权

评论回复
8
ningling_21| | 2015-4-3 13:58 | 只看该作者
henyuyu123 发表于 2015-4-3 13:10
怎么配置向导?这个没有用过。能否详细点

http://dl.21ic.com/download/code ... -rar-ic-102075.html

这里可以下载 配置软件,直接生成C代码

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
henyuyu123 + 2
9
ningling_21| | 2015-4-3 13:58 | 只看该作者
henyuyu123 发表于 2015-4-3 13:51
外部晶振,初始化,能运行,我在线仿真的时候能跳过去,但是却不知道怎么区别这个正常不正常那个,因为我 ...

程序的其它部分可以正常运行吗

使用特权

评论回复
10
henyuyu123|  楼主 | 2015-4-3 14:01 | 只看该作者
ningling_21 发表于 2015-4-3 13:58
程序的其它部分可以正常运行吗

现在就是串口这个中断有问题,因为发现接收出现问题,然后就开始排查了 所以也没有看下面的

使用特权

评论回复
11
wh6ic| | 2015-4-4 11:12 | 只看该作者
把310的Txd割开,短接到Rxd,看串口调试器收到的是不是你发出去的东西

使用特权

评论回复
12
henyuyu123|  楼主 | 2015-4-6 13:25 | 只看该作者
wh6ic 发表于 2015-4-4 11:12
把310的Txd割开,短接到Rxd,看串口调试器收到的是不是你发出去的东西

我试过啦 还是不行

使用特权

评论回复
13
han0097| | 2015-4-7 19:09 | 只看该作者
完整程序!

使用特权

评论回复
14
受不了了| | 2015-4-7 20:34 | 只看该作者
串口中断里点一个灯,看接收或发送有真正发生没,然后在TXD和GND间接一个发光二极管(要串电阻),看有微亮没,再然后接到串口助手,如果乱码,则把波特率那定时器的重装值发出去,顺便发一点特殊数字,每发送一会重装值加1,并把那值也发送出去,直到串口助手显示正确,这样啥都好了

使用特权

评论回复
15
入门小生| | 2015-12-16 11:42 | 只看该作者
楼主你好,我的问题和你一样!你解决了吗?  求指教呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

44

帖子

0

粉丝