美文网首页
STC8串口没有办法通讯的问题

STC8串口没有办法通讯的问题

作者: 烟花繁江尘辗 | 来源:发表于2020-05-25 16:57 被阅读0次
此处用例芯片为STC8AK64S4A12
1.首先需要排查是不是硬件上面的问题,可以使用示波器看接收发送口是否有数据;
2.进行串口的设置判断是不是没有配置完全(代码如下);
#include "reg51.h"
#include "intrins.h"
#define FOSC            11059200UL            //根据芯片自带或者是外接的晶振选择
#define BRT            (65536 - FOSC / 115200 / 4)  //115200表示通讯的波特率
sfr    T4T3M      =  0xd1;        //时器3和定时器4的设置
sfr    T4H        =  0xd2;
sfr    T4L        =  0xd3;
sfr    T3H        =  0xd4;
sfr    T3L        =  0xd5;
sfr    S3CON      =  0xac;
sfr    S3BUF      =  0xad;          //串行数据缓冲器,接收发送共用一个地址
sfr    IE2        =  0xaf;          //中断使能寄存器2

bit busy;
char wptr;
char rptr;
char buffer[16];
void Uart3Isr() interrupt 17          //函数名怎么取不要紧,依据的是interrupt17
{
    if (S3CON & 0x02)               
    {
        S3CON &= ~0x02;              //清除发送标志位
        busy = 0;
    }
    if (S3CON & 0x01)
    {
        S3CON &= ~0x01;            //清除接收的标志位
        buffer[wptr++] = S3BUF;    //将接收的数据放入到buffer
        wptr &= 0x0f;
    }
}

void Uart3Init()              //串口3的初始化
{
    S3CON = 0x50;            // 选择定时器3作为串口3的波特率发生器,允许串口3接收数据
    T3L = BRT;
    T3H = BRT >> 8;
    T4T3M = 0x0a;          //定时器3开始计时,设置1T模式CPU不分频
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;              //清除标志位
}

void Uart3Send(char dat)      //发送单个数据
{
    while (busy);
    busy = 1;
   S3BUF = dat;
}

void Uart3SendStr(char *p)  //发送字符串
{
    while (*p)
    {
        Uart3Send(*p++);
    }
}

void main()
{
    Uart3Init();              //初始化串口
    IE2 = 0x08;                //允许串口3中断
    EA = 1;                    //总中断允许控制位
    Uart3SendStr("Uart Test !\r\n");
    while (1)
    {
        if (rptr != wptr)          //从RX口写入数据,会从TX发送出来
        {
            Uart3Send(buffer[rptr++]);
            rptr &= 0x0f;
        }
    }
}
3. 注意事项:

STC8A8K64S4A12 系列 F 版芯片重要说明 1

所有串口 ( 包括串口 1 、串口 2 、串口 3 、串口 4) 的串口发送端发送串口数据时,发送端口: 均需要进行下面的设置: ( 3 种方式任选其一)a. 设置 I/O 口为准双向口模式并打开内部的上拉电阻b. 设置 I/O 口为准双向口模式并外接 3 ~ 10K 的上拉电阻c. 设置 I/O 口为强推挽模式

STC8A8K64S4A12 系列 F 版芯片重要说明 2串口 1 的模式 2 和模式 3 时 , 在设置发送数据的第 9 位( TB8 )时,需要连续设置两次才有效。串口 2 、串口 3 和串口 4 无此问题

4. IO口的配置

如果都配置检测没什么问题,能够正常的发送数据但是不能够接收数据的话就要考虑是不是IO没有配置好;

将RX的端口配置成设置 I/O 口为准双向口模式,再次进行尝试(PS:我测试的时候出现这样的问题)

相关文章

网友评论

      本文标题:STC8串口没有办法通讯的问题

      本文链接:https://www.haomeiwen.com/subject/lpayahtx.html