标题: STC15系列单片机串口切换问题 [打印本页]

作者: wszyb19871209    时间: 2017-11-20 17:28
标题: STC15系列单片机串口切换问题
如何通过程序判断选用了那个外部串口切换呢,是判断接受或发送引脚被拉低吗?
作者: lwl0407    时间: 2017-11-20 19:41
这个问题有点难度
作者: cjjcjj1    时间: 2017-11-20 19:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: wulin    时间: 2017-11-20 21:35
当然可以通过程序判断选用了那个外部串口切换。






作者: 无量寿经    时间: 2017-11-21 09:58
建议阅读《51单片机轻松入门 基于STC15W4K系列》,读懂后这些简单的问题都被一扫光了
作者: wszyb19871209    时间: 2017-11-22 09:59
cjjcjj1 发表于 2017-11-20 19:59
没有明白你是要做什么

就是串口1做了分时切换,程序能够自己识别用那个串口吗
作者: dzbj    时间: 2017-11-22 11:06
没懂你意思

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

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

如果淡串口多管脚切换的片子 那就没什么办法了 只能一组管脚监视一会再切到另一组管脚监视一会 通常100ms左右
作者: xbook_ben    时间: 2017-11-22 13:14
这个样该是寄存器设置的啊,程序是根据寄存器判断当前用的是哪一个口
作者: wszyb19871209    时间: 2017-11-22 17:16
xbook_ben 发表于 2017-11-22 13:14
这个样该是寄存器设置的啊,程序是根据寄存器判断当前用的是哪一个口

寄存器可以设置串口切换,但是不是进行判断吧
作者: 121212121212123    时间: 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++;

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

我的也是  切换不过去  你找到原因了吗
作者: yhy08090    时间: 2021-5-27 10:53
121212121212123 发表于 2019-12-25 10:26
我是把AUXR1 = 0x40切换到P3.6、P3.7,但用串口助手连接P3.6、P3.7管脚时没反应,反而是原来的默认串口有反 ...

我也遇到这个问题,请问怎么解决的?
作者: huaxiang800    时间: 2021-5-28 09:43
遇到同样问题,发送引脚模式改为推挽模式,可以解决。
作者: huaxiang800    时间: 2021-5-28 09:44
yhy08090 发表于 2021-5-27 10:53
我也遇到这个问题,请问怎么解决的?

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




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