shijian1235 发表于 2023-12-7 11:09:49

stc8G1k8a,串口无法收发数据,跪求各位大佬帮忙

void Uart1_Init(void)        //9600bps@11.0592MHz
{
        PCON &= 0x7f;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
       
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
       
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
       
        TL1 = 0xDC;                        //设置定时初始值
        TH1 = 0xDC;                        //设置定时重载值
       
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
       
        ES = 1;
EA = 1;
}
void main()
{
    P3M0 = 0x00;
    P3M1 = 0x00;
       
    P5M0 = 0x00;
    P5M1 = 0x00;

    Uart1_Init();


       
    REN=0;
    while (1)
    {
                        DelayXms(1000);
                       P54=0;
                       SBUF = 2;
                        DelayXms(1000);
                          SBUF = 2;
                       P54=1;
    }
}

程序在这,试了很多中办法,用了8位自动装载,还是发不出来,球球各位大佬帮帮忙,小弟真的很急,下方是电路


乘风飞扬 发表于 2023-12-7 16:49:12

建议使用STC-ISP软件里面的串口波特率寄存器生成配置代码,如果开启了串口中断的话,中断函数记得要写。

shijian1235 发表于 2023-12-8 08:26:09

乘风飞扬 发表于 2023-12-7 16:49
建议使用STC-ISP软件里面的串口波特率寄存器生成配置代码,如果开启了串口中断的话,中断函数记得要写。
...

感谢您的回复,但我的串口初始化,就是用的stc软件里的,但还是没用
我还想问一下,我电路有问题吗

shijian1235 发表于 2023-12-8 08:31:27

shijian1235 发表于 2023-12-8 08:26
感谢您的回复,但我的串口初始化,就是用的stc软件里的,但还是没用
我还想问一下,我电路有问题吗
...

还有啊,我想问一下,我选用的是P3.0、P3.1作为串口中断口,那么我将这两个端口配置为“准双向口”,能行吗

乘风飞扬 发表于 2023-12-8 08:57:09

shijian1235 发表于 2023-12-8 08:31
还有啊,我想问一下,我选用的是P3.0、P3.1作为串口中断口,那么我将这两个端口配置为“准双向口”,能行 ...

电路很简单,没什么问题,Tx/Rx别接反就行。
还是注意一下细节,例如:DelayXms(1000) 函数原型是怎么写的?参数定义什么类型的?

shijian1235 发表于 2023-12-8 11:06:27

{:4_164:}

康辉55AA 发表于 2023-12-8 21:59:09

你的串口初始化函数可以使用,我对其它部分进行了调整,这是我调整后的程序,在我这里可以运行,STC8G1K08A上电后,就一直向串口调试助手发送十六进制02。




/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 -----------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序      */
/*---------------------------------------------------------------------*/
/*************功能说明    **************
STC8G1K08A 发送通讯程序。
2023-5-17 KILL C51环境,STC8G1K08A,时钟11059200,波特率9600L,编译错误0警告0
******************************************/
#include    "STC8G.H"

#define   MAIN_Fosc         11059200L   //定义主时钟
#define   Baudrate1         9600L

typedef   unsigned char   u8;
typedef   unsigned int    u16;
typedef   unsigned long   u32;

voidDelayXms(u8 ms);                          //延时涵数声明

//串口初始化涵数
void Uart1_Init(void)         //9600bps@11.0592MHz
{
        PCON &= 0x7f;               //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率

        AUXR |= 0x40;               //定时器时钟1T模式
        AUXR &= 0xFE;               //串口1选择定时器1为波特率发生器
       
        TMOD &= 0x0F;               //设置定时器模式
        TMOD |= 0x20;               //设置定时器模式
       
        TL1 = 0xDC;               //设置定时初始值
        TH1 = 0xDC;               //设置定时重载值
       
        ET1 = 0;                  //禁止定时器中断
        TR1 = 1;                  //定时器1开始计时
       
        ES = 1;
}
//========================================================================
// 函数: void main(void)
// 描述: 主函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-12-8
// 备注:
//========================================================================
void main(void)
{
    u8 tim;

                P3M0 = 0x00;    P3M1 = 0x00;
    P5M0 = 0x00;    P5M1 = 0x00;
    Uart1_Init();//串口初始化
    REN=0;
    EA = 1; //允许总中断
                tim        = 250;//延时时间
       
    while (1)
    {
      DelayXms(tim);
                          P54=0;
                          SBUF = 2;
                        DelayXms(tim);
                                SBUF = 2;
                          P54=1;
                }
}
/***********************************************************************/
//名称:DelayXms(u8 ms);
//描述: 延时函数。
//参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
//返回: none.
//版本: VER1.0
//日期: 2013-4-1
//备注: 摘自STC15范例程序,原涵数名:voiddelay_ms(unsigned char ms)
//========================================================================
void DelayXms(u8 ms)
{
   u16 i;
       do{
              i = MAIN_Fosc / 13000;
                  while(--i)        ;   //14T per loop
   }while(--ms);
}



STC32 发表于 2023-12-10 15:17:05

用下载软件里的demo试一下啊
页: [1]
查看完整版本: stc8G1k8a,串口无法收发数据,跪求各位大佬帮忙