找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15系列单片机串口切换问题

  [复制链接]
跳转到指定楼层
楼主
如何通过程序判断选用了那个外部串口切换呢,是判断接受或发送引脚被拉低吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:251595 发表于 2017-11-20 19:41 | 只看该作者
这个问题有点难度
回复

使用道具 举报

板凳
ID:82765 发表于 2017-11-20 19:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:213173 发表于 2017-11-20 21:35 | 只看该作者
当然可以通过程序判断选用了那个外部串口切换。





回复

使用道具 举报

5#
ID:60379 发表于 2017-11-21 09:58 | 只看该作者
建议阅读《51单片机轻松入门 基于STC15W4K系列》,读懂后这些简单的问题都被一扫光了
回复

使用道具 举报

6#
ID:231173 发表于 2017-11-22 09:59 | 只看该作者
cjjcjj1 发表于 2017-11-20 19:59
没有明白你是要做什么

就是串口1做了分时切换,程序能够自己识别用那个串口吗
回复

使用道具 举报

7#
ID:47286 发表于 2017-11-22 11:06 | 只看该作者
没懂你意思

如果是选用串口发送 程序里针对不同串口调用不同函数就可以

如果是多串口的片子 哪个串口的中断触发就是哪个串口有数据进来 可以为每个串口做标记和缓冲区 程序根据标记置位判断哪个串口有数据进来 然后处理缓冲区的数据并清除标记

如果淡串口多管脚切换的片子 那就没什么办法了 只能一组管脚监视一会再切到另一组管脚监视一会 通常100ms左右
回复

使用道具 举报

8#
ID:212797 发表于 2017-11-22 13:14 | 只看该作者
这个样该是寄存器设置的啊,程序是根据寄存器判断当前用的是哪一个口
回复

使用道具 举报

9#
ID:231173 发表于 2017-11-22 17:16 | 只看该作者
xbook_ben 发表于 2017-11-22 13:14
这个样该是寄存器设置的啊,程序是根据寄存器判断当前用的是哪一个口

寄存器可以设置串口切换,但是不是进行判断吧
回复

使用道具 举报

10#
ID:472235 发表于 2019-12-25 10:26 | 只看该作者
我是把AUXR1 = 0x40切换到P3.6、P3.7,但用串口助手连接P3.6、P3.7管脚时没反应,反而是原来的默认串口有反应??


#include "reg52.h"
#include "string.h"       

         
sfr AUXR1 = 0xa2; //串口切换控制寄存器
typedef unsigned int u16;          
typedef unsigned char u8;
#define AUXR1 = 0x40;
  
u8 i = 0;
u8 buff[30];
u8 *p;

void UartInit(void){                //9600bps@11.0592MHz
        SCON = 0x50;                    //8位数据,可变波特率
        TMOD=0X20;                        //设置计数器工作方式2
//        AUXR |= 0x01;                    //串口1选择定时器2为波特率发生器
//        AUXR |= 0x04;                    //定时器2时钟为Fosc,即1T
        TL1 = 0xfd;                        //设定定时初值
        TH1 = 0xfd;                        //设定定时初值
//        AUXR |= 0x10;                    //启动定时器2
        ES = 1;
        EA = 1;
        TR1 = 1;
}
void main()
{       
        UartInit(); //        串口初始化

        while(1)
        {
               
        }               
}


void Usart() interrupt 4
{
        u8 receiveData;
       

        if(i >= 5){        
                i = 0;
                memset(buff, 0, sizeof buff);               
        }

        receiveData=SBUF;//出去接收到的数据
        buff[i] = receiveData;
        RI = 0;//清除接收中断标志位

        if(i>2){
                SBUF=buff[i];//将接收到的数据放入到发送寄存器
                while(!TI);                         //等待发送数据完成
                TI=0;                                //清除发送完成标志位
        }
                                               
        i++;

}
回复

使用道具 举报

11#
ID:168926 发表于 2020-7-3 11:14 | 只看该作者
121212121212123 发表于 2019-12-25 10:26
我是把AUXR1 = 0x40切换到P3.6、P3.7,但用串口助手连接P3.6、P3.7管脚时没反应,反而是原来的默认串口有反 ...

我的也是  切换不过去  你找到原因了吗
回复

使用道具 举报

12#
ID:911776 发表于 2021-5-27 10:53 | 只看该作者
121212121212123 发表于 2019-12-25 10:26
我是把AUXR1 = 0x40切换到P3.6、P3.7,但用串口助手连接P3.6、P3.7管脚时没反应,反而是原来的默认串口有反 ...

我也遇到这个问题,请问怎么解决的?
回复

使用道具 举报

13#
ID:525104 发表于 2021-5-28 09:43 | 只看该作者
遇到同样问题,发送引脚模式改为推挽模式,可以解决。
回复

使用道具 举报

14#
ID:525104 发表于 2021-5-28 09:44 | 只看该作者
yhy08090 发表于 2021-5-27 10:53
我也遇到这个问题,请问怎么解决的?

发送引脚模式改为推挽模式,可以解决
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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