标题: 求教串口模块 [打印本页]

作者: 13152174087    时间: 2015-5-13 23:45
标题: 求教串口模块
我想用51的串口通讯,例程上给的是用的串口中断,我没有用中断,想直接提取串口寄存器里的数据,但是程序一写进去,单片机就飞了~~,想问问大家这样的编程想法能实现吗?
作者: 13152174087    时间: 2015-5-13 23:52
请大家帮帮忙,谢谢啦
作者: admin    时间: 2015-5-14 00:34
把你的程序发上来看一下
作者: 13152174087    时间: 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开始运行
}



作者: 13152174087    时间: 2015-5-14 00:56
我要是给SBUF寄存器里写了date接收端就只能接受到0
作者: 13152174087    时间: 2015-5-14 01:22
在线等,谢谢先
作者: 13152174087    时间: 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开始运行
}

作者: husir    时间: 2015-5-14 18:19
一种是查询  一种是中断  你二个都不用, 那你搞什么?
作者: 13152174087    时间: 2015-5-14 19:40
husir 发表于 2015-5-14 18:19
一种是查询  一种是中断  你二个都不用, 那你搞什么?

我的if函数不算查询吗?那查询的代码应该怎么写,求教
作者: 13152174087    时间: 2015-5-14 23:29
大家帮帮忙想象办法,问了好多人了都不知道咋回事
作者: yuexin9311    时间: 2015-5-15 09:16
你用双串口么
作者: 13152174087    时间: 2015-5-15 18:11
没有,就用了一个
作者: 13152174087    时间: 2015-5-16 02:48
亲们帮帮忙啦,瓶颈问题
作者: ahshmj    时间: 2015-5-17 19:53
"bstv51.h"这个头文件存在哪儿?

“uchar” keil是不认识的。
应先定义:
#define uchar unsigned char
作者: fsnhjjj    时间: 2015-5-17 20:01
新人同问
作者: 13152174087    时间: 2015-5-18 19:06
终于解决了,程序是没有问题的是把keil了的晶振频率没有改

作者: 13152174087    时间: 2015-5-18 19:06
希望这次的经验可以帮到更多的人
作者: gsprest    时间: 2017-7-19 20:47
学习了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1