找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2939|回复: 17
打印 上一主题 下一主题
收起左侧

求教串口模块

[复制链接]
跳转到指定楼层
楼主
ID:79921 发表于 2015-5-13 23:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用51的串口通讯,例程上给的是用的串口中断,我没有用中断,想直接提取串口寄存器里的数据,但是程序一写进去,单片机就飞了~~,想问问大家这样的编程想法能实现吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:79921 发表于 2015-5-13 23:52 | 只看该作者
请大家帮帮忙,谢谢啦
回复

使用道具 举报

板凳
ID:1 发表于 2015-5-14 00:34 | 只看该作者
把你的程序发上来看一下
回复

使用道具 举报

地板
ID:79921 发表于 2015-5-14 00:54 | 只看该作者
admin 发表于 2015-5-14 00:34
把你的程序发上来看一下

#include<reg52.h>
#include"bstv51.h"
void UartConfiguration();

void main()
{
        uchar date=1;
    bstv51_init();
        UartConfiguration();

        while(1)
        {         
                if(RI)
                {       
                        RI=0;
                        date=SBUF;        //取出接受到的数据
                        RI=0;                          //清除接受中断标志位
                        SBUF=0x7b;          //接收到的数据放入发送缓存器发送
                        while(!TI);        //等待发送数据完成
                        TI=0;                                //清除发送完成标志位
                }
        }

}

void UartConfiguration()
{
    TMOD=0x20;      //设置计数器1的工作方式2
        TH1=0xfd;                        //设置计数器1的初值,决定波特率
        TL1=0xfd;                        //设置计数器1的初值,决定波特率
        PCON=0x00;      // 波特率倍增0x00不加倍         0x80加倍
        SCON=0x50;                //设置工作方式1 开启接受允许
        EA=1;                    //开启总中断
        ES=0;                        //关闭串口接受中断
        TR1=1;                        //计数器1开始运行
}


回复

使用道具 举报

5#
ID:79921 发表于 2015-5-14 00:56 | 只看该作者
我要是给SBUF寄存器里写了date接收端就只能接受到0
回复

使用道具 举报

6#
ID:79921 发表于 2015-5-14 01:22 | 只看该作者
在线等,谢谢先
回复

使用道具 举报

7#
ID:79921 发表于 2015-5-14 16:32 | 只看该作者




#include<reg52.h>
#include"bstv51.h"
void UartConfiguration();

void main()
{
        uchar date=1;
    bstv51_init();
        UartConfiguration();

        while(1)
        {         
                if(RI)
                {       
                        RI=0;
                        date=SBUF;        //取出接受到的数据
                        RI=0;                          //清除接受中断标志位
                        SBUF=date;          //接收到的数据放入发送缓存器发送
                        while(!TI);        //等待发送数据完成
                        TI=0;                                //清除发送完成标志位
                }
        }

}

void UartConfiguration()
{
    TMOD=0x20;      //设置计数器1的工作方式2
        TH1=0xfd;                        //设置计数器1的初值,决定波特率
        TL1=0xfd;                        //设置计数器1的初值,决定波特率
        PCON=0x00;      // 波特率倍增0x00不加倍         0x80加倍
        SCON=0x50;                //设置工作方式1 开启接受允许
        EA=1;                    //开启总中断
        ES=0;                        //关闭串口接受中断
        TR1=1;                        //计数器1开始运行
}
回复

使用道具 举报

8#
ID:79998 发表于 2015-5-14 18:19 | 只看该作者
一种是查询  一种是中断  你二个都不用, 那你搞什么?
回复

使用道具 举报

9#
ID:79921 发表于 2015-5-14 19:40 | 只看该作者
husir 发表于 2015-5-14 18:19
一种是查询  一种是中断  你二个都不用, 那你搞什么?

我的if函数不算查询吗?那查询的代码应该怎么写,求教
回复

使用道具 举报

10#
ID:79921 发表于 2015-5-14 23:29 | 只看该作者
大家帮帮忙想象办法,问了好多人了都不知道咋回事
回复

使用道具 举报

11#
ID:80045 发表于 2015-5-15 09:16 | 只看该作者
你用双串口么

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

12#
ID:79921 发表于 2015-5-15 18:11 | 只看该作者
没有,就用了一个
回复

使用道具 举报

13#
ID:79921 发表于 2015-5-16 02:48 | 只看该作者
亲们帮帮忙啦,瓶颈问题
回复

使用道具 举报

14#
ID:7485 发表于 2015-5-17 19:53 | 只看该作者
"bstv51.h"这个头文件存在哪儿?

“uchar” keil是不认识的。
应先定义:
#define uchar unsigned char

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

15#
ID:80298 发表于 2015-5-17 20:01 | 只看该作者
新人同问
回复

使用道具 举报

16#
ID:79921 发表于 2015-5-18 19:06 | 只看该作者
终于解决了,程序是没有问题的是把keil了的晶振频率没有改

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

17#
ID:79921 发表于 2015-5-18 19:06 | 只看该作者
希望这次的经验可以帮到更多的人

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

18#
ID:220912 发表于 2017-7-19 20:47 | 只看该作者
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表